Crate rustywallet_descriptor

Crate rustywallet_descriptor 

Source
Expand description

§rustywallet-descriptor

Output descriptors (BIP380-386) for Bitcoin wallet development.

This crate provides functionality to:

  • Parse output descriptor strings
  • Derive addresses from descriptors
  • Generate script pubkeys
  • Support ranged descriptors with wildcards

§Supported Descriptors

TypeDescriptionExample
pk()Pay to pubkeypk(KEY)
pkh()Pay to pubkey hash (P2PKH)pkh(KEY)
wpkh()Pay to witness pubkey hash (P2WPKH)wpkh(KEY)
sh()Pay to script hash (P2SH)sh(wpkh(KEY))
wsh()Pay to witness script hash (P2WSH)wsh(multi(2,KEY,KEY))
tr()Pay to Taproot (P2TR)tr(KEY)
multi()k-of-n multisigmulti(2,KEY,KEY,KEY)
sortedmulti()Sorted k-of-n multisigsortedmulti(2,KEY,KEY,KEY)

§Example

use rustywallet_descriptor::{Descriptor, derive_address};
use rustywallet_address::Network;

// Parse a descriptor
let desc = Descriptor::parse("wpkh(02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5)").unwrap();

// Derive an address
let address = derive_address(&desc, Network::BitcoinMainnet, 0).unwrap();
println!("Address: {}", address);

§Ranged Descriptors

use rustywallet_descriptor::{Descriptor, derive_addresses};
use rustywallet_address::Network;

// Parse a ranged descriptor with wildcard
let desc = Descriptor::parse(
    "wpkh(xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8/0/*)"
).unwrap();

// Derive multiple addresses
let addresses = derive_addresses(&desc, Network::BitcoinMainnet, 0, 10).unwrap();
for (i, addr) in addresses.iter().enumerate() {
    println!("Address {}: {}", i, addr);
}

§Checksum

Descriptors can include a checksum for error detection:

use rustywallet_descriptor::{Descriptor, add_checksum};

let desc = "wpkh(02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5)";
let with_checksum = add_checksum(desc);
println!("With checksum: {}", with_checksum);

// Parse validates checksum automatically
let parsed = Descriptor::parse(&with_checksum).unwrap();

Re-exports§

pub use address::derive_address;
pub use address::derive_addresses;
pub use checksum::add_checksum;
pub use checksum::compute_checksum;
pub use checksum::strip_checksum;
pub use checksum::verify_checksum;
pub use descriptor::Descriptor;
pub use error::DescriptorError;
pub use key::parse_key;
pub use key::DescriptorKey;
pub use key::KeyOrigin;
pub use key::Wildcard;
pub use script::generate_script_pubkey;
pub use script::ScriptPubkey;
pub use script::ScriptType;

Modules§

address
Address derivation from descriptors
checksum
BIP380 descriptor checksum
descriptor
Descriptor types and parsing
error
Error types for descriptor parsing and operations
key
Key expressions for descriptors
prelude
Prelude module for convenient imports
script
Script generation from descriptors