Skip to content

Multipath descriptor network association wrong #10

@andreasgriffin

Description

@andreasgriffin

Describe the bug

The into_wallet_descriptor function takes a network argument which should doublecheck if the descriptor fits this network. However this doesn't work as expected.

use bdk_wallet::bitcoin::key::Secp256k1;
use bdk_wallet::bitcoin::Network;
use bdk_wallet::descriptor::{ExtendedDescriptor, IntoWalletDescriptor};
use bdk_wallet::keys::KeyMap;
use bdk_wallet::miniscript::TranslatePk;
 

fn main() {  
    // multipath
    let descriptor_str = "wpkh([9a6a2580/84'/0'/0']tpubDDnGNapGEY6AZAdQbfRJgMg9fvz8pUBrLwvyvUqEgcUfgzM6zc2eVK4vY9x9L5FJWdX8WumXuLEDV5zDZnTfbn87vLe9XceCFwTu9so9Kks/<0;1>/*)";

    let secp = Secp256k1::new();
    let (extended_descriptor, key_map) = descriptor_str
        .into_wallet_descriptor(&secp,  Network::Testnet)
        .unwrap();

    println!("working: {}", extended_descriptor.to_string());

 

    // multipath  should not work, but throws no error
    let descriptor_str = "wpkh([9a6a2580/84'/0'/0']xpub6DEzNop46vmxR49zYWFnMwmEfawSNmAMf6dLH5YKDY463twtvw1XD7ihwJRLPRGZJz799VPFzXHpZu6WdhT29WnaeuChS6aZHZPFmqczR5K/<0;1>/*)";

    let secp = Secp256k1::new();
    let (extended_descriptor, key_map) = descriptor_str
        .into_wallet_descriptor(&secp,  Network::Testnet)
        .unwrap();

    println!("should not work: {}", extended_descriptor.to_string());

     // multipath  should work, but fails
     let descriptor_str = "wpkh([9a6a2580/84'/0'/0']xpub6DEzNop46vmxR49zYWFnMwmEfawSNmAMf6dLH5YKDY463twtvw1XD7ihwJRLPRGZJz799VPFzXHpZu6WdhT29WnaeuChS6aZHZPFmqczR5K/<0;1>/*)";

     let secp = Secp256k1::new();
     let (extended_descriptor, key_map) = descriptor_str
         .into_wallet_descriptor(&secp,  Network::Bitcoin)
         .unwrap();
 
    println!("fail: {}", extended_descriptor.to_string());
 
  
}

This error (in the 3. case) only occurs with multipath descriptors.

Build environment

[dependencies]
bdk_wallet = { version = "1.0.0", features = ["all-keys", "keys-bip39", "rusqlite"] }
bdk_core = { version = "0.4.1" }

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions