From: valued mammal Date: Tue, 22 Oct 2024 14:29:07 +0000 (-0400) Subject: test(wallet): check keymaps can be set when loading wallet X-Git-Tag: v1.0.0-beta.6~31^2 X-Git-Url: http://internal-gitweb-vhost/script/%22https:/database/scripts/static/struct.CommandStringError.html?a=commitdiff_plain;h=b6b767f3fc12062d6787eec8b3e1021458283985;p=bdk test(wallet): check keymaps can be set when loading wallet --- diff --git a/crates/wallet/tests/wallet.rs b/crates/wallet/tests/wallet.rs index 44b194a8..d51af335 100644 --- a/crates/wallet/tests/wallet.rs +++ b/crates/wallet/tests/wallet.rs @@ -26,6 +26,7 @@ use bitcoin::{ absolute, transaction, Address, Amount, BlockHash, FeeRate, Network, OutPoint, ScriptBuf, Sequence, Transaction, TxIn, TxOut, Txid, Weight, }; +use miniscript::{descriptor::KeyMap, Descriptor, DescriptorPublicKey}; use rand::rngs::StdRng; use rand::SeedableRng; @@ -99,6 +100,11 @@ fn insert_seen_at(wallet: &mut Wallet, txid: Txid, seen_at: u64) { .unwrap(); } +fn parse_descriptor(s: &str) -> (Descriptor, KeyMap) { + >::parse_descriptor(&Secp256k1::new(), s) + .expect("failed to parse descriptor") +} + // The satisfaction size of a P2WPKH is 112 WU = // 1 (elements in witness) + 1 (OP_PUSH) + 33 (pk) + 1 (OP_PUSH) + 72 (signature + sighash) + 1*4 (script len) // On the witness itself, we have to push once for the pk (33WU) and once for signature + sighash (72WU), for @@ -251,7 +257,22 @@ fn wallet_load_checks() -> anyhow::Result<()> { ))), "unexpected descriptors check result", ); - + // check setting keymaps + let (_, external_keymap) = parse_descriptor(external_desc); + let (_, internal_keymap) = parse_descriptor(internal_desc); + let wallet = Wallet::load() + .keymap(KeychainKind::External, external_keymap) + .keymap(KeychainKind::Internal, internal_keymap) + .load_wallet(&mut open_db(&file_path)?) + .expect("db should not fail") + .expect("wallet was persisted"); + for keychain in [KeychainKind::External, KeychainKind::Internal] { + let keymap = wallet.get_signers(keychain).as_key_map(wallet.secp_ctx()); + assert!( + !keymap.is_empty(), + "load should populate keymap for keychain {keychain:?}" + ); + } Ok(()) }