| Crates.io | squads-v4-client |
| lib.rs | squads-v4-client |
| version | 0.1.0 |
| created_at | 2025-10-29 00:58:27.103342+00 |
| updated_at | 2025-10-29 00:58:27.103342+00 |
| description | A modern Rust client library for interacting with Squads v4 multisig protocol on Solana |
| homepage | https://squads.so |
| repository | https://github.com/squads-protocol/v4 |
| max_upload_size | |
| id | 1905864 |
| size | 310,395 |
A modern Rust client library for interacting with the Squads v4 multisig protocol on Solana.
This library provides a clean, type-safe interface for creating and managing multisig wallets, proposals, and transactions on the Squads protocol. It's built with Solana SDK 2.3.x for compatibility with the latest Solana ecosystem.
Add this to your Cargo.toml:
[dependencies]
squads-v4-client = "0.1.0"
# For async support
squads-v4-client = { version = "0.1.0", features = ["async"] }
use squads_v4_client::pda;
use solana_sdk::pubkey::Pubkey;
// Derive a multisig PDA
let create_key = Pubkey::new_unique();
let (multisig_pda, bump) = pda::get_multisig_pda(&create_key, None);
// Derive a vault PDA
let (vault_pda, vault_bump) = pda::get_vault_pda(&multisig_pda, 0, None);
use squads_v4_client::{instructions, types::{Member, Permissions}};
use solana_sdk::pubkey::Pubkey;
// Create a multisig
let args = instructions::MultisigCreateArgsV2 {
config_authority: None, // Autonomous multisig
threshold: 2,
members: vec![
Member::new(member1_pubkey),
Member::new(member2_pubkey),
],
time_lock: 0,
rent_collector: None,
memo: None,
};
let ix = instructions::multisig_create_v2(
program_config,
treasury,
multisig_pda,
create_key,
creator,
args,
None, // Use canonical program ID
);
async feature)use squads_v4_client::client::SquadsClient;
use squads_v4_client::types::{Member, Permission, Permissions};
use solana_sdk::signature::Keypair;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create client
let client = SquadsClient::new("https://api.devnet.solana.com".to_string());
// Create a multisig
let create_key = Keypair::new();
let creator = Keypair::new();
let members = vec![
Member::new(creator.pubkey()),
Member::new(Keypair::new().pubkey()),
];
let signature = client.create_multisig(
&create_key,
&creator,
2, // threshold
members,
0, // time_lock
None, // config_authority
None, // rent_collector
).await?;
println!("Multisig created: {}", signature);
Ok(())
}
use squads_v4_client::client::SquadsClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = SquadsClient::new("https://api.mainnet-beta.solana.com".to_string());
// Fetch a multisig account
let multisig = client.get_multisig(&multisig_pubkey).await?;
println!("Threshold: {}", multisig.threshold);
println!("Members: {}", multisig.members.len());
// Fetch a proposal
let proposal = client.get_proposal(&proposal_pubkey).await?;
println!("Approved: {}", proposal.approved.len());
Ok(())
}
pda)Functions for deriving program-derived addresses:
get_multisig_pda() - Multisig account PDAget_vault_pda() - Vault PDAget_transaction_pda() - Transaction PDAget_proposal_pda() - Proposal PDAget_spending_limit_pda() - Spending limit PDAaccounts)Structs for deserializing on-chain accounts:
Multisig - Main multisig configurationProposal - Proposal voting stateVaultTransaction - Vault transaction dataConfigTransaction - Configuration transaction dataSpendingLimit - Spending limit configurationinstructions)Functions for building Solana instructions:
multisig_create_v2() - Create a multisigproposal_create() - Create a proposalproposal_approve() - Approve a proposalproposal_reject() - Reject a proposalvault_transaction_create() - Create a vault transactionvault_transaction_execute() - Execute a vault transactionconfig_transaction_create() - Create a config transactionconfig_transaction_execute() - Execute a config transactiontypes)Core data types:
Member - Multisig member with permissionsPermissions - Permission flags (Initiate, Vote, Execute)ProposalStatus - Proposal state enumConfigAction - Configuration actionsclient, requires async feature)High-level async functions for common operations:
create_multisig() - Create a new multisigget_multisig() - Fetch multisig accountcreate_proposal() - Create a proposalapprove_proposal() - Approve a proposalexecute_vault_transaction() - Execute a transactionSee the examples/ directory for complete usage examples:
create_multisig.rs - Creating a multisigmanage_proposal.rs - Proposal lifecyclecargo build
cargo test
cargo build --features async
cargo test --features async
MIT OR Apache-2.0
Contributions are welcome! Please feel free to submit a Pull Request.