Skip to content

Commit 59ffa7d

Browse files
Merge pull request #158 from Squads-Protocol/add-fee-payer-for-vault-tx-exec
feat(cli): Add the possibility to select a fee payer for a vault tx exec
2 parents 8a56428 + 9afca1a commit 59ffa7d

File tree

4 files changed

+42
-9
lines changed

4 files changed

+42
-9
lines changed

cli/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "squads-multisig-cli"
5-
version = "0.1.4"
5+
version = "0.1.6"
66
edition = "2021"
77
authors = ["Valentin Madrid", "Vova Guguiev"]
88
license = "MIT OR Apache-2.0"

cli/src/command/proposal_vote.rs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ pub struct ProposalVote {
5656

5757
#[arg(long)]
5858
priority_fee_lamports: Option<u64>,
59+
60+
#[arg(long)]
61+
fee_payer_keypair: Option<String>,
5962
}
6063

6164
impl ProposalVote {
@@ -69,6 +72,7 @@ impl ProposalVote {
6972
action,
7073
memo,
7174
priority_fee_lamports,
75+
fee_payer_keypair,
7276
} = self;
7377

7478
let program_id =
@@ -86,6 +90,9 @@ impl ProposalVote {
8690

8791
let rpc_url = rpc_url.unwrap_or_else(|| "https://api.mainnet-beta.solana.com".to_string());
8892

93+
let transaction_fee_payer_keypair =
94+
fee_payer_keypair.map(|path| create_signer_from_path(path).unwrap());
95+
8996
println!();
9097
println!(
9198
"{}",
@@ -141,8 +148,13 @@ impl ProposalVote {
141148
}
142149
};
143150

151+
let fee_payer = transaction_fee_payer_keypair
152+
.as_ref()
153+
.map(|kp| kp.pubkey())
154+
.unwrap_or(transaction_creator);
155+
144156
let message = Message::try_compile(
145-
&transaction_creator,
157+
&fee_payer,
146158
&[
147159
ComputeBudgetInstruction::set_compute_unit_price(
148160
priority_fee_lamports.unwrap_or(5000),
@@ -163,11 +175,15 @@ impl ProposalVote {
163175
)
164176
.unwrap();
165177

166-
let transaction = VersionedTransaction::try_new(
167-
VersionedMessage::V0(message),
168-
&[&*transaction_creator_keypair],
169-
)
170-
.expect("Failed to create transaction");
178+
let mut signers = vec![&*transaction_creator_keypair];
179+
if let Some(ref fee_payer_kp) = transaction_fee_payer_keypair {
180+
if fee_payer_kp.pubkey() != transaction_creator {
181+
signers.push(&**fee_payer_kp);
182+
}
183+
}
184+
185+
let transaction = VersionedTransaction::try_new(VersionedMessage::V0(message), &signers)
186+
.expect("Failed to create transaction");
171187

172188
let signature = send_and_confirm_transaction(&transaction, &rpc_client).await?;
173189

cli/src/command/vault_transaction_execute.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ pub struct VaultTransactionExecute {
5555

5656
#[arg(long)]
5757
extra_keypair: Option<String>,
58+
59+
#[arg(long)]
60+
fee_payer_keypair: Option<String>,
5861
}
5962

6063
impl VaultTransactionExecute {
@@ -68,6 +71,7 @@ impl VaultTransactionExecute {
6871
priority_fee_lamports,
6972
compute_unit_limit,
7073
extra_keypair,
74+
fee_payer_keypair,
7175
} = self;
7276

7377
let program_id =
@@ -90,6 +94,9 @@ impl VaultTransactionExecute {
9094
let transaction_extra_signer_keypair =
9195
extra_keypair.map(|path| create_signer_from_path(path).unwrap());
9296

97+
let transaction_fee_payer_keypair =
98+
fee_payer_keypair.map(|path| create_signer_from_path(path).unwrap());
99+
93100
println!();
94101
println!(
95102
"{}",
@@ -161,8 +168,13 @@ impl VaultTransactionExecute {
161168
.await
162169
.expect("Failed to get blockhash");
163170

171+
let fee_payer = transaction_fee_payer_keypair
172+
.as_ref()
173+
.map(|kp| kp.pubkey())
174+
.unwrap_or(transaction_creator);
175+
164176
let message = Message::try_compile(
165-
&transaction_creator,
177+
&fee_payer,
166178
&[
167179
ComputeBudgetInstruction::set_compute_unit_limit(
168180
compute_unit_limit.unwrap_or(200_000),
@@ -182,6 +194,11 @@ impl VaultTransactionExecute {
182194
.unwrap();
183195

184196
let mut signers = vec![&*transaction_creator_keypair];
197+
if let Some(ref fee_payer_kp) = transaction_fee_payer_keypair {
198+
if fee_payer_kp.pubkey() != transaction_creator {
199+
signers.push(&**fee_payer_kp);
200+
}
201+
}
185202
if let Some(ref extra_signer) = transaction_extra_signer_keypair {
186203
signers.push(&**extra_signer);
187204
}

0 commit comments

Comments
 (0)