]> Untitled Git - bdk/log
bdk
22 months agofix(chain): tx_graph::ChangeSet::is_empty
LLFourn [Fri, 9 Feb 2024 08:43:26 +0000 (19:43 +1100)]
fix(chain): tx_graph::ChangeSet::is_empty

23 months agoMerge bitcoindevkit/bdk#1308: feat(esplora): include previous `TxOut`s for fee calcul...
Daniela Brozzoni [Mon, 5 Feb 2024 11:44:43 +0000 (12:44 +0100)]
Merge bitcoindevkit/bdk#1308: feat(esplora): include previous `TxOut`s for fee calculation

552f11cb5f66a9366dbc05c801fcae043ebe5b82 feat(esplora): include previous `TxOut`s for fee calculation The previous `TxOut` for transactions received from an external wallet are added as floating `TxOut`s to `TxGraph` to allow for fee calculation. (Wei Chen)

Pull request description:

  ### Description

  Partially implements #1265.

  The previous `TxOut` for transactions received from an external wallet are added as floating `TxOut`s to `TxGraph` to allow for fee calculation.

  ### Notes to the reviewers

  Currently only the `esplora` portion of #1265 has been implemented.
  The `electrum` portion will potentially be done in a new PR, as discussed on the 1/30/24 Lib call.

  ### Checklists

  #### To Do:
  * [ ] Implement `electrum` portion of #1265.

  #### 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:
  evanlinjin:
    re-ACK 552f11cb5f66a9366dbc05c801fcae043ebe5b82
  danielabrozzoni:
    ACK 552f11cb5f66a9366dbc05c801fcae043ebe5b82

Tree-SHA512: 752a24ebd0b9ad7952c1b093ecb251473e346c77b860c1a80c73418130189227405a0f0d7652967cf8c7b89994e8c37df96cd52b52b6daff9cc8c88b5194069a

23 months agoMerge bitcoindevkit/bdk#1316: tx_builder: Support setting explicit nSequence for...
Daniela Brozzoni [Mon, 5 Feb 2024 11:36:02 +0000 (12:36 +0100)]
Merge bitcoindevkit/bdk#1316: tx_builder: Support setting explicit nSequence for foreign inputs

9bb39a3a3fcdebeec53a8a771091954c845db7a5 Avoid a wildcard match in tx construction (Steven Roose)
9e098a5b6d0802eb39f3e200605b8576c77030eb tx_builder: Support setting explicit nSequence for foreign inputs (Steven Roose)

Pull request description:

  Fixes https://github.com/bitcoindevkit/bdk/issues/1315.

ACKs for top commit:
  evanlinjin:
    ACK 9bb39a3a3fcdebeec53a8a771091954c845db7a5
  danielabrozzoni:
    utACK 9bb39a3a3fcdebeec53a8a771091954c845db7a5

Tree-SHA512: 42c96a58a762fa8737402ebd0132ce20ce0359c996cee9feeecb0b84e6fb73305be1aec9429fb97ba932486f0b35ac5caed7b43656456c5fb053e55330a12d47

23 months agofeat(esplora): include previous `TxOut`s for fee calculation
Wei Chen [Wed, 31 Jan 2024 15:41:42 +0000 (23:41 +0800)]
feat(esplora): include previous `TxOut`s for fee calculation
The previous `TxOut` for transactions received from an external
wallet are added as floating `TxOut`s to `TxGraph` to allow for
fee calculation.

23 months agoMerge bitcoindevkit/bdk#1319: chore: typos
Steve Myers [Sun, 4 Feb 2024 19:18:47 +0000 (13:18 -0600)]
Merge bitcoindevkit/bdk#1319: chore: typos

8d93fad778565f44cbcc053c7f51fbc27bebf99a chore: typos (Jose Storopoli)

Pull request description:

  More caught on by Nix CI in #1257.

  ### 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:
  evanlinjin:
    ACK 8d93fad778565f44cbcc053c7f51fbc27bebf99a
  notmandatory:
    ACK 8d93fad778565f44cbcc053c7f51fbc27bebf99a

Tree-SHA512: 28e0316d457658266b2af1de76b114f87ce7485e386ddecd805dda1266a4e8645612c0fa6bc921c58daa4886558b32b538cccbb1644c96c3bab638dd7c42ee2b

23 months agochore: typos
Jose Storopoli [Sun, 4 Feb 2024 09:13:40 +0000 (06:13 -0300)]
chore: typos

More caught on by Nix CI in #1257.

23 months agoAvoid a wildcard match in tx construction
Steven Roose [Fri, 2 Feb 2024 02:02:27 +0000 (02:02 +0000)]
Avoid a wildcard match in tx construction

23 months agotx_builder: Support setting explicit nSequence for foreign inputs
Steven Roose [Fri, 2 Feb 2024 01:24:39 +0000 (01:24 +0000)]
tx_builder: Support setting explicit nSequence for foreign inputs

23 months agoMerge bitcoindevkit/bdk#1186: Clean up clippy allows
志宇 [Wed, 31 Jan 2024 17:18:16 +0000 (01:18 +0800)]
Merge bitcoindevkit/bdk#1186: Clean up clippy allows

1c15cb2f9169bb08a4128c183eeeca80fff97ab7 ref(example_cli): Add new struct Init (vmammal)
89a7ddca7f6ed8c65ed0124774f3a868d08faf68 ref(esplora): `Box` a large `esplora_client::Error` (vmammal)
097d818d4c7fff12d72ce0ef10ceb9b575c154e1 ref(wallet): `Wallet::preselect_utxos` now accepts a `&TxParams` (vmammal)
f11d663b7efb98dd72fed903ade8c5e7af0b5a3a ref(psbt): refactor body of `get_utxo_for` to address `clippy::manual_map` (vmammal)
4679ca1df7209d2b356fbb8cbd675f07756d1301 ref(example_cli): add typedefs to reduce type complexity (vmammal)
64a90192d9d49c3df22d2b5f489ba20222fd941a refactor: remove old clippy allow attributes (vmammal)

Pull request description:

  closes #1127

  There are several instances in the code where we allow clippy lints that would otherwise be flagged during regular checks. It would be preferable to minimize the number of "clippy allow" attributes either by fixing the affected areas or setting a specific configuration in `clippy.toml`. In cases where we have to allow a particular lint, it should be documented why the lint doesn't apply.

  For context see https://github.com/bitcoindevkit/bdk/issues/1127#issuecomment-1784256647 as well as the commit message details.

  One area I'm unsure of is whether `Box`ing a large error in 4fc2216 is the right approach. Logically it makes sense to avoid allocating a needlessly heavy `Result`, but I haven't studied the implications or tradeoffs of such a change.

  ### 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 1c15cb2f9169bb08a4128c183eeeca80fff97ab7

Tree-SHA512: 5fa3796a33678651414e7aad7ef8309b4cbe2a9ab00dce094964b40784edb2f46a44067785d95ea26f4cd88d593420485be94c9b09ac589f632453fbd8c94d85

23 months agoref(example_cli): Add new struct Init
vmammal [Tue, 30 Jan 2024 22:56:51 +0000 (17:56 -0500)]
ref(example_cli): Add new struct Init

for holding the items returned from `example_cli::init`

23 months agoref(esplora): `Box` a large `esplora_client::Error`
vmammal [Sun, 29 Oct 2023 05:02:31 +0000 (01:02 -0400)]
ref(esplora): `Box` a large `esplora_client::Error`

to address `clippy::result_large_err`. Clippy's default large-error-
threshold is 128. `esplora_client::Error` currently has size 272.

23 months agoref(wallet): `Wallet::preselect_utxos` now accepts a `&TxParams`
vmammal [Fri, 10 Nov 2023 15:54:56 +0000 (10:54 -0500)]
ref(wallet): `Wallet::preselect_utxos` now accepts a `&TxParams`

to reduce the number of required function args in order to satisfy
`clippy::too_many_arguments`

23 months agoref(psbt): refactor body of `get_utxo_for` to address `clippy::manual_map`
vmammal [Sun, 29 Oct 2023 03:12:22 +0000 (23:12 -0400)]
ref(psbt): refactor body of `get_utxo_for` to address `clippy::manual_map`

