]> Untitled Git - bdk/log
bdk
8 months agofix(chain): Correctly handle txs that double spend themselves
志宇 [Fri, 28 Mar 2025 06:06:26 +0000 (17:06 +1100)]
fix(chain): Correctly handle txs that double spend themselves

Detect self-double-spends in `CanonicalIter::mark_canonical`. Disregard
the tx that self-double-spends and all it's attached meta data (such as
timestamps and anchors).

Add new test cases on `test_tx_conflict_handling` for transactions that
self-double-spend.

8 months agoMerge bitcoindevkit/bdk#1930: feat(chain): Add method for constructing TxGraph from...
merge-script [Thu, 10 Apr 2025 21:53:31 +0000 (07:53 +1000)]
Merge bitcoindevkit/bdk#1930: feat(chain): Add method for constructing TxGraph from a ChangeSet

f68cfa8afb7602d36a9b5c41552b2fc6de2c9ac2 feat(chain): Add method for constructing `TxGraph` from a `ChangeSet` (uvuvuwu)

Pull request description:

  ### Description
  * Added a `from_changeset()` function to `TxGraph` implementation
  * This function initializes a new `TxGraph` and applies the given `ChangeSet`
  * The method allows constructing a `TxGraph` directly from a `ChangeSet`,
    simplifying graph creation.

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### New Features:

  * [ ] I've added tests for the new feature
  * [x] I've added docs for the new feature

ACKs for top commit:
  evanlinjin:
    ACK f68cfa8afb7602d36a9b5c41552b2fc6de2c9ac2
  LagginTimes:
    ACK f68cfa8afb7602d36a9b5c41552b2fc6de2c9ac2
  AmosOO7:
    ACK https://github.com/bitcoindevkit/bdk/commit/f68cfa8afb7602d36a9b5c41552b2fc6de2c9ac2

Tree-SHA512: 9301bb606cf131e0a9871fad0cfa5b50ccce810717672a68bc5c256bb643b75fa04682b3c22510194c4e278aa56fe467eeeee343ade50c47bfa2713c41a64abf

8 months agoMerge bitcoindevkit/bdk#1928: chore: remove bdk_wallet and update readme and ci workflow
merge-script [Thu, 10 Apr 2025 21:52:12 +0000 (07:52 +1000)]
Merge bitcoindevkit/bdk#1928: chore: remove bdk_wallet and update readme and ci workflow

1d7ad3122e74266e0833d7b590eb3f7bf3882655 chore: rename example-crates directory to examples (Steve Myers)
cddc0f2d7248feffc4b1279e7b8ac160b5bcb920 chore: remove bdk_wallet and update readme and ci workflow (Steve Myers)

Pull request description:

  ### Description

  Removes the `bdk_wallet` crate from the workspace of this repo now that it's been moved to it's own repo.

  ### Notes to the reviewers

  I did a bit of extra cleanup on the README file. I replaced the crates list with a table that also includes badges for the crate version and docs.  I also renamed the `example-crates` folder to simply `examples`, a nit of mine that I already fixed in the new `bdk_wallet` repo.

  See: bitcoindevkit/bdk_wallet#18

  ### Changelog notice

  For the changelog for the next version of `bdk_wallet`:

  - The `bdk_wallet` crate has been removed from the `bdk` repository and move to it's own `bdk_wallet` repository.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  evanlinjin:
    ACK 1d7ad3122e74266e0833d7b590eb3f7bf3882655
  ValuedMammal:
    ACK 1d7ad3122e74266e0833d7b590eb3f7bf3882655
  luisschwab:
    ACK 1d7ad3122e74266e0833d7b590eb3f7bf3882655
  LagginTimes:
    ACK 1d7ad3122e74266e0833d7b590eb3f7bf3882655
  AmosOO7:
    ACK 1d7ad31

Tree-SHA512: 6b2dab3220cb6642bd0ea7fbcb211ab24ce68c64d3752883d61791b8b7ecafe4fb6a6fb70436fc3bcd57ff3fc1ab5a98c05205292dd66425bddb66d13155c2a1

8 months agofeat(chain): Add method for constructing `TxGraph` from a `ChangeSet`
uvuvuwu [Sun, 6 Apr 2025 00:03:47 +0000 (12:03 +1200)]
feat(chain): Add method for constructing `TxGraph` from a `ChangeSet`

* Added a `from_changeset()` function to `TxGraph` implementation
* This function initializes a new `TxGraph` and applies the given `ChangeSet`
* The method allows constructing a `TxGraph` directly from a `ChangeSet`,
  simplifying graph creation.

8 months agochore: rename example-crates directory to examples
Steve Myers [Sat, 5 Apr 2025 01:31:47 +0000 (20:31 -0500)]
chore: rename example-crates directory to examples

8 months agochore: remove bdk_wallet and update readme and ci workflow
Steve Myers [Sat, 5 Apr 2025 01:22:52 +0000 (20:22 -0500)]
chore: remove bdk_wallet and update readme and ci workflow

8 months agoMerge bitcoindevkit/bdk#1925: chore: bump bdk_wallet to 1.2.0 file_store-0.19.0 wallet-1.2.0
valued mammal [Thu, 3 Apr 2025 13:45:14 +0000 (09:45 -0400)]
Merge bitcoindevkit/bdk#1925: chore: bump bdk_wallet to 1.2.0

d4ae72c2d3b0d955d711e7ba56ead41acf2a67bc chore: bump bdk_wallet to 1.2.0 (valued mammal)

Pull request description:

  Release `bdk_wallet` v1.2.0

  - bdk_file_store to 0.19.0

ACKs for top commit:
  LagginTimes:
    ACK d4ae72c2d3b0d955d711e7ba56ead41acf2a67bc

Tree-SHA512: 1817d5900f88e1bd38144c8c510b04fe597fa29ef28f86e751df8e540277e849d5f96cd6e770f62bc0ace70064b9e94724f55a704d69f0a3fbe0656eed580bf2

8 months agochore: bump bdk_wallet to 1.2.0
valued mammal [Thu, 3 Apr 2025 13:27:31 +0000 (09:27 -0400)]
chore: bump bdk_wallet to 1.2.0

- bdk_file_store to 0.19.0

8 months agoMerge bitcoindevkit/bdk#1924: chore: bump `miniscript` to `12.3.1`
valued mammal [Wed, 2 Apr 2025 19:01:06 +0000 (15:01 -0400)]
Merge bitcoindevkit/bdk#1924: chore: bump `miniscript` to `12.3.1`

f01de699785257ce5dd1c1ea53211ca947b66953 chore: bump `miniscript` to 12.3.1 (Wei Chen)

Pull request description:

  ### Description

  Bump `miniscript` dependency to `12.3.1`.

  ### Changelog notice

  * Updated `miniscript` dependency to `12.3.1`.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  oleonardolima:
    ACK f01de699785257ce5dd1c1ea53211ca947b66953
  ValuedMammal:
    ACK f01de699785257ce5dd1c1ea53211ca947b66953

Tree-SHA512: 654f0c12d2626934572ea17c8f0b2042e75c7c7b6980d1628792f96830bbafefa05ec8b01e88941b5ce28c63a2a0c946225885253410fa26b1afecedd5a9fb87

8 months agochore: bump `miniscript` to 12.3.1
Wei Chen [Wed, 2 Apr 2025 06:09:38 +0000 (06:09 +0000)]
chore: bump `miniscript` to 12.3.1

9 months agoMerge bitcoindevkit/bdk#1840: example_cli: add feerate option to psbt new cmd
valued mammal [Thu, 20 Mar 2025 17:36:30 +0000 (13:36 -0400)]
Merge bitcoindevkit/bdk#1840: example_cli: add feerate option to psbt new cmd

c855a0942bafe1211308d887e8bc0de82c95cc68 refactor(example_cli): clean up CLI docs (valued mammal)
b9be1f43eeb4c822242962082de86ebd64f7410c deps(example_cli): bump `bdk_coin_select` to 0.4 (valued mammal)
3e640ff93d375a06678052befa45e6356949bff4 feat(example_cli): add feerate option to psbt new cmd (valued mammal)
1ab269e54881189b5f149d1941f804d780fd29d7 example_cli: fix collect assets with `for_each_key` (valued mammal)

Pull request description:

  The PR aims to add a `--feerate` option to the psbt `New` command.

  Also in this PR:

  - bump `bdk_coin_select` to 0.4
  - fix collecting `Assets` and enable support for more descriptor types

  ### Changelog notice

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  ValuedMammal:
    ACK c855a0942bafe1211308d887e8bc0de82c95cc68

Tree-SHA512: f6a4d8d793c5258690bae397bcb3992e2c83ea21f0808e2d58c471d15aa160882873c336e71354e6c948aa9850cd62cfb53379365db79f98a9b1937a6abc2c7e

9 months agorefactor(example_cli): clean up CLI docs
valued mammal [Sun, 16 Feb 2025 15:35:31 +0000 (10:35 -0500)]
refactor(example_cli): clean up CLI docs

`--psbt` is a required arg for both Sign, Extract.

Change example_esplora --parallel-requests to 2 for easier
testing, debugging.

9 months agodeps(example_cli): bump `bdk_coin_select` to 0.4
valued mammal [Sun, 16 Feb 2025 14:41:21 +0000 (09:41 -0500)]
deps(example_cli): bump `bdk_coin_select` to 0.4

9 months agofeat(example_cli): add feerate option to psbt new cmd
valued mammal [Sun, 16 Feb 2025 14:40:41 +0000 (09:40 -0500)]
feat(example_cli): add feerate option to psbt new cmd

9 months agoexample_cli: fix collect assets with `for_each_key`
valued mammal [Thu, 6 Feb 2025 23:07:38 +0000 (18:07 -0500)]
example_cli: fix collect assets with `for_each_key`

which allows creating txs for more descriptor types.

9 months agoMerge bitcoindevkit/bdk#1890: ci: automated update to rustc 1.85.0
Steve Myers [Wed, 19 Mar 2025 02:49:18 +0000 (21:49 -0500)]
Merge bitcoindevkit/bdk#1890: ci: automated update to rustc 1.85.0

d23d6be02f10dcc24e19e5d595f40874b3f7667b ci: automated update to rustc 1.85.0 (Github Action)

Pull request description:

  Automated update to Github CI workflow `cont_integration.yml` by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action

ACKs for top commit:
  notmandatory:
    ACK d23d6be02f10dcc24e19e5d595f40874b3f7667b

Tree-SHA512: 572496e4606e05f0cf56ed7f17131170cae739cab9bd7dc163cefd3208ebd569554617db71ed7d0d7f2b74a05374e9480226a67e3a6701052f38795f343c84ba

9 months agoMerge bitcoindevkit/bdk#1896: ci: remove not needed nightly_docs workflow
Steve Myers [Wed, 19 Mar 2025 02:32:34 +0000 (21:32 -0500)]
Merge bitcoindevkit/bdk#1896: ci: remove not needed nightly_docs workflow

2cba47399da81c0101c307a27b290d83d420d180 ci: remove not needed nightly_docs workflow (Steve Myers)

Pull request description:

  ### Description

  I removed the nightly_docs workflow since it's not needed. The latest published bdk crate docs can be found on docs.rs.

  ### Notes to the reviewers

  We early in the project life we published nightly docs since the API was changing often and releases were infrequent. But now that the api is more stable and we make regular releases nightly docs aren't needed.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  thunderbiscuit:
    ACK 2cba47399da81c0101c307a27b290d83d420d180.

