2020-11-23 19:04:20 -08:00
# Changelog
2022-03-18 21:21:09 -05:00
All notable changes to this project prior to release **0.22.0** are documented in this file. Future
changelog information can be found in each release's git tag and can be viewed with `git tag -ln100 "v*"` .
Changelog info is also documented on the [GitHub releases ](https://github.com/bitcoindevkit/bdk/releases )
page. See [DEVELOPMENT_CYCLE.md ](DEVELOPMENT_CYCLE.md ) for more details.
2020-11-23 19:04:20 -08:00
The format is based on [Keep a Changelog ](https://keepachangelog.com/en/1.0.0/ ),
and this project adheres to [Semantic Versioning ](https://semver.org/spec/v2.0.0.html ).
2022-08-11 14:39:18 +02:00
## [v0.21.0] - [v0.20.0]
2022-07-16 20:01:54 +08:00
- Add `descriptor::checksum::get_checksum_bytes` method.
2022-06-13 10:49:31 -03:00
- Add `Excess` enum to handle remaining amount after coin selection.
- Move change creation from `Wallet::create_tx` to `CoinSelectionAlgorithm::coin_select` .
2022-07-20 17:31:17 +01:00
- Change the interface of `SqliteDatabase::new` to accept any type that implement AsRef< Path >
2022-06-22 18:08:23 +02:00
- Add the ability to specify which leaves to sign in a taproot transaction through `TapLeavesOptions` in `SignOptions`
- Add the ability to specify whether a taproot transaction should be signed using the internal key or not, using `sign_with_tap_internal_key` in `SignOptions`
2022-07-10 19:57:44 -03:00
- Consolidate params `fee_amount` and `amount_needed` in `target_amount` in `CoinSelectionAlgorithm::coin_select` signature.
- Change the meaning of the `fee_amount` field inside `CoinSelectionResult` : from now on the `fee_amount` will represent only the fees asociated with the utxos in the `selected` field of `CoinSelectionResult` .
2022-07-23 07:44:39 +08:00
- New `RpcBlockchain` implementation with various fixes.
2022-06-22 14:37:29 +05:30
- Return balance in separate categories, namely `confirmed` , `trusted_pending` , `untrusted_pending` & `immature` .
2022-07-06 13:19:01 -07:00
## [v0.20.0] - [v0.19.0]
2022-06-21 16:20:28 +02:00
- New MSRV set to `1.56.1`
2022-03-30 16:29:31 +02:00
- Fee sniping discouraging through nLockTime - if the user specifies a `current_height` , we use that as a nlocktime, otherwise we use the last sync height (or 0 if we never synced)
2022-07-03 12:47:54 +08:00
- Fix hang when `ElectrumBlockchainConfig::stop_gap` is zero.
2022-04-15 20:08:30 +03:00
- Set coin type in BIP44, BIP49, and BIP84 templates
2022-07-29 15:30:43 -04:00
- Get block hash given a block height - A `get_block_hash` method is now defined on the `GetBlockHash` trait and implemented on every blockchain backend. This method expects a block height and returns the corresponding block hash.
2022-07-06 13:19:01 -07:00
- Add `remove_partial_sigs` and `try_finalize` to `SignOptions`
2022-07-11 16:37:41 +08:00
- Deprecate `AddressValidator`
2022-07-03 14:32:05 +08:00
- Fix Electrum wallet sync potentially causing address index decrement - compare proposed index and current index before applying batch operations during sync.
2020-11-23 19:04:20 -08:00
2022-06-08 15:18:54 -07:00
## [v0.19.0] - [v0.18.0]
2022-04-25 16:45:43 +02:00
- added `OldestFirstCoinSelection` impl to `CoinSelectionAlgorithm`
2022-05-03 12:41:22 +02:00
- New MSRV set to `1.56`
2022-05-09 16:28:50 +02:00
- Unpinned tokio to `1`
2022-03-15 10:48:00 +01:00
- Add traits to reuse `Blockchain` s across multiple wallets (`BlockchainFactory` and `StatelessBlockchain` ).
2022-05-18 13:44:57 -07:00
- Upgrade to rust-bitcoin `0.28`
2022-07-29 15:30:43 -04:00
- If using the `sqlite-db` feature all cached wallet data is deleted due to a possible UTXO inconsistency, a wallet.sync will recreate it
2022-05-24 10:39:17 +02:00
- Update `PkOrF` in the policy module to become an enum
2022-06-01 14:55:43 +02:00
- Add experimental support for Taproot, including:
- Support for `tr()` descriptors with complex tapscript trees
- Creation of Taproot PSBTs (BIP-371)
- Signing Taproot PSBTs (key spend and script spend)
- Support for `tr()` descriptors in the `descriptor!()` macro
2022-06-07 13:14:52 +02:00
- Add support for Bitcoin Core 23.0 when using the `rpc` blockchain
2022-04-13 13:40:16 -07:00
## [v0.18.0] - [v0.17.0]
2022-08-05 11:39:50 -04:00
- Add `sqlite-bundled` feature for deployments that need a bundled version of sqlite, i.e. for mobile platforms.
2022-03-09 18:43:42 +01:00
- Added `Wallet::get_signers()` , `Wallet::descriptor_checksum()` and `Wallet::get_address_validators()` , exposed the `AsDerived` trait.
2022-04-02 09:52:44 -07:00
- Deprecate `database::Database::flush()` , the function is only needed for the sled database on mobile, instead for mobile use the sqlite database.
2022-04-13 13:51:12 -07:00
- Add `keychain: KeychainKind` to `wallet::AddressInfo` .
2022-04-13 12:55:58 +02:00
- Improve key generation traits
2022-04-19 11:44:50 +02:00
- Rename `WalletExport` to `FullyNodedExport` , deprecate the former.
2022-07-29 15:30:43 -04:00
- Bump `miniscript` dependency version to `^6.1` .
2022-03-09 18:43:42 +01:00
2022-03-10 17:01:44 -06:00
## [v0.17.0] - [v0.16.1]
2022-02-11 22:08:17 +05:30
- Removed default verification from `wallet::sync` . sync-time verification is added in `script_sync` and is activated by `verify` feature flag.
- `verify` flag removed from `TransactionDetails` .
2021-08-19 19:57:35 +10:00
- Add `get_internal_address` to allow you to get internal addresses just as you get external addresses.
2022-02-02 08:27:53 -05:00
- added `ensure_addresses_cached` to `Wallet` to let offline wallets load and cache addresses in their database
2022-03-09 16:15:34 +01:00
- Add `is_spent` field to `LocalUtxo` ; when we notice that a utxo has been spent we set `is_spent` field to true instead of deleting it from the db.
2022-01-27 16:52:53 +11:00
### Sync API change
To decouple the `Wallet` from the `Blockchain` we've made major changes:
- Removed `Blockchain` from Wallet.
- Removed `Wallet::broadcast` (just use `Blockchain::broadcast` )
2022-03-08 20:02:47 -06:00
- Deprecated `Wallet::new_offline` (all wallets are offline now)
2022-01-27 16:52:53 +11:00
- Changed `Wallet::sync` to take a `Blockchain` .
- Stop making a request for the block height when calling `Wallet:new` .
- Added `SyncOptions` to capture extra (future) arguments to `Wallet::sync` .
2022-03-08 14:00:29 +11:00
- Removed `max_addresses` sync parameter which determined how many addresses to cache before syncing since this can just be done with `ensure_addresses_cached` .
2022-03-23 10:58:05 +07:00
- remove `flush` method from the `Database` trait.
2022-02-11 22:08:17 +05:30
2022-02-19 12:46:17 -08:00
## [v0.16.1] - [v0.16.0]
2022-02-17 11:37:39 -08:00
- Pin tokio dependency version to ~1.14 to prevent errors due to their new MSRV 1.49.0
2022-01-21 12:35:45 -06:00
## [v0.16.0] - [v0.15.0]
- Disable `reqwest` default features.
- Added `reqwest-default-tls` feature: Use this to restore the TLS defaults of reqwest if you don't want to add a dependency to it in your own manifest.
- Use dust_value from rust-bitcoin
2022-01-21 14:27:36 -06:00
- Fixed generating WIF in the correct network format.
2022-01-21 12:35:45 -06:00
2021-12-22 20:34:38 -08:00
## [v0.15.0] - [v0.14.0]
2021-10-28 14:49:11 +11:00
- Overhauled sync logic for electrum and esplora.
- Unify ureq and reqwest esplora backends to have the same configuration parameters. This means reqwest now has a timeout parameter and ureq has a concurrency parameter.
- Fixed esplora fee estimation.
2021-11-30 15:41:41 -08:00
2021-11-27 21:00:19 -08:00
## [v0.14.0] - [v0.13.0]
2021-11-06 20:13:45 +05:30
- BIP39 implementation dependency, in `keys::bip39` changed from tiny-bip39 to rust-bip39.
2021-10-28 10:06:52 +02:00
- Add new method on the `TxBuilder` to embed data in the transaction via `OP_RETURN` . To allow that a fix to check the dust only on spendable output has been introduced.
2021-10-26 14:38:55 +02:00
- Update the `Database` trait to store the last sync timestamp and block height
2021-11-03 16:05:30 +00:00
- Rename `ConfirmationTime` to `BlockTime`
2021-11-06 20:13:45 +05:30
2021-10-28 10:44:56 -07:00
## [v0.13.0] - [v0.12.0]
2021-10-20 20:14:10 -07:00
- Exposed `get_tx()` method from `Database` to `Wallet` .
2021-09-30 10:40:51 -07:00
## [v0.12.0] - [v0.11.0]
2021-09-23 19:49:06 +10:00
- Activate `miniscript/use-serde` feature to allow consumers of the library to access it via the re-exported `miniscript` crate.
2021-09-23 18:28:27 -07:00
- Add support for proxies in `EsploraBlockchain`
- Added `SqliteDatabase` that implements `Database` backed by a sqlite database using `rusqlite` crate.
2021-09-23 19:49:06 +10:00
2021-09-04 10:44:44 -07:00
## [v0.11.0] - [v0.10.0]
2021-08-19 21:13:10 +02:00
- Added `flush` method to the `Database` trait to explicitly flush to disk latest changes on the db.
2021-08-09 14:55:17 +02:00
## [v0.10.0] - [v0.9.0]
2021-07-26 16:30:34 +02:00
- Added `RpcBlockchain` in the `AnyBlockchain` struct to allow using Rpc backend where `AnyBlockchain` is used (eg `bdk-cli` )
2021-06-01 16:36:09 +10:00
- Removed hard dependency on `tokio` .
2021-07-26 16:30:34 +02:00
2021-06-21 09:07:15 +02:00
### Wallet
2021-06-16 12:43:32 +10:00
2021-07-16 11:23:17 +02:00
- Removed and replaced `set_single_recipient` with more general `drain_to` and replaced `maintain_single_recipient` with `allow_shrinking` .
2021-07-15 12:04:03 -07:00
### Blockchain
2021-06-01 16:36:09 +10:00
- Removed `stop_gap` from `Blockchain` trait and added it to only `ElectrumBlockchain` and `EsploraBlockchain` structs.
- Added a `ureq` backend for use when not using feature `async-interface` or target WASM. `ureq` is a blocking HTTP client.
2021-07-15 12:04:03 -07:00
2021-07-08 13:36:20 +02:00
## [v0.9.0] - [v0.8.0]
2021-06-21 09:07:15 +02:00
### Wallet
2021-07-16 11:23:17 +02:00
2021-06-16 12:43:32 +10:00
- Added Bitcoin core RPC added as blockchain backend
- Added a `verify` feature that can be enable to verify the unconfirmed txs we download against the consensus rules
2021-06-21 09:07:15 +02:00
2021-06-10 15:59:24 +02:00
## [v0.8.0] - [v0.7.0]
2021-05-26 10:34:25 +02:00
### Wallet
- Added an option that must be explicitly enabled to allow signing using non-`SIGHASH_ALL` sighashes (#350 )
2021-05-17 16:31:18 -04:00
#### Changed
`get_address` now returns an `AddressInfo` struct that includes the index and derefs to `Address` .
2021-05-26 10:34:25 +02:00
2021-05-12 14:17:46 +02:00
## [v0.7.0] - [v0.6.0]
2021-04-02 16:39:18 +02:00
### Policy
#### Changed
Removed `fill_satisfaction` method in favor of enum parameter in `extract_policy` method
#### Added
Timelocks are considered (optionally) in building the `satisfaction` field
2021-04-28 09:53:03 +10:00
### Wallet
- Changed `Wallet::{sign, finalize_psbt}` now take a `&mut psbt` rather than consuming it.
2021-04-19 14:16:39 +02:00
- Require and validate `non_witness_utxo` for SegWit signatures by default, can be adjusted with `SignOptions`
2021-04-20 14:58:33 +02:00
- Replace the opt-in builder option `force_non_witness_utxo` with the opposite `only_witness_utxo` . From now on we will provide the `non_witness_utxo` , unless explicitly asked not to.
2021-04-28 09:53:03 +10:00
2021-04-14 18:49:52 +02:00
## [v0.6.0] - [v0.5.1]
2021-03-27 11:53:41 -07:00
### Misc
#### Changed
- New minimum supported rust version is 1.46.0
2021-03-25 16:28:38 +11:00
- Changed `AnyBlockchainConfig` to use serde tagged representation.
2021-03-27 11:53:41 -07:00
2021-03-09 16:59:27 +01:00
### Descriptor
#### Added
- Added ability to analyze a `PSBT` to check which and how many signatures are already available
2021-03-20 11:42:00 -07:00
### Wallet
#### Changed
- `get_new_address()` refactored to `get_address(AddressIndex::New)` to support different `get_address()` index selection strategies
#### Added
- Added `get_address(AddressIndex::LastUnused)` which returns the last derived address if it has not been used or if used in a received transaction returns a new address
- Added `get_address(AddressIndex::Peek(u32))` which returns a derived address for a specified descriptor index but does not change the current index
- Added `get_address(AddressIndex::Reset(u32))` which returns a derived address for a specified descriptor index and resets current index to the given value
2021-03-15 21:58:03 -04:00
- Added `get_psbt_input` to create the corresponding psbt input for a local utxo.
2021-03-20 11:42:00 -07:00
2021-04-01 16:14:59 +11:00
#### Fixed
- Fixed `coin_select` calculation for UTXOs where `value < fee` that caused over-/underflow errors.
2021-03-29 18:27:47 +02:00
## [v0.5.1] - [v0.5.0]
### Misc
#### Changed
- Pin `hyper` to `=0.14.4` to make it compile on Rust 1.45
2021-03-17 15:13:46 +01:00
## [v0.5.0] - [v0.4.0]
2021-02-26 14:09:46 +11:00
### Misc
#### Changed
- Updated `electrum-client` to version `0.7`
2021-02-26 14:15:46 +11:00
### Wallet
#### Changed
- `FeeRate` constructors `from_sat_per_vb` and `default_min_relay_fee` are now `const` functions
2021-03-07 21:57:19 -08:00
2021-02-11 09:29:27 -05:00
## [v0.4.0] - [v0.3.0]
2021-01-26 11:48:44 -05:00
### Keys
#### Changed
- Renamed `DerivableKey::add_metadata()` to `DerivableKey::into_descriptor_key()`
2021-02-12 23:02:13 -08:00
- Renamed `ToDescriptorKey::to_descriptor_key()` to `IntoDescriptorKey::into_descriptor_key()`
2021-01-26 11:48:44 -05:00
#### Added
- Added an `ExtendedKey` type that is an enum of `bip32::ExtendedPubKey` and `bip32::ExtendedPrivKey`
- Added `DerivableKey::into_extended_key()` as the only method that needs to be implemented
2021-01-25 15:13:45 -05:00
### Misc
2021-02-02 20:09:40 -05:00
#### Removed
2021-02-17 12:04:59 -08:00
- Removed the `parse_descriptor` example, since it wasn't demonstrating any bdk-specific API anymore.
2021-02-02 20:09:40 -05:00
#### Changed
- Updated `bitcoin` to `0.26` , `miniscript` to `5.1` and `electrum-client` to `0.6`
2021-02-05 10:23:17 -05:00
#### Added
- Added support for the `signet` network (issue #62 )
2021-01-25 15:13:45 -05:00
- Added a function to get the version of BDK at runtime
2021-01-25 15:04:56 -05:00
### Wallet
#### Changed
- Removed the explicit `id` argument from `Wallet::add_signer()` since that's now part of `Signer` itself
2021-02-12 23:02:13 -08:00
- Renamed `ToWalletDescriptor::to_wallet_descriptor()` to `IntoWalletDescriptor::into_wallet_descriptor()`
2021-02-11 11:34:06 -08:00
2021-02-12 23:02:13 -08:00
### Policy
2021-02-11 11:34:06 -08:00
#### Changed
- Removed unneeded `Result<(), PolicyError>` return type for `Satisfaction::finalize()`
[policy] Remove the `TooManyItemsSelected` error
The `TooManyItemsSelected` error has been removed, since it's not technically an
error but potentailly more of an "over-constraint" over a tx: for instance,
given a `thresh(3,pk(a),pk(b),older(10),older(20))` descriptor one could create
a spending tx with the `[0,1,2]` items that would only be spendable after `10`
blocks, or a tx with the `[0,2,3]` items that would be spendable after `20`.
In this case specifying more items than the threshold would create a tx with
the maximum constraint possible, in this case the `20` blocks. This is not
necessarily an error, so we should allow it without failing.
2021-02-13 10:58:26 -05:00
- Removed the `TooManyItemsSelected` policy error (see commit message for more details)
2021-01-25 15:04:56 -05:00
2021-01-20 10:27:28 -05:00
## [v0.3.0] - [v0.2.0]
2021-01-11 13:12:01 +01:00
### Descriptor
#### Changed
- Added an alias `DescriptorError` for `descriptor::error::Error`
- Changed the error returned by `descriptor!()` and `fragment!()` to `DescriptorError`
- Changed the error type in `ToWalletDescriptor` to `DescriptorError`
- Improved checks on descriptors built using the macros
2020-12-21 18:38:35 -08:00
### Blockchain
#### Changed
2020-12-23 13:48:17 +11:00
- Remove `BlockchainMarker` , `OfflineClient` and `OfflineWallet` in favor of just using the unit
type to mark for a missing client.
2021-01-13 23:04:23 -06:00
- Upgrade `tokio` to `1.0` .
2021-01-30 13:05:23 +11:00
2021-02-08 15:40:56 +11:00
### Transaction Creation Overhaul
2021-01-01 14:52:10 +11:00
The `TxBuilder` is now created from the `build_tx` or `build_fee_bump` functions on wallet and the
final transaction is created by calling `finish` on the builder.
2021-01-30 12:58:05 +11:00
- Removed `TxBuilder::utxos` in favor of `TxBuilder::add_utxos`
2021-01-01 14:52:10 +11:00
- Added `Wallet::build_tx` to replace `Wallet::create_tx`
- Added `Wallet::build_fee_bump` to replace `Wallet::bump_fee`
- Added `Wallet::get_utxo`
- Added `Wallet::get_descriptor_for_keychain`
2020-12-23 13:48:17 +11:00
2021-02-08 15:40:56 +11:00
### `add_foreign_utxo`
- Renamed `UTXO` to `LocalUtxo`
- Added `WeightedUtxo` to replace floating `(UTXO, usize)` .
- Added `Utxo` enum to incorporate both local utxos and foreign utxos
- Added `TxBuilder::add_foreign_utxo` which allows adding a utxo external to the wallet.
2020-12-21 18:38:35 -08:00
### CLI
#### Changed
- Remove `cli.rs` module, `cli-utils` feature and `repl.rs` example; moved to new [`bdk-cli` ](https://github.com/bitcoindevkit/bdk-cli ) repository
2020-12-21 16:36:29 +01:00
## [v0.2.0] - [0.1.0-beta.1]
2020-11-23 19:04:20 -08:00
### Project
#### Added
- Add CONTRIBUTING.md
- Add a Discord badge to the README
- Add code coverage github actions workflow
- Add scheduled audit check in CI
- Add CHANGELOG.md
#### Changed
- Rename the library to `bdk`
2020-12-14 17:14:24 +01:00
- Rename `ScriptType` to `KeychainKind`
2020-11-23 19:04:20 -08:00
- Prettify README examples on github
- Change CI to github actions
- Bump rust-bitcoin to 0.25, fix Cargo dependencies
- Enable clippy for stable and tests by default
- Switch to "mainline" rust-miniscript
- Generate a different cache key for every CI job
- Fix to at least bitcoin ^0.25.2
#### Fixed
- Fix or ignore clippy warnings for all optional features except compact_filters
- Pin cc version because last breaks rocksdb build
### Blockchain
#### Added
- Add a trait to create `Blockchain` s from a configuration
- Add an `AnyBlockchain` enum to allow switching at runtime
- Document `AnyBlockchain` and `ConfigurableBlockchain`
- Use our Instant struct to be compatible with wasm
- Make esplora call in parallel
- Allow to set concurrency in Esplora config and optionally pass it in repl
#### Fixed
- Fix receiving a coinbase using Electrum/Esplora
- Use proper type for EsploraHeader, make conversion to BlockHeader infallible
- Eagerly unwrap height option, save one collect
#### Changed
- Simplify the architecture of blockchain traits
- Improve sync
- Remove unused varaint HeaderParseFail
### CLI
#### Added
- Conditionally remove cli args according to enabled feature
#### Changed
- Add max_addresses param in sync
- Split the internal and external policy paths
### Database
#### Added
- Add `AnyDatabase` and `ConfigurableDatabase` traits
### Descriptor
#### Added
- Add a macro to write descriptors from code
- Add descriptor templates, add `DerivableKey`
- Add ToWalletDescriptor trait tests
- Add support for `sortedmulti` in `descriptor!`
- Add ExtractPolicy trait tests
- Add get_checksum tests, cleanup tests
- Add descriptor macro tests
#### Changes
- Improve the descriptor macro, add traits for key and descriptor types
#### Fixes
- Fix the recovery of a descriptor given a PSBT
### Keys
#### Added
- Add BIP39 support
- Take `ScriptContext` into account when converting keys
- Add a way to restrict the networks in which keys are valid
- Add a trait for keys that can be generated
- Fix entropy generation
- Less convoluted entropy generation
- Re-export tiny-bip39
- Implement `GeneratableKey` trait for `bitcoin::PrivateKey`
- Implement `ToDescriptorKey` trait for `GeneratedKey`
- Add a shortcut to generate keys with the default options
#### Fixed
- Fix all-keys and cli-utils tests
### Wallet
#### Added
- Allow to define static fees for transactions Fixes #137
- Merging two match expressions for fee calculation
- Incorporate RBF rules into utxo selection function
- Add Branch and Bound coin selection
- Add tests for BranchAndBoundCoinSelection::coin_select
- Add tests for BranchAndBoundCoinSelection::bnb
- Add tests for BranchAndBoundCoinSelection::single_random_draw
- Add test that shwpkh populates witness_utxo
- Add witness and redeem scripts to PSBT outputs
2020-12-01 11:12:40 +01:00
- Add an option to include `PSBT_GLOBAL_XPUB` s in PSBTs
2020-11-23 19:04:20 -08:00
- Eagerly finalize inputs
#### Changed
- Use collect to avoid iter unwrapping Options
- Make coin_select take may/must use utxo lists
- Improve `CoinSelectionAlgorithm`
- Refactor `Wallet::bump_fee()`
- Default to SIGHASH_ALL if not specified
- Replace ChangeSpendPolicy::filter_utxos with a predicate
- Make 'unspendable' into a HashSet
- Stop implicitly enforcing manaul selection by .add_utxo
- Rename DumbCS to LargestFirstCoinSelection
- Rename must_use_utxos to required_utxos
- Rename may_use_utxos to optional_uxtos
- Rename get_must_may_use_utxos to preselect_utxos
- Remove redundant Box around address validators
- Remove redundant Box around signers
- Make Signer and AddressValidator Send and Sync
- Split `send_all` into `set_single_recipient` and `drain_wallet`
- Use TXIN_DEFAULT_WEIGHT constant in coin selection
- Replace `must_use` with `required` in coin selection
- Take both spending policies into account in create_tx
- Check last derivation in cache to avoid recomputation
- Use the branch-and-bound cs by default
- Make coin_select return UTXOs instead of TxIns
- Build output lookup inside complete transaction
- Don't wrap SignersContainer arguments in Arc
- More consistent references with 'signers' variables
#### Fixed
- Fix signing for `ShWpkh` inputs
- Fix the recovery of a descriptor given a PSBT
### Examples
#### Added
- Support esplora blockchain source in repl
#### Changed
- Revert back the REPL example to use Electrum
- Remove the `magic` alias for `repl`
- Require esplora feature for repl example
#### Security
- Use dirs-next instead of dirs since the latter is unmantained
## [0.1.0-beta.1] - 2020-09-08
### Blockchain
#### Added
- Lightweight Electrum client with SSL/SOCKS5 support
- Add a generalized "Blockchain" interface
- Add Error::OfflineClient
- Add the Esplora backend
- Use async I/O in the various blockchain impls
- Compact Filters blockchain implementation
- Add support for Tor
- Impl OnlineBlockchain for types wrapped in Arc
### Database
#### Added
- Add a generalized database trait and a Sled-based implementation
- Add an in-memory database
### Descriptor
#### Added
- Wrap Miniscript descriptors to support xpubs
- Policy and contribution
- Transform a descriptor into its "public" version
- Use `miniscript::DescriptorPublicKey`
### Macros
#### Added
- Add a feature to enable the async interface on non-wasm32 platforms
### Wallet
#### Added
- Wallet logic
- Add `assume_height_reached` in PSBTSatisfier
- Add an option to change the assumed current height
- Specify the policy branch with a map
- Add a few commands to handle psbts
- Add hd_keypaths to outputs
- Add a `TxBuilder` struct to simplify `create_tx()` 's interface
- Abstract coin selection in a separate trait
- Refill the address pool whenever necessary
- Implement the wallet import/export format from FullyNoded
- Add a type convert fee units, add `Wallet::estimate_fee()`
- TxOrdering, shuffle/bip69 support
- Add RBF and custom versions in TxBuilder
- Allow limiting the use of internal utxos in TxBuilder
- Add `force_non_witness_utxo()` to TxBuilder
- RBF and add a few tests
- Add AddressValidators
- Add explicit ordering for the signers
- Support signing the whole tx instead of individual inputs
- Create a PSBT signer from an ExtendedDescriptor
### Examples
#### Added
- Add REPL broadcast command
- Add a miniscript compiler CLI
- Expose list_transactions() in the REPL
- Use `MemoryDatabase` in the compiler example
- Make the REPL return JSON
[0.1.0-beta.1]: https://github.com/bitcoindevkit/bdk/compare/96c87ea5...0.1.0-beta.1
2020-12-21 16:36:29 +01:00
[v0.2.0]: https://github.com/bitcoindevkit/bdk/compare/0.1.0-beta.1...v0.2.0
2021-01-20 10:27:28 -05:00
[v0.3.0]: https://github.com/bitcoindevkit/bdk/compare/v0.2.0...v0.3.0
2021-02-11 09:29:27 -05:00
[v0.4.0]: https://github.com/bitcoindevkit/bdk/compare/v0.3.0...v0.4.0
2021-03-17 15:13:46 +01:00
[v0.5.0]: https://github.com/bitcoindevkit/bdk/compare/v0.4.0...v0.5.0
2021-03-29 18:27:47 +02:00
[v0.5.1]: https://github.com/bitcoindevkit/bdk/compare/v0.5.0...v0.5.1
2021-04-14 18:49:52 +02:00
[v0.6.0]: https://github.com/bitcoindevkit/bdk/compare/v0.5.1...v0.6.0
2021-05-12 15:11:20 +02:00
[v0.7.0]: https://github.com/bitcoindevkit/bdk/compare/v0.6.0...v0.7.0
2021-06-21 09:07:15 +02:00
[v0.8.0]: https://github.com/bitcoindevkit/bdk/compare/v0.7.0...v0.8.0
2021-07-08 13:36:20 +02:00
[v0.9.0]: https://github.com/bitcoindevkit/bdk/compare/v0.8.0...v0.9.0
2021-08-09 14:55:17 +02:00
[v0.10.0]: https://github.com/bitcoindevkit/bdk/compare/v0.9.0...v0.10.0
2021-09-23 19:49:06 +10:00
[v0.11.0]: https://github.com/bitcoindevkit/bdk/compare/v0.10.0...v0.11.0
2021-10-28 10:44:56 -07:00
[v0.12.0]: https://github.com/bitcoindevkit/bdk/compare/v0.11.0...v0.12.0
2021-10-26 14:38:55 +02:00
[v0.13.0]: https://github.com/bitcoindevkit/bdk/compare/v0.12.0...v0.13.0
2021-11-27 21:00:19 -08:00
[v0.14.0]: https://github.com/bitcoindevkit/bdk/compare/v0.13.0...v0.14.0
2021-12-29 13:17:11 -08:00
[v0.15.0]: https://github.com/bitcoindevkit/bdk/compare/v0.14.0...v0.15.0
2022-02-19 12:46:17 -08:00
[v0.16.0]: https://github.com/bitcoindevkit/bdk/compare/v0.15.0...v0.16.0
2022-03-07 10:44:41 +11:00
[v0.16.1]: https://github.com/bitcoindevkit/bdk/compare/v0.16.0...v0.16.1
2022-03-10 17:01:44 -06:00
[v0.17.0]: https://github.com/bitcoindevkit/bdk/compare/v0.16.1...v0.17.0
2022-04-13 13:40:16 -07:00
[v0.18.0]: https://github.com/bitcoindevkit/bdk/compare/v0.17.0...v0.18.0
2022-06-08 15:18:54 -07:00
[v0.19.0]: https://github.com/bitcoindevkit/bdk/compare/v0.18.0...v0.19.0
2022-07-06 13:19:01 -07:00
[v0.20.0]: https://github.com/bitcoindevkit/bdk/compare/v0.19.0...v0.20.0
2022-08-11 14:39:18 +02:00
[v0.21.0]: https://github.com/bitcoindevkit/bdk/compare/v0.20.0...v0.21.0