23 months agoref(example_cli): add typedefs to reduce type complexity
vmammal [Sun, 29 Oct 2023 02:53:37 +0000 (22:53 -0400)]
ref(example_cli): add typedefs to reduce type complexity

- Add typedefs to model the result of functions `planned_utxos`
and `init`

- Add new struct `CreateTxChange` to hold any change info
resulting from `create_tx`

These changes help resolve clippy::type_complexity

23 months agorefactor: remove old clippy allow attributes
vmammal [Sun, 29 Oct 2023 02:32:32 +0000 (22:32 -0400)]
refactor: remove old clippy allow attributes

These lints either resolved themselves, or the code has changed such that
they no longer apply, hence they can be removed with no further changes.

`clippy::derivable_impls`
`clippy::needless_collect`
`clippy::almost_swapped`

23 months agoMerge bitcoindevkit/bdk#1307: Bump version to 1.0.0-alpha.5 v1.0.0-alpha.5
Steve Myers [Wed, 31 Jan 2024 16:01:53 +0000 (10:01 -0600)]
Merge bitcoindevkit/bdk#1307: Bump version to 1.0.0-alpha.5

d597f4c761d10966c12ddaf59f4ed0d9ffdac21b Bump version to 1.0.0-alpha.5 (Steve Myers)

Pull request description:

  ### Description

  Bump version to 1.0.0-alpha.5

  bdk_chain to 0.9.0
  bdk_bitcoind_rpc to 0.4.0
  bdk_electrum to 0.7.0
  bdk_esplora to 0.7.0
  bdk_file_store to 0.5.0

  ### 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:
  danielabrozzoni:
    ACK d597f4c761d10966c12ddaf59f4ed0d9ffdac21b

Tree-SHA512: 36ba783083441ddd8d209ede35ff46832fd2532f588ddbff0e4e23fb336aff398f8ca612e2bfd5fa214d0f4c14a4dea9147b34724734cc43b752789765e7a447

23 months agoBump version to 1.0.0-alpha.5
Steve Myers [Wed, 31 Jan 2024 15:23:20 +0000 (09:23 -0600)]
Bump version to 1.0.0-alpha.5

bdk_chain to 0.9.0
bdk_bitcoind_rpc to 0.4.0
bdk_electrum to 0.7.0
bdk_esplora to 0.7.0
bdk_file_store to 0.5.0

23 months agoMerge bitcoindevkit/bdk#1306: Implement `ElectrumExt` for all that implements `Electr...
Steve Myers [Wed, 31 Jan 2024 14:59:05 +0000 (08:59 -0600)]
Merge bitcoindevkit/bdk#1306: Implement `ElectrumExt` for all that implements `ElectrumApi`

ce8c617c9d562a54728c6cafc0562a66bae56b3e feat(electrum): impl `ElectrumExt` for all that impl `ElectrumApi` (志宇)

Pull request description:

  ### Description

  Implement `ElectrumExt` for all that implements `ElectrumApi`.

  I realized this while looking into #1171.

  https://github.com/bitcoindevkit/bdk/blob/2196685cca741a249f4a5b53c7609162469714ba/crates/electrum/tests/test_electrum.rs#L54-L55

  Line 55 here should not be necessary.

  ### Changelog notice

  * Changed to implement `ElectrumExt` for all that implements `ElectrumApi`.

  ### 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 ce8c617c9d562a54728c6cafc0562a66bae56b3e

Tree-SHA512: d95193a9a356a0aa3f467db3b8c7bf2cfdf83afd520f5254721912cfe82355de1198256b90323e51ffdb0bf955ff923a9ceb8b4541d4a5ad2331ff0bf26ab937

23 months agofeat(electrum): impl `ElectrumExt` for all that impl `ElectrumApi`
志宇 [Wed, 31 Jan 2024 14:19:01 +0000 (22:19 +0800)]
feat(electrum): impl `ElectrumExt` for all that impl `ElectrumApi`

23 months agoMerge bitcoindevkit/bdk#1267: Simplify `Esplora::update_local_chain` and add tests
Steve Myers [Wed, 31 Jan 2024 14:32:37 +0000 (08:32 -0600)]
Merge bitcoindevkit/bdk#1267: Simplify `Esplora::update_local_chain` and add tests

c5afbaa95d7bc699981d6fe7f9964a41b7587d5c ci: update zstd-sys version to work with MSRV 1.63 (Steve Myers)
929b5ddb0c2e0dc7c346c08888201ac54efab84d refactor(esplora): better variable naming and docs (志宇)
216648bcfd2c622890bf7f50fb2eaa4396c42ed1 chore(esplora): Clarify consistency guarantees (LLFourn)
63fa710319f231f7f28d92cb49b0399f3250c9da fix(esplora): reuse returned height instead of zipping (志宇)
6f824cf325c6c882b00742d814be1d72602f05a6 test(esplora): introduce test cases for `update_local_chain` (志宇)
f05e8502e69a051af9869be6ba5ad9a376b25fc2 feat(esplora): greatly simplify `update_local_chain` (志宇)

Pull request description:

  Fixes #1199

  ### Description

  After a second look at the `update_local_chain` implementations, it was clear that they were over complicated. This PR simplifies the `EsploraExt::update_local_chain` method(s) of the `bdk_esplora` crate and adds a whole bunch of tests.

  ### Notes to the reviewers

  The description of #1199 is very brief, however @danielabrozzoni mentioned about potentially-problematic logic with `ASSUME_FINAL_DEPTH`. The logic was indeed convoluted and it did not need to be that way. This PR removes the need for `ASSUME_FINAL_DEPTH`.

  ### Changelog notice

  Fixed
  - Simplified `EsploraExt::update_local_chain` logic.

  ### 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~
  ~* [ ] I've added tests to reproduce the issue which are now passing~ (there are now lots of tests though)
  * [x] I'm linking the issue being fixed by this PR

ACKs for top commit:
  evanlinjin:
    ACK c5afbaa95d7bc699981d6fe7f9964a41b7587d5c
  notmandatory:
    utACK c5afbaa95d7bc699981d6fe7f9964a41b7587d5c

Tree-SHA512: f588493a4643f0f68d3181f27adf91793d4e336be6e853a26289e0916ed83169e1067260b75e627f190842f691ec095e668c0b799ca80e7da2849dd28de32754

23 months agoci: update zstd-sys version to work with MSRV 1.63
Steve Myers [Wed, 31 Jan 2024 14:15:37 +0000 (08:15 -0600)]
ci: update zstd-sys version to work with MSRV 1.63

23 months agorefactor(esplora): better variable naming and docs
志宇 [Wed, 31 Jan 2024 07:55:44 +0000 (15:55 +0800)]
refactor(esplora): better variable naming and docs

23 months agoMerge bitcoindevkit/bdk#1279: Filter duplicate coins before coin selection
志宇 [Wed, 31 Jan 2024 08:00:04 +0000 (16:00 +0800)]
Merge bitcoindevkit/bdk#1279: Filter duplicate coins before coin selection

5299db34cb9117ad1b66a6afcb51f6ca7e1f0d95 fix(wallet): filter duplicates before coin selection (志宇)
d9501187ef3c4436b7baedb23a4d4f6b1f46a03d test(wallet): fix tests helpers to generate unique utxos (志宇)

Pull request description:

  Fixes #1240

  ### Description

  We now filter out duplicate coins before calling `CoinSelectionAlgorithm::coin_select`. If a UTXO exists in both `required_utxos` and `optional_utxos`, only the copy in `required_utxos` will be kept.

  Test helper methods are also updated to not create duplicate UTXOs.

  ### Changelog notice

  Fixed

  * Filter out duplicate UTXOs before calling `CoinSelectionAlgorithm::coin_select`. If a UTXO exists in both `required_utxos` and `optional_utxos`, only the copy in `required_utxos` will be kept.

  ### 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:
  danielabrozzoni:
    utACK 5299db34cb9117ad1b66a6afcb51f6ca7e1f0d95

Tree-SHA512: 9cb5517b7f74f89c06172efc344766b16b3216a25b1ebdd6eb84767a9e103124cead9eb0a7f3b5feb562fbb925517a9bf0404399de74b4e898982a5b3795aa04

