20 KiB
20 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.21.0 - v0.20.0
- Add
descriptor::checksum::get_checksum_bytesmethod. - Add
Excessenum to handle remaining amount after coin selection. - Move change creation from
Wallet::create_txtoCoinSelectionAlgorithm::coin_select. - Change the interface of
SqliteDatabase::newto accept any type that implement AsRef - Add the ability to specify which leaves to sign in a taproot transaction through
TapLeavesOptionsinSignOptions - Add the ability to specify whether a taproot transaction should be signed using the internal key or not, using
sign_with_tap_internal_keyinSignOptions - Consolidate params
fee_amountandamount_neededintarget_amountinCoinSelectionAlgorithm::coin_selectsignature. - Change the meaning of the
fee_amountfield insideCoinSelectionResult: from now on thefee_amountwill represent only the fees asociated with the utxos in theselectedfield ofCoinSelectionResult. - New
RpcBlockchainimplementation with various fixes. - Return balance in separate categories, namely
confirmed,trusted_pending,untrusted_pending&immature.
v0.20.0 - v0.19.0
- New MSRV set to
1.56.1 - 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) - Fix hang when
ElectrumBlockchainConfig::stop_gapis zero. - Set coin type in BIP44, BIP49, and BIP84 templates
- Get block hash given a block height - A
get_block_hashmethod is now defined on theGetBlockHashtrait and implemented on every blockchain backend. This method expects a block height and returns the corresponding block hash. - Add
remove_partial_sigsandtry_finalizetoSignOptions - Deprecate
AddressValidator - Fix Electrum wallet sync potentially causing address index decrement - compare proposed index and current index before applying batch operations during sync.
v0.19.0 - v0.18.0
- added
OldestFirstCoinSelectionimpl toCoinSelectionAlgorithm - New MSRV set to
1.56 - Unpinned tokio to
1 - Add traits to reuse
Blockchains across multiple wallets (BlockchainFactoryandStatelessBlockchain). - Upgrade to rust-bitcoin
0.28 - If using the
sqlite-dbfeature all cached wallet data is deleted due to a possible UTXO inconsistency, a wallet.sync will recreate it - Update
PkOrFin the policy module to become an enum - 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 thedescriptor!()macro
- Support for
- Add support for Bitcoin Core 23.0 when using the
rpcblockchain
v0.18.0 - v0.17.0
- Add
sqlite-bundledfeature for deployments that need a bundled version of sqlite, i.e. for mobile platforms. - Added
Wallet::get_signers(),Wallet::descriptor_checksum()andWallet::get_address_validators(), exposed theAsDerivedtrait. - Deprecate
database::Database::flush(), the function is only needed for the sled database on mobile, instead for mobile use the sqlite database. - Add
keychain: KeychainKindtowallet::AddressInfo. - Improve key generation traits
- Rename
WalletExporttoFullyNodedExport, deprecate the former. - Bump
miniscriptdependency version to^6.1.
v0.17.0 - v0.16.1
- Removed default verification from
wallet::sync. sync-time verification is added inscript_syncand is activated byverifyfeature flag. verifyflag removed fromTransactionDetails.- Add
get_internal_addressto allow you to get internal addresses just as you get external addresses. - added
ensure_addresses_cachedtoWalletto let offline wallets load and cache addresses in their database - Add
is_spentfield toLocalUtxo; when we notice that a utxo has been spent we setis_spentfield to true instead of deleting it from the db.
Sync API change
To decouple the Wallet from the Blockchain we've made major changes:
- Removed
Blockchainfrom Wallet. - Removed
Wallet::broadcast(just useBlockchain::broadcast) - Deprecated
Wallet::new_offline(all wallets are offline now) - Changed
Wallet::syncto take aBlockchain. - Stop making a request for the block height when calling
Wallet:new. - Added
SyncOptionsto capture extra (future) arguments toWallet::sync. - Removed
max_addressessync parameter which determined how many addresses to cache before syncing since this can just be done withensure_addresses_cached. - remove
flushmethod from theDatabasetrait.
v0.16.1 - v0.16.0
- Pin tokio dependency version to ~1.14 to prevent errors due to their new MSRV 1.49.0
v0.16.0 - v0.15.0
- Disable
reqwestdefault features. - Added
reqwest-default-tlsfeature: 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
- Fixed generating WIF in the correct network format.
v0.15.0 - v0.14.0
- 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.
v0.14.0 - v0.13.0
- BIP39 implementation dependency, in
keys::bip39changed from tiny-bip39 to rust-bip39. - Add new method on the
TxBuilderto embed data in the transaction viaOP_RETURN. To allow that a fix to check the dust only on spendable output has been introduced. - Update the
Databasetrait to store the last sync timestamp and block height - Rename
ConfirmationTimetoBlockTime
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