Skip to content

Releases: bitcoindevkit/bdk

Release 1.0.0-alpha.11

10 May 22:31
v1.0.0-alpha.11
7876c8f
Compare
Choose a tag to compare
Pre-release

Summary

This incremental bi-weekly release includes three big improvements. New electrum full_scan and sync APIs were added for more efficiently querying blockchain data. And the keychain::Changeset now includes public key descriptors and keychain::Balance uses bitcoin::Amount instead of u32 sats amounts. See the changelog for all the details.

Changelog

Changed

  • Include the descriptor in keychain::Changeset #1203
  • Update bdk_electrum crate to use sync/full-scan structs #1403
  • Update keychain::Balance to use bitcoin::Amount #1411
  • Change bdk_testenv to re-export internally used crates. #1414
  • Updated documentation for full_scan and sync in bdk_esplora. #1427

What's Changed

New Contributors

Full Changelog: v1.0.0-alpha.10...v1.0.0-alpha.11

Release 1.0.0-alpha.10

02 May 19:11
v1.0.0-alpha.10
fbe1782
Compare
Choose a tag to compare
Pre-release

Summary

This incremental bi-weekly release improves the address API, simplifies the Esplora API, and introduced new structures for spk-based scanning that will enable easier syncing with electrum/esplora. It also introduces a new bdk-persist crate, removes the generic T from the Wallet, and makes KeychainTxOutIndex more range based.

Changelog

Fixed

  • Enable blocking-https-rustls feature on esplora client #1408

Changed

  • KeychainTxOutIndex methods modified to take ranges of keychains instead. #1324
  • Remove the generic from wallet #1387
    • Changed PersistenceBackend errors to depend on the anyhow crate
    • Remove the generic T from Wallet
  • Improve address API #1402
    • Added Wallet methods:
      • peek_address
      • reveal_next_address
      • next_unused_address
      • reveal_addresses_to
      • list_unused_addresses
      • mark_used
      • unmark_used
    • Removed Wallet methods:
      • get_address
      • get_internal_address
      • try_get_address
      • try_get_internal_address
  • Simplified EsploraExt API #1380
    • Changed EsploraExt API so that sync only requires one round of fetching data. The local_chain_update method is removed and the local_tip parameter is added to the full_scan and sync methods.
    • Removed TxGraph::missing_heights and tx_graph::ChangeSet::missing_heights_from methods.
    • Introduced CheckPoint::insert which allows convenient checkpoint-insertion. This is intended for use by chain-sources when crafting an update.
    • Refactored merge_chains to also return the resultant CheckPoint tip.
    • Optimized the update LocalChain logic - use the update CheckPoint as the new CheckPoint tip when possible.
  • Introduce bdk-persist crate #1412
  • Introduce universal sync/full-scan structures for spk-based syncing #1413
    • Add universal structures for initiating/receiving sync/full-scan requests/results for spk-based syncing.
    • Updated bdk_esplora chain-source to make use of new universal sync/full-scan structures.

What's Changed

New Contributors

Full Changelog: v1.0.0-alpha.9...v1.0.0-alpha.10

Release 1.0.0-alpha.9

15 Apr 20:48
v1.0.0-alpha.9
ee21ffe
Compare
Choose a tag to compare
Release 1.0.0-alpha.9 Pre-release
Pre-release

Summary

This regular bi-weekly alpha release updates dependencies rust-bitcoin to v0.31.0 and rust-miniscript to v11.0.0 plus replaces the deprecated rust-miniscript function max_satisfaction_weight with max_weight_to_satisfy. It also adds chain module improvements needed to simplify syncing with electrum and esplora blockchain clients.

Changelog

Fixed

  • Replace the deprecated max_satisfaction_weight from rust-miniscript to max_weight_to_satisfy. #1345