23 months agochore(esplora): Clarify consistency guarantees
LLFourn [Tue, 30 Jan 2024 02:57:06 +0000 (13:57 +1100)]
chore(esplora): Clarify consistency guarantees

23 months agofix(wallet): filter duplicates before coin selection
志宇 [Tue, 16 Jan 2024 07:51:15 +0000 (15:51 +0800)]
fix(wallet): filter duplicates before coin selection

23 months agoMerge bitcoindevkit/bdk#1287: doc(store): update doc for `Store::aggregate_changesets`
志宇 [Mon, 29 Jan 2024 12:54:20 +0000 (20:54 +0800)]
Merge bitcoindevkit/bdk#1287: doc(store): update doc for `Store::aggregate_changesets`

3829fc18c7f2d16d2c72852bde4b4b70bff8e370 doc(store): update doc for `Store::aggregate_changesets` (vmammal)

Pull request description:

  ### 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 3829fc18c7f2d16d2c72852bde4b4b70bff8e370

Tree-SHA512: 55e3dea6db4e023edcd6f12e3c2e8f63c79654b178e01e2fb8b66f3a66399aabedb1d159cd015b78bc2166be6e640e0ed684e3571f2c4f2f6a53fa68d2ef9849

23 months agofix(esplora): reuse returned height instead of zipping
志宇 [Mon, 29 Jan 2024 09:43:41 +0000 (18:43 +0900)]
fix(esplora): reuse returned height instead of zipping

23 months agoMerge bitcoindevkit/bdk#1290: doc(example_cli): add missing cli docs
志宇 [Mon, 29 Jan 2024 09:06:50 +0000 (18:06 +0900)]
Merge bitcoindevkit/bdk#1290: doc(example_cli): add missing cli docs

c4d5f2ccd8435b9c424eec5ba35ba44a3383b04d doc(example_cli): add missing cli docs (vmammal)

Pull request description:

  ### 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 c4d5f2ccd8435b9c424eec5ba35ba44a3383b04d

Tree-SHA512: 43684abbb32570f07e0dc05ed07062bc7969cbe7c4fefe8ae7ebe41ac28aedfbba76ffc801bc4ddb3bf08a940ca81c128376dc3f6c76a04f1391e43c18e0d50b

23 months agoMerge bitcoindevkit/bdk#1299: fix(file_store): rm lifetime from `FileError`
志宇 [Mon, 29 Jan 2024 08:52:00 +0000 (17:52 +0900)]
Merge bitcoindevkit/bdk#1299: fix(file_store): rm lifetime from `FileError`

5611c9e42adb4106f48039e19ab0797b266c7fff fix(file_store): rm lifetime from `FileError` (志宇)

Pull request description:

  ### Description

  The lifetime on the error needed to be the same as the input magic bytes which was annoying.

  ### Changelog notice

  Fixed
  * Remove `bdk_file_store::FileError` lifetime.

  ### 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 5611c9e42adb4106f48039e19ab0797b266c7fff

Tree-SHA512: 0eca5128c71c9adb10a712d169a2170b8cbb91678f93986957e86b26dbfed3ab19217a136b57328249a13a51cc06e6c424d58683d74a0fa3d29c22af04a95591

23 months agoMerge bitcoindevkit/bdk#1301: Fix `ConfirmationTime` conversion from `ChainPosition`
志宇 [Mon, 29 Jan 2024 08:51:00 +0000 (17:51 +0900)]
Merge bitcoindevkit/bdk#1301: Fix `ConfirmationTime` conversion from `ChainPosition`

e687c27096e1c8f36c3a129dc6d92af9c5d05a30 fix(chain): convert to `ConfirmationTime` fix (志宇)

Pull request description:

  ### Description

  We forgot to include the `last_seen` when converting from `ChainPosition` to `ConfirmationTime`.

  ### Notes to the reviewers

  No brainer.

  ### Changelog notice

  * Fix `ConfirmationTime` conversion from `ChainPosition` to include the `last_seen`.

  ### 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 e687c27096e1c8f36c3a129dc6d92af9c5d05a30

Tree-SHA512: 182f804309c7ea7f2a42911bc00d836ef48a8617c156b2275d6908b07f619b2466039f54728dd3ca2552f4cd11528a8733618f4ce6a4c88d7e88a05a3d82ffaf

23 months agoMerge pull request #1296 from yukibtc/change-default-lookahead
Lloyd Fournier [Mon, 29 Jan 2024 08:19:49 +0000 (19:19 +1100)]
Merge pull request #1296 from yukibtc/change-default-lookahead

chain: set `DEFAULT_LOOKAHEAD` to 25

23 months agofix(chain): convert to `ConfirmationTime` fix
志宇 [Mon, 29 Jan 2024 08:14:23 +0000 (17:14 +0900)]
fix(chain): convert to `ConfirmationTime` fix

We forgot to include the `last_seen` when converting from
`ChainPosition` to `ConfirmationTime`.

23 months agofix(file_store): rm lifetime from `FileError`
志宇 [Thu, 25 Jan 2024 15:39:59 +0000 (00:39 +0900)]
fix(file_store): rm lifetime from `FileError`

The lifetime on the error needed to be the same as the input magic bytes
which was annoying.

23 months agoMerge bitcoindevkit/bdk#1270: Improve performance of `bdk_file_store::EntryIter`
志宇 [Thu, 25 Jan 2024 14:49:51 +0000 (23:49 +0900)]
Merge bitcoindevkit/bdk#1270: Improve performance of `bdk_file_store::EntryIter`

51bd01b3dd3d68c1628d74be9dc6d0f1cf1f15fe fix(file_store): recover file offset after read (志宇)
66dc34e75ab1ec2ae533bd540327721f6226eca1 refactor(file_store): Use BufReader but simplify (LLFourn)
c8717646700bdac0f1e13ec499481bd1fee30ffd test(file_store): `last_write_is_short` (志宇)
a3aa8b6682a3a13958fd5fbadc4074a1907a78db feat(file_store)!: optimize `EntryIter` by reducing syscalls (志宇)

Pull request description:

  ### Description

  `EntryIter` performance is improved by reducing syscalls. The underlying file reader is wrapped with `BufReader` (to reduce calls to `read` and `seek`).

  Two new tests are introduced. One ensures correct behavior when the last changeset write is too short. The other ensures the next write position is correct after a short read.

  ### Notes to the reviewers

  This is extracted from #1172 as suggested by https://github.com/bitcoindevkit/bdk/pull/1172#pullrequestreview-1817465627.

  ### Changelog notice

  Changed
  * `EntryIter` performance is improved by reducing syscalls.

  ### 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:
  LLFourn:
    ACK 51bd01b3dd3d68c1628d74be9dc6d0f1cf1f15fe

Tree-SHA512: 9c25f9f2032cb2d551f3fe4ac62b856ceeb69a388f037b34674af366c55629a2eaa2b90b1ae4fbd425415ea8d02f44493a6c643b4b1a57f4507e87aa7ade3736

23 months agoMerge bitcoindevkit/bdk#1294: Expose `SpkIterator::new_with_range`
志宇 [Thu, 25 Jan 2024 11:56:25 +0000 (20:56 +0900)]
Merge bitcoindevkit/bdk#1294: Expose `SpkIterator::new_with_range`

8305e648494cbdd1f6438904ec367f8442fba606 feat(chain): expose `SpkIterator::new_with_range` (志宇)

Pull request description:

  ### Description

  This method is useful, I'm not sure why it is not public.

  I've also updated the docs and tests.

  ### Changelog notice

  Added
  * Expose `SpkIterator::new_with_range`

  ### 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:
  danielabrozzoni:
    utACK 8305e648494cbdd1f6438904ec367f8442fba606
  LLFourn:
    ACK 8305e648494cbdd1f6438904ec367f8442fba606

Tree-SHA512: 26389bf65bea74742ebb4d170f3d21aeb02e5be1b3fd20ef16eb318393145809d2b21b96767ebb42acfd8dd789a82bb2d7b29ded24249dabf06bd1e6d23cf0cf