Tree-SHA512: 69656d26bde1d357f823d0ba59deb4d27cee03888f578db4727f10c41086d51a4aaf592178c2467fddb95d8b80897dacc2e6824cd8a2e1d10b36ed7bbf567679

9 months agoci: remove not needed nightly_docs workflow
Steve Myers [Mon, 17 Mar 2025 20:00:55 +0000 (15:00 -0500)]
ci: remove not needed nightly_docs workflow

9 months agoMerge bitcoindevkit/bdk#1895: ci: fix publish_docs job fails with "permission denied"
Steve Myers [Mon, 17 Mar 2025 19:15:19 +0000 (14:15 -0500)]
Merge bitcoindevkit/bdk#1895: ci: fix publish_docs job fails with "permission denied"

8b0b3a4de54c5a592d9b385e1d99620960b05712 grant write permission to publish_docs (Musab1258)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  <!-- Describe the purpose of this PR, what's being adding and/or fixed -->

  The publish_docs workflow pushes changes to this repository: "bitcoindevkit/bitcoindevkit.org" which requires valid credentials. By setting the persist-credentials to false in #1778, the credentials required are not made available.

  ### Notes to the reviewers

  <!-- In this section you can include notes directed to the reviewers, like explaining why some parts
  of the PR were done in a specific way -->

  To fix the issue I added a write permission to the publish_jobs, which will allow it to push changes without the credentials.

  ### Changelog notice

  <!-- Notice the release manager should include in the release tag message changelog -->
  <!-- See https://keepachangelog.com/en/1.0.0/ for examples -->

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### New Features:

  * [ ] I've added tests for the new feature
  * [ ] I've added docs for the new feature

  #### Bugfixes:

  * [ ] This pull request breaks the existing API
  * [ ] I've added tests to reproduce the issue which are now passing
  * [ ] I'm linking the issue being fixed by this PR

ACKs for top commit:
  notmandatory:
    ACK 8b0b3a4de54c5a592d9b385e1d99620960b05712

Tree-SHA512: d72aaf79f99010b75f95404eadc61f0ce35f38cb9c24b0dcfc90dbe043affef06c477b6faa02dd488820c472bfc415993affdf67ebd55138dde0865e625ebf3d

9 months agoMerge bitcoindevkit/bdk#1885: ci: use `ubuntu-latest` on `check-wasm`
Steve Myers [Mon, 17 Mar 2025 18:53:52 +0000 (13:53 -0500)]
Merge bitcoindevkit/bdk#1885: ci: use `ubuntu-latest` on `check-wasm`

9710ecf1aafb50646f1ca2cd526644fb77393b6d fix(ci): use `ubuntu-latest` on `check-wasm` job (Luis Schwab)

