2020-11-23 19:04:20 -08:00
# Changelog
All notable changes to this project will be documented in this file.
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 ).
## [Unreleased]
2021-07-08 13:36:20 +02:00
## [v0.9.0] - [v0.8.0]
2021-06-21 09:07:15 +02:00
### Wallet
#### Added
- Bitcoin core RPC added as blockchain backend
2021-05-27 16:58:42 +02:00
- Add 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
2021-07-08 13:36:20 +02:00
[unreleased]: https://github.com/bitcoindevkit/bdk/compare/v0.9.0...HEAD
2020-11-23 19:04:20 -08:00
[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