23 months agofix(file_store): recover file offset after read
志宇 [Tue, 23 Jan 2024 04:32:13 +0000 (12:32 +0800)]
fix(file_store): recover file offset after read

Because we use wrap the file with `BufReader` with the `EntryIter`, we
need to sync the `BufReader`'s position with the file's offset when we
drop the `EntryIter`. Therefore we have a custom drop impl for
`EntryIter`.

23 months agochain: set `DEFAULT_LOOKAHEAD` to 25
Yuki Kishimoto [Tue, 23 Jan 2024 08:44:38 +0000 (09:44 +0100)]
chain: set `DEFAULT_LOOKAHEAD` to 25

23 months agofeat(chain): expose `SpkIterator::new_with_range`
志宇 [Mon, 22 Jan 2024 06:21:20 +0000 (14:21 +0800)]
feat(chain): expose `SpkIterator::new_with_range`

Also update docs and add tests

23 months agorefactor(file_store): Use BufReader but simplify
LLFourn [Mon, 22 Jan 2024 02:48:48 +0000 (13:48 +1100)]
refactor(file_store): Use BufReader but simplify

23 months agoMerge bitcoindevkit/bdk#1253: Remove deprecated checksum routines
Daniela Brozzoni [Mon, 22 Jan 2024 21:24:25 +0000 (22:24 +0100)]
Merge bitcoindevkit/bdk#1253: Remove deprecated checksum routines

ed91a4bdb49276057eb7458e1a94653553be24e7 Consolidate `calc_checksum_bytes_internal` routine (Sebastian Falbesoner)
179cfeff51cefda80c16fa4558ba039143a2ad2c Remove deprecated `get_checksum{,_bytes}` routines (Sebastian Falbesoner)

Pull request description:

  ### Description

  This PR removes the routines `get_checksum` and `get_checksum_bytes` (in the bdk crate, descriptor/checksum.rs), which have been deprecated in 0.24.0. Consequently, the routine `calc_checksum_bytes_internal` is consolidated into `calc_checksum_bytes`, as the boolean parameter `exclude_hash` is not needed anymore. See also the two TODOs in the touched file.

  ### Notes to the reviewers

  In the second commit, the signature of the function `calc_checksum_bytes` slightly changes, as the `desc` parameter now is declared as `mut`, in order to change the local variable within the function. My rust experience is rather limited, so I'm not sure if this is a problem for users. IIUC, this is comparable to changing a pass-by-value parameter in C++ from `const std::string desc` to `std::string desc`, which is relevant only for the function implementation, but doesn't change the interface.

  ### Changelog notice

  - Remove deprecated `get_checksum` and `get_checksum_bytes` routines

  ### 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:
  danielabrozzoni:
    ACK ed91a4bdb49276057eb7458e1a94653553be24e7

Tree-SHA512: a29ead57d0369b67e7e79734d7ddc26f42e7ee78b3a6a336cbf9dfa5579f55e7ddbc20b1662d4bedddd7b40a49511dc21c2652911f56d84c9663099b383e1084

23 months agodoc(example_cli): add missing cli docs
vmammal [Wed, 17 Jan 2024 18:58:40 +0000 (13:58 -0500)]
doc(example_cli): add missing cli docs

23 months agoMerge bitcoindevkit/bdk#1277: fix(readme): update examples
Daniela Brozzoni [Mon, 22 Jan 2024 11:27:56 +0000 (12:27 +0100)]
Merge bitcoindevkit/bdk#1277: fix(readme): update examples

914db84824edf25418ab0b7b2df7bca84605d64d fix(readme): update examples (Jose Storopoli)

Pull request description:

  ### Description

  Some janitor cleaning in the README to update the `example-crates/`

  ### Notes to the reviewers

  None.

  ### Changelog notice

  - fix(readme): update 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

  #### 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:
  danielabrozzoni:
    ACK 914db84824edf25418ab0b7b2df7bca84605d64d

Tree-SHA512: 9376e7ac816ebc4b0bd9652c2e357486e39c55f6542ef650087962b7a864655f7f70a6305b315363e3ed750ce4cea1a328b6a413c340aa94b693b130da2d36b5

23 months agoMerge bitcoindevkit/bdk#1289: doc(electrum_ext): fix docs for `RelevantTxids::into_co...
Daniela Brozzoni [Mon, 22 Jan 2024 11:19:25 +0000 (12:19 +0100)]
Merge bitcoindevkit/bdk#1289: doc(electrum_ext): fix docs for `RelevantTxids::into_confirmation_tim…

cf0c3337446b1de19ad6be9e68f5a9cb848d5773 doc(electrum_ext): fix docs for `RelevantTxids::into_confirmation_time_tx_graph` (vmammal)

Pull request description:

  Note also, the bit referring to Electrum's API sounds more like a developer note, so I made it a regular code comment.

  ### 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:
  danielabrozzoni:
    ACK cf0c3337446b1de19ad6be9e68f5a9cb848d5773

Tree-SHA512: 0ebd6a753c8a0c573510a4d866068cb6e1c7e356c43b20b5179331a1b7d567e4dfbf7012c63ba9b7b9566bf6564a2d957d12e54d5c0232b7be9869dfe0958e85

23 months agofix(readme): update examples
Jose Storopoli [Mon, 15 Jan 2024 22:58:42 +0000 (19:58 -0300)]
fix(readme): update examples

23 months agoMerge bitcoindevkit/bdk#1291: doc(chain,esplora): minor documentation improvements
Daniela Brozzoni [Mon, 22 Jan 2024 11:01:27 +0000 (12:01 +0100)]
Merge bitcoindevkit/bdk#1291: doc(chain,esplora): minor documentation improvements

b6a58d4f9bab13be0f3518f556936fa77a6b7b39 doc(chain,esplora): minor documentation improvements (vmammal)

Pull request description:

  * Corrects an awkward use of the word 'an'
  * Adds missing backticks, brackets in a few places

  ### 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:
  danielabrozzoni:
    ACK b6a58d4f9bab13be0f3518f556936fa77a6b7b39

Tree-SHA512: 42f12f218a9849b6fc1c8da28c4d41ca86fcc9ea52311d28f67fadbec030b6cb6986774d89a30e7a2b5ee569b08c7cfa2af71bbb9b06efacfa685dbe95820f73

23 months agoMerge bitcoindevkit/bdk#1288: doc(esplora): fix broken link in README
Daniela Brozzoni [Mon, 22 Jan 2024 10:53:25 +0000 (11:53 +0100)]
Merge bitcoindevkit/bdk#1288: doc(esplora): fix broken link in README

7c0f4653b281b4288e92ed8cd45ead8abd104f52 doc(esplora): fix broken link in README (vmammal)

Pull request description:

  ### 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:
  danielabrozzoni:
    ACK 7c0f4653b281b4288e92ed8cd45ead8abd104f52

Tree-SHA512: 6e09a0b74c1a64bc9d0d0a067daf7766c4a46511c22b676251f61608d770d3ea2c1df81d4e9bbbee69720cad5cd2deb9b146cb7751277871f0cbf1be96efcc9f

23 months agoMerge bitcoindevkit/bdk#1285: doc(wallet): improve docs for `Wallet::sent_and_received`
志宇 [Fri, 19 Jan 2024 15:37:59 +0000 (23:37 +0800)]
Merge bitcoindevkit/bdk#1285: doc(wallet): improve docs for `Wallet::sent_and_received`

08b745ec9f16fa8ef18b0d9c92feb9d8ab87a184 doc(wallet): improve docs for `Wallet::sent_and_received` (vmammal)

Pull request description:

  Thank you @thunderbiscuit for raising this issue. I noticed this method borrows the language from `SpkTxOutIndex::sent_and_received`, which this PR doesn't touch. I think in general it's desirable that methods in `bdk_chain` crate would refer to some of the core structures directly.

  ### 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 08b745ec9f16fa8ef18b0d9c92feb9d8ab87a184

Tree-SHA512: 7f1285c4baa5fb56fd65baa5585bd343338de9988b941618a2b9ab628d869563f6f71ce842f936e7e1fb6a56f2f1e50fc3deaff858e830b7039888e4e496ce9a

