Skip to content

Commit 97b8ce8

Browse files
authored
Merge pull request #156 from Squads-Protocol/permit-extra-signer-for-vault-execution
feat(cli): Add possibility to use an extra signer for vault tx execution
2 parents de4a03b + 478290b commit 97b8ce8

File tree

4 files changed

+24
-15
lines changed

4 files changed

+24
-15
lines changed

cli/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/src/command/display_vault.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use squads_multisig::pda::get_vault_pda;
21
use solana_sdk::pubkey::Pubkey;
2+
use squads_multisig::pda::get_vault_pda;
33
use std::str::FromStr;
44

55
use clap::Args;
@@ -27,13 +27,13 @@ impl DisplayVault {
2727
vault_index,
2828
} = self;
2929

30-
let program_id = program_id.unwrap_or_else(|| {
31-
"SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf".to_string()
32-
});
30+
let program_id =
31+
program_id.unwrap_or_else(|| "SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf".to_string());
3332

3433
let program_id = Pubkey::from_str(&program_id).expect("Invalid program ID");
3534

36-
let multisig_address = Pubkey::from_str(&multisig_address).expect("Invalid multisig address");
35+
let multisig_address =
36+
Pubkey::from_str(&multisig_address).expect("Invalid multisig address");
3737

3838
let vault_index = vault_index.unwrap_or(0);
3939

@@ -43,4 +43,4 @@ impl DisplayVault {
4343

4444
Ok(())
4545
}
46-
}
46+
}

cli/src/command/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::command::config_transaction_create::ConfigTransactionCreate;
22
use crate::command::config_transaction_execute::ConfigTransactionExecute;
3+
use crate::command::display_vault::DisplayVault;
34
use crate::command::initiate_program_upgrade::InitiateProgramUpgrade;
45
use crate::command::initiate_transfer::InitiateTransfer;
56
use crate::command::multisig_create::MultisigCreate;
@@ -8,12 +9,12 @@ use crate::command::proposal_vote::ProposalVote;
89
use crate::command::vault_transaction_accounts_close::VaultTransactionAccountsClose;
910
use crate::command::vault_transaction_create::VaultTransactionCreate;
1011
use crate::command::vault_transaction_execute::VaultTransactionExecute;
11-
use crate::command::display_vault::DisplayVault;
1212

1313
use clap::Subcommand;
1414

1515
pub mod config_transaction_create;
1616
pub mod config_transaction_execute;
17+
pub mod display_vault;
1718
pub mod initiate_program_upgrade;
1819
pub mod initiate_transfer;
1920
pub mod multisig_create;
@@ -22,7 +23,6 @@ pub mod proposal_vote;
2223
pub mod vault_transaction_accounts_close;
2324
pub mod vault_transaction_create;
2425
pub mod vault_transaction_execute;
25-
pub mod display_vault;
2626

2727
#[derive(Subcommand)]
2828
pub enum Command {

cli/src/command/vault_transaction_execute.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ pub struct VaultTransactionExecute {
5252

5353
#[arg(long)]
5454
compute_unit_limit: Option<u32>,
55+
56+
#[arg(long)]
57+
extra_keypair: Option<String>,
5558
}
5659

5760
impl VaultTransactionExecute {
@@ -64,6 +67,7 @@ impl VaultTransactionExecute {
6467
transaction_index,
6568
priority_fee_lamports,
6669
compute_unit_limit,
70+
extra_keypair,
6771
} = self;
6872

6973
let program_id =
@@ -83,6 +87,9 @@ impl VaultTransactionExecute {
8387

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

90+
let transaction_extra_signer_keypair =
91+
extra_keypair.map(|path| create_signer_from_path(path).unwrap());
92+
8693
println!();
8794
println!(
8895
"{}",
@@ -174,11 +181,13 @@ impl VaultTransactionExecute {
174181
)
175182
.unwrap();
176183

177-
let transaction = VersionedTransaction::try_new(
178-
VersionedMessage::V0(message),
179-
&[&*transaction_creator_keypair],
180-
)
181-
.expect("Failed to create transaction");
184+
let mut signers = vec![&*transaction_creator_keypair];
185+
if let Some(ref extra_signer) = transaction_extra_signer_keypair {
186+
signers.push(&**extra_signer);
187+
}
188+
189+
let transaction = VersionedTransaction::try_new(VersionedMessage::V0(message), &signers)
190+
.expect("Failed to create transaction");
182191

183192
let signature = send_and_confirm_transaction(&transaction, &rpc_client).await?;
184193

0 commit comments

Comments
 (0)