Skip to content

Generate Descriptors from Recovery Phrases

BDK wallets require the use of descriptors, but recovery phrases (also called seed phrases) are a common and popular backup solution. Creating descriptors from a recovery phrase is a common workflow and BDK makes this easy with its descriptor templates, which are offered for common descriptors (BIP 44/49/84/86).

Feature Flags

The current example requires the feature keys-bip39 for bdk_wallet. Add it to your Cargo.toml file with:

bdk_wallet = { version = "2.2.0", features = ["keys-bip39"] }

Example

let recovery_phrase: &str = "awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome";
let mnemonic = Mnemonic::parse(recovery_phrase).expect("Invalid seed! Be sure to replace the value of RECOVERY_PHRASE with your own 12 word seed phrase.");
let seed = mnemonic.to_seed("");
let xprv: Xpriv = Xpriv::new_master(Network::Signet, &seed).expect("Failed to create master key");

println!("# Master Private Key\n{xprv}\nWarning: be very careful with seeds and private keys when using MainNet! We are logging these values for convenience and demonstration purposes only.\n");

let (descriptor, key_map, _) = Bip86(xprv, KeychainKind::External)
    .build(Network::Signet)
    .expect("Failed to build external descriptor");

let (change_descriptor, change_key_map, _) = Bip86(xprv, KeychainKind::Internal)
    .build(Network::Signet)
    .expect("Failed to build internal descriptor");