23 months agoMerge bitcoindevkit/bdk#1292: fix(store): Remove lifetime
志宇 [Fri, 19 Jan 2024 15:28:19 +0000 (23:28 +0800)]
Merge bitcoindevkit/bdk#1292: fix(store): Remove lifetime

e6433fb2c1526cff37e3a17cc71986759ebac30f feat(persist): Add stage_and_commit to Persist (LLFourn)
0bee46e75bc99112abc15de59984e6059ff874e5 fix(store): Remove lifetime (LLFourn)

Pull request description:

  Remove gratuitous use of lifetimes in the main persistence struct `Store`. Having lifetimes on this means that you have to keep the magic bytes alive longer than the database which is particularly offensive if you have to send the database to another thread. On top of that the bytes aren't even read.

ACKs for top commit:
  evanlinjin:
    ACK e6433fb2c1526cff37e3a17cc71986759ebac30f

Tree-SHA512: 7f6d9d60951a8ceaee30719d0771e15632c6fad0702294af15409c5df492669a07299874ef5ee34e3d75bdecbbd41df29bced3ff16b2360d5d5c7687ef677ffc

23 months agotest(esplora): introduce test cases for `update_local_chain`
志宇 [Thu, 11 Jan 2024 17:25:17 +0000 (01:25 +0800)]
test(esplora): introduce test cases for `update_local_chain`

23 months agofeat(esplora): greatly simplify `update_local_chain`
志宇 [Thu, 11 Jan 2024 13:23:52 +0000 (21:23 +0800)]
feat(esplora): greatly simplify `update_local_chain`

23 months agoMerge bitcoindevkit/bdk#1172: Introduce block-by-block API to `bdk::Wallet` and add...
志宇 [Fri, 19 Jan 2024 15:07:20 +0000 (23:07 +0800)]
Merge bitcoindevkit/bdk#1172: Introduce block-by-block API to `bdk::Wallet` and add RPC wallet example

a4f28c079e3bc4500e8329aeed230d8100d38617 chore: improve LocalChain::apply_header_connected_to doc (LLFourn)
8ec65f0b8ef7d452a0bdba6760c46bd8511c91ff feat(example): add RPC wallet example (Vladimir Fomene)
a7d01dc39acb3ff7f4bc8e237c7862d019a91cd1 feat(chain)!: make `IndexedTxGraph::apply_block_relevant` more efficient (志宇)
e0512acf9476fa3fa7da9cc28a222432f974aad5 feat(bitcoind_rpc)!: emissions include checkpoint and connected_to data (志宇)
8f2d4d9d400e398b54cf1bad36057f3f8f4a69a4 test(chain): `LocalChain` test for update that is shorter than original (志宇)
9467cad55d68354fe037d57bceeee57c2032bd51 feat(wallet): introduce block-by-block api (Vladimir Fomene)
d3e5095df10d21ff5cb7f8ce4dab7922f3cb6e35 feat(chain): add `apply_header..` methods to `LocalChain` (志宇)
2b61a122ff40253f2e67c0ae6824ce881c9f12a1 feat(chain): add `CheckPoint::from_block_ids` convenience method (志宇)

Pull request description:

  ### Description

  Introduce block-by-block API for `bdk::Wallet`. A `wallet_rpc` example is added to demonstrate syncing `bdk::Wallet` with the `bdk_bitcoind_rpc` chain-source crate.

  The API of `bdk_bitcoind_rpc::Emitter` is changed so the receiver knows how to connect to the block emitted.

  ### Notes to the reviewers

  ### Changelog notice

  Added
  * `Wallet` methods to apply full blocks (`apply_block` and `apply_block_connected_to`) and a method to apply a batch of unconfirmed transactions (`apply_unconfirmed_txs`).
  * `CheckPoint::from_block_ids` convenience method.
  * `LocalChain` methods to apply a block header (`apply_header` and `apply_header_connected_to`).
  * Test to show that `LocalChain` can apply updates that are shorter than original. This will happen during reorgs if we sync wallet with `bdk_bitcoind_rpc::Emitter`.

  Fixed
  * `InsertTxError` now implements `std::error::Error`.

  #### 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:
  LLFourn:
    self-ACK: a4f28c079e3bc4500e8329aeed230d8100d38617
  evanlinjin:
    ACK a4f28c079e3bc4500e8329aeed230d8100d38617

Tree-SHA512: e39fb65b4e69c0a6748d64eab12913dc9cfe5eb8355ab8fb68f60a37c3bb2e1489ddd8f2f138c6470135344f40e3dc671928f65d303fd41fb63f577b30895b60

23 months agofeat(persist): Add stage_and_commit to Persist
LLFourn [Fri, 19 Jan 2024 00:23:46 +0000 (11:23 +1100)]
feat(persist): Add stage_and_commit to Persist

In the example_cli we were not always committing (seemingly by mistake).
This then caused all the examples to have to compensate by manually
committing.

23 months agofix(store): Remove lifetime
LLFourn [Thu, 18 Jan 2024 23:34:37 +0000 (10:34 +1100)]
fix(store): Remove lifetime

Remove gratuitous use of lifetimes in the main persistence struct

23 months agodoc(wallet): improve docs for `Wallet::sent_and_received`
vmammal [Wed, 17 Jan 2024 18:00:27 +0000 (13:00 -0500)]
doc(wallet): improve docs for `Wallet::sent_and_received`

23 months agoMerge bitcoindevkit/bdk#1282: Bump version to 1.0.0-alpha.4 v1.0.0-alpha.4
志宇 [Thu, 18 Jan 2024 11:22:41 +0000 (19:22 +0800)]
Merge bitcoindevkit/bdk#1282: Bump version to 1.0.0-alpha.4

d33acc14661326972b3ab3cf2b7cee4ca078f4da Bump version to 1.0.0-alpha.4 (Steve Myers)

Pull request description:

  ### Description

  Bump version to 1.0.0-alpha.4, also:

  bdk_chain to 0.8.0
  bdk_bitcoind_rpc to 0.3.0
  bdk_electrum to 0.6.0
  bdk_esplora to 0.6.0
  bdk_file_store to 0.4.0

  Fixes #1281.

  ### Notes to the reviewers

  Since the version of bdk_chain changed all crates that depend on it also need to have their versions bumped.

  ### 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 d33acc14661326972b3ab3cf2b7cee4ca078f4da

Tree-SHA512: ffb5c05b45e9d646ef796bd894353e4b58c3aae3dcf0921dfb9fcae45020ed4fc82274a7497494d6259bfffff9c2f97c530d2cbe6ace578babd04852af461f3a

23 months agoBump version to 1.0.0-alpha.4
Steve Myers [Tue, 16 Jan 2024 17:28:41 +0000 (11:28 -0600)]
Bump version to 1.0.0-alpha.4

bdk_chain to 0.8.0
bdk_bitcoind_rpc to 0.3.0
bdk_electrum to 0.6.0
bdk_esplora to 0.6.0
bdk_file_store to 0.4.0

23 months agoMerge bitcoindevkit/bdk#1286: doc, example(bdk): fix derivation path in mnemonic_to_d...
Daniela Brozzoni [Thu, 18 Jan 2024 11:05:25 +0000 (12:05 +0100)]
Merge bitcoindevkit/bdk#1286: doc, example(bdk): fix derivation path in mnemonic_to_descriptors

d494f63d08f60ce01c22ff08f7e88a80a7be2522 doc, example(bdk): fix derivation path in mnemonic_to_descriptors (vmammal)

Pull request description:

  This will help avoid confusion with mainnet descriptors.

  ### 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:
  danielabrozzoni:
    ACK d494f63d08f60ce01c22ff08f7e88a80a7be2522

Tree-SHA512: f0450d171bc53085204280495f2954e20f4b64a73cfbcc9a0c3be131c0b04ad53e936c83fa83c89fbd1ed1c4edd680e8437550453f75056049d36f84cae1df43

23 months agoMerge bitcoindevkit/bdk#1269: Revamp `KeychainTxOutIndex` API to be safer
Daniela Brozzoni [Thu, 18 Jan 2024 10:24:31 +0000 (11:24 +0100)]
Merge bitcoindevkit/bdk#1269: Revamp `KeychainTxOutIndex` API to be safer

