Skip to content

fix(wallet): add support for bip-431 rule 2#478

Open
oleonardolima wants to merge 2 commits into
bitcoindevkit:masterfrom
oleonardolima:test/unconfirmed-truc-txs
Open

fix(wallet): add support for bip-431 rule 2#478
oleonardolima wants to merge 2 commits into
bitcoindevkit:masterfrom
oleonardolima:test/unconfirmed-truc-txs

Conversation

@oleonardolima

@oleonardolima oleonardolima commented May 4, 2026

Copy link
Copy Markdown
Contributor

partially addresses #477
supersedes #442

Description

I've tried this another approach in order to add support for BIP-431 rule 2. I think this way is clearer and more functional than the previously attempted in #442.

It introduces a new private helper method is_truc, it's useful as this validation will be necessary for other BIP-431 rules. Also, it adds a new filter into filter_utxos in order to filter out unconfirmed UTXOs from non-TRUC/TRUC txs.

It also introduces the usage of bdk_testenv, as there's some validation that is checked under node policy level.

Notes to the reviewers

Let me know what you think about this one.

Changelog notice

### Fixed

- fix(wallet): filter unconfirmed UTXOs by BIP-431 (TRUC) rule-2

Checklists

All Submissions:

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

@oleonardolima oleonardolima added this to the Wallet 3.1.0 milestone May 4, 2026
@oleonardolima oleonardolima requested a review from ValuedMammal May 4, 2026 20:30
@oleonardolima oleonardolima self-assigned this May 4, 2026
@oleonardolima oleonardolima added the bug Something isn't working label May 4, 2026
@oleonardolima

Copy link
Copy Markdown
Contributor Author

cc @yan-pi as he already reviewed the other PR and has a reproducible test using bdk-cli too.

@oleonardolima

Copy link
Copy Markdown
Contributor Author

I noticed in CI I need to fix some bdk_testenv/electrs/esplora related issues. However, the fix in bc05f88 is ready for review/discussion.

@codecov

codecov Bot commented May 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.00%. Comparing base (58fe631) to head (6145afc).

Files with missing lines Patch % Lines
src/wallet/mod.rs 90.00% 1 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #478      +/-   ##
==========================================
+ Coverage   80.96%   81.00%   +0.04%     
==========================================
  Files          24       24              
  Lines        5489     5507      +18     
  Branches      247      249       +2     
==========================================
+ Hits         4444     4461      +17     
  Misses        968      968              
- Partials       77       78       +1     
Flag Coverage Δ
rust 81.00% <90.00%> (+0.04%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@yan-pi yan-pi left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK 1d32117.

IMO The is_truc helper is more functional and reads cleaner than the XNOR in #442, and definitely is a good foundation for the rest of #477.

Tested it locally by checking out test/unconfirmed-truc-txs and rebuilding the rust-repro binaries from https://github.com/yan-pi/bdk-pr442-repro against the PR via [dependencies] bdk_wallet = { path = "../../bdk_wallet" }:

The inverse direction of Rule 2: the non-v3 unconfirmed UTXO was filtered correclty.

One concern not flagged inline: the integration test is great, but maybe the unit-level coverage from #442 is also worth keeping?

Plus two minor nits and typos.

Comment thread src/wallet/mod.rs Outdated
Comment thread src/wallet/mod.rs Outdated
Comment thread src/wallet/mod.rs Outdated
@yan-pi yan-pi mentioned this pull request Jun 1, 2026
8 tasks
@luisschwab luisschwab self-requested a review June 1, 2026 23:39
@oleonardolima oleonardolima force-pushed the test/unconfirmed-truc-txs branch 3 times, most recently from b8d9ae1 to 85143c2 Compare June 5, 2026 00:44

@lorenzolfm lorenzolfm left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK 85143c2

@ValuedMammal ValuedMammal marked this pull request as draft June 10, 2026 15:31
- introduces a private method `is_truc` to check if a given tx version
  is TRUC (e.g `transaction::Version(3)`).
- add new step in `filter_utxos` to validate BIP-431 rule 2, which
  validates the proper usage of unconfirmed TRUC/non-TRUC ancestor in a
  TRUC/non-TRUC tx.
@oleonardolima oleonardolima force-pushed the test/unconfirmed-truc-txs branch 2 times, most recently from 47bba04 to d6fca63 Compare June 15, 2026 19:08
- introduce `test_create_and_spend_from_tx` to exercise BIP-431 rule-2
  filtering in-memory, not relying on `bdk_testenv`/`bdk_electrum`.

NOTE: I asked Claude to remove the `bdk_testenv` dependency, keeping
the test behavior in-memory.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@oleonardolima oleonardolima force-pushed the test/unconfirmed-truc-txs branch from d6fca63 to 6145afc Compare June 15, 2026 19:23
@oleonardolima oleonardolima moved this from In Progress to Needs Review in BDK Wallet Jun 15, 2026
@oleonardolima oleonardolima marked this pull request as ready for review June 15, 2026 19:25

@lorenzolfm lorenzolfm left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK 6145afc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

Status: Needs Review

Development

Successfully merging this pull request may close these issues.

4 participants