14 KiB
14 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
v0.13.0 - v0.12.0
- Exposed
get_tx()method fromDatabasetoWallet.
v0.12.0 - v0.11.0
- Activate
miniscript/use-serdefeature to allow consumers of the library to access it via the re-exportedminiscriptcrate. - Add support for proxies in
EsploraBlockchain - Added
SqliteDatabasethat implementsDatabasebacked by a sqlite database usingrusqlitecrate.
v0.11.0 - v0.10.0
- Added
flushmethod to theDatabasetrait to explicitly flush to disk latest changes on the db.
v0.10.0 - v0.9.0
- Added
RpcBlockchainin theAnyBlockchainstruct to allow using Rpc backend whereAnyBlockchainis used (egbdk-cli) - Removed hard dependency on
tokio.
Wallet
- Removed and replaced
set_single_recipientwith more generaldrain_toand replacedmaintain_single_recipientwithallow_shrinking.
Blockchain
- Removed
stop_gapfromBlockchaintrait and added it to onlyElectrumBlockchainandEsploraBlockchainstructs. - Added a
ureqbackend for use when not using featureasync-interfaceor target WASM.ureqis a blocking HTTP client.
v0.9.0 - v0.8.0
Wallet
- Added Bitcoin core RPC added as blockchain backend
- Added a
verifyfeature that can be enable to verify the unconfirmed txs we download against the consensus rules
v0.8.0 - v0.7.0
Wallet
- Added an option that must be explicitly enabled to allow signing using non-
SIGHASH_ALLsighashes (#350)
Changed
get_address now returns an AddressInfo struct that includes the index and derefs to Address.
v0.7.0 - v0.6.0
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
Wallet
- Changed
Wallet::{sign, finalize_psbt}now take a&mut psbtrather than consuming it. - Require and validate
non_witness_utxofor SegWit signatures by default, can be adjusted withSignOptions - Replace the opt-in builder option
force_non_witness_utxowith the oppositeonly_witness_utxo. From now on we will provide thenon_witness_utxo, unless explicitly asked not to.
v0.6.0 - v0.5.1
Misc
Changed
- New minimum supported rust version is 1.46.0
- Changed
AnyBlockchainConfigto use serde tagged representation.
Descriptor
Added
- Added ability to analyze a
PSBTto check which and how many signatures are already available
Wallet
Changed
get_new_address()refactored toget_address(AddressIndex::New)to support differentget_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 - Added
get_psbt_inputto create the corresponding psbt input for a local utxo.
Fixed
- Fixed
coin_selectcalculation for UTXOs wherevalue < feethat caused over-/underflow errors.
v0.5.1 - v0.5.0
Misc
Changed
- Pin
hyperto=0.14.4to make it compile on Rust 1.45
v0.5.0 - v0.4.0
Misc
Changed
- Updated
electrum-clientto version0.7
Wallet
Changed
FeeRateconstructorsfrom_sat_per_vbanddefault_min_relay_feeare nowconstfunctions
v0.4.0 - v0.3.0
Keys
Changed
- Renamed
DerivableKey::add_metadata()toDerivableKey::into_descriptor_key() - Renamed
ToDescriptorKey::to_descriptor_key()toIntoDescriptorKey::into_descriptor_key()
Added
- Added an
ExtendedKeytype that is an enum ofbip32::ExtendedPubKeyandbip32::ExtendedPrivKey - Added
DerivableKey::into_extended_key()as the only method that needs to be implemented
Misc
Removed
- Removed the
parse_descriptorexample, since it wasn't demonstrating any bdk-specific API anymore.
Changed
- Updated
bitcointo0.26,miniscriptto5.1andelectrum-clientto0.6
Added
- Added support for the
signetnetwork (issue #62) - Added a function to get the version of BDK at runtime
Wallet
Changed
- Removed the explicit
idargument fromWallet::add_signer()since that's now part ofSigneritself - Renamed
ToWalletDescriptor::to_wallet_descriptor()toIntoWalletDescriptor::into_wallet_descriptor()
Policy
Changed
- Removed unneeded
Result<(), PolicyError>return type forSatisfaction::finalize() - Removed the
TooManyItemsSelectedpolicy error (see commit message for more details)
v0.3.0 - v0.2.0
Descriptor
Changed
- Added an alias
DescriptorErrorfordescriptor::error::Error - Changed the error returned by
descriptor!()andfragment!()toDescriptorError - Changed the error type in
ToWalletDescriptortoDescriptorError - Improved checks on descriptors built using the macros
Blockchain
Changed
- Remove
BlockchainMarker,OfflineClientandOfflineWalletin favor of just using the unit type to mark for a missing client. - Upgrade
tokioto1.0.
Transaction Creation Overhaul
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.
- Removed
TxBuilder::utxosin favor ofTxBuilder::add_utxos - Added
Wallet::build_txto replaceWallet::create_tx - Added
Wallet::build_fee_bumpto replaceWallet::bump_fee - Added
Wallet::get_utxo - Added
Wallet::get_descriptor_for_keychain
add_foreign_utxo
- Renamed
UTXOtoLocalUtxo - Added
WeightedUtxoto replace floating(UTXO, usize). - Added
Utxoenum to incorporate both local utxos and foreign utxos - Added
TxBuilder::add_foreign_utxowhich allows adding a utxo external to the wallet.
CLI
Changed
- Remove
cli.rsmodule,cli-utilsfeature andrepl.rsexample; moved to newbdk-clirepository
v0.2.0 - 0.1.0-beta.1
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 - Rename
ScriptTypetoKeychainKind - 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
Blockchains from a configuration - Add an
AnyBlockchainenum to allow switching at runtime - Document
AnyBlockchainandConfigurableBlockchain - 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
AnyDatabaseandConfigurableDatabasetraits
Descriptor
Added
- Add a macro to write descriptors from code
- Add descriptor templates, add
DerivableKey - Add ToWalletDescriptor trait tests
- Add support for
sortedmultiindescriptor! - 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
ScriptContextinto 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
GeneratableKeytrait forbitcoin::PrivateKey - Implement
ToDescriptorKeytrait forGeneratedKey - 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
- Add an option to include
PSBT_GLOBAL_XPUBs in PSBTs - 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_allintoset_single_recipientanddrain_wallet - Use TXIN_DEFAULT_WEIGHT constant in coin selection
- Replace
must_usewithrequiredin 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
ShWpkhinputs - 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
magicalias forrepl - 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_reachedin 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
TxBuilderstruct to simplifycreate_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
MemoryDatabasein the compiler example - Make the REPL return JSON