Crate rustywallet_multisig

Crate rustywallet_multisig 

Source
Expand description

§rustywallet-multisig

Bitcoin multi-signature wallet utilities with Shamir Secret Sharing and MuSig2 support.

§Features

  • Create M-of-N multisig wallets (up to 15-of-15)
  • Generate P2SH, P2WSH, and P2SH-P2WSH addresses
  • Sign and combine multisig transactions
  • PSBT integration for hardware wallet interoperability
  • MuSig2 key aggregation for Schnorr multisig
  • Shamir Secret Sharing for key backup

§Quick Start

use rustywallet_multisig::prelude::*;
use rustywallet_keys::prelude::PrivateKey;

// Generate 3 keys
let key1 = PrivateKey::random();
let key2 = PrivateKey::random();
let key3 = PrivateKey::random();

let pubkeys = vec![
    key1.public_key().to_compressed(),
    key2.public_key().to_compressed(),
    key3.public_key().to_compressed(),
];

// Create 2-of-3 multisig wallet
let wallet = MultisigWallet::from_pubkeys(2, pubkeys, Network::Mainnet).unwrap();

println!("P2SH address: {}", wallet.address_p2sh);
println!("P2WSH address: {}", wallet.address_p2wsh);
println!("P2SH-P2WSH address: {}", wallet.address_p2sh_p2wsh);

§PSBT Integration

use rustywallet_multisig::{MultisigWallet, MultisigPsbtBuilder, Network};
use rustywallet_keys::prelude::PrivateKey;

let key1 = PrivateKey::random();
let key2 = PrivateKey::random();
let pubkeys = vec![
    key1.public_key().to_compressed(),
    key2.public_key().to_compressed(),
];

let wallet = MultisigWallet::from_pubkeys(2, pubkeys, Network::Mainnet).unwrap();
let mut builder = MultisigPsbtBuilder::new(wallet, 1);

// Each party signs
let sighash = [0u8; 32]; // Compute actual sighash
builder.sign_input(0, &sighash, &key1).unwrap();
builder.sign_input(0, &sighash, &key2).unwrap();

// Build final witness
let witness = builder.build_witness(0).unwrap();

§MuSig2 Key Aggregation

use rustywallet_multisig::{MuSigKeyAgg, musig_to_p2tr_address, Network};
use rustywallet_keys::prelude::PrivateKey;

let key1 = PrivateKey::random();
let key2 = PrivateKey::random();
let pubkeys = vec![
    key1.public_key().to_compressed(),
    key2.public_key().to_compressed(),
];

// Aggregate keys for n-of-n Schnorr multisig
let key_agg = MuSigKeyAgg::new(pubkeys).unwrap();

// Get P2TR address
let address = musig_to_p2tr_address(&key_agg, Network::Mainnet).unwrap();
println!("MuSig P2TR address: {}", address);

§Shamir Secret Sharing

use rustywallet_multisig::{split_secret, combine_shares};

// Split a 32-byte secret into 5 shares, requiring 3 to recover
let secret = [0x42u8; 32];
let shares = split_secret(&secret, 3, 5).unwrap();

// Recover with any 3 shares
let recovered = combine_shares(&shares[0..3]).unwrap();
assert_eq!(recovered, secret);

Re-exports§

pub use error::MultisigError;
pub use error::Result;
pub use config::MultisigConfig;
pub use address::MultisigWallet;
pub use address::Network;
pub use address::hash160;
pub use address::sha256;
pub use script::build_multisig_script;
pub use script::parse_multisig_script;
pub use signer::sign_p2sh_multisig;
pub use signer::sign_p2wsh_multisig;
pub use signer::PartialSignature;
pub use combiner::combine_signatures;
pub use combiner::CombinedSignatures;
pub use shamir::split_secret;
pub use shamir::combine_shares;
pub use shamir::ShamirShare;
pub use psbt::MultisigPsbtBuilder;
pub use psbt::PsbtPartialSig;
pub use musig::MuSigKeyAgg;
pub use musig::musig_to_p2tr_address;

Modules§

address
Multisig address generation.
combiner
Signature combination for multisig transactions.
config
Multisig configuration.
error
Error types for multisig operations.
musig
MuSig2 Schnorr multisig support
prelude
Prelude module for convenient imports.
psbt
PSBT integration for multisig wallets
script
Multisig script generation.
shamir
Shamir Secret Sharing implementation.
signer
Multisig transaction signing.