]> Untitled Git - bdk/commit
refactor(chain)!: split canonicalization into two tasks with generic `Canonical<A...
author志宇 <hello@evanlinjin.me>
Fri, 13 Feb 2026 12:57:39 +0000 (12:57 +0000)
committer志宇 <hello@evanlinjin.me>
Sat, 13 Jun 2026 20:24:01 +0000 (20:24 +0000)
commit22b04c33dc0b75e5a247f99087ad36f41e99a0ed
treeb154e9053f9b2a04147e7e35916857698440f1df
parenta9f5ca4415af36b42cca43551414ad0644d627b8
refactor(chain)!: split canonicalization into two tasks with generic `Canonical<A, P>`

Separate concerns by splitting `CanonicalizationTask` into two phases:

1. `CanonicalTask` determines which transactions are canonical and why
   (`CanonicalReason`), outputting `CanonicalTxs<A>`.
2. `CanonicalViewTask` resolves reasons into `ChainPosition`s (confirmed
   vs unconfirmed), outputting `CanonicalView<A>`.

Make `Canonical<A, P>`, `CanonicalTx<P>`, and `FullTxOut<P>` generic over
the position type so the same structs serve both phases. Add
`LocalChain::canonical_view()` convenience method for the common two-step
pipeline.

Renames:

- `CanonicalizationTask` -> `CanonicalTask`
- `CanonicalizationParams` -> `CanonicalParams`
- `canonicalization_task()` -> `canonical_task()`
- `FullTxOut::chain_position` -> `FullTxOut::pos`

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
crates/chain/src/canonical_task.rs
crates/chain/src/canonical_view.rs
crates/chain/src/chain_data.rs
crates/chain/src/indexed_tx_graph.rs
crates/chain/src/local_chain.rs
crates/chain/src/tx_graph.rs
crates/chain/tests/common/tx_template.rs
crates/chain/tests/test_indexed_tx_graph.rs