From: Steve Myers Date: Thu, 25 Nov 2021 04:44:27 +0000 (-0800) Subject: Merge bitcoindevkit/bdk#471: moving the function wallet_name_from_descriptor from... X-Git-Tag: v0.15.0~9 X-Git-Url: http://internal-gitweb-vhost/script/%22https:/-sqlite-db-configuration/scripts/enum.FromScriptError.html?a=commitdiff_plain;h=3a07614fdb13154d448b291e50ca5395153ec745;p=bdk Merge bitcoindevkit/bdk#471: moving the function wallet_name_from_descriptor from blockchain/rpc.rs to wallet/mod.rs as it can be useful not only for rpc 2fc81141806ace8f12e5a019c0866f16fa8a02dc moving the function wallet_name_from_descriptor from blockchain/rpc.rs to wallet/mod.rs as it can be useful not only for rpc (Richard Ulrich) Pull request description: ### Description Moving the function wallet_name_from_descriptor from rpc.rs to mod.rs Since the local cache for compact filters should be separate per wallet, this function can be useful not only for rpc. ### Notes to the reviewers I thought about renaming it, but waited for opinions on that. ### Checklists #### All Submissions: * [x] I've signed all my commits * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md) * [x] I ran `cargo fmt` and `cargo clippy` before committing ACKs for top commit: notmandatory: re-ACK 2fc8114 Tree-SHA512: d5732e74f7a54f54dde39fff77f94f12c611a419bed9683025ecf7be95cde330209f676dfc9346ebcd29194325589710eafdd1d533e8073d0662cb397577119f --- 3a07614fdb13154d448b291e50ca5395153ec745 diff --cc src/wallet/mod.rs index 832626e3,a89f53f7..20de7568 --- a/src/wallet/mod.rs +++ b/src/wallet/mod.rs @@@ -3994,15 -3994,33 +3994,44 @@@ pub(crate) mod test } ); } + + #[test] + fn test_sending_to_bip350_bech32m_address() { + let (wallet, _, _) = get_funded_wallet(get_test_wpkh()); + let addr = + Address::from_str("tb1pqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesf3hn0c") + .unwrap(); + let mut builder = wallet.build_tx(); + builder.add_recipient(addr.script_pubkey(), 45_000); + builder.finish().unwrap(); + } } + + /// Deterministically generate a unique name given the descriptors defining the wallet + pub fn wallet_name_from_descriptor( + descriptor: T, + change_descriptor: Option, + network: Network, + secp: &SecpCtx, + ) -> Result + where + T: IntoWalletDescriptor, + { + //TODO check descriptors contains only public keys + let descriptor = descriptor + .into_wallet_descriptor(secp, network)? + .0 + .to_string(); + let mut wallet_name = get_checksum(&descriptor[..descriptor.find('#').unwrap()])?; + if let Some(change_descriptor) = change_descriptor { + let change_descriptor = change_descriptor + .into_wallet_descriptor(secp, network)? + .0 + .to_string(); + wallet_name.push_str( + get_checksum(&change_descriptor[..change_descriptor.find('#').unwrap()])?.as_str(), + ); + } + + Ok(wallet_name) + }