Skip to content

Commit 6233210

Browse files
committed
Upgrade miniscript/bitcoin dependency
Upgrade: - bitcoin to v0.31.0 - miniscript to v11.0.0 Requires currently unreleased: - rust-hwi: master branch - rust-esplora-clinet: bitcoindevkit/rust-esplora-client#79
1 parent 7aca884 commit 6233210

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+523
-472
lines changed

crates/bdk/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ rust-version = "1.63"
1414

1515
[dependencies]
1616
rand = "^0.8"
17-
miniscript = { version = "10.0.0", features = ["serde"], default-features = false }
18-
bitcoin = { version = "0.30.0", features = ["serde", "base64", "rand-std"], default-features = false }
17+
miniscript = { version = "11.0.0", features = ["serde"], default-features = false }
18+
bitcoin = { version = "0.31.0", features = ["serde", "base64", "rand-std"], default-features = false }
1919
serde = { version = "^1.0", features = ["derive"] }
2020
serde_json = { version = "^1.0" }
2121
bdk_chain = { path = "../chain", version = "0.9.0", features = ["miniscript", "serde"], default-features = false }

crates/bdk/src/descriptor/dsl.rs

+12-13
Original file line numberDiff line numberDiff line change
@@ -274,14 +274,13 @@ macro_rules! impl_sortedmulti {
274274
#[macro_export]
275275
macro_rules! parse_tap_tree {
276276
( @merge $tree_a:expr, $tree_b:expr) => {{
277-
use $crate::alloc::sync::Arc;
278277
use $crate::miniscript::descriptor::TapTree;
279278

280279
$tree_a
281280
.and_then(|tree_a| Ok((tree_a, $tree_b?)))
282281
.and_then(|((a_tree, mut a_keymap, a_networks), (b_tree, b_keymap, b_networks))| {
283282
a_keymap.extend(b_keymap.into_iter());
284-
Ok((TapTree::Tree(Arc::new(a_tree), Arc::new(b_tree)), a_keymap, $crate::keys::merge_networks(&a_networks, &b_networks)))
283+
Ok((TapTree::combine(a_tree, b_tree), a_keymap, $crate::keys::merge_networks(&a_networks, &b_networks)))
285284
})
286285

287286
}};
@@ -806,7 +805,7 @@ mod test {
806805
use crate::descriptor::{DescriptorError, DescriptorMeta};
807806
use crate::keys::{DescriptorKey, IntoDescriptorKey, ValidNetworks};
808807
use bitcoin::bip32;
809-
use bitcoin::network::constants::Network::{Bitcoin, Regtest, Signet, Testnet};
808+
use bitcoin::Network::{Bitcoin, Regtest, Signet, Testnet};
810809
use bitcoin::PrivateKey;
811810

812811
// test the descriptor!() macro
@@ -936,7 +935,7 @@ mod test {
936935

937936
#[test]
938937
fn test_bip32_legacy_descriptors() {
939-
let xprv = bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
938+
let xprv = bip32::Xpriv::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
940939

941940
let path = bip32::DerivationPath::from_str("m/0").unwrap();
942941
let desc_key = (xprv, path.clone()).into_descriptor_key().unwrap();
@@ -981,7 +980,7 @@ mod test {
981980

982981
#[test]
983982
fn test_bip32_segwitv0_descriptors() {
984-
let xprv = bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
983+
let xprv = bip32::Xpriv::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
985984

986985
let path = bip32::DerivationPath::from_str("m/0").unwrap();
987986
let desc_key = (xprv, path.clone()).into_descriptor_key().unwrap();
@@ -1038,10 +1037,10 @@ mod test {
10381037

10391038
#[test]
10401039
fn test_dsl_sortedmulti() {
1041-
let key_1 = bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
1040+
let key_1 = bip32::Xpriv::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
10421041
let path_1 = bip32::DerivationPath::from_str("m/0").unwrap();
10431042

1044-
let key_2 = bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPegBHHnq7YEgM815dG24M2Jk5RVqipgDxF1HJ1tsnT815X5Fd5FRfMVUs8NZs9XCb6y9an8hRPThnhfwfXJ36intaekySHGF").unwrap();
1043+
let key_2 = bip32::Xpriv::from_str("tprv8ZgxMBicQKsPegBHHnq7YEgM815dG24M2Jk5RVqipgDxF1HJ1tsnT815X5Fd5FRfMVUs8NZs9XCb6y9an8hRPThnhfwfXJ36intaekySHGF").unwrap();
10451044
let path_2 = bip32::DerivationPath::from_str("m/1").unwrap();
10461045

10471046
let desc_key1 = (key_1, path_1);
@@ -1097,7 +1096,7 @@ mod test {
10971096
// - verify the valid_networks returned is correctly computed based on the keys present in the descriptor
10981097
#[test]
10991098
fn test_valid_networks() {
1100-
let xprv = bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
1099+
let xprv = bip32::Xpriv::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
11011100
let path = bip32::DerivationPath::from_str("m/0").unwrap();
11021101
let desc_key = (xprv, path).into_descriptor_key().unwrap();
11031102

@@ -1107,7 +1106,7 @@ mod test {
11071106
[Testnet, Regtest, Signet].iter().cloned().collect()
11081107
);
11091108

1110-
let xprv = bip32::ExtendedPrivKey::from_str("xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi").unwrap();
1109+
let xprv = bip32::Xpriv::from_str("xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi").unwrap();
11111110
let path = bip32::DerivationPath::from_str("m/10/20/30/40").unwrap();
11121111
let desc_key = (xprv, path).into_descriptor_key().unwrap();
11131112

@@ -1120,15 +1119,15 @@ mod test {
11201119
fn test_key_maps_merged() {
11211120
let secp = Secp256k1::new();
11221121

1123-
let xprv1 = bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
1122+
let xprv1 = bip32::Xpriv::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
11241123
let path1 = bip32::DerivationPath::from_str("m/0").unwrap();
11251124
let desc_key1 = (xprv1, path1.clone()).into_descriptor_key().unwrap();
11261125

1127-
let xprv2 = bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPegBHHnq7YEgM815dG24M2Jk5RVqipgDxF1HJ1tsnT815X5Fd5FRfMVUs8NZs9XCb6y9an8hRPThnhfwfXJ36intaekySHGF").unwrap();
1126+
let xprv2 = bip32::Xpriv::from_str("tprv8ZgxMBicQKsPegBHHnq7YEgM815dG24M2Jk5RVqipgDxF1HJ1tsnT815X5Fd5FRfMVUs8NZs9XCb6y9an8hRPThnhfwfXJ36intaekySHGF").unwrap();
11281127
let path2 = bip32::DerivationPath::from_str("m/2147483647'/0").unwrap();
11291128
let desc_key2 = (xprv2, path2.clone()).into_descriptor_key().unwrap();
11301129

1131-
let xprv3 = bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPdZXrcHNLf5JAJWFAoJ2TrstMRdSKtEggz6PddbuSkvHKM9oKJyFgZV1B7rw8oChspxyYbtmEXYyg1AjfWbL3ho3XHDpHRZf").unwrap();
1130+
let xprv3 = bip32::Xpriv::from_str("tprv8ZgxMBicQKsPdZXrcHNLf5JAJWFAoJ2TrstMRdSKtEggz6PddbuSkvHKM9oKJyFgZV1B7rw8oChspxyYbtmEXYyg1AjfWbL3ho3XHDpHRZf").unwrap();
11321131
let path3 = bip32::DerivationPath::from_str("m/10/20/30/40").unwrap();
11331132
let desc_key3 = (xprv3, path3.clone()).into_descriptor_key().unwrap();
11341133

@@ -1152,7 +1151,7 @@ mod test {
11521151
#[test]
11531152
fn test_script_context_validation() {
11541153
// this compiles
1155-
let xprv = bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
1154+
let xprv = bip32::Xpriv::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
11561155
let path = bip32::DerivationPath::from_str("m/0").unwrap();
11571156
let desc_key: DescriptorKey<Legacy> = (xprv, path).into_descriptor_key().unwrap();
11581157

crates/bdk/src/descriptor/error.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub enum Error {
4141
/// Miniscript error
4242
Miniscript(miniscript::Error),
4343
/// Hex decoding error
44-
Hex(bitcoin::hashes::hex::Error),
44+
Hex(bitcoin::hex::HexToBytesError),
4545
}
4646

4747
impl From<crate::keys::KeyError> for Error {
@@ -110,8 +110,8 @@ impl From<miniscript::Error> for Error {
110110
}
111111
}
112112

113-
impl From<bitcoin::hashes::hex::Error> for Error {
114-
fn from(err: bitcoin::hashes::hex::Error) -> Self {
113+
impl From<bitcoin::hex::HexToBytesError> for Error {
114+
fn from(err: bitcoin::hex::HexToBytesError) -> Self {
115115
Error::Hex(err)
116116
}
117117
}

crates/bdk/src/descriptor/mod.rs

+23-24
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use crate::collections::BTreeMap;
1818
use alloc::string::String;
1919
use alloc::vec::Vec;
2020

21-
use bitcoin::bip32::{ChildNumber, DerivationPath, ExtendedPubKey, Fingerprint, KeySource};
21+
use bitcoin::bip32::{ChildNumber, DerivationPath, Fingerprint, KeySource, Xpub};
2222
use bitcoin::{key::XOnlyPublicKey, secp256k1, PublicKey};
2323
use bitcoin::{psbt, taproot};
2424
use bitcoin::{Network, TxOut};
@@ -377,7 +377,7 @@ where
377377
pub(crate) trait DescriptorMeta {
378378
fn is_witness(&self) -> bool;
379379
fn is_taproot(&self) -> bool;
380-
fn get_extended_keys(&self) -> Vec<DescriptorXKey<ExtendedPubKey>>;
380+
fn get_extended_keys(&self) -> Vec<DescriptorXKey<Xpub>>;
381381
fn derive_from_hd_keypaths(
382382
&self,
383383
hd_keypaths: &HdKeyPaths,
@@ -418,7 +418,7 @@ impl DescriptorMeta for ExtendedDescriptor {
418418
self.desc_type() == DescriptorType::Tr
419419
}
420420

421-
fn get_extended_keys(&self) -> Vec<DescriptorXKey<ExtendedPubKey>> {
421+
fn get_extended_keys(&self) -> Vec<DescriptorXKey<Xpub>> {
422422
let mut answer = Vec::new();
423423

424424
self.for_each_key(|pk| {
@@ -438,21 +438,20 @@ impl DescriptorMeta for ExtendedDescriptor {
438438
secp: &SecpCtx,
439439
) -> Option<DerivedDescriptor> {
440440
// Ensure that deriving `xpub` with `path` yields `expected`
441-
let verify_key = |xpub: &DescriptorXKey<ExtendedPubKey>,
442-
path: &DerivationPath,
443-
expected: &SinglePubKey| {
444-
let derived = xpub
445-
.xkey
446-
.derive_pub(secp, path)
447-
.expect("The path should never contain hardened derivation steps")
448-
.public_key;
449-
450-
match expected {
451-
SinglePubKey::FullKey(pk) if &PublicKey::new(derived) == pk => true,
452-
SinglePubKey::XOnly(pk) if &XOnlyPublicKey::from(derived) == pk => true,
453-
_ => false,
454-
}
455-
};
441+
let verify_key =
442+
|xpub: &DescriptorXKey<Xpub>, path: &DerivationPath, expected: &SinglePubKey| {
443+
let derived = xpub
444+
.xkey
445+
.derive_pub(secp, path)
446+
.expect("The path should never contain hardened derivation steps")
447+
.public_key;
448+
449+
match expected {
450+
SinglePubKey::FullKey(pk) if &PublicKey::new(derived) == pk => true,
451+
SinglePubKey::XOnly(pk) if &XOnlyPublicKey::from(derived) == pk => true,
452+
_ => false,
453+
}
454+
};
456455

457456
let mut path_found = None;
458457

@@ -605,10 +604,10 @@ mod test {
605604
use core::str::FromStr;
606605

607606
use assert_matches::assert_matches;
608-
use bitcoin::hashes::hex::FromHex;
607+
use bitcoin::hex::FromHex;
609608
use bitcoin::secp256k1::Secp256k1;
610609
use bitcoin::ScriptBuf;
611-
use bitcoin::{bip32, psbt::Psbt};
610+
use bitcoin::{bip32, Psbt};
612611

613612
use super::*;
614613
use crate::psbt::PsbtUtils;
@@ -727,7 +726,7 @@ mod test {
727726

728727
let secp = Secp256k1::new();
729728

730-
let xprv = bip32::ExtendedPrivKey::from_str("xprv9s21ZrQH143K3c3gF1DUWpWNr2SG2XrG8oYPpqYh7hoWsJy9NjabErnzriJPpnGHyKz5NgdXmq1KVbqS1r4NXdCoKitWg5e86zqXHa8kxyB").unwrap();
729+
let xprv = bip32::Xpriv::from_str("xprv9s21ZrQH143K3c3gF1DUWpWNr2SG2XrG8oYPpqYh7hoWsJy9NjabErnzriJPpnGHyKz5NgdXmq1KVbqS1r4NXdCoKitWg5e86zqXHa8kxyB").unwrap();
731730
let path = bip32::DerivationPath::from_str("m/0").unwrap();
732731

733732
// here `to_descriptor_key` will set the valid networks for the key to only mainnet, since
@@ -746,7 +745,7 @@ mod test {
746745
let mut xprv_testnet = xprv;
747746
xprv_testnet.network = Network::Testnet;
748747

749-
let xpub_testnet = bip32::ExtendedPubKey::from_priv(&secp, &xprv_testnet);
748+
let xpub_testnet = bip32::Xpub::from_priv(&secp, &xprv_testnet);
750749
let desc_pubkey = DescriptorPublicKey::XPub(DescriptorXKey {
751750
xkey: xpub_testnet,
752751
origin: None,
@@ -836,7 +835,7 @@ mod test {
836835
fn test_descriptor_from_str_from_output_of_macro() {
837836
let secp = Secp256k1::new();
838837

839-
let tpub = bip32::ExtendedPubKey::from_str("tpubD6NzVbkrYhZ4XHndKkuB8FifXm8r5FQHwrN6oZuWCz13qb93rtgKvD4PQsqC4HP4yhV3tA2fqr2RbY5mNXfM7RxXUoeABoDtsFUq2zJq6YK").unwrap();
838+
let tpub = bip32::Xpub::from_str("tpubD6NzVbkrYhZ4XHndKkuB8FifXm8r5FQHwrN6oZuWCz13qb93rtgKvD4PQsqC4HP4yhV3tA2fqr2RbY5mNXfM7RxXUoeABoDtsFUq2zJq6YK").unwrap();
840839
let path = bip32::DerivationPath::from_str("m/1/2").unwrap();
841840
let key = (tpub, path).into_descriptor_key().unwrap();
842841

@@ -895,7 +894,7 @@ mod test {
895894
.update_with_descriptor_unchecked(&descriptor)
896895
.unwrap();
897896

898-
assert_eq!(psbt_input.redeem_script, Some(script.to_v0_p2wsh()));
897+
assert_eq!(psbt_input.redeem_script, Some(script.to_p2wsh()));
899898
assert_eq!(psbt_input.witness_script, Some(script));
900899
}
901900
}

crates/bdk/src/descriptor/policy.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1137,7 +1137,7 @@ impl ExtractPolicy for Descriptor<DescriptorPublicKey> {
11371137
let key_spend_sig =
11381138
miniscript::Tap::make_signature(tr.internal_key(), signers, build_sat, secp);
11391139

1140-
if tr.taptree().is_none() {
1140+
if tr.tap_tree().is_none() {
11411141
Ok(Some(key_spend_sig))
11421142
} else {
11431143
let mut items = vec![key_spend_sig];
@@ -1184,8 +1184,8 @@ mod test {
11841184
secp: &SecpCtx,
11851185
) -> (DescriptorKey<Ctx>, DescriptorKey<Ctx>, Fingerprint) {
11861186
let path = bip32::DerivationPath::from_str(path).unwrap();
1187-
let tprv = bip32::ExtendedPrivKey::from_str(tprv).unwrap();
1188-
let tpub = bip32::ExtendedPubKey::from_priv(secp, &tprv);
1187+
let tprv = bip32::Xpriv::from_str(tprv).unwrap();
1188+
let tpub = bip32::Xpub::from_priv(secp, &tprv);
11891189
let fingerprint = tprv.fingerprint(secp);
11901190
let prvkey = (tprv, path.clone()).into_descriptor_key().unwrap();
11911191
let pubkey = (tpub, path).into_descriptor_key().unwrap();

0 commit comments

Comments
 (0)