71fff1613d1c167d180636857063e181f6acedf1 feat(chain): add txout methods to `KeychainTxOutIndex` (志宇)
83e7b7ec402bef27c3f83876f346ec2abd23eff1 docs(chain): improve `KeychainTxOutIndex` docs (志宇)
9294e30943f3f79bb36915d69652d9086323131f docs(wallet): improve docs for unbounded spk iterator methods (志宇)
b74c2e262255a39e9dc904aad469e307bf7d0151 fix(wallet): use efficient peek address logic (志宇)
81aeaba48a980a7e7add76ac2d24e896bedaa1d2 feat(chain): add `SpkIterator::descriptor` method (志宇)
c7b47af72f278ba73abea58db49cff1245428f97 refactor(chain)!: revamp `KeychainTxOutIndex` API (志宇)
705690ee8fddba8517d907183b7ddfeafb633609 feat(chain): make output of `SpkTxOutIndex::unused_spks` cloneable (志宇)

Pull request description:

  Closes #1268

  ### Description

  Previously `SpkTxOutIndex` methods can be called from `KeychainTxOutIndex` due to the `DeRef` implementation. However, the internal `SpkTxOut` will also contain lookahead spks resulting in an error-prone API.

  `SpkTxOutIndex` methods are now not directly callable from `KeychainTxOutIndex`. Methods of `KeychainTxOutIndex` are renamed for clarity. I.e. methods that return an unbounded spk iter are prefixed with `unbounded`.

  In addition to this, I also optimized the peek-address logic of `bdk::Wallet` using the optimized `<SpkIterator as Iterator>::nth` implementation.

  ### Notes to the reviewers

  This is mostly refactoring, but can also be considered a bug-fix (as the API before was very problematic).

  ### Changelog notice

  Changed
  * Wallet's peek-address logic is optimized by making use of `<SpkIterator as Iterator>::nth`.
  * `KeychainTxOutIndex` API is refactored to better differentiate between methods that return unbounded vs stored spks.
  * `KeychainTxOutIndex` no longer directly exposes `SpkTxOutIndex` methods via `DeRef`. This was problematic because `SpkTxOutIndex` also contains lookahead spks which we want to hide.

  Added
  * `SpkIterator::descriptor` method which gets a reference to the internal descriptor.

  ### 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~
  * [x] I've added docs for the new feature

  #### Bugfixes:

  * [x] This pull request breaks the existing API
  * [ ] 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:
  danielabrozzoni:
    ACK 71fff1613d1c167d180636857063e181f6acedf1

Tree-SHA512: f29c7d2311d0e81c4fe29b8f57c219c24db958194fad5de82bb6d42d562d37fd5d152be7ee03a3f00843be5760569ad29b848250267a548d7d15320fd5292a8f

23 months agofeat(chain): add txout methods to `KeychainTxOutIndex`
志宇 [Thu, 18 Jan 2024 06:30:29 +0000 (14:30 +0800)]
feat(chain): add txout methods to `KeychainTxOutIndex`

`txouts` and `txouts_in_tx` are exposed from `SpkTxOutIndex`, but
modified to remove nested unions.

Add `keychain_outpoints_in_range` that iterates over outpoints of a
given keychain derivation range.

23 months agodoc(chain,esplora): minor documentation improvements
vmammal [Wed, 17 Jan 2024 19:07:14 +0000 (14:07 -0500)]
doc(chain,esplora): minor documentation improvements

* Corrects an awkward use of the word 'an'
* Adds missing backticks, brackets in a few places

23 months agodoc(electrum_ext): fix docs for `RelevantTxids::into_confirmation_time_tx_graph`
vmammal [Wed, 17 Jan 2024 18:49:58 +0000 (13:49 -0500)]
doc(electrum_ext): fix docs for `RelevantTxids::into_confirmation_time_tx_graph`

23 months agodoc(esplora): fix broken link in README
vmammal [Wed, 17 Jan 2024 18:45:35 +0000 (13:45 -0500)]
doc(esplora): fix broken link in README

23 months agodoc(store): update doc for `Store::aggregate_changesets`
vmammal [Wed, 17 Jan 2024 18:41:23 +0000 (13:41 -0500)]
doc(store): update doc for `Store::aggregate_changesets`

23 months agodoc, example(bdk): fix derivation path in mnemonic_to_descriptors
vmammal [Wed, 17 Jan 2024 18:29:25 +0000 (13:29 -0500)]
doc, example(bdk): fix derivation path in mnemonic_to_descriptors

This will help avoid confusion with mainnet descriptors.

23 months agodocs(chain): improve `KeychainTxOutIndex` docs
志宇 [Wed, 17 Jan 2024 05:30:28 +0000 (13:30 +0800)]
docs(chain): improve `KeychainTxOutIndex` docs

More clarity for revealed/lookahead spks and give usecases.

23 months agodocs(wallet): improve docs for unbounded spk iterator methods
志宇 [Wed, 17 Jan 2024 05:29:16 +0000 (13:29 +0800)]
docs(wallet): improve docs for unbounded spk iterator methods

23 months agofix(wallet): use efficient peek address logic
志宇 [Sat, 13 Jan 2024 12:38:11 +0000 (20:38 +0800)]
fix(wallet): use efficient peek address logic

Changes the peek address logic to use the optimized `Iterator::nth`
implementation of `SpkIterator`.

Additionally, docs are added for panics that will occur when the caller
requests for addresses with out-of-bound derivation indices (BIP32).

23 months agofeat(chain): add `SpkIterator::descriptor` method
志宇 [Sat, 13 Jan 2024 10:33:01 +0000 (18:33 +0800)]
feat(chain): add `SpkIterator::descriptor` method

Otherwise there will be no way to view the descriptor of the
`SpkIterator`.

23 months agorefactor(chain)!: revamp `KeychainTxOutIndex` API
志宇 [Sat, 13 Jan 2024 12:04:49 +0000 (20:04 +0800)]
refactor(chain)!: revamp `KeychainTxOutIndex` API

Previously `SpkTxOutIndex` methods can be called from
`KeychainTxOutIndex` due to the `DeRef` implementation. However, the
internal `SpkTxOut` will also contain lookahead spks resulting in an
error-prone API.

`SpkTxOutIndex` methods are now not directly callable from
`KeychainTxOutIndex`. Methods of `KeychainTxOutIndex` are renamed for
clarity. I.e. methods that return an unbounded spk iter are prefixed
with `unbounded`.

23 months agotest(wallet): fix tests helpers to generate unique utxos
志宇 [Tue, 16 Jan 2024 14:33:42 +0000 (22:33 +0800)]
test(wallet): fix tests helpers to generate unique utxos

23 months agochore: improve LocalChain::apply_header_connected_to doc
LLFourn [Mon, 15 Jan 2024 23:29:49 +0000 (10:29 +1100)]
chore: improve LocalChain::apply_header_connected_to doc

23 months agofeat(example): add RPC wallet example
Vladimir Fomene [Wed, 11 Oct 2023 08:16:38 +0000 (11:16 +0300)]
feat(example): add RPC wallet example

Co-authored-by: Vladimir Fomene <vladimirfomene@gmail.com>
Co-authored-by: 志宇 <hello@evanlinjin.me>
23 months agofeat(chain)!: make `IndexedTxGraph::apply_block_relevant` more efficient
志宇 [Tue, 2 Jan 2024 09:31:34 +0000 (17:31 +0800)]
feat(chain)!: make `IndexedTxGraph::apply_block_relevant` more efficient

Previously, `apply_block_relevant` used `batch_insert_relevant` which
allows inserting non-topologically-ordered transactions. However,
transactions from blocks are always ordered, so we can avoid looping
through block transactions twice (as done in `batch_insert_relevant`).

Additionally, `apply_block_relevant` now takes in a reference to a
`Block` instead of consuming the `Block`. This makes sense as typically
very few of the transactions in the block are inserted.

23 months agofeat(bitcoind_rpc)!: emissions include checkpoint and connected_to data
志宇 [Sat, 30 Dec 2023 12:48:20 +0000 (20:48 +0800)]
feat(bitcoind_rpc)!: emissions include checkpoint and connected_to data