Pull request description:

  ### Description

  This PR bumps the `check-wasm` job runner image to `ubuntu-24.04`. It was previously running `ubuntu-20.04`, which is set to be unsupported in a 3 weeks (see https://github.com/actions/runner-images/issues/11101); `clang` gets bumped to `clang-14` because of this.

  ### Checklists

  #### All Submissions:

  * [X] I've signed all my commits
  * [X] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [X] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  notmandatory:
    ACK 9710ecf1aafb50646f1ca2cd526644fb77393b6d

Tree-SHA512: 4ac8d6808211f26ab5ba4700edd70072f06c3623fbc3d33c17ee2679c68849fa9ce71f2c488c3ce45a4f814b04b946c8a909763898d7190984ff3486d16bcaef

9 months agogrant write permission to publish_docs
Musab1258 [Mon, 17 Mar 2025 04:12:42 +0000 (05:12 +0100)]
grant write permission to publish_docs

9 months agoMerge bitcoindevkit/bdk#1839: Introduce `evicted-at`/`last-evicted` timestamps
志宇 [Sat, 15 Mar 2025 23:04:12 +0000 (10:04 +1100)]
Merge bitcoindevkit/bdk#1839: Introduce `evicted-at`/`last-evicted` timestamps

0a20724e30316cbb68f7edf3f62028de15d26277 feat(examples): Update example crates to use `expected_spk_txids` (志宇)
1f8fc173b6aeddbc81a8301346502f9a923554ce feat(core)!: Remove redundant `SyncRequest` methods (志宇)
f42d5a8549df89452d57f1f9cff8f6e8e8c23dbc feat(esplora): Handle spks with expected txids (志宇)
3ab4994139dfa72d65ab0bbe6524af14efd77027 feat(electrum): Handle spks with expected txids (志宇)
64e4100a36f88a154b01706892fbec19edabf6b5 feat(chain): Add `TxGraph` methods that handle expected spk txids (志宇)
b38569fd147f8fe30f55e1c30cdba779247ba856 feat(core): Add expected txids to `SyncRequest` spks (Wei Chen)
a2dfcb9f9c39ef90f808b034731df0edb712e740 feat(chain)!: Change `TxGraph` to understand evicted-at & last-evicted (志宇)
ae0336b205f3b29253b5be3142dff54a4da09232 feat(core): Add `TxUpdate::evicted_ats` (志宇)

Pull request description:

  Partially Fixes #1740.
  Replaces #1765.
  Replaces #1811.

  ### Description

  This PR allows the receiving structures (`bdk_chain`, `bdk_wallet`) to detect and evict incoming transactions that are double spent (cancelled).

  We add a new field to `TxUpdate` (`TxUpdate::evicted_ats`), which in turn, updates the `last_evicted` timestamps that are tracked/persisted by `TxGraph`. This is similar to how `TxUpdate::seen_ats` update the `last_seen` timestamp in `TxGraph`. Transactions with a `last_evicted` timestamp higher than their `last_seen` timestamp are considered evicted.

  `SpkWithExpectedTxids` is introduced in `SpkClient` to track expected `Txid`s for each `spk`. During a sync, if any `Txid`s from `SpkWithExpectedTxids` are not in the current history of an `spk` obtained from the chain source, those `Txid`s are considered missing. Support for `SpkWithExpectedTxids` has been added to both `bdk_electrum` and `bdk_esplora` chain source crates.

  The canonicalization algorithm is updated to disregard transactions with a `last_evicted` timestamp greater than or equal to their `last_seen` timestamp, except in cases where transitivity rules apply.

  ### Notes to the reviewers

  This PR does not fix #1740 for block-by-block chain source (such as `bdk_bitcoind_rpc`). This work is done in a separate PR (#1857).

  ### Changelog notice

  * Add `TxUpdate::evicted_ats` which tracks transactions that have been replaced and are no longer present in mempool.
  * Change `TxGraph` to track `last_evicted` timestamps. This is when a transaction is last marked as missing from the mempool.
  * The canonicalization algorithm now disregards transactions with a `last_evicted` timestamp greater than or equal to it's `last_seen` timestamp, except when a canonical descendant exists due to rules of transitivity.
  * Add `SpkWithExpectedTxids` in `spk_client` which keeps track of expected `Txid`s for each `spk`.
  * Change `bdk_electrum` and `bdk_esplora` to understand `SpkWithExpectedTxids`.
  * Add `SyncRequestBuilder::expected_txids_of_spk` method which adds an association between `txid`s and `spk`s.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### New Features:

  * [x] I've added tests for the new feature
  * [x] I've added docs for the new feature

  #### Bugfixes:

  * [x] This pull request breaks the existing API
  * [x] I've added tests to reproduce the issue which are now passing
  * [x] I'm linking the issue being fixed by this PR

ACKs for top commit:
  LLFourn:
    ACK 0a20724e30316cbb68f7edf3f62028de15d26277

Tree-SHA512: 29ef964e4597aa9f4cf02e9997b0d17cb91ec2f0f1187b0e9ade3709636b873c2a7cbe803facbc4686a3050a2abeb3e9cc40f9308f8cded9c9353734dcc5755b

9 months agoci: automated update to rustc 1.85.0
Github Action [Sat, 15 Mar 2025 01:06:01 +0000 (01:06 +0000)]
ci: automated update to rustc 1.85.0

9 months agofeat(examples): Update example crates to use `expected_spk_txids`
志宇 [Fri, 14 Mar 2025 01:17:57 +0000 (12:17 +1100)]
feat(examples): Update example crates to use `expected_spk_txids`

9 months agofeat(core)!: Remove redundant `SyncRequest` methods
志宇 [Fri, 14 Mar 2025 00:23:24 +0000 (11:23 +1100)]
feat(core)!: Remove redundant `SyncRequest` methods

Methods `next_spk` and `iter_spks` are removed. These are superceded
with `next_spk_with_expected_txids` and `iter_spks_with_expected_txids`.

9 months agofeat(esplora): Handle spks with expected txids
志宇 [Fri, 21 Feb 2025 10:36:17 +0000 (21:36 +1100)]
feat(esplora): Handle spks with expected txids

Also add `detect_receive_tx_cancel` test.
Also rm `miniscript` dependency.
Update ci to rm `miniscript/no-std` for `bdk_esplora`.

Co-authored-by: Wei Chen <wzc110@gmail.com>
9 months agofeat(electrum): Handle spks with expected txids
志宇 [Thu, 20 Feb 2025 12:21:10 +0000 (23:21 +1100)]
feat(electrum): Handle spks with expected txids

Co-authored-by: Wei Chen <wzc110@gmail.com>
9 months agofeat(chain): Add `TxGraph` methods that handle expected spk txids
志宇 [Sun, 16 Feb 2025 11:32:27 +0000 (22:32 +1100)]
feat(chain): Add `TxGraph` methods that handle expected spk txids

* `TxGraph::try_list_expected_spk_txids`
* `TxGraph::list_expected_spk_txids`
* `IndexedTxGraph::try_list_expected_spk_txids`
* `IndexedTxGraph::list_expected_spk_txids`

Co-authored-by: valued mammal <valuedmammal@protonmail.com>
Co-authored-by: Wei Chen <wzc110@gmail.com>
9 months agofeat(core): Add expected txids to `SyncRequest` spks
Wei Chen [Fri, 24 Jan 2025 09:18:56 +0000 (17:18 +0800)]
feat(core): Add expected txids to `SyncRequest` spks

The spk history returned from Electrum should have these txs present.
Any missing tx will be considered evicted from the mempool.

9 months agofeat(chain)!: Change `TxGraph` to understand evicted-at & last-evicted
志宇 [Fri, 24 Jan 2025 08:45:00 +0000 (19:45 +1100)]
feat(chain)!: Change `TxGraph` to understand evicted-at & last-evicted

The evicted-at and last-evicted timestamp informs the `TxGraph` when the
transaction was last deemed as missing (evicted) from the mempool.

The canonicalization algorithm is changed to disregard transactions with
a last-evicted timestamp greater or equal to it's last-seen timestamp.
The exception is when we have a canonical descendant due to rules of
transitivity.

Update rusqlite_impl to persist `last_evicted`.

Also update docs:
* Remove duplicate paragraphs about `ChangeSet`s.
* Add "Canonicalization" section which expands on methods that require
  canonicalization and the associated data types used in the
  canonicalization algorithm.

9 months agofeat(core): Add `TxUpdate::evicted_ats`
志宇 [Fri, 24 Jan 2025 06:51:51 +0000 (17:51 +1100)]
feat(core): Add `TxUpdate::evicted_ats`

This is a set of evicted txs from the mempool.

9 months agofix(ci): use `ubuntu-latest` on `check-wasm` job
Luis Schwab [Thu, 13 Mar 2025 21:00:23 +0000 (18:00 -0300)]
fix(ci): use `ubuntu-latest` on `check-wasm` job

9 months agoMerge bitcoindevkit/bdk#1886: ci: pin `minreq` to `2.13.2`, `base64ct` to `1.6.0...
valued mammal [Thu, 13 Mar 2025 14:34:01 +0000 (10:34 -0400)]
Merge bitcoindevkit/bdk#1886: ci: pin `minreq` to `2.13.2`, `base64ct` to `1.6.0` for MSRV

a186f00d9846118a3034fda2a4eb4393548ceb90 ci: pin `minreq` to `2.13.2` (Luis Schwab)
1a3b420bcbbd346555a38a6b134e13df3e22593a ci: pin `base64ct` to `1.6.0` (Luis Schwab)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  - Pin `minreq` to `2.13.2` because `2.13.3` uses the unstable `std::sync::LazyLock` (https://github.com/bitcoindevkit/bdk/pull/1886#issuecomment-2714736611).
  - Pin `base64ct` to `1.6.0` for MSRV.

  Required for #1885 (`ubuntu-24.04` on all CI workflows).

  ### Checklists

  #### All Submissions:

  * [X] I've signed all my commits
  * [X] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [X] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  LagginTimes:
    ACK a186f00d9846118a3034fda2a4eb4393548ceb90
  ValuedMammal:
    ACK a186f00d9846118a3034fda2a4eb4393548ceb90

Tree-SHA512: cfc78846c3225caa28bcd985bdec670ffccd564b6b8c4b9e9d6c8fdb3bf923005704118e994f1e211f8a52b7ddb34d9fe9b30d89a1d5254eca146f1720466e49

9 months agoci: pin `minreq` to `2.13.2`
Luis Schwab [Wed, 12 Mar 2025 17:44:00 +0000 (14:44 -0300)]
ci: pin `minreq` to `2.13.2`

9 months agoci: pin `base64ct` to `1.6.0`
Luis Schwab [Wed, 12 Mar 2025 17:42:01 +0000 (14:42 -0300)]
ci: pin `base64ct` to `1.6.0`

9 months agoMerge bitcoindevkit/bdk#1874: fix(wallet): allow PersistedWallet to be Send + Sync
Steve Myers [Tue, 11 Mar 2025 23:54:45 +0000 (18:54 -0500)]
Merge bitcoindevkit/bdk#1874: fix(wallet): allow PersistedWallet to be Send + Sync

14251a43be73796f0db98cee8a0b5e88e4b4c51a fix(wallet): allow PersistedWallet<P> to be Send + Sync even if P is !Sync (Steve Myers)

Pull request description:

  ### Description

  fixes #1873 based on solution proposed by @praveenperera .

  ### Notes to the reviewers

  This is not a breaking change since it's only changing the internal `_marker` field's type.

  ### Changelog notice

  - Fix PersistedWallet to be Send + Sync, even when used with a !Sync persister type such as rusqlite::Connection.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### Bugfixes:

  * [ ] This pull request breaks the existing API
  * [x] I've added tests to reproduce the issue which are now passing
  * [x] I'm linking the issue being fixed by this PR

ACKs for top commit:
  ValuedMammal:
    ACK 14251a43be73796f0db98cee8a0b5e88e4b4c51a

Tree-SHA512: 8ce8ad7d9b2d962114e225074b485bc91671164fe2f2fcd59f48a6c4f53a885bb215d0017584292629fa02b5ca19a67a40a7855fcd4c2490fefd2b3be65f717f

9 months agofix(wallet): allow PersistedWallet<P> to be Send + Sync even if P is !Sync
Steve Myers [Thu, 6 Mar 2025 03:12:02 +0000 (21:12 -0600)]
fix(wallet): allow PersistedWallet<P> to be Send + Sync even if P is !Sync

The goal of this change is to ensure that PersistWallet<P> remains Send and Sync, even if the functions implemented on it
have a &mut P parameter and P is not Sync.

The reason to change PersistWallet<P>'s _marker field type from PhatonData<P> to PhantomData<fn(&mut P)> is to tell the
Rust compiler that this struct is a "consumer" of &mut P, but it does not own P and therefore should not be tied to its
lifetime.

9 months agoMerge bitcoindevkit/bdk#1884: doc: remove persist crate from README
valued mammal [Mon, 10 Mar 2025 20:53:19 +0000 (16:53 -0400)]
Merge bitcoindevkit/bdk#1884: doc: remove persist crate from README

7b8faa3b31de91d1bfc46f5020b79eea6eed0cbb doc: remove persist crate from README (Luis Schwab)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  - Removed `persist` crate from `README.md`

  ### Checklists

  #### All Submissions:

  * [X] I've signed all my commits
  * [X] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [X] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  LagginTimes:
    ACK 7b8faa3b31de91d1bfc46f5020b79eea6eed0cbb
  ValuedMammal:
    ACK 7b8faa3b31de91d1bfc46f5020b79eea6eed0cbb

Tree-SHA512: d15ab9a5b7002e71790324d02c1650bc15a8e6c28c16d0cbe04cfd0d610f93a322abd00f5aaf25416d0055c3008c46079f5effefeb66ff6dd5e6e770bbf3735b

9 months agodoc: remove persist crate from README
Luis Schwab [Mon, 10 Mar 2025 20:38:31 +0000 (17:38 -0300)]
doc: remove persist crate from README

9 months agoMerge bitcoindevkit/bdk#1882: doc: remove 1.0 roadmap stuff and fix broken links...
valued mammal [Mon, 10 Mar 2025 20:23:09 +0000 (16:23 -0400)]
Merge bitcoindevkit/bdk#1882: doc: remove 1.0 roadmap stuff and fix broken links from README

609f12c2cf9f439d94211a663b27c62bd0c6a550 doc: remove 1.0 roadmap stuff and fix broken links (Luis Schwab)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  - Removed mentions of a future 1.0 release
  - Fixed broken links to example crates

  ### Checklists

  #### All Submissions:

  * [X] I've signed all my commits
  * [X] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [X] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  thunderbiscuit:
    ACK 609f12c2cf9f439d94211a663b27c62bd0c6a550. 👍
  LagginTimes:
    ACK 609f12c2cf9f439d94211a663b27c62bd0c6a550
  ValuedMammal:
    ACK 609f12c2cf9f439d94211a663b27c62bd0c6a550

Tree-SHA512: d58ac289a8b3f2637115a7f31cb3f8f8bf902a98260f763e534e5feeab9421e5410b5c55b1d76166145f88bc4e521ab574b471dbe72ac2ac71fbd4860ef15a77

9 months agoMerge bitcoindevkit/bdk#1883: ci: pin `once_cell` to `1.20.3` for MSRV
valued mammal [Mon, 10 Mar 2025 20:15:07 +0000 (16:15 -0400)]
Merge bitcoindevkit/bdk#1883: ci: pin `once_cell` to `1.20.3` for MSRV

2db868fa47c87163a55352387ff99466ea22813a ci: pin `once_cell` to `1.20.3` for MSRV (Wei Chen)

Pull request description:

  ### Description

  Pin `once_cell` to `1.20.3` for MSRV.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  ValuedMammal:
    ACK 2db868fa47c87163a55352387ff99466ea22813a

Tree-SHA512: d1738efd3f126a896157dd06d1366dcd9b90221184e422418e510c98c770b1fc7c479af0ec8c3efa5992775d0296e7ce8b5c546a8f44a800d706202738fdee59

9 months agoci: pin `once_cell` to `1.20.3` for MSRV
Wei Chen [Mon, 10 Mar 2025 17:45:29 +0000 (13:45 -0400)]
ci: pin `once_cell` to `1.20.3` for MSRV

9 months agoMerge bitcoindevkit/bdk#1841: Generalize `add_recipient` to accept `Address`
valued mammal [Mon, 10 Mar 2025 16:37:51 +0000 (12:37 -0400)]
Merge bitcoindevkit/bdk#1841: Generalize `add_recipient` to accept `Address`

de2c44fc183b3b43816cfe6c868c8cea7d749d7b feat(wallet): generalize `add_recipient` to accept `Address` (Rob N)

Pull request description:

  ### Description

  I would imagine many users would be handling a `Address<NetworkChecked>` when building a transaction. They may pass this structure directly with this patch, or continue to use `ScriptBuf`.

  ### Notes to the reviewers

  To my knowledge this is non-breaking, but it is a change in the function signature so I am not sure.

  ### Changelog notice

  Accept any type that is convertible to a `ScriptBuf` in `TxBuilder::add_recipient`

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### New Features:

  * [ ] I've added tests for the new feature
  * [ ] I've added docs for the new feature

  #### Bugfixes:

  * [ ] This pull request breaks the existing API
  * [ ] I've added tests to reproduce the issue which are now passing
  * [ ] I'm linking the issue being fixed by this PR

ACKs for top commit:
  ValuedMammal:
    reACK de2c44fc183b3b43816cfe6c868c8cea7d749d7b

Tree-SHA512: 42a266190964e8afa1ade8f5a054b9ce86dc61728c8c441c7dad5c5b70459543617515b28199467e7dab3721bef24cffde2b9c807a6f7f0ec4f814caebafd93d

9 months agofeat(wallet): generalize `add_recipient` to accept `Address`
Rob N [Sun, 16 Feb 2025 19:37:12 +0000 (09:37 -1000)]
feat(wallet): generalize `add_recipient` to accept `Address`

9 months agodoc: remove 1.0 roadmap stuff and fix broken links
Luis Schwab [Mon, 10 Mar 2025 15:40:11 +0000 (12:40 -0300)]
doc: remove 1.0 roadmap stuff and fix broken links

9 months agoMerge bitcoindevkit/bdk#1865: chore(examples): make change descriptor optional on...
valued mammal [Fri, 7 Mar 2025 17:18:37 +0000 (12:18 -0500)]
Merge bitcoindevkit/bdk#1865: chore(examples): make change descriptor optional on example_wallet_rpc

78ca4b0319740102b2989585c1f53640f1934e53 chore: make change descriptor optional on example_wallet_rpc (Luis Schwab)

Pull request description:

  ### Description

  This PR makes passing a `CHANGE_DESCRIPTOR` optional on `example_wallet_rpc`, as per #1533.

  ### Notes to the reviewers

  Before instantiating a `Wallet` it checks if `args.change_descriptor` is Some. If true calls `Wallet::create`, else calls `Wallet::create_single`.

  #### All Submissions:

  * [X] I've signed all my commits
  * [X] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [X] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  ValuedMammal:
    ACK 78ca4b0319740102b2989585c1f53640f1934e53

Tree-SHA512: ddca4b2a9931df1a067fbe86adc43c5f62f120cf76c9a1099995fd8a063303fe8e47e7b15e186c40fc347c3ffa350a45f92e129e724e2d99e1e3732d76faa2ee

9 months agochore: make change descriptor optional on example_wallet_rpc
Luis Schwab [Fri, 7 Mar 2025 10:40:47 +0000 (07:40 -0300)]
chore: make change descriptor optional on example_wallet_rpc

9 months agoMerge bitcoindevkit/bdk#1876: ci: pin `ring` to `0.17.12` for MSRV 1.63
志宇 [Fri, 7 Mar 2025 04:18:12 +0000 (15:18 +1100)]
Merge bitcoindevkit/bdk#1876: ci: pin `ring` to `0.17.12` for MSRV 1.63

7d4128e268b7438062a1903bdbfb413f1f5b5bd0 ci: pin ring dep to 0.17.12 to fix MSRV (Steve Myers)

Pull request description:

  ### Description

  Pin `ring` to `0.17.12` for MSRV.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  notmandatory:
    ACK 7d4128e268b7438062a1903bdbfb413f1f5b5bd0

Tree-SHA512: c210e511955734d3c513a020ea0b7596590b048d755c026aa508f83e43ac2e2f25064a5fea1aa0e343e80b5c03bf8b52aa370dcbd708251197ca6788dac8bd66

9 months agoci: pin ring dep to 0.17.12 to fix MSRV
Steve Myers [Fri, 7 Mar 2025 01:06:30 +0000 (19:06 -0600)]
ci: pin ring dep to 0.17.12 to fix MSRV

The latest ring version 0.17.13 changed their MSRV from 1.63 to 1.66.
The bdk_esplora client depends on ring.

ring v0.17.12
├── rustls v0.21.12
│   ├── minreq v2.13.2
│   │   ├── esplora-client v0.11.0
│   │   │   ├── bdk_esplora v0.20.1

9 months agoMerge bitcoindevkit/bdk#1872: fix(examples): make regtest default on wallet_example_rpc
valued mammal [Fri, 7 Mar 2025 00:24:50 +0000 (19:24 -0500)]
Merge bitcoindevkit/bdk#1872: fix(examples): make regtest default on wallet_example_rpc

8ed817e716f1b4d473f1c6ec29e11e1f7c0e9356 fix: make regtest default on wallet_example_rpc (Luis Schwab)

Pull request description:

  ### Description

  This PR makes `Regtest` the default network on `wallet_example_rpc` and updates the README accordingly.

  ### Notes to the reviewers

  It had `Testnet` as the default network, `8332` as the default port and `481824` as the starting height; now everything is `Regtest`.

  ### Checklists

  #### All Submissions:

  * [X] I've signed all my commits
  * [X] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [X] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  notmandatory:
    ACK 8ed817e716f1b4d473f1c6ec29e11e1f7c0e9356
  ValuedMammal:
    ACK 8ed817e716f1b4d473f1c6ec29e11e1f7c0e9356

Tree-SHA512: 9fc2d3053a3ad6012f3e2494ae9cb3cb2217173f02ab5b1defb7ad9bf141df5ae64459cb4d3291f8dfec8f8d3f667e48d21d476c001fb717abfe6cfa26869202

9 months agoMerge bitcoindevkit/bdk#1871: docs: update CONTRIBUTING.md with section for new contr...
Steve Myers [Thu, 6 Mar 2025 17:00:10 +0000 (11:00 -0600)]
Merge bitcoindevkit/bdk#1871: docs: update CONTRIBUTING.md with section for new contributors

a3bc5dda295e45901cd5d11983c43ccac764e4d0 docs: update CONTRIBUTING.md with section for new contributors (Steve Myers)

Pull request description:

  ### Description

  This makes the discussion in #1762 easier to find for new contributors.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

Top commit has no ACKs.

Tree-SHA512: 3f092f2e9d6d3baee75fd5e9fc396d67dbabe9dd0a78d8bda12b2bd3cc21d54139bd542761cae83d41c444c2be4ead063b0382bfa53c1c74e07743347f510a55

9 months agodocs: update CONTRIBUTING.md with section for new contributors
Steve Myers [Tue, 4 Mar 2025 16:43:17 +0000 (10:43 -0600)]
docs: update CONTRIBUTING.md with section for new contributors

9 months agofix: make regtest default on wallet_example_rpc
Luis Schwab [Wed, 5 Mar 2025 20:23:14 +0000 (17:23 -0300)]
fix: make regtest default on wallet_example_rpc

9 months agoMerge bitcoindevkit/bdk#1684: Refactor file store
志宇 [Thu, 6 Mar 2025 00:57:06 +0000 (11:57 +1100)]
Merge bitcoindevkit/bdk#1684: Refactor file store

54251a7c9fdf08bced132be3851207917cbc36ab docs(file_store): Show how to overwrite original file during recovery (志宇)
52f2061fd94fb4f739779949675c707bb4fd0776 refactor(store)!: change Store's method and error names (nymius)
fc76d6603fa354386de8590368ab10881cbd949e feat(store): add `Bincode` error variant to FileError enum (nymius)
39987882b90b5ddaef3b5ebfc01c5c6e2cb6c0d7 fix(store): replace `Path.exists` by `OpenOptions.create_new` (nymius)

Pull request description:

  ### Description

  The `Store::open` method doesn't recovers the previous `Store` state saved in the file and emplaces the file pointer just after the magic bytes prefix, this later is agravated by `Store::append_changeset` which sets the file pointer after the last written changeset. The combination of both causes the lost of any previous changeset there may have been in the file.

  Is natural to think this shouldn't be the expected behavior, as @KnowWhoami pointed out in #1517, and the `Store` should recover the previous changesets stored in the file store.

  The approach proposed in #1632 triggered a discussion about more changes in `Store`, which motivated the current refactor.

  Besides the fix for #1517, the following methods have been changed/renamed/repurposed in Store:
  - `create`: create file and retrieve store, if exists fail.
  - `load`: load changesets from file, aggregate them and return aggregated changeset and `Store`. If there are problems with decoding, fail.
  - `dump`: aggregate all changesets and return them.
  - `load_or_create`: try load or fallback to create.

  Fixes #1517.
  Overrides #1632.

  ### Notes to the reviewers

  **Load** return type is `Result<(Option<C>, Store), StoreErrorWithDump>` to allow methods which doesn't use `WalletPersister` to get the aggregated changeset right away.

  **Dump** is kept to allow `WalletPersister::initialize` method to retrieve the aggregated changeset without forcing the inclusion of the additional parameters needed by `store::load` to the trait, which would also affect the `rusqlite` implementation.

  ### Changelog notice

  #### Added:
  - `StoreError` enum, which includes `Io`, `Bincode` and `InvalidMagicBytes`.
  - "not intended for production" notice in general `README` for `file store`.

  #### Changed:
  - `Store::create_new` to `Store::create`, with new return type: `Result<Self, StoreError>`
  - `Store::open` to `Store::load`, with new return type: `Result<(Self, Option<C>), StoreErrorWithDump<C>>`
  - `Store::open_or_create` to `Store::load_or_create`, with new return type: `Result<(Option<C>, Self), StoreErrorWithDump<C>>
  `
  - `Store::aggregate_changesets` to `Store::dump`, with new return type: `Result<Option<C>, StoreErrorWithDump<C>>`
  - `FileError` to `StoreError`
  - `AggregateChangesetsError` to `StoreErrorWithDump`, which now can include all the variants of `StoreError` in the error field.

  #### Deleted:
  - `IterError` deleted.

  <!-- Notice the release manager should include in the release tag message changelog -->
  <!-- See https://keepachangelog.com/en/1.0.0/ for examples -->

  ### Checklists

  #### All Submissions:

  * ~~I've signed all my commits~~
  * ~~I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)~~
  * ~~I ran `cargo fmt` and `cargo clippy` before committing~~

  #### New Features:

  * ~~I've added tests for the new feature~~
  * ~~I've added docs for the new feature~~

  #### Bugfixes:

  * ~~This pull request breaks the existing API~~
  * ~~I've added tests to reproduce the issue which are now passing~~
  * ~~I'm linking the issue being fixed by this PR~~

ACKs for top commit:
  evanlinjin:
    ACK 54251a7c9fdf08bced132be3851207917cbc36ab

Tree-SHA512: d41dee149af7d0c2eba4f0b84b360eb2aad2b5f3df2d3160de285370e637619c25156678ee84a12295c7d2410704182819f6c5c612f68f81556747ad7dd0eb17

9 months agodocs(file_store): Show how to overwrite original file during recovery
志宇 [Thu, 6 Mar 2025 00:41:03 +0000 (11:41 +1100)]
docs(file_store): Show how to overwrite original file during recovery

9 months agoMerge bitcoindevkit/bdk#1798: Refactor/use iterators to preselect utxos
志宇 [Thu, 6 Mar 2025 00:05:57 +0000 (11:05 +1100)]
Merge bitcoindevkit/bdk#1798: Refactor/use iterators to preselect utxos

2f83b4508fe2369c6336c9579517f3a4eb25d923 test(wallet): check there are no duplicates across required and optional utxos (nymius)
39df2b940a161d6b5468e6a6c36f888c14a3e24e refactor(wallet): remove coin_selection::filter_duplicates (nymius)
79bd7da87603c8dfe65bee4bd7061c56e39d0953 refactor(wallet): use iterators and adaptors in preselect_utxos (nymius)

Pull request description:

  ### Description

  There were multiple calls for de-duplication of selected UTxOs in `Wallet::create_tx`: ([1](https://github.com/bitcoindevkit/bdk/blob/abc305612160c0e2ce85c7bba4c2c162ff488adc/crates/wallet/src/wallet/mod.rs#L2016-L2020)) and ([2](https://github.com/bitcoindevkit/bdk/blob/abc305612160c0e2ce85c7bba4c2c162ff488adc/crates/wallet/src/wallet/mod.rs#L1452)).

  As the test [`test_filter_duplicates`](https://github.com/bitcoindevkit/bdk/blob/master/crates/wallet/src/wallet/coin_selection.rs#L1666-L1695) shows, there are four possible cases for duplication of UTxOs while feeding the coin selection algorithms.

  1. no duplication: out of concern
  2. duplication in the required utxos only: covered by the source of `required_utxos`, `Wallet::list_unspent`, which [roots back the provided `UTxOs` to a `HashMap`](https://github.com/bitcoindevkit/bdk/blob/a5335a18431dfecea1f524af44c953b79a96867c/crates/chain/src/tx_graph.rs#L911-L912) which should avoid any duplication by definition
  3. duplication in the optional utxos only: is the only one possible as optional `UTxOs` are stored in a `Vec` and no checks are performed about the duplicity of their members.
  4. duplication across the required and optional utxos: is already covered by `Wallet::preselect_utxos`, which avoid the processing of required UTxOs while listing the unspent available UTxOs in the wallet.

  This refactor does the following:
  - Refactors `TxParams::utxos` type to be `HashSet<LocalOutput>` avoiding the duplication case 3
  - Keeps avoiding case 4 without overhead and allowing a query closer to O(1) on avg. to cover duplication case 4 (before was O(n) where n is the size of required utxos) thanks to the above change.
  - Still covers case 2 because the [source of `required_utxos`, `Wallet::list_unspent`](https://github.com/bitcoindevkit/bdk/blob/a5335a18431dfecea1f524af44c953b79a96867c/crates/chain/src/tx_graph.rs#L911-L912) comes from a `HashMap` which should avoid duplication by definition.
  - Moves the computation of the `WeightedUtxos` to the last part of UTxO filtering, allowing the unification of the computation for local outputs.
  - Removes some extra allocations done for helpers structures or intermediate results while filtering UTxOs.
  - Allows for future integration of UTxO filtering methods for other utilities, e.g.: filter locked utxos
    ```rust
    .filter(|utxo| !self.is_utxo_locked(utxo.outpoint, self.latest_checkpoint().height()))
    ```
  - Adds more comments for each filtering step.
  - Differentiates `foreign_utxos`, which should include a provided satisfation weight to use them effectively, and `utxos`, manually selected UTxOs for which the wallet can compute their satisfaction weight without external resources.

  With these changes all four cases would be covered, and `coin_selection::filter_duplicates` is no longer needed.

  Fixes #1794.

  ### Notes to the reviewers

  I added three test to cover the interesting cases for duplication:
      - there are no duplicates in required utxos
      - there are no duplicates in optional utxos
      - there are no duplicates across optional and required utxos
  the three of them have been prefixed with `not_duplicated_utxos*` to allow its joint execution under the command:
  ```bash
  cargo test -- not_duplicated_utxos
  ```
  because the guarantees for the three conditions above are spread in different parts of the code.

  ### Changelog notice

  No changes to public APIs.

  ### Checklists

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing
  * [x] This pull request does not break the existing API
  * [x] I've added tests to reproduce the issue which are now passing
  * [x] I'm linking the issue being fixed by this PR

ACKs for top commit:
  evanlinjin:
    ACK 2f83b4508fe2369c6336c9579517f3a4eb25d923

Tree-SHA512: 82317acce8a7e83e4ea1a500605142026ab10d6842d4f278b09563566f1eb4d295f77a9c9616eff067211f0faa9f1e94370fc0ec3af48e6e1baef53b46979db7

9 months agorefactor(store)!: change Store's method and error names
nymius [Fri, 28 Feb 2025 04:39:57 +0000 (15:39 +1100)]
refactor(store)!: change Store's method and error names

The changes in this commit were motivated due to a bug in the
`StoreFile` which caused old data to be lost if the file was `open`
instead of created and new data was appended. The bugfix later motivated
a general name cleanup in StoreFile's methods and errors and some minor
changes in their signatures. FileError was renamed to StoreError, which
now includes the IterError variants, allowing the remplacement of the
former form. The new StoreFile methods are:
- create: create file in write only mode or fail if file exists.
- load: open existing file, check integrity of content and retrieve
  Store.
- append: add new changesets to Store. Do nothing if changeset is empty.
- dump: aggregate and retrieve all stored changesets in store.
- load_or_create: load if file exists, create if not, and retrieve
  Store.

9 months agofeat(store): add `Bincode` error variant to FileError enum
nymius [Tue, 12 Nov 2024 19:29:41 +0000 (16:29 -0300)]
feat(store): add `Bincode` error variant to FileError enum

9 months agofix(store): replace `Path.exists` by `OpenOptions.create_new`
nymius [Tue, 12 Nov 2024 18:56:34 +0000 (15:56 -0300)]
fix(store): replace `Path.exists` by `OpenOptions.create_new`

`Path.exists` is not safe against time-of-creation, time-of-use (TOCTOU)
bugs.

`OpenOptions.create_new` on the other hand is atomic, so not prone to
this kind of problems.

9 months agotest(wallet): check there are no duplicates across required and optional utxos
nymius [Thu, 23 Jan 2025 16:59:38 +0000 (13:59 -0300)]
test(wallet): check there are no duplicates across required and optional utxos

This test replaces the one used to test
`coin_selection::filter_duplicates` introduced in
5299db34cb9117ad1b66a6afcb51f6ca7e1f0d95.

As the code changed and there is not a single point to verificate the
following properties:
- there are no duplicates in required utxos
- there are no duplicates in optional utxos
- there are no duplicates across optional and required utxos
anymore, test have been prefixed with `not_duplicated_utxos*` to allow
its joint execution by using the following command:
cargo test -- not_duplicated_utxos

9 months agorefactor(wallet): remove coin_selection::filter_duplicates
nymius [Mon, 13 Jan 2025 19:52:29 +0000 (16:52 -0300)]
refactor(wallet): remove coin_selection::filter_duplicates

9 months agorefactor(wallet): use iterators and adaptors in preselect_utxos
nymius [Mon, 13 Jan 2025 15:40:13 +0000 (12:40 -0300)]
refactor(wallet): use iterators and adaptors in preselect_utxos

There were multiple calls for de-duplication of selected UTxOs.

As the test `test_filter_duplicates` shows, there are four possible
cases for duplication of UTxOs while feeding the coin selection
algorithms.

1. no duplication: out of concern
2. duplication in the required utxos only: covered by the source of
   `required_utxos`, `Wallet::list_unspent`, which roots back the
   provided `UTxOs` to a `HashMap` which should avoid any duplication by
   definition
3. duplication in the optional utxos only: is the only one possible as
   optional `UTxOs` are stored in a `Vec` and no checks are performed
   about the duplicity of their members.
4. duplication across the required and optional utxos: is already
   covered by `Wallet::preselect_utxos`, which avoid the processing of
   required UTxOs while listing the unspent available UTxOs in the
   wallet.

This refactor changes:
- `TxParams::utxos` type to be `HashSet<LocalOutput>` avoiding the
  duplication case 3, and allowing a query closer to O(1) on avg. to
  cover duplication case 4 (before was O(n) where n is the size of
  required utxos).
- Moves the computation of the `WeightedUtxos` to the last part of UTxO
  filtering, allowing the unification of the computation for local
  outputs.
- Removes some extra allocations done for helpers structures or
  intermediate results while filtering UTxOs.
- Allows for future integration of UTxO filtering methods for other
  utilities.
- Adds more comments for each filtering step.

With these changes all four cases would be covered, and
`coin_selection::filter_duplicates` would be no longer needed.

9 months agoMerge bitcoindevkit/bdk#1867: fix(ci): pin `bzip2-sys` to `0.1.12`
志宇 [Wed, 5 Mar 2025 23:42:38 +0000 (10:42 +1100)]
Merge bitcoindevkit/bdk#1867: fix(ci): pin `bzip2-sys` to `0.1.12`

23626fef6622baa4736dc2b24d8463cbf7a86813 ci(coverage): use `--ignore-errors unmapped` in genhtml (valued mammal)
cd7e35899017bac9162d2917b25b7a0297268b44 fix(ci): pin `bzip2-sys` to `0.1.12` (Leonardo Lima)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  It looks like CI is failing due to the latest release of https://github.com/trifectatechfoundation/bzip2-rs/releases/tag/v0.5.2 which is a dependency of zip and therefore from electrsd.

  It's failing on MSRV 1.63.0 step raising the following error: `error[E0658]: use of unstable library feature 'core_ffi_c'`.

  This PR adds bzip2-sys to the pinned dependency list, pinning it to `0.1.12`.

  <!-- Describe the purpose of this PR, what's being adding and/or fixed -->

  ### Notes to the reviewers

  <!-- In this section you can include notes directed to the reviewers, like explaining why some parts
  of the PR were done in a specific way -->

  ### Changelog notice

  - Adds `bzip2-sys` to the pinned dependency list, pinning it to `0.1.12`.

  <!-- Notice the release manager should include in the release tag message changelog -->
  <!-- See https://keepachangelog.com/en/1.0.0/ for examples -->

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  LagginTimes:
    ACK 23626fef6622baa4736dc2b24d8463cbf7a86813

Tree-SHA512: bd84cd106818641775996bfa02b5c5b802dc2ccb73f0f44b14a021730536c6de90811e7840ea562f877d35d257411cac8ad6c299ed88d6963f37d082918e4c72

9 months agoci(coverage): use `--ignore-errors unmapped` in genhtml
valued mammal [Wed, 5 Mar 2025 16:25:27 +0000 (11:25 -0500)]
ci(coverage): use `--ignore-errors unmapped` in genhtml

9 months agofix(ci): pin `bzip2-sys` to `0.1.12`
Leonardo Lima [Mon, 3 Mar 2025 17:46:06 +0000 (14:46 -0300)]
fix(ci): pin `bzip2-sys` to `0.1.12`

9 months agoMerge bitcoindevkit/bdk#1838: Make full-scan/sync flow easier to reason about.
志宇 [Fri, 28 Feb 2025 03:50:58 +0000 (14:50 +1100)]
Merge bitcoindevkit/bdk#1838: Make full-scan/sync flow easier to reason about.

800f3580f8518e15ccaf9622fdd2e5141a50d5e5 feat!: Improve spk-based syncing flow (志宇)
ee527454b0dc451ea44fd9410db3e396cb48817f feat(core)!: Make `TxUpdate` non-exhaustive (志宇)

Pull request description:

  ### Description

  #1811 introduces the `evicted-at` concept. While adding this to `TxUpdate`, I realized there were some shortcomings in our full-scan & sync flow:

  * Chain sources that use `TxUpdate` to convey updates cannot choose to add transactions without a `seen_at` timestamp as the `TxGraph::apply_update_at` logic adds this timestamp for all unanchored txs if the `seen_at` parameter is specified. Purposefully adding uncanonical txs is useful for wallets that want to know about replaced txs.
  * The `TxGraph::apply_update_at` logic is hard to reason about. `TxUpdate::seen_ats` already has the `seen_at` timestamp per tx, but `apply_update_at()` also takes in a `seen_at` timestamp`.
  * `TxUpdate::seen_ats` currently forces us to only have one `seen-at` per tx as it's a map of `txid -> seen_at`. However, in the future we want to add a `first-seen` timestamp to `TxGraph` which is basically the earliest `seen-at` timestamp introduced so we may want to have multiple `seen_at`s per tx. The other issue is if we merge `TxUpdate`s, we will loose data. I.e. we can only keep the `last_seen` or the `first_seen`.

  These problems were exacerbated when introducing `evicted-at`. In the old design, the chain-source has no concept of sync time (as sync time was introduced after-the-fact when applying the `TxUpdate`). Therefore the introduced `TxUpdate::evicted` field was a `HashSet<Txid>` (no timestamps) and relied on the `TxGraph::apply_upate_at` logic to introduce the `evicted-at` timestamp. All this makes the sync logic harder to understand. What happens if the `seen_at` input is `None`? What happens if updates were applied out of order? What happens when we merge `TxUpdates` before applying?

  The following changes are made in this PR to simplify the sync/full-scan logic to be easier to understand and robust:

  * The `sync_time` is added to the `SyncRequest` and `FullScanRequest`. `sync_time` is mandatory and is added as an input of `builder()`. If the `std` feature is enabled, the `builder_now()` is available which uses the current timestamp. The chain source is now responsible to add this `sync_time` timestamp as `seen_at` for mempool txs. Non-canonical and non-anchored txs can be added without the `seen_at` timestamp.
  * `TxUpdate::seen_ats` is now a `HashSet` of `(Txid, u64)`. This allows multiple `seen_at`s per tx. This is also a much easier to use API as the chain source can just insert into this `HashSet` without checking previous data.
  * `TxGraph::apply_update_at` is removed as we no longer needs to introduce a fallback `seen_at` timestamp after-the-fact. `TxGraph::apply_update` is no longer `std`-only and the logic of applying updates is greatly simplified.

  Additionally, `TxUpdate` is updated to be `#[non_exhaustive]` for backwards-compatibility protection.

  ### Notes to the reviewers

  This is based on #1837. Merge that first.

  These are breaking changes to `bdk_core`. It needs to be breaking to properly fix all the issues.

  As mentioned by @notmandatory, `bdk_wallet` changes will be added to a new PR once the new `bdk_wallet` repo is ready. But the PR won't be merged until we're ready for a `bdk_wallet` 2.0.

  ### Changelog notice

  * Change `FullScanRequest::builder` and `SyncRequest::builder` methods to depend on `feature = "std"`. This is because requests now have a `start_time`, instead of specifying a `seen_at` when applying the update.
  * Add `FullScanRequest::builder_at` and `SyncRequest::builder_at` methods which are the non-std version of the `..Request::builder` methods.
  * Change `TxUpdate::seen_ats` field to be a `HashSet` of `(Txid, u64)`. This allows a single update to have multiple `seen_at`s per tx.
  * Change `TxUpdate` to be `non-exhaustive`.
  * Remove `apply_update_at` as we no longer need to apply with a timestamp after-the-fact.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### New Features:

  ~* [ ] I've added tests for the new feature~ No tests needed as it's more of a refactor.

  * [x] I've added docs for the new feature

ACKs for top commit:
  notmandatory:
    utACK 800f3580f8518e15ccaf9622fdd2e5141a50d5e5

Tree-SHA512: 85af8452ac60c4a8087962403fd10c5c67592d3711f7665ae09a2d9c48a868583a41e54f28d639e47bd264ccf95d9254efc8d0d6248c8bcc9343c8290502e061

9 months agofeat!: Improve spk-based syncing flow
志宇 [Thu, 13 Feb 2025 11:08:18 +0000 (22:08 +1100)]
feat!: Improve spk-based syncing flow

* Change `TxUpdate::seen_ats` to be a `HashSet<(Txid, u64)>` so we can
  introduce multiple timestamps per tx. This is useful to introduce both
  `first_seen` and `last_seen` timestamps to `TxGraph`. This is also a
  better API for chain-sources as they can just insert timestamps into
  the field without checking previous values.
* Change sync/full-scan flow to have the request structure introduce the
  sync time instead of introducing the timestamp when apply the
  `TxUpdate`. This simplifies the `apply_update{_at}` logic and makes
  `evicted_at` easier to reason about (in the future).

9 months agofeat(core)!: Make `TxUpdate` non-exhaustive
志宇 [Fri, 24 Jan 2025 04:31:41 +0000 (15:31 +1100)]
feat(core)!: Make `TxUpdate` non-exhaustive

If we introduce new fields to `TxUpdate`, they can be minor
non-breaking updates.

9 months agoMerge bitcoindevkit/bdk#1860: `bdk_wallet`: Pin `bdk_chain` version to latest release
志宇 [Fri, 28 Feb 2025 03:06:11 +0000 (14:06 +1100)]
Merge bitcoindevkit/bdk#1860: `bdk_wallet`: Pin `bdk_chain` version to latest release

0c23410bd863d42e02d6183882d9e2e512ed2a40 chore(wallet): Pin `bdk_chain` version to latest release (志宇)
7ce016d80517de873090eafd0d7eeb9e650b2ca1 chore(examples): pin chain-src crates for wallet examples (志宇)
853dda414103442cc730601b242f1355e94f30eb ci: no-std requires hashbrown (志宇)

Pull request description:

  ### Description

  As discussed here: https://discord.com/channels/753336465005608961/753336465005608965/1344807550217883688

  Remove the use of Cargo `path` ref for the `bdk_chain` and `bdk_file_store` dependencies. This is the first step to move `bdk_wallet` into a new workspace.

  Also fixed CI failures as we were testing no-std without hashbrown.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  LLFourn:
    ACK 0c23410bd863d42e02d6183882d9e2e512ed2a40
  notmandatory:
    ACK 0c23410bd863d42e02d6183882d9e2e512ed2a40

Tree-SHA512: 9c690ae153bc312f045a00ea82bf6772dc3393ee9835d44d0e1ae0570780a84de8cc537471b3c26b438eee49eb3262bd91e246d36e578ff8acd06609f0368dd0

9 months agochore(wallet): Pin `bdk_chain` version to latest release
志宇 [Thu, 27 Feb 2025 23:47:20 +0000 (10:47 +1100)]
chore(wallet): Pin `bdk_chain` version to latest release

Remove the use of Cargo `path` ref for the `bdk_chain` and
`bdk_file_store` dependencies. This is the first step to move
`bdk_wallet` into a new workspace.

9 months agochore(examples): pin chain-src crates for wallet examples
志宇 [Fri, 28 Feb 2025 00:49:29 +0000 (11:49 +1100)]
chore(examples): pin chain-src crates for wallet examples

9 months agoci: no-std requires hashbrown
志宇 [Fri, 28 Feb 2025 00:38:36 +0000 (11:38 +1100)]
ci: no-std requires hashbrown

9 months agoMerge bitcoindevkit/bdk#1859: ci: pin idna_adapter dep to fix reqest with MSRV 1.75
志宇 [Thu, 27 Feb 2025 03:42:15 +0000 (14:42 +1100)]
Merge bitcoindevkit/bdk#1859: ci: pin idna_adapter dep to fix reqest with MSRV 1.75

d4670b377e03bca24a9d0ed0ed6a59221dfe8506 ci: pin idna_adapter dep to fix reqwest with MSRV 1.75 (Steve Myers)

Pull request description:

  ### Description

  The `bdk_esplora` crate depends on `reqwest` which now pins it's `idna_adapter` version to  support newer versions of the `url` crate when testing with it's MSRV. I fixed our CI 1.75 MSRV build by also pinning the `idna_adapter`.

  ### Notes to the reviewers

  The MSRV break was fixed by the `reqwest` team with seanmonstar/reqwest#2470.

  This change was made 2 mo ago, I'm not sure why our CI only broke now.

  ### Changelog notice

  - Pin idna_adapter dep to fix reqwest with MSRV 1.75.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  evanlinjin:
    ACK d4670b377e03bca24a9d0ed0ed6a59221dfe8506

Tree-SHA512: a9eeccf682400272c14ced1141ccbe18a45d614d3ff7f71409c5958c24e1f7d18c96464f2b784d6f2fb5df70e99d8b8410166ff43d15e67a4df0e0a164577e0f

9 months agoci: pin idna_adapter dep to fix reqwest with MSRV 1.75
Steve Myers [Thu, 27 Feb 2025 02:40:56 +0000 (20:40 -0600)]
ci: pin idna_adapter dep to fix reqwest with MSRV 1.75

9 months agoMerge bitcoindevkit/bdk#1853: wallet: Bump bitcoin dependency to v0.32.4
valued mammal [Tue, 25 Feb 2025 20:47:20 +0000 (15:47 -0500)]
Merge bitcoindevkit/bdk#1853: wallet: Bump bitcoin dependency to v0.32.4

5553e8d2a9ad066399cdf96c6081638c5724032a wallet: Bump bitcoin dependency to v0.32.4 (Steven Roose)

Pull request description:

  This is required since we are using Network::Testnet4

  ### Changelog notice

  bdk_wallet:

  - deps: Bump `bitcoin` to 0.32.4

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  ValuedMammal:
    ACK 5553e8d2a9ad066399cdf96c6081638c5724032a
  notmandatory:
    ACK 5553e8d2a9ad066399cdf96c6081638c5724032a

Tree-SHA512: e88e7137ecfba89fb89d00ef1109376ec464919df34f5024a5a9f808c0fb4cd2a120d44c7edf0428bab21d264e18db171c6042df3968b078fd758b33e1f15c10

9 months agowallet: Bump bitcoin dependency to v0.32.4
Steven Roose [Tue, 25 Feb 2025 12:37:16 +0000 (12:37 +0000)]
wallet: Bump bitcoin dependency to v0.32.4

This is required since we are using Network::Testnet4

9 months agoMerge bitcoindevkit/bdk#1850: ci: pin `flate2` for msrv
valued mammal [Mon, 24 Feb 2025 14:46:34 +0000 (09:46 -0500)]
Merge bitcoindevkit/bdk#1850: ci: pin `flate2` for msrv

2cf9991ea84ecec68b8c7cd39773e61e9e5ca36a ci: pin `flate2` for msrv (Wei Chen)

Pull request description:

  ### Description
  `flate2` 1.1.0 raised msrv to 1.67. Previous version has been pinned.

  ### Changelog notice

  * Pinned flate2 dependency to 1.0.35.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  ValuedMammal:
    ACK 2cf9991ea84ecec68b8c7cd39773e61e9e5ca36a

Tree-SHA512: ef77117a6037562d1bf2fbc1d4fcc5b49dd91c965775b008d25379a258e17c93edeb664c212877189568493b3f00b8663df0a5bc374802c487961d36bffa9dfe

9 months agoci: pin `flate2` for msrv
Wei Chen [Mon, 24 Feb 2025 13:09:45 +0000 (21:09 +0800)]
ci: pin `flate2` for msrv

9 months agoMerge bitcoindevkit/bdk#1837: `bdk_electrum`: Handle negative heights properly
valued mammal [Thu, 20 Feb 2025 16:27:48 +0000 (11:27 -0500)]
Merge bitcoindevkit/bdk#1837: `bdk_electrum`: Handle negative heights properly

161d715bedd6af5996c4cf24b6bc1f733c1228ea test(electrum): Chained mempool sync (志宇)
75020521db4e5268960d1b84fe13482f9c6c9457 fix(electrum): Handle negative heights properly (志宇)

Pull request description:

  ### Description

  This fixes a problem with `bdk_electrum` making bogus `transaction_get_merkle` calls to the Electrum server.

  In electrum, heights returned alongside txs may be 0 or -1. 0 means the tx is unconfirmed. -1 means the tx is unconfirmed and spends an unconfirmed tx.

  Previously, the codebase assumed that heights cannot be negative and used a `i32 as usize` cast (which would lead to the casted height being 18446744073709551615). Then the codebase will try to call `transaction_get_merkle` with the overflowed height.

  ### Notes to the reviewers

  The test introduced in this PR does not fail with the old codebase. What ends up happening is that `transaction_get_merke` will be called with the overflow height and the Electrum server will return with "merkle not found".

  To see the failure, you can change the `height as usize` casts to use `.try_into().expect()` then you will see a panic.

  These changes should be applied as `1.0.1` and `1.1.1` fixes.

  ### Changelog notice

  * Fix `bdk_electrum` handling of negative spk-history height.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### Bugfixes:

  * [x] I've added tests to reproduce the issue which are now passing

  ~* [ ] This pull request breaks the existing API~
  ~* [ ] I'm linking the issue being fixed by this PR~

ACKs for top commit:
  LagginTimes:
    ACK 161d715bedd6af5996c4cf24b6bc1f733c1228ea

Tree-SHA512: 18bc5c6ccebd810e253cc88a69554ef6a27168df1961a5d77e2044bf30f4e27d44cb3a2499f5d29f0a3bd0eb349cacd7ea870f9c7225dd09798c7e19091a0f04

9 months agotest(electrum): Chained mempool sync
志宇 [Sun, 16 Feb 2025 04:14:41 +0000 (15:14 +1100)]
test(electrum): Chained mempool sync

Is an spk history contains a tx that spends another unconfirmed tx, the
Electrum API will return the tx with a negative height. This should
succeed and not panic.

9 months agofix(electrum): Handle negative heights properly
志宇 [Sat, 15 Feb 2025 14:47:20 +0000 (01:47 +1100)]
fix(electrum): Handle negative heights properly

In electrum, heights returned alongside txs may be 0 or -1. 0 means the
tx is unconfirmed. -1 means the tx is unconfirmed and spends an
unconfirmed tx.

Previously, the codebase assumed that heights cannot be negative and
used a `i32 as usize` cast (which would lead to panic if the i32 is
negative).

9 months agoMerge bitcoindevkit/bdk#1846: Fix CI
valued mammal [Thu, 20 Feb 2025 13:40:28 +0000 (08:40 -0500)]
Merge bitcoindevkit/bdk#1846: Fix CI

6be6d06dbd8c2b370319d3154f6fa61d75da25ad docs(chain): Fix docs for `KeychainTxOutIndex` (志宇)
5ba4d68e45e3f5503b80c73da2d413794e10b017 ci: Pin `native-tls` to `0.2.13` (志宇)

Pull request description:

  ### Description

  This PR makes CI happy again.

  * CI complained about docs here. https://github.com/bitcoindevkit/bdk/actions/runs/13420654916/job/37492201157
  * CI complained about MSRV not being satisfied. https://github.com/bitcoindevkit/bdk/actions/runs/13420654913/job/37492254119

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  ValuedMammal:
    ACK 6be6d06d

Tree-SHA512: 87029e01c0e988863603353002c674c40cf1ebd7fa94e7430141ad49cbba770c6b7219ceb8eb001552319c8f352100b2461c8c0c1a6e977d58b8fd8e0c90d0b8

9 months agodocs(chain): Fix docs for `KeychainTxOutIndex`
志宇 [Thu, 20 Feb 2025 12:50:16 +0000 (23:50 +1100)]
docs(chain): Fix docs for `KeychainTxOutIndex`

9 months agoci: Pin `native-tls` to `0.2.13`
志宇 [Thu, 20 Feb 2025 13:19:51 +0000 (00:19 +1100)]
ci: Pin `native-tls` to `0.2.13`

To satisfy MSRV of 1.75.0

9 months agoMerge bitcoindevkit/bdk#1835: ci: automated update to rustc 1.84.1
valued mammal [Wed, 19 Feb 2025 19:21:01 +0000 (14:21 -0500)]
Merge bitcoindevkit/bdk#1835: ci: automated update to rustc 1.84.1

0e6b249466dc60093c0ac6bad91e271424c67c5f ci: automated update to rustc 1.84.1 (Github Action)

Pull request description:

  Automated update to Github CI workflow `cont_integration.yml` by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action

ACKs for top commit:
  ValuedMammal:
    ACK 0e6b249466dc60093c0ac6bad91e271424c67c5f

Tree-SHA512: a48d4d7fe8e360bbb9555a293749b3c4f14e297968a48d35e9869f7229555b24a2390167c8d041d6fc30b80789b0eef71834ae0c4ca00aa7534c6d4eb5861950

10 months agoci: automated update to rustc 1.84.1
Github Action [Sat, 15 Feb 2025 01:03:13 +0000 (01:03 +0000)]
ci: automated update to rustc 1.84.1

10 months agoMerge bitcoindevkit/bdk#1830: Fix off-by-one error checking coinbase maturity in...
志宇 [Fri, 14 Feb 2025 19:51:22 +0000 (06:51 +1100)]
Merge bitcoindevkit/bdk#1830: Fix off-by-one error checking coinbase maturity in optional UTxOs

03b7ecaea1176f55c6792d8798ead72b23082af7 fix(wallet): off-by-one error checking coinbase maturity in optional UTxOs (nymius)

Pull request description:

  ### Description

  As I was developing the changes in #1798 I discover issue #1810. So I introduced the fixes in that PR but later I split them in two to ease the review by suggestion of @oleonardolima .

  The `preselect_utxos` method has an off-by-one error that is making the selection of optional UTxOs too restrictive, by
  requiring the coinbase outputs to surpass or equal coinbase maturity time at the current height of the selection, and
  not in the block in which the transaction may be included in the blockchain.

  The changes in this commit fix it by considering the maturity of the coinbase output at the spending height and not
  the transaction creation height, this means, a +1 at the considered height at the moment of building the
  transaction.

  Fixes #1810.

  ### Notes to the reviewers

  Tests for issue #1810 have not been explicitly added, as there already was a `text_spend_coinbase` test which was corrected to ensure coinbase maturation is considered in alignment with the new logic.

  Changes are not breaking but I'm modifying slightly the documentation for the public method `TxBuilder::current_height` to adjust to the fixed code. Does this merit an entry in the CHANGELOG?

  ### Changelog notice

  `Wallet` now considers a utxo originated from a coinbase transaction (`coinbase utxo`) as available for selection if it will mature in the next block after the height provided to the selection, the current height by default. The previous behavior allowed selecting a `coinbase utxo` only when the height at the moment of selection was equal to maturity height or greater.

  ### Checklists

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing
  * [x] I've updated existing tests to match the fix
  * [x] I've updated docs to match the fix logic
  * [x] This pull request DOES NOT break the existing API
  * [x] I'm linking the issue being fixed by this PR

ACKs for top commit:
  LagginTimes:
    ACK 03b7ecaea1176f55c6792d8798ead72b23082af7
  evanlinjin:
    ACK 03b7ecaea1176f55c6792d8798ead72b23082af7

Tree-SHA512: f270b73963bd6f141c8a3e759bc9b9bf75de7c52f37fff93f0a6b8b996b449d98c58e5eeb2b56f0ee236222f0807da5c8201ade7462813743e0c4d255313e2b5

10 months agofix(wallet): off-by-one error checking coinbase maturity in optional UTxOs
nymius [Wed, 12 Feb 2025 19:44:15 +0000 (16:44 -0300)]
fix(wallet): off-by-one error checking coinbase maturity in optional UTxOs

The `preselect_utxos` method has an off-by-one error that is making the
selection of optional UTxOs too restrictive, by requiring the coinbase
outputs to surpass or equal coinbase maturity time at the current height
of the selection, and not in the block in which the transaction may be
included in the blockchain.

The changes in this commit fix it by considering the maturity of the
coinbase output at the spending height and not the transaction creation
height, this means, a +1 at the considered height at the moment of
building the transaction.

10 months agoMerge bitcoindevkit/bdk#1829: ci: remove `cc` pin to fix CI error
valued mammal [Tue, 11 Feb 2025 14:14:03 +0000 (09:14 -0500)]
Merge bitcoindevkit/bdk#1829: ci: remove `cc` pin to fix CI error

979f9d1e6297fbd43f3f8e1061405ae3a901efc9 ci: remove `cc` pin to fix CI error (Wei Chen)

Pull request description:

  ### Description
  `cc` dependency was unpinned to fix a clash with `cmake` that was causing CI errors.

  ### Changelog notice

  * Unpinned cc dependency.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  ValuedMammal:
    ACK 979f9d1e6297fbd43f3f8e1061405ae3a901efc9

Tree-SHA512: 53264e36153609e9a9ebf4f67993e1f99d11c65d6695c2ed3739dfed059f9467f20e7dc5b965507bb207f56c63525afe13e0f6c2ba619e19d2e60fab6f04a7b0

10 months agoci: remove `cc` pin to fix CI error
Wei Chen [Mon, 10 Feb 2025 11:01:24 +0000 (19:01 +0800)]
ci: remove `cc` pin to fix CI error

10 months agoMerge bitcoindevkit/bdk#1822: Bump bdk_wallet to v1.1.0 bitcoind_rpc-0.18.0 electrum-0.21.0 wallet-1.1.0
valued mammal [Wed, 5 Feb 2025 15:42:17 +0000 (10:42 -0500)]
Merge bitcoindevkit/bdk#1822: Bump bdk_wallet to v1.1.0

8be791ab648ff16db253800e8f99d52404d8104b Bump bdk_wallet to v1.1.0 (valued mammal)

Pull request description:

  Bump bdk_wallet to v1.1.0

  bdk_bitcoind_rpc to 0.18.0
  bdk_electrum to 0.21.0

  fixes #1821

ACKs for top commit:
  notmandatory:
    ACK 8be791ab648ff16db253800e8f99d52404d8104b

Tree-SHA512: 0028cd608206dbf549c5a93255953f4486570f019d64702587b344de66c4cc8e6619d9c6057729e788726b386729a6bd09f2c69a5642ddd240d67464c0d6a4c1

10 months agoBump bdk_wallet to v1.1.0
valued mammal [Tue, 4 Feb 2025 17:33:59 +0000 (12:33 -0500)]
Bump bdk_wallet to v1.1.0

bdk_bitcoind_rpc to 0.18.0
bdk_electrum to 0.21.0

10 months agoMerge bitcoindevkit/bdk#1738: test(core): add unit tests for `merge` trait
Steve Myers [Tue, 4 Feb 2025 17:11:51 +0000 (11:11 -0600)]
Merge bitcoindevkit/bdk#1738: test(core): add unit tests for `merge` trait

fcc0a3409aa390e9f32a3308dd5fe0e2e33b9b44 test: add tests for  trait of operations on various data structures, including conflict scenarios and checking for empty structures (pluveto)

Pull request description:

  ### Description

  This update adds unit tests for the `Merge` trait implementations on `BTreeMap`, `BTreeSet`, `Vec`, and tuples. It also includes tests for the `is_empty` and `take` methods to ensure their correct functionality.

  ### Notes to the Reviewers

  - The tests cover basic scenarios for merging collections and checking their emptiness.
  - Consider the potential method name conflict with `BTreeSet`'s existing `take` method.

  ### Changelog Notice

  - Added unit tests for merging functionality and utility methods (`is_empty`, `take`) on various collection types.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits.
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md).
  * [x] I ran `cargo fmt` and `cargo clippy` before committing.

Top commit has no ACKs.

Tree-SHA512: fdcd67ca9127986e9ce9aa9ccc3276aaff127fa9333696c61ff2ca1b37a2ce8f9fe7af8e06ab57dda493741e91fa63a3aba58a1338a17090626225899e6c7588

10 months agotest: add tests for trait of operations on various data structures, including confli...
pluveto [Tue, 3 Dec 2024 13:28:23 +0000 (21:28 +0800)]
test: add tests for  trait of operations on various data structures, including conflict scenarios and checking for empty structures

10 months agoMerge bitcoindevkit/bdk#1778: ci: apply `zizmor` security audit
Steve Myers [Tue, 28 Jan 2025 17:58:50 +0000 (11:58 -0600)]
Merge bitcoindevkit/bdk#1778: ci: apply `zizmor` security audit

30dce98450fb3a919babfe512d8e8d505f3dddd8 fix(cont-integration): template injection audit (Leonardo Lima)
4ce913960a77a8ec857518cd894e12bf59df1bae fix(ci): do not persist credentials (Leonardo Lima)

Pull request description:

  fixes #1775

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  I used `zizmor` on all current CI workflows, it's a tool that helps detecting possible vulnerabilities in our CI jobs, see https://woodruffw.github.io/zizmor/.

  It can run against most of it's audit rules, however the ones that require the GitHub API Token would require some with access to it in order to test against it. So this PR does not cover for impostor-commit, ref-confusion known-vulnerable-actions audit rules.

  <!-- Describe the purpose of this PR, what's being adding and/or fixed -->

  ### Notes to the reviewers

  <!-- In this section you can include notes directed to the reviewers, like explaining why some parts
  of the PR were done in a specific way -->

  ### Changelog notice

  - Do not persist credentials on GitHub Actions.

  <!-- Notice the release manager should include in the release tag message changelog -->
  <!-- See https://keepachangelog.com/en/1.0.0/ for examples -->

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  notmandatory:
    ACK 30dce98450fb3a919babfe512d8e8d505f3dddd8

Tree-SHA512: 611b51bdac3278c86954b4c7a8ecb405db0889fd65f58cf4035058433233340bd5c83f135184dd53e2e1cc6f547d8ce88a7e4433da39d621479b17dd9e2e06d1

10 months agofix(cont-integration): template injection audit
Leonardo Lima [Tue, 28 Jan 2025 14:06:55 +0000 (11:06 -0300)]
fix(cont-integration): template injection audit

- fixes the `template_injection` audit failure due to
  `matrix.rust.version` usage, use an environement var instead
  see: https://woodruffw.github.io/zizmor/audits/#template-injection

10 months agofix(ci): do not persist credentials
Leonardo Lima [Mon, 16 Dec 2024 19:55:15 +0000 (16:55 -0300)]
fix(ci): do not persist credentials

fix(cron-update-rust): don't persist credentials

fix(audit): don't persist credentials

fix(code-coverage): don't persist credentials

fix(nightly-docs): don't persist credentials

fix(cont-integration): don't persist credentials

10 months agoMerge bitcoindevkit/bdk#1614: feat(rpc): introduce FilterIter
Steve Myers [Mon, 27 Jan 2025 16:18:30 +0000 (10:18 -0600)]
Merge bitcoindevkit/bdk#1614: feat(rpc): introduce FilterIter

a6364e20500fba7c16f31fa97d106893110751c6 docs(rpc): add README and print ext address for FilterIter example (Steve Myers)
8fc03ee484d4ca636411ecf5621df8cf1f051ed6 feat(rpc): introduce `FilterIter` (valued mammal)

Pull request description:

  The PR adds a `bip158` module to the `bdk_bitcoind_rpc` crate along with a new type `FilterIter` that can be used for retrieving blocks from a full node which contain transactions relevant to a list of script pubkeys.

  ### Notes to the reviewers

  ### Changelog notice

  `bdk_bitcoind_rpc`: Added `bip158` module as a means of updating `bdk_chain` structures

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### New Features:

  * [x] I've added tests for the new feature
  * [x] I've added docs for the new feature

ACKs for top commit:
  notmandatory:
    tACK a6364e20500fba7c16f31fa97d106893110751c6

Tree-SHA512: 430dd3d978d45ca8654ea2a8cc066717e8ba8b552734a0202cc8cdc6ca090683069c13925ab9b906f5a7783b2f1985d3c49ddfeb826525a01815b8c804aa1c3a

10 months agoMerge bitcoindevkit/bdk#1812: fix(wallet): use `map_keychain` in `Wallet::build_fee_bump`
valued mammal [Mon, 27 Jan 2025 15:16:18 +0000 (10:16 -0500)]
Merge bitcoindevkit/bdk#1812: fix(wallet): use `map_keychain` in `Wallet::build_fee_bump`

515309e99fb92335a35ef994839a37a26f23ea69 test(wallet): test `build_fee_bump` with single descriptor wallet (valued mammal)
53d16e1b38eabee1f1ca304933a818951b8b0f43 fix(wallet): use `map_keychain` in `Wallet::build_fee_bump` (valued mammal)

Pull request description:

  Previously we failed to remove the change output if the wallet has no internal keychain which caused tx building to fail at the new higher feerate. Fix this by mapping the internal keychain to the de-facto change keychain so that the drain output can be recalculated.

  fixes #1807

  ### Changelog notice

  Fixed

  - wallet: Fixed an issue preventing `build_fee_bump` from re-targeting the drain value for some wallets

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### Bugfixes:

  * [x] I've added tests to reproduce the issue which are now passing
  * [x] I'm linking the issue being fixed by this PR

ACKs for top commit:
  notmandatory:
    ACK 515309e99fb92335a35ef994839a37a26f23ea69
  evanlinjin:
    ACK 515309e99fb92335a35ef994839a37a26f23ea69

Tree-SHA512: 53266c4b0f4a2ebc1fd47cd1c9afb4499fb3c46d75e8bd121a98644cfe879cebf5fa26fab0e6af706452aea79a959660149582dc8df9e53ada6582e62ea5be19

10 months agoMerge bitcoindevkit/bdk#1787: build(deps): bump Swatinem/rust-cache from 2.7.5 to...
Steve Myers [Sat, 25 Jan 2025 00:47:31 +0000 (18:47 -0600)]
Merge bitcoindevkit/bdk#1787: build(deps): bump Swatinem/rust-cache from 2.7.5 to 2.7.7

ab1e9a85272b0b030ce11c6ebbbb4e0d2d881ded build(deps): bump Swatinem/rust-cache from 2.7.5 to 2.7.7 (dependabot[bot])

Pull request description:

  Bumps [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) from 2.7.5 to 2.7.7.
  <details>
  <summary>Release notes</summary>
  <p><em>Sourced from <a href="https://github.com/swatinem/rust-cache/releases">Swatinem/rust-cache's releases</a>.</em></p>
  <blockquote>
  <h2>v2.7.7</h2>
  <p><strong>Full Changelog</strong>: <a href="https://github.com/Swatinem/rust-cache/compare/v2.7.6...v2.7.7">https://github.com/Swatinem/rust-cache/compare/v2.7.6...v2.7.7</a></p>
  <h2>v2.7.6</h2>
  <h2>What's Changed</h2>
  <ul>
  <li>Updated artifact upload action to v4 by <a href="https://github.com/guylamar2006"><code>@guylamar2006</code></a> in <a href="https://redirect.github.com/Swatinem/rust-cache/pull/212">Swatinem/rust-cache#212</a></li>
  <li>Adds an option to do lookup-only of the cache by <a href="https://github.com/danlec"><code>@danlec</code></a> in <a href="https://redirect.github.com/Swatinem/rust-cache/pull/217">Swatinem/rust-cache#217</a></li>
  <li>add runner OS in cache key by <a href="https://github.com/rnbguy"><code>@rnbguy</code></a> in <a href="https://redirect.github.com/Swatinem/rust-cache/pull/220">Swatinem/rust-cache#220</a></li>
  <li>Allow opting out of caching $CARGO_HOME/bin. by <a href="https://github.com/benjyw"><code>@benjyw</code></a> in <a href="https://redirect.github.com/Swatinem/rust-cache/pull/216">Swatinem/rust-cache#216</a></li>
  </ul>
  <h2>New Contributors</h2>
  <ul>
  <li><a href="https://github.com/guylamar2006"><code>@guylamar2006</code></a> made their first contribution in <a href="https://redirect.github.com/Swatinem/rust-cache/pull/212">Swatinem/rust-cache#212</a></li>
  <li><a href="https://github.com/danlec"><code>@danlec</code></a> made their first contribution in <a href="https://redirect.github.com/Swatinem/rust-cache/pull/217">Swatinem/rust-cache#217</a></li>
  <li><a href="https://github.com/rnbguy"><code>@rnbguy</code></a> made their first contribution in <a href="https://redirect.github.com/Swatinem/rust-cache/pull/220">Swatinem/rust-cache#220</a></li>
  <li><a href="https://github.com/benjyw"><code>@benjyw</code></a> made their first contribution in <a href="https://redirect.github.com/Swatinem/rust-cache/pull/216">Swatinem/rust-cache#216</a></li>
  </ul>
  <p><strong>Full Changelog</strong>: <a href="https://github.com/Swatinem/rust-cache/compare/v2.7.5...v2.7.6">https://github.com/Swatinem/rust-cache/compare/v2.7.5...v2.7.6</a></p>
  </blockquote>
  </details>
  <details>
  <summary>Commits</summary>
  <ul>
  <li><a href="https://github.com/Swatinem/rust-cache/commit/f0deed1e0edfc6a9be95417288c0e1099b1eeec3"><code>f0deed1</code></a> 2.7.7</li>
  <li><a href="https://github.com/Swatinem/rust-cache/commit/008623fb834cadde1d7ccee1a26dc84acb660ec3"><code>008623f</code></a> also cache <code>cargo install</code> metadata</li>
  <li><a href="https://github.com/Swatinem/rust-cache/commit/720f7e45ccee46c12a7b1d7bed2ab733be9be5a1"><code>720f7e4</code></a> 2.7.6</li>
  <li><a href="https://github.com/Swatinem/rust-cache/commit/4b1f006ad2112a11d66969e219444096a98af937"><code>4b1f006</code></a> update dependencies, in particular <code>@actions/cache</code></li>
  <li><a href="https://github.com/Swatinem/rust-cache/commit/e8e63cdbf2788df3801e6f9a81516b2ca8391886"><code>e8e63cd</code></a> Allow opting out of caching $CARGO_HOME/bin. (<a href="https://redirect.github.com/swatinem/rust-cache/issues/216">#216</a>)</li>
  <li><a href="https://github.com/Swatinem/rust-cache/commit/9a2e0d32122f6883cb48fad7a1ac5c49f25b7661"><code>9a2e0d3</code></a> add runner OS in cache key (<a href="https://redirect.github.com/swatinem/rust-cache/issues/220">#220</a>)</li>
  <li><a href="https://github.com/Swatinem/rust-cache/commit/c00f3025caeee0e9c78c18c43de11ab15fd3b486"><code>c00f302</code></a> Adds an option to do lookup-only of the cache (<a href="https://redirect.github.com/swatinem/rust-cache/issues/217">#217</a>)</li>
  <li><a href="https://github.com/Swatinem/rust-cache/commit/68b3cb7503c78e67dae8373749990a220eb65352"><code>68b3cb7</code></a> Updated artifact upload action to v4 (<a href="https://redirect.github.com/swatinem/rust-cache/issues/212">#212</a>)</li>
  <li>See full diff in <a href="https://github.com/swatinem/rust-cache/compare/v2.7.5...v2.7.7">compare view</a></li>
  </ul>
  </details>
  <br />

  [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Swatinem/rust-cache&package-manager=github_actions&previous-version=2.7.5&new-version=2.7.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

  Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

  [//]: # (dependabot-automerge-start)
  [//]: # (dependabot-automerge-end)

  ---

  <details>
  <summary>Dependabot commands and options</summary>
  <br />

  You can trigger Dependabot actions by commenting on this PR:
  - `@dependabot rebase` will rebase this PR
  - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
  - `@dependabot merge` will merge this PR after your CI passes on it
  - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
  - `@dependabot cancel merge` will cancel a previously requested merge and block automerging
  - `@dependabot reopen` will reopen this PR if it is closed
  - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
  - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

  </details>

Top commit has no ACKs.

Tree-SHA512: 666517d0db31bc599bfeead7f3e4bef8f14b5b2aeff5037fd5e5c98f7088afe94e4b653def115bc2a8cebcb8b3a0aeb579a7b2e434279def792a89024b6959c6