From e67c6e8e31e3816a1eff287b70821e309a025fec Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Fri, 13 Oct 2023 11:59:02 +1100 Subject: [PATCH] Upgrade bitcoin/miniscript dependencies - Upgrade bitcoin to to v0.31.0-rc1 `rust-miniscript` does not require any changes to upgrade to use bitcoin v0.31.0-rc1. Upgrade highlights a weakness in the `rust-miniscript` API, `TapTree::combine` is useful to us, it could be public. see: https://github.com/rust-bitcoin/rust-miniscript/pull/617 --- Cargo.toml | 6 ++++++ crates/bdk/src/descriptor/dsl.rs | 3 +-- crates/bdk/src/descriptor/policy.rs | 2 +- crates/bdk/src/keys/mod.rs | 2 +- example-crates/example_cli/src/lib.rs | 6 +++--- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0e1efc902f..062608991d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,3 +20,9 @@ members = [ [workspace.package] authors = ["Bitcoin Dev Kit Developers"] + +[patch.crates-io.miniscript] +path = "/home/tobin/build/github.com/tcharding/rust-miniscript/10-13-upgrade-bitcoin" + +[patch.crates-io.bitcoin] +path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/10-10-release-0.31.0-rc1/bitcoin" diff --git a/crates/bdk/src/descriptor/dsl.rs b/crates/bdk/src/descriptor/dsl.rs index 50cd978f7d..66813da282 100644 --- a/crates/bdk/src/descriptor/dsl.rs +++ b/crates/bdk/src/descriptor/dsl.rs @@ -274,14 +274,13 @@ macro_rules! impl_sortedmulti { #[macro_export] macro_rules! parse_tap_tree { ( @merge $tree_a:expr, $tree_b:expr) => {{ - use $crate::alloc::sync::Arc; use $crate::miniscript::descriptor::TapTree; $tree_a .and_then(|tree_a| Ok((tree_a, $tree_b?))) .and_then(|((a_tree, mut a_keymap, a_networks), (b_tree, b_keymap, b_networks))| { a_keymap.extend(b_keymap.into_iter()); - Ok((TapTree::Tree(Arc::new(a_tree), Arc::new(b_tree)), a_keymap, $crate::keys::merge_networks(&a_networks, &b_networks))) + Ok((TapTree::combine(a_tree, b_tree), a_keymap, $crate::keys::merge_networks(&a_networks, &b_networks))) }) }}; diff --git a/crates/bdk/src/descriptor/policy.rs b/crates/bdk/src/descriptor/policy.rs index 14b2459ebe..5ec3dc821c 100644 --- a/crates/bdk/src/descriptor/policy.rs +++ b/crates/bdk/src/descriptor/policy.rs @@ -1139,7 +1139,7 @@ impl ExtractPolicy for Descriptor { let key_spend_sig = miniscript::Tap::make_signature(tr.internal_key(), signers, build_sat, secp); - if tr.taptree().is_none() { + if tr.tap_tree().is_none() { Ok(Some(key_spend_sig)) } else { let mut items = vec![key_spend_sig]; diff --git a/crates/bdk/src/keys/mod.rs b/crates/bdk/src/keys/mod.rs index b47c4b86d4..a536b71734 100644 --- a/crates/bdk/src/keys/mod.rs +++ b/crates/bdk/src/keys/mod.rs @@ -110,7 +110,7 @@ impl DescriptorKey { Ok((public, KeyMap::default(), valid_networks)) } DescriptorKey::Secret(secret, valid_networks, _) => { - let mut key_map = KeyMap::with_capacity(1); + let mut key_map = KeyMap::new(); let public = secret .to_public(secp) diff --git a/example-crates/example_cli/src/lib.rs b/example-crates/example_cli/src/lib.rs index 9e572a8929..563f649d96 100644 --- a/example-crates/example_cli/src/lib.rs +++ b/example-crates/example_cli/src/lib.rs @@ -3,7 +3,7 @@ use anyhow::Context; use bdk_coin_select::{coin_select_bnb, CoinSelector, CoinSelectorOpt, WeightedValue}; use bdk_file_store::Store; use serde::{de::DeserializeOwned, Serialize}; -use std::{cmp::Reverse, collections::HashMap, path::PathBuf, sync::Mutex, time::Duration}; +use std::{cmp::Reverse, collections::BTreeMap, path::PathBuf, sync::Mutex, time::Duration}; use bdk_chain::{ bitcoin::{ @@ -189,7 +189,7 @@ impl core::fmt::Display for Keychain { pub fn create_tx( graph: &mut KeychainTxGraph, chain: &O, - keymap: &HashMap, + keymap: &BTreeMap, cs_algorithm: CoinSelectionAlgo, address: Address, value: u64, @@ -434,7 +434,7 @@ pub fn handle_commands>, db: &Mutex>, chain: &Mutex, - keymap: &HashMap, + keymap: &BTreeMap, network: Network, broadcast: impl FnOnce(S, &Transaction) -> anyhow::Result<()>, cmd: Commands,