Previously, emissions are purely blocks + the block height. This means
emitted blocks can only connect to previous-adjacent blocks. Hence, sync
must start from genesis and include every block.

23 months agotest(chain): `LocalChain` test for update that is shorter than original
志宇 [Fri, 29 Dec 2023 10:23:42 +0000 (18:23 +0800)]
test(chain): `LocalChain` test for update that is shorter than original

23 months agofeat(wallet): introduce block-by-block api
Vladimir Fomene [Wed, 11 Oct 2023 10:42:21 +0000 (13:42 +0300)]
feat(wallet): introduce block-by-block api

* methods `process_block` and `process_unconfirmed_txs` are added
* amend stage method docs

Co-authored-by: Vladimir Fomene <vladimirfomene@gmail.com>
Co-authored-by: 志宇 <hello@evanlinjin.me>
23 months agofeat(chain): add `apply_header..` methods to `LocalChain`
志宇 [Wed, 10 Jan 2024 16:05:04 +0000 (00:05 +0800)]
feat(chain): add `apply_header..` methods to `LocalChain`

These are convenience methods to transform a header into checkpoints to
update the `LocalChain` with. Tests are included.

23 months agofeat(chain): add `CheckPoint::from_block_ids` convenience method
志宇 [Wed, 10 Jan 2024 09:42:03 +0000 (17:42 +0800)]
feat(chain): add `CheckPoint::from_block_ids` convenience method

23 months agoMerge bitcoindevkit/bdk#1276: Add `LocalChain::disconnect_from` method
Daniela Brozzoni [Mon, 15 Jan 2024 12:56:48 +0000 (13:56 +0100)]
Merge bitcoindevkit/bdk#1276: Add `LocalChain::disconnect_from` method

bf67519768d91b049bf3a47c234ff71a81d0ede9 feat(chain): add `LocalChain::disconnect_from` method (志宇)

Pull request description:

  Closes #1271

  ### Description

  Add a method for disconnecting a chain of blocks starting from the given `BlockId`.

  ### Notes to the reviewers

  I want to have this for https://github.com/utreexo/utreexod/pull/110

  ### Changelog notice

  Added
  * `LocalChain::disconnect_from` method to evict a chain of blocks starting from a given `BlockId`.

  ### 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:
  danielabrozzoni:
    ACK bf67519768d91b049bf3a47c234ff71a81d0ede9

Tree-SHA512: e6bd213b49b553355370994567722ad2c3460d11fcd81adc65a85e5d03822d3c38e4a4d7f967044991cf0187845467b67d035bf8904871f9fcc4ea61be761ef7

23 months agofeat(chain): add `LocalChain::disconnect_from` method
志宇 [Mon, 15 Jan 2024 09:48:36 +0000 (17:48 +0800)]
feat(chain): add `LocalChain::disconnect_from` method

23 months agoMerge pull request #1274 from evanlinjin/avoid_btreemap_append
Lloyd Fournier [Mon, 15 Jan 2024 05:54:03 +0000 (16:54 +1100)]
Merge pull request #1274 from evanlinjin/avoid_btreemap_append

Avoid using `BTreeMap::append`

23 months agofix(chain): avoid using `BTreeMap::append`
志宇 [Sun, 7 Jan 2024 06:39:31 +0000 (14:39 +0800)]
fix(chain): avoid using `BTreeMap::append`

The implementation of `BTreeMap::append` is non-performant making
merging changesets very slow. We use `Extend::extend` instead.

Refer to:
https://github.com/rust-lang/rust/issues/34666#issuecomment-675658420

23 months agofeat(chain): make output of `SpkTxOutIndex::unused_spks` cloneable
志宇 [Sat, 13 Jan 2024 11:57:30 +0000 (19:57 +0800)]
feat(chain): make output of `SpkTxOutIndex::unused_spks` cloneable

This allows us to pass this to chain sources without calling
`Iterator::collect` first.

23 months agotest(file_store): `last_write_is_short`
志宇 [Sat, 13 Jan 2024 09:47:13 +0000 (17:47 +0800)]
test(file_store): `last_write_is_short`

This test simulates a situation where the last write to the db is short.

Aggregating the changeset after reopening the file should return an
error (which includes a partially-aggregated changeset) containing an
aggregation of changesets that were fully written.

At this point, the test re-writes the final changeset (and this time it
successfully writes in full).

The file should be recoverable with all changesets, including the last
one.

23 months agofeat(file_store)!: optimize `EntryIter` by reducing syscalls
志宇 [Sun, 7 Jan 2024 08:09:03 +0000 (16:09 +0800)]
feat(file_store)!: optimize `EntryIter` by reducing syscalls

* Wrap file reader with `BufReader`. This reduces calls to `read`.
* Wrap file reader with `CountingReader`. This counts the bytes read by
  the underlying reader. We can rewind without seeking first.

23 months agoMerge bitcoindevkit/bdk#1264: fix(example_electrum): init LocalChain from genesis
志宇 [Thu, 11 Jan 2024 09:00:30 +0000 (17:00 +0800)]
Merge bitcoindevkit/bdk#1264: fix(example_electrum): init LocalChain from genesis

5b7794299308cd81a2ebbe0aa2b1be1d4c47680b fix(example_electrum): init LocalChain from genesis (vmammal)

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 -->

  This should fix #1252

  ### 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 5b7794299308cd81a2ebbe0aa2b1be1d4c47680b

Tree-SHA512: bf049edb2ba22abb949dfd4cb38608589287f3f374f397c82f778b59c21010daa80b63ad85c442c4ee00a2608f89a8d50447b0db85d15caac7fd0b4fd8956e1a

23 months agoMerge bitcoindevkit/bdk#1261: Refactor `reveal_to_target` and `next_store_index`
志宇 [Thu, 11 Jan 2024 02:59:45 +0000 (10:59 +0800)]
Merge bitcoindevkit/bdk#1261: Refactor `reveal_to_target` and `next_store_index`

761189ab2b679fbfee45b33435d66ed98a135e2a feat(chain): debug_assert non-wildcard desc. to only cache index 0 (志宇)
887e112e8f4ee5300bf09a0f3590861bff7fd053 ref(chain): Refactor reveal_to_target (Daniela Brozzoni)
21d88758262bfbc3d9d2109aac9883f23ab651c4 ref(chain): Refactor next_store_index (Daniela Brozzoni)

Pull request description:

  ### Description

  As a part of #1203, I found myself having to modify `reveal_to_target`, but had some troubles understanding exactly what the method was doing.

  This PR refactors `reveal_to_target` to be, in my opinion, a bit clearer. We now exist prematurely if `next_reveal_index` < `target_index`; this way, we don't need to keep track of `next_reveal_index`, as it would always be equal to `Some(target_index)`.
  As a part of trying to understand `reveal_to_target` I had to read through `next_store_index`, I slightly improved it for clarity reasons as well.

  ### 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:
  evanlinjin:
    ACK 761189ab2b679fbfee45b33435d66ed98a135e2a

Tree-SHA512: 17f70bccbfa1cccf718ece0eeb61f4944c9108776cf1d606ef823ae9ff58bf52114750927ac99561644ece598f8131ee7f7605071d42c91e5e88e05035e74836

23 months agofeat(chain): debug_assert non-wildcard desc. to only cache index 0
志宇 [Tue, 9 Jan 2024 01:44:06 +0000 (09:44 +0800)]
feat(chain): debug_assert non-wildcard desc. to only cache index 0

23 months agofix(example_electrum): init LocalChain from genesis
vmammal [Tue, 28 Nov 2023 18:23:05 +0000 (13:23 -0500)]
fix(example_electrum): init LocalChain from genesis

23 months agoMerge bitcoindevkit/bdk#1263: Bump bdk_esplora and bdk_file_store versions for 1...
Steve Myers [Wed, 10 Jan 2024 01:22:58 +0000 (19:22 -0600)]
Merge bitcoindevkit/bdk#1263: Bump bdk_esplora and bdk_file_store versions for 1.0.0-alpha.3 release

8f6dad76efaa4af0ebb990ed83632f230fd10d94 Bump bdk_esplora and bdk_file_store versions for 1.0.0-alpha.3 release (Steve Myers)