Changed

  • Update dependencies: rust-bitcoin to v0.31.0 and rust-miniscript to v11.0.0. #1177
  • Changed TxGraph to store transactions as Arc. This allows chain-sources to cheaply keep a copy of already-fetched transactions. #1373
  • Add get and range methods to CheckPoint #1369
    • Added get and range methods to CheckPoint (and in turn, LocalChain). This simulates an API where we have implemented a skip list of checkpoints (to implement in the future). This is a better API because we can query for any height or height range with just a checkpoint tip instead of relying on a separate checkpoint index (which needs to live in LocalChain).
    • Changed LocalChain to have a faster Eq implementation. We now maintain an xor value of all checkpoint block hashes. We compare this xor value to determine whether two chains are equal.
    • Added PartialEq implementation for CheckPoint and local_chain::Update.
  • Methods into_tx_graph and into_confirmation_time_tx_graph for RelevantTxids are changed to no longer accept a seen_at parameter. #1385
    • Added method update_last_seen_unconfirmed for TxGraph.
  • Added proptest for CheckPoint::range. #1397

What's Changed

Full Changelog: v1.0.0-alpha.8...v1.0.0-alpha.9

Release 1.0.0-alpha.8

27 Mar 19:41
v1.0.0-alpha.8
b5557dc
Compare
Choose a tag to compare
Release 1.0.0-alpha.8 Pre-release
Pre-release

Summary

This incremental bi-weekly release migrates API to use the rust-bitcoin FeeRate type, fixes PSBT finalization to remove extra taproot fields, and fixes blockchain scanning stop_gap definition and documentation. We recommend all 1.0.0-alpha users upgrade to this release.

Changelog

Fixed

  • Remove extra taproot fields when finalizing PSBT #1310
  • Define and document stop_gap #1351

Changed

  • Migrate to bitcoin::FeeRate #1216
  • chore: extract TestEnv into separate crate #1171

What's Changed

Full Changelog: v1.0.0-alpha.7...v1.0.0-alpha.8

Release 1.0.0-alpha.7

05 Mar 04:23
c01983d
Compare
Choose a tag to compare
Release 1.0.0-alpha.7 Pre-release
Pre-release

Summary

This incremental bi-weekly release includes an API change to relax the generic requirements on the wallet transaction builder and a small fix when manually looking ahead to unrevealed scripts. Unless you need one of these changes there's no need to upgrade to this release.

Changelog

Fixed

  • Fix KeychainTxOutIndex::lookahead_to_target to look ahead to correct index. #1349

Changed

  • Relax the generic requirements on TxBuilder. #1312

What's Changed

New Contributors

Full Changelog: v1.0.0-alpha.6...v1.0.0-alpha.7

Release 1.0.0-alpha.6

15 Feb 17:38
v1.0.0-alpha.6
50c549b
Compare
Choose a tag to compare
Release 1.0.0-alpha.6 Pre-release
Pre-release

Summary

This small bi-weekly release fixes TxBuilder to support setting explicit nSequence for foreign inputs and a bug in tx_graph::ChangeSet::is_empty where is returns true even when it wasn't empty 🙈. We also added a new option for Esplora APIs to include floating TxOuts in pudates for fee calculations.

Changelog

Fixed

  • TxBuilder now supports setting explicit nSequence for foreign inputs. #1316
  • Fix bug in tx_graph::ChangeSet::is_empty where is returns true even when it wasn't empty. #1335

Added

  • New Option for Esplora APIs to include floating TxOuts in updates for fee calculation. #1308

What's Changed

New Contributors

Full Changelog: v1.0.0-alpha.5...v1.0.0-alpha.6

Release 1.0.0-alpha.5

31 Jan 16:24
v1.0.0-alpha.5
ba76247
Compare
Choose a tag to compare
Release 1.0.0-alpha.5 Pre-release
Pre-release

Summary

This release introduces a block-by-block API to bdk::Wallet and adds a RPC wallet example, improves performance of bdk_file_store::EntryIter, and simplifies Esplora::update_local_chain with additional tests. See release notes for all the details.

Changelog

Fixed

  • InsertTxError now implements std::error::Error. #1172
  • Simplified EsploraExt::update_local_chain logic. #1267

Changed

  • EntryIter performance is improved by reducing syscalls. #1270
  • Changed to implement ElectrumExt for all that implements ElectrumApi. #1306

