multisig-lite

Crates.iomultisig-lite
lib.rsmultisig-lite
version0.0.8
sourcesrc
created_at2023-02-01 19:43:04.652048
updated_at2023-02-13 07:29:28.830992
descriptionA native SOL multisig on-chain program
homepagehttps://github.com/keithnoguchi/multisig-lite
repositoryhttps://github.com/keithnoguchi/multisig-lite
max_upload_size
id774103
size234,293
Keith Noguchi (keithnoguchi)

documentation

https://docs.rs/multisig-lite

README

multisig-lite

CI License Cargo Documentation

A native SOL multisig on-chain program for Solana Blockchain.

Currently, there are five instructions to provide the queued multisig transfer operation:

  1. create
  2. fund
  3. create_transfer
  4. approve
  5. close

Examples

Here is how to create a new multisig account on-chain.

Please refer to the multisig_lite::multisig_lite module level documentation for the other instructions' example.

use std::rc::Rc;

use solana_sdk::commitment_config::CommitmentConfig;
use solana_sdk::pubkey::Pubkey;
use solana_sdk::signature::read_keypair_file;
use solana_sdk::signer::Signer;
use solana_sdk::system_program;

use anchor_client::{Client, Cluster};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let url = Cluster::Devnet;
    let funder = Rc::new(read_keypair_file(
        shellexpand::tilde("~/.config/solana/id.json").as_ref(),
    )?);
    let opts = CommitmentConfig::processed();
    let pid = multisig_lite::id();
    let program = Client::new_with_options(url, funder.clone(), opts).program(pid);

    // Gets the PDAs.
    let (state_pda, state_bump) =
        Pubkey::find_program_address(&[b"state", funder.pubkey().as_ref()], &pid);
    let (fund_pda, fund_bump) = Pubkey::find_program_address(&[b"fund", state_pda.as_ref()], &pid);

    // Creates a multisig account.
    let sig = program
        .request()
        .accounts(multisig_lite::accounts::Create {
            funder: funder.pubkey(),
            state: state_pda,
            fund: fund_pda,
            system_program: system_program::id(),
        })
        .args(multisig_lite::instruction::Create {
            m: 2, // m as in m/n.
            signers: vec![funder.pubkey(), Pubkey::new_unique(), Pubkey::new_unique()],
            q: 10, // transfer queue limit.
            _state_bump: state_bump,
            fund_bump,
        })
        .signer(funder.as_ref())
        .send()?;

    Ok(())
}

Test

You can run solana-program-test based functional tests with the standard cargo test command:

$ cargo test

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 36

cargo fmt