Crate rustywallet_multisig

Crate rustywallet_multisig 

Source
Expand description

§rustywallet-multisig

Bitcoin multi-signature wallet utilities with Shamir Secret Sharing.

§Features

  • Create M-of-N multisig wallets (up to 15-of-15)
  • Generate P2SH, P2WSH, and P2SH-P2WSH addresses
  • Sign and combine multisig transactions
  • 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);

§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);

§Signing Multisig Transactions

use rustywallet_multisig::{sign_p2sh_multisig, combine_signatures};

// Each party signs with their key
let sig1 = sign_p2sh_multisig(&sighash, &key1, &wallet).unwrap();
let sig2 = sign_p2sh_multisig(&sighash, &key2, &wallet).unwrap();

// Combine signatures
let combined = combine_signatures(&[sig1, sig2], &wallet).unwrap();

// Build scriptSig for P2SH
let script_sig = combined.build_script_sig();

// Or build witness for P2WSH
let witness = combined.build_witness();

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;

Modules§

address
Multisig address generation.
combiner
Signature combination for multisig transactions.
config
Multisig configuration.
error
Error types for multisig operations.
prelude
Prelude module for convenient imports.
script
Multisig script generation.
shamir
Shamir Secret Sharing implementation.
signer
Multisig transaction signing.