Added

  • Wallet methods to apply full blocks (apply_block and apply_block_connected_to) and a method to apply a batch of unconfirmed transactions (apply_unconfirmed_txs). #1172
  • CheckPoint::from_block_ids convenience method. #1172
  • LocalChain methods to apply a block header (apply_header and apply_header_connected_to). #1172
  • Test to show that LocalChain can apply updates that are shorter than original. This will happen during reorgs if we sync wallet with bdk_bitcoind_rpc::Emitter. #1172

What's Changed

New Contributors

Full Changelog: v1.0.0-alpha.4...v1.0.0-alpha.5

Release 1.0.0-alpha.4

18 Jan 12:53
v1.0.0-alpha.4
0a2a570
Compare
Choose a tag to compare
Release 1.0.0-alpha.4 Pre-release
Pre-release

Summary

This release improves the KeychainTxOutIndex API and contains a few bug fixes and performance improvements.

Changelog

Fixed

Changed

  • The old hardwaresigner module has been moved out of bdk and inside a new bdk_hwi crate. #1161
  • Wallet's peek-address logic is optimized by making use of <SpkIterator as Iterator>::nth. #1269
  • KeychainTxOutIndex API is refactored to better differentiate between methods that return unbounded vs stored spks. #1269
  • KeychainTxOutIndex no longer directly exposes SpkTxOutIndex methods via DeRef. This was problematic because SpkTxOutIndex also contains lookahead spks which we want to hide. #1269

Added

  • LocalChain::disconnect_from method to evict a chain of blocks starting from a given BlockId. #1276
  • SpkIterator::descriptor method which gets a reference to the internal descriptor. #1269

What's Changed

New Contributors

Full Changelog: v1.0.0-alpha.3...v1.0.0-alpha.4

Release 1.0.0-alpha.3

07 Jan 17:28
v1.0.0-alpha.3
9efaead
Compare
Choose a tag to compare
Release 1.0.0-alpha.3 Pre-release
Pre-release

Summary

This release changes LocalChain to have a hard-wired genesis block, adds context specific Wallet TxBuilder errors, and bumps the projects MSRV to 1.63. It also includes other API and docs improvements and bug fixes, see the changelog for all the details.

Changelog

Fixed

  • Further improve unconfirmed tx conflict resolution. #1109
  • Stuck Electrum chain sync issue. #1145
  • Bug related to taproot signing with internal keys. We would previously sign with the first private key we had, without checking if it was the correct internal key or not. #1200
  • Coinbase transactions cannot exist in the mempool and be unconfirmed. TxGraph::try_get_chain_position should always return None for coinbase transactions not anchored in best chain. #1202
  • Esplora incorrect gap limit check in blocking client. #1225
  • Loading a wallet from persistence now restores keychain indices. #1246

Changed

  • Rename ConfirmationTimeAnchor to ConfirmationTimeHeightAnchor. #1206
  • New LocalChain now have a hardwired genesis block: #1178
    • Changed ChainOracle::get_chain_tip method to return a BlockId instead of an Option of a BlockId.
    • Refactored LocalChain so that the genesis BlockId is hardwired. This way, the ChainOracle::get_chain_tip implementation can always return a tip.
    • Add is_empty method to PersistBackend. This returns true when there is no data in the persistence.
    • Changed Wallet::new to initialize a fresh wallet only.
    • Added Wallet::load to restore an instance of a wallet.
    • Replaced Store::new with separate methods to create/open the database file.
  • Updated the bdk module to use new context specific error types: #1028
    • wallet: MiniscriptPsbtError, CreateTxError, BuildFeeBumpError error enums.
    • coin_selection: module Error enum.
  • Renamed fallible Wallet address functions to try_get_address() and try_get_internal_address(). #1028
  • Rename LocalUtxo to LocalOutput. #1190
  • MSRV is now 1.63.0 for bdk, chain, and bitcoind_rpc crates. #1183
  • Use a universal lookahead value for KeychainTxOutIndex and have a reasonable default. #1229
  • Return NonEmptyDatabase error when constructing a wallet with Wallet::new if the file already contains data (in which case, the caller should use load or new_or_load). #1256
  • In electrum_ext rename functions scan_without_keychain to sync and scan to full_scan. #1235
  • In esplora_ext rename functions scan_txs to sync and scan_txs_with_keychains to full_scan. #1235
  • Increase rust-bip39 dependency version to 2.0 #1259

