From 68e1b32d81978746dba0abdd14af94edbfdcf9b4 Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Wed, 13 Apr 2022 13:40:16 -0700 Subject: [PATCH 1/7] Bump version to 0.18.0-rc.1 --- CHANGELOG.md | 7 ++++++- Cargo.toml | 2 +- src/lib.rs | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b43faf3..bdea0168 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] + + +## [v0.18.0] - [v0.17.0] + - Add `sqlite-bundled` feature for deployments that need a bundled version of sqlite, ie. for mobile platforms. - Added `Wallet::get_signers()`, `Wallet::descriptor_checksum()` and `Wallet::get_address_validators()`, exposed the `AsDerived` trait. - Deprecate `database::Database::flush()`, the function is only needed for the sled database on mobile, instead for mobile use the sqlite database. @@ -441,4 +445,5 @@ final transaction is created by calling `finish` on the builder. [v0.16.0]: https://github.com/bitcoindevkit/bdk/compare/v0.15.0...v0.16.0 [v0.16.1]: https://github.com/bitcoindevkit/bdk/compare/v0.16.0...v0.16.1 [v0.17.0]: https://github.com/bitcoindevkit/bdk/compare/v0.16.1...v0.17.0 -[unreleased]: https://github.com/bitcoindevkit/bdk/compare/v0.17.0...HEAD \ No newline at end of file +[v0.18.0]: https://github.com/bitcoindevkit/bdk/compare/v0.17.0...v0.18.0 +[unreleased]: https://github.com/bitcoindevkit/bdk/compare/v0.18.0...HEAD \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index cda43990..6f859473 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bdk" -version = "0.17.1-dev" +version = "0.18.0-rc.1" edition = "2018" authors = ["Alekos Filini ", "Riccardo Casatta "] homepage = "https://bitcoindevkit.org" diff --git a/src/lib.rs b/src/lib.rs index 4ef971b7..c3de5ae8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -44,7 +44,7 @@ //! interact with the bitcoin P2P network. //! //! ```toml -//! bdk = "0.17.0" +//! bdk = "0.18.0" //! ``` //! //! # Examples From f90e3f978e3c7ec5dde0a592d79da419a7c9ec3a Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Wed, 13 Apr 2022 13:51:12 -0700 Subject: [PATCH 2/7] Update changelog with addition of keychain to AddressInfo --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bdea0168..6c439c60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add `sqlite-bundled` feature for deployments that need a bundled version of sqlite, ie. for mobile platforms. - Added `Wallet::get_signers()`, `Wallet::descriptor_checksum()` and `Wallet::get_address_validators()`, exposed the `AsDerived` trait. - Deprecate `database::Database::flush()`, the function is only needed for the sled database on mobile, instead for mobile use the sqlite database. +- Add `keychain: KeychainKind` to `wallet::AddressInfo`. ## [v0.17.0] - [v0.16.1] From 9ed36875f1112d884f6c3c2beab89faf8aa5d2e0 Mon Sep 17 00:00:00 2001 From: Alekos Filini Date: Tue, 19 Apr 2022 11:44:50 +0200 Subject: [PATCH 3/7] export: Rename `WalletExport` to `FullyNodedExport` The `WalletExport` type can still be used as an alias to `FullyNodedExport` but it has been marked as deprecated and will be removed in the next release. --- CHANGELOG.md | 1 + src/wallet/export.rs | 30 +++++++++++++++++------------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ba0d603..7f2091c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Deprecate `database::Database::flush()`, the function is only needed for the sled database on mobile, instead for mobile use the sqlite database. - Add `keychain: KeychainKind` to `wallet::AddressInfo`. - Improve key generation traits +- Rename `WalletExport` to `FullyNodedExport`, deprecate the former. ## [v0.17.0] - [v0.16.1] diff --git a/src/wallet/export.rs b/src/wallet/export.rs index 69b8c63f..026083e0 100644 --- a/src/wallet/export.rs +++ b/src/wallet/export.rs @@ -29,7 +29,7 @@ //! "label":"testnet" //! }"#; //! -//! let import = WalletExport::from_str(import)?; +//! let import = FullyNodedExport::from_str(import)?; //! let wallet = Wallet::new( //! &import.descriptor(), //! import.change_descriptor().as_ref(), @@ -51,7 +51,7 @@ //! Network::Testnet, //! MemoryDatabase::default() //! )?; -//! let export = WalletExport::export_wallet(&wallet, "exported wallet", true) +//! let export = FullyNodedExport::export_wallet(&wallet, "exported wallet", true) //! .map_err(ToString::to_string) //! .map_err(bdk::Error::Generic)?; //! @@ -70,11 +70,15 @@ use crate::database::BatchDatabase; use crate::types::KeychainKind; use crate::wallet::Wallet; +/// Alias for [`FullyNodedExport`] +#[deprecated(since = "0.18.0", note = "Please use [`FullyNodedExport`] instead")] +pub type WalletExport = FullyNodedExport; + /// Structure that contains the export of a wallet /// /// For a usage example see [this module](crate::wallet::export)'s documentation. #[derive(Debug, Serialize, Deserialize)] -pub struct WalletExport { +pub struct FullyNodedExport { descriptor: String, /// Earliest block to rescan when looking for the wallet's transactions pub blockheight: u32, @@ -82,13 +86,13 @@ pub struct WalletExport { pub label: String, } -impl ToString for WalletExport { +impl ToString for FullyNodedExport { fn to_string(&self) -> String { serde_json::to_string(self).unwrap() } } -impl FromStr for WalletExport { +impl FromStr for FullyNodedExport { type Err = serde_json::Error; fn from_str(s: &str) -> Result { @@ -100,7 +104,7 @@ fn remove_checksum(s: String) -> String { s.splitn(2, '#').next().map(String::from).unwrap() } -impl WalletExport { +impl FullyNodedExport { /// Export a wallet /// /// This function returns an error if it determines that the `wallet`'s descriptor(s) are not @@ -141,7 +145,7 @@ impl WalletExport { } }; - let export = WalletExport { + let export = FullyNodedExport { descriptor, label: label.into(), blockheight, @@ -265,7 +269,7 @@ mod test { get_test_db(), ) .unwrap(); - let export = WalletExport::export_wallet(&wallet, "Test Label", true).unwrap(); + let export = FullyNodedExport::export_wallet(&wallet, "Test Label", true).unwrap(); assert_eq!(export.descriptor(), descriptor); assert_eq!(export.change_descriptor(), Some(change_descriptor.into())); @@ -283,7 +287,7 @@ mod test { let descriptor = "wpkh(xprv9s21ZrQH143K4CTb63EaMxja1YiTnSEWKMbn23uoEnAzxjdUJRQkazCAtzxGm4LSoTSVTptoV9RbchnKPW9HxKtZumdyxyikZFDLhogJ5Uj/44'/0'/0'/0/*)"; let wallet = Wallet::new(descriptor, None, Network::Bitcoin, get_test_db()).unwrap(); - WalletExport::export_wallet(&wallet, "Test Label", true).unwrap(); + FullyNodedExport::export_wallet(&wallet, "Test Label", true).unwrap(); } #[test] @@ -302,7 +306,7 @@ mod test { get_test_db(), ) .unwrap(); - WalletExport::export_wallet(&wallet, "Test Label", true).unwrap(); + FullyNodedExport::export_wallet(&wallet, "Test Label", true).unwrap(); } #[test] @@ -325,7 +329,7 @@ mod test { get_test_db(), ) .unwrap(); - let export = WalletExport::export_wallet(&wallet, "Test Label", true).unwrap(); + let export = FullyNodedExport::export_wallet(&wallet, "Test Label", true).unwrap(); assert_eq!(export.descriptor(), descriptor); assert_eq!(export.change_descriptor(), Some(change_descriptor.into())); @@ -345,7 +349,7 @@ mod test { get_test_db(), ) .unwrap(); - let export = WalletExport::export_wallet(&wallet, "Test Label", true).unwrap(); + let export = FullyNodedExport::export_wallet(&wallet, "Test Label", true).unwrap(); assert_eq!(export.to_string(), "{\"descriptor\":\"wpkh(xprv9s21ZrQH143K4CTb63EaMxja1YiTnSEWKMbn23uoEnAzxjdUJRQkazCAtzxGm4LSoTSVTptoV9RbchnKPW9HxKtZumdyxyikZFDLhogJ5Uj/44\'/0\'/0\'/0/*)\",\"blockheight\":5000,\"label\":\"Test Label\"}"); } @@ -356,7 +360,7 @@ mod test { let change_descriptor = "wpkh(xprv9s21ZrQH143K4CTb63EaMxja1YiTnSEWKMbn23uoEnAzxjdUJRQkazCAtzxGm4LSoTSVTptoV9RbchnKPW9HxKtZumdyxyikZFDLhogJ5Uj/44'/0'/0'/1/*)"; let import_str = "{\"descriptor\":\"wpkh(xprv9s21ZrQH143K4CTb63EaMxja1YiTnSEWKMbn23uoEnAzxjdUJRQkazCAtzxGm4LSoTSVTptoV9RbchnKPW9HxKtZumdyxyikZFDLhogJ5Uj/44\'/0\'/0\'/0/*)\",\"blockheight\":5000,\"label\":\"Test Label\"}"; - let export = WalletExport::from_str(import_str).unwrap(); + let export = FullyNodedExport::from_str(import_str).unwrap(); assert_eq!(export.descriptor(), descriptor); assert_eq!(export.change_descriptor(), Some(change_descriptor.into())); From 122e6e71405f65ecb3c75adaff1e35ab5ef3a06e Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Wed, 20 Apr 2022 08:16:53 -0700 Subject: [PATCH 4/7] Bump 'miniscript' dependency version to '^6.1' --- CHANGELOG.md | 1 + Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f2091c6..78fa1657 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add `keychain: KeychainKind` to `wallet::AddressInfo`. - Improve key generation traits - Rename `WalletExport` to `FullyNodedExport`, deprecate the former. +- Bump `miniscript` dependency version to `^6.1`. ## [v0.17.0] - [v0.16.1] diff --git a/Cargo.toml b/Cargo.toml index 6f859473..b4ebba2e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ license = "MIT OR Apache-2.0" [dependencies] bdk-macros = "^0.6" log = "^0.4" -miniscript = { version = "^6.0", features = ["use-serde"] } +miniscript = { version = "^6.1", features = ["use-serde"] } bitcoin = { version = "^0.27", features = ["use-serde", "base64"] } serde = { version = "^1.0", features = ["derive"] } serde_json = { version = "^1.0" } From 8a2a6bbceeec3f682c789537ca619da821d34732 Mon Sep 17 00:00:00 2001 From: Alekos Filini Date: Wed, 20 Apr 2022 18:25:26 +0200 Subject: [PATCH 5/7] Add `n:` wrapper to vulnerable scripts --- src/descriptor/dsl.rs | 10 +++++----- src/descriptor/policy.rs | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/descriptor/dsl.rs b/src/descriptor/dsl.rs index 1bf61ec1..9ba5bb52 100644 --- a/src/descriptor/dsl.rs +++ b/src/descriptor/dsl.rs @@ -336,7 +336,7 @@ macro_rules! apply_modifier { /// syntax is more suitable for a fixed number of items known at compile time, while the other accepts a /// [`Vec`] of items, which makes it more suitable for writing dynamic descriptors. /// -/// They both produce the descriptor: `wsh(thresh(2,pk(...),s:pk(...),sdv:older(...)))` +/// They both produce the descriptor: `wsh(thresh(2,pk(...),s:pk(...),sndv:older(...)))` /// /// ``` /// # use std::str::FromStr; @@ -349,7 +349,7 @@ macro_rules! apply_modifier { /// /// let (descriptor_a, key_map_a, networks) = bdk::descriptor! { /// wsh ( -/// thresh(2, pk(my_key_1), s:pk(my_key_2), s:d:v:older(my_timelock)) +/// thresh(2, pk(my_key_1), s:pk(my_key_2), s:n:d:v:older(my_timelock)) /// ) /// }?; /// @@ -357,7 +357,7 @@ macro_rules! apply_modifier { /// let b_items = vec![ /// bdk::fragment!(pk(my_key_1))?, /// bdk::fragment!(s:pk(my_key_2))?, -/// bdk::fragment!(s:d:v:older(my_timelock))?, +/// bdk::fragment!(s:n:d:v:older(my_timelock))?, /// ]; /// let (descriptor_b, mut key_map_b, networks) = bdk::descriptor!(wsh(thresh_vec(2, b_items)))?; /// @@ -1048,9 +1048,9 @@ mod test { let private_key = PrivateKey::from_wif("cSQPHDBwXGjVzWRqAHm6zfvQhaTuj1f2bFH58h55ghbjtFwvmeXR").unwrap(); let (descriptor, _, _) = - descriptor!(wsh(thresh(2,d:v:older(1),s:pk(private_key),s:pk(private_key)))).unwrap(); + descriptor!(wsh(thresh(2,n:d:v:older(1),s:pk(private_key),s:pk(private_key)))).unwrap(); - assert_eq!(descriptor.to_string(), "wsh(thresh(2,dv:older(1),s:pk(02e96fe52ef0e22d2f131dd425ce1893073a3c6ad20e8cac36726393dfb4856a4c),s:pk(02e96fe52ef0e22d2f131dd425ce1893073a3c6ad20e8cac36726393dfb4856a4c)))#cfdcqs3s") + assert_eq!(descriptor.to_string(), "wsh(thresh(2,ndv:older(1),s:pk(02e96fe52ef0e22d2f131dd425ce1893073a3c6ad20e8cac36726393dfb4856a4c),s:pk(02e96fe52ef0e22d2f131dd425ce1893073a3c6ad20e8cac36726393dfb4856a4c)))#zzk3ux8g") } #[test] diff --git a/src/descriptor/policy.rs b/src/descriptor/policy.rs index 49e038b1..d89368de 100644 --- a/src/descriptor/policy.rs +++ b/src/descriptor/policy.rs @@ -1501,7 +1501,7 @@ mod test { let (prvkey_bob, _, _) = setup_keys(BOB_TPRV_STR, ALICE_BOB_PATH, &secp); let desc = - descriptor!(wsh(thresh(2,d:v:older(2),s:pk(prvkey_alice),s:pk(prvkey_bob)))).unwrap(); + descriptor!(wsh(thresh(2,n:d:v:older(2),s:pk(prvkey_alice),s:pk(prvkey_bob)))).unwrap(); let (wallet_desc, keymap) = desc .into_wallet_descriptor(&secp, Network::Testnet) @@ -1513,7 +1513,7 @@ mod test { .address(Network::Testnet) .unwrap(); assert_eq!( - "tb1qhpemaacpeu8ajlnh8k9v55ftg0px58r8630fz8t5mypxcwdk5d8sum522g", + "tb1qsydsey4hexagwkvercqsmes6yet0ndkyt6uzcphtqnygjd8hmzmsfxrv58", addr.to_string() ); From e3ce50059fca2d58587fdf4dd806ffacfef3d302 Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Wed, 20 Apr 2022 09:58:13 -0700 Subject: [PATCH 6/7] Bump version to 0.18.0 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b4ebba2e..8afcb207 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bdk" -version = "0.18.0-rc.1" +version = "0.18.0" edition = "2018" authors = ["Alekos Filini ", "Riccardo Casatta "] homepage = "https://bitcoindevkit.org" From b5c8ce924bc47d26a0d577bfcbdaf241c56aa253 Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Wed, 20 Apr 2022 10:31:31 -0700 Subject: [PATCH 7/7] Bump version to 0.19.0-dev --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 8afcb207..63d81e75 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bdk" -version = "0.18.0" +version = "0.19.0-dev" edition = "2018" authors = ["Alekos Filini ", "Riccardo Casatta "] homepage = "https://bitcoindevkit.org"