Pull request description:

  ### Description

  These crates need to have their versions bumped because the version of bdk_chain was bumped to 0.7.0 with the 1.0.0-alpha.3 release.

  bdk_esplora to 0.5.0
  bdk_file_store to 0.3.0

  After this PR is merged I'll publish new versions of these crates to crates.io.

  ### Notes to the reviewers

  I should have done this as part of the 1.0.0-alpha.3 release process.  This problem was found when @thunderbiscuit started updating the bdk-ffi project to alpha.3 and we got type mismatch errors for bdk_chain types used in bdk_esplora.

ACKs for top commit:
  thunderbiscuit:
    ACK 8f6dad76efaa4af0ebb990ed83632f230fd10d94.

Tree-SHA512: 735094a5d78da082437118a38db085b12c26665c8cf8fd809d62dbe9a058ee04c59a165e454b3eb8baea4209330083a6a7bce8c303be1660f6593c80ccbe46b7

23 months agoBump bdk_esplora and bdk_file_store versions for 1.0.0-alpha.3 release
Steve Myers [Tue, 9 Jan 2024 21:05:55 +0000 (15:05 -0600)]
Bump bdk_esplora and bdk_file_store versions for 1.0.0-alpha.3 release

These crates need to have their versions bumped because the version of bdk_chain was bumped to 0.7.0 with the 1.0.0-alpha.3 release.

bdk_esplora to 0.5.0
bdk_file_store to 0.3.0

23 months agoref(chain): Refactor reveal_to_target
Daniela Brozzoni [Mon, 8 Jan 2024 13:47:28 +0000 (14:47 +0100)]
ref(chain): Refactor reveal_to_target

Simplify the `reveal_to_target` algorithm by exiting prematurely if
the `target_index` is already revealed.
Since the `reveal_to_index` variable was different from
`Some(target_index)` only if the target was already revealed, we can
getrid of the variable altogether.

23 months agoref(chain): Refactor next_store_index
Daniela Brozzoni [Mon, 8 Jan 2024 13:46:25 +0000 (14:46 +0100)]
ref(chain): Refactor next_store_index

Rename `v` to `index` for better clarity, and add a comment explaining
the `range`

23 months agoMerge bitcoindevkit/bdk#1161: ref(hwi): Move hwi out of bdk
Steve Myers [Mon, 8 Jan 2024 15:54:25 +0000 (09:54 -0600)]
Merge bitcoindevkit/bdk#1161: ref(hwi): Move hwi out of bdk

105d70e9743f651d141c6e0d901d60d583afd4d9 ref(hwi): Move hwi out of bdk (Daniela Brozzoni)

Pull request description:

  Fixes #872

  ### Description

  This commit moves the `hardwaresigner` outside of bdk and inside `bdk_hwi`

  ### Notes to the reviewers

  There are currently two issues with the code:
  - `TransactionSigner` dictates that `sign_transaction` must return a `SignerError` - but being `SignerError` defined inside of bdk, we can't modify it to include an hwi specific error! I don't know how we could fix this (other than getting rid of the trait altogether :)); for now I just added a `SignerError::Generic` variant, lmk if you have better ideas!
  - The hwi tests used the bdk utils to get a funded wallet for testing, which aren't available in `bdk_hwi`, which made me realize - maybe we should expose them so that we can use them across our crates, and also our users can use them to test their code?
  For now, I just left the test commented.

  ### Changelog notice

  - The old `hardwaresigner` module has been moved out of `bdk` and inside `bdk_hwi`.

  ### 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~~
  * [x] I've added docs for the new feature

ACKs for top commit:
  notmandatory:
    reACK 105d70e9743f651d141c6e0d901d60d583afd4d9

Tree-SHA512: 9ae3cd035cc27bd7b2831e89c104f40771c6f165cb3bfe1a9052f820050fca7c19f4dd68f171c630a71a7d18ccdee5f94adbc497c6475bd257c2d01cc08109a1

23 months agoref(hwi): Move hwi out of bdk
Daniela Brozzoni [Mon, 9 Oct 2023 14:42:23 +0000 (16:42 +0200)]
ref(hwi): Move hwi out of bdk

Fixes #872

23 months agoMerge bitcoindevkit/bdk#1255: Bump bdk version to 1.0.0-alpha.3 v1.0.0-alpha.3
Steve Myers [Sun, 7 Jan 2024 16:50:20 +0000 (10:50 -0600)]
Merge bitcoindevkit/bdk#1255: Bump bdk version to 1.0.0-alpha.3

003271117cb347556cc82455558da40ef50a1156 Bump bdk version to 1.0.0-alpha.3 (Steve Myers)

Pull request description:

  ### Description

  - Bump bdk version to 1.0.0-alpha.3
  - Bump bdk_chain to 0.7.0
  - Bump bdk_bitcoin_rpc to 0.2.0
  - Bump bdk_electrum to 0.5.0

  ### Notes to the reviewers

  ### Changelog notice

  See #1254

  ### 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 003271117cb347556cc82455558da40ef50a1156

Tree-SHA512: ac0756f52436880fe633e9ecb83f3d53f485ccfa89a3a89aa51ee4ba5da5cee87f507da69a9e1271f8aaf4425f65d04fb201ea9a4f64bce18f96039ea3548d61

23 months agoMerge bitcoindevkit/bdk#1259: Bump `bip39` dependency to v2.0
Steve Myers [Sun, 7 Jan 2024 16:36:13 +0000 (10:36 -0600)]
Merge bitcoindevkit/bdk#1259: Bump `bip39` dependency to v2.0

8694624bd5f63b738448c250d7b1042f219636da Bump `bip39` to v2.0 (Elias Rohrer)

Pull request description:

  We previously bumped the `bip39` version to 2.0 [in the 0.2X release branch](https://github.com/bitcoindevkit/bdk/pull/875). Back then, bumping it in `master` was [assumed unnecessary](https://github.com/bitcoindevkit/bdk/pull/875#issuecomment-1483990088). It seems this was erroneous, as the current `1.0.1` dependency is present since https://github.com/bitcoindevkit/bdk/pull/793, which was merged before the bump in `release/0.27`.

  Here, we therefore bump the crate version in `master` after all.

ACKs for top commit:
  notmandatory:
    ACK 8694624bd5f63b738448c250d7b1042f219636da

Tree-SHA512: a109219bc97bb8e965e8b10e72439aa898b710d1d1a154801ce499ad47475a6b23448d85e0de3f306f990573d1fccdae7d587ed41676a01f91d66a719782eae1

23 months agoBump `bip39` to v2.0
Elias Rohrer [Sun, 7 Jan 2024 16:08:30 +0000 (17:08 +0100)]
Bump `bip39` to v2.0

We previously bumped the `bip39` version to 2.0 in the 0.2X release
branch. Back then, bumping it in `master` was erroneously considered unnecessary.

Here, we therefore bump the crate version in `master` after all.

23 months agoBump bdk version to 1.0.0-alpha.3
Steve Myers [Wed, 3 Jan 2024 02:33:24 +0000 (20:33 -0600)]
Bump bdk version to 1.0.0-alpha.3

Bump bdk_chain to 0.7.0
Bump bdk_bitcoin_rpc to 0.2.0
Bump bdk_electrum to 0.5.0

23 months agoMerge bitcoindevkit/bdk#1258: fix(typos): existant -> existent
Steve Myers [Sat, 6 Jan 2024 20:24:26 +0000 (14:24 -0600)]
Merge bitcoindevkit/bdk#1258: fix(typos): existant -> existent

028caa9f8cd51afba0fdc81748fc8cf536c75cd0 fix(typos): existant -> existent (Jose Storopoli)

Pull request description:

  ### Description

  These typos are blocking the Nix typo CI in #1257

  ### Notes to the reviewers

  Blocking #1257

  ### Changelog notice

  - fix: typos in documentation
  -
  ### 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 028caa9f8cd51afba0fdc81748fc8cf536c75cd0

Tree-SHA512: 0bd91efd0eec55fdc537824435552c968858a5b827179b3f9f3f37785db3fa92d3e6f0c73023de0c506224c81217c402d5afa8a2f768fecaf6a3c8378226d184