Removed

  • Removed catch-all top level bdk::Error enum. #1028
  • Removed impl_error macro. #1028

Added

  • Add infallible Wallet get_address and get_internal_address functions. #1028
  • Add Wallet::list_output method. #1190
  • New async-https-rustls feature flag for the bdk_esplora crate, allowing to compile rust-esplora-client using rustls-tls instead of the default native-tls. #1179

What's Changed

New Contributors

Full Changelog: v1.0.0-alpha.2...v1.0.0-alpha.3

Release 1.0.0-alpha.2

12 Oct 18:27
v1.0.0-alpha.2
2e4bc3c
Compare
Choose a tag to compare
Release 1.0.0-alpha.2 Pre-release
Pre-release

Summary

Notable changes include a new bitcoind RPC based blockchain client module for quick syncing to bitcoind, a new linked-list LocalChain, and an upgrade to rust-bitcoin 0.30.

Changelog

Fixed

  • wallet_esplora: missing_heights uses the graph update #1152
  • bump electrum version to 0.18 #1132
  • Correct the coin type in the derivation path for wallet examples #1089

Added

  • Add bitcoind_rpc chain-source module. #1041
  • Add example_bitcoind_rpc example module. #1041
  • Add AnchorFromBlockPosition trait which are for anchors that can be constructed from a given block, height and position in block. #1041
  • Add helper methods to IndexedTxGraph and TxGraph for batch operations and applying blocks directly. #1041
  • Add helper methods to CheckPoint for easier construction from a block Header. #1041
  • Add cli-example for esplora. #1040
  • Introduced tx_template module. #1064
  • Introduced TxGraph::TxAncestors iterator. #1064
  • Added walk_ancestors to TxGraph. #1064
  • Implement Anchor for BlockId. #1069

Changed

  • Move WalletUpdate to the wallet module. #1084
  • Remove ForEachTxout trait completely. #1084
  • Refactor ElectrumExt to not use WalletUpdate. #1084
  • Rename indexed_tx_graph::IndexedAdditions to indexed_tx_graph::ChangeSet. #1065
  • Rename indexed_tx_graph::IndexedAdditions::graph_additions to indexed_tx_graph::ChangeSet::graph. #1065
  • Rename indexed_tx_graph::IndexedAdditions::index_additions to indexed_tx_graph::ChangeSet::indexer. #1065
  • Rename tx_graph::Additions to tx_graph::ChangeSet. #1065
  • Rename keychain::DerivationAdditions to keychain::ChangeSet. #1065
  • Rename CanonicalTx::node to CanonicalTx::tx_node. #1065
  • Rename CanonicalTx::observed_as to CanonicalTx::chain_position. #1065
  • Rename LocalChangeSet to WalletChangeSet. #1065
  • Rename LocalChangeSet::chain_changeset to WalletChangeSet::chain. #1065
  • Rename LocalChangeSet::indexed_additions to WalletChangeSet::indexed_tx_graph. #1065
  • Rename LocalUpdate to WalletUpdate. #1065
  • Make TxGraph::determine_changeset pub(crate). #1065
  • Add TxGraph::initial_changeset. #1065
  • Add IndexedTxGraph::initial_changeset. #1065
  • Remove TxGraph::insert_txout_preview. #1065
  • Remove TxGraph::insert_tx_preview. #1065
  • Remove insert_anchor_preview. #1065
  • Remove insert_seen_at_preview. #1065
  • Refactored TxGraph::walk_conflicts to use TxGraph::TxAncestors. #1064
  • Update to rust-bitcoin 0.30.0 and miniscript 10.0.0. #1023
  • Use apply_update instead of determine_changeset + apply_changeset around the code. #1092
  • Rename TxGraph::direct_conflicts_of_tx to TxGraph::direct_conflicts. #1164
  • Rename methods of esplora ext. #1070

What's Changed

New Contributors

Full Changelog: v1.0.0-alpha.1...v1.0.0-alpha.2