Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
913610b
refactor(chain)!: introduce `CanonicalizationTask`
oleonardolima Sep 18, 2025
50f6e90
refactor(chain)!: use `CanonicalizationTask` instead of `CanonicalIter`
oleonardolima Sep 22, 2025
9b18507
refactor(chain)!: remove `canonical_iter` module
oleonardolima Sep 23, 2025
984d33f
refactor(core,chain)!: extract generic `ChainQuery` trait from `Canon…
oleonardolima Sep 25, 2025
bc2cd43
refactor(chain)!: generalize `ChainQuery` trait with generic type
oleonardolima Sep 25, 2025
36d2503
refactor(chain): use single queue for `anchored_txs` in canonicalization
oleonardolima Oct 3, 2025
93c1a3c
refactor(chain)!: introduce stage based canonicalization processing
oleonardolima Oct 3, 2025
d8ee68c
refactor(core,chain)!: consolidate state machine into `next_query` loop
evanlinjin Feb 13, 2026
b6f225a
refactor(chain)!: split canonicalization into two tasks with generic …
evanlinjin Feb 13, 2026
49ca8b2
refactor(core,chain)!: move `chain_tip` from `ChainRequest` to `Chain…
evanlinjin Feb 13, 2026
2eb6b0a
refactor(core)!: remove generics from `ChainQuery`, `ChainRequest`, `…
evanlinjin Feb 13, 2026
5d34302
fix(chain): check anchors for assumed txs in `CanonicalViewTask`
evanlinjin Feb 13, 2026
cac9f7e
refactor(chain): split `canonical_view.rs` into `canonical.rs` + `can…
evanlinjin Feb 13, 2026
f9f89e1
chore(chain,example)!: Remove `ChainOracle` and fix docs
evanlinjin Mar 8, 2026
d830f36
chore(test): ignore test module in coverage
oleonardolima Mar 16, 2026
e0f4677
fix(chain): position resolution for assumed txs
oleonardolima Mar 16, 2026
323aec2
feat(core): Add `#[must_use]` to `ChainQuery::next_query`
evanlinjin Apr 28, 2026
45bf03a
refactor(core,chain)!: redesign `ChainQuery` to sans-io `ChainTask`
evanlinjin May 6, 2026
211be07
refactor(chain)!: rename `LocalChain::canonicalize` to `run_task`
evanlinjin May 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion crates/bitcoind_rpc/examples/filter_iter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ fn main() -> anyhow::Result<()> {
println!("\ntook: {}s", start.elapsed().as_secs());
println!("Local tip: {}", chain.tip().height());

let canonical_view = graph.canonical_view(&chain, chain.tip().block_id(), Default::default());
let chain_tip = chain.tip().block_id();
let canonical_view = chain.canonicalize(graph.graph(), chain_tip, Default::default());

let unspent: Vec<_> = canonical_view
.filter_unspent_outpoints(graph.index.outpoints().clone())
Expand Down
16 changes: 8 additions & 8 deletions crates/bitcoind_rpc/tests/test_emitter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use bdk_chain::{
bitcoin::{Address, Amount, Txid},
local_chain::{CheckPoint, LocalChain},
spk_txout::SpkTxOutIndex,
Balance, BlockId, CanonicalizationParams, IndexedTxGraph, Merge,
Balance, BlockId, CanonicalParams, IndexedTxGraph, Merge,
};
use bdk_testenv::{
anyhow,
Expand Down Expand Up @@ -320,9 +320,9 @@ fn get_balance(
) -> anyhow::Result<Balance> {
let chain_tip = recv_chain.tip().block_id();
let outpoints = recv_graph.index.outpoints().clone();
let balance = recv_graph
.canonical_view(recv_chain, chain_tip, CanonicalizationParams::default())
.balance(outpoints, |_, _| true, 1);
let balance = recv_chain
.canonicalize(recv_graph.graph(), chain_tip, CanonicalParams::default())
.balance(outpoints, |_, _| true, 0);
Ok(balance)
}

Expand Down Expand Up @@ -631,8 +631,8 @@ fn test_expect_tx_evicted() -> anyhow::Result<()> {
let _txid_2 = core.send_raw_transaction(&tx1b)?;

// Retrieve the expected unconfirmed txids and spks from the graph.
let exp_spk_txids = graph
.canonical_view(&chain, chain_tip, Default::default())
let exp_spk_txids = chain
.canonicalize(graph.graph(), chain_tip, Default::default())
.list_expected_spk_txids(&graph.index, ..)
.collect::<Vec<_>>();
assert_eq!(exp_spk_txids, vec![(spk, txid_1)]);
Expand All @@ -647,8 +647,8 @@ fn test_expect_tx_evicted() -> anyhow::Result<()> {
// Update graph with evicted tx.
let _ = graph.batch_insert_relevant_evicted_at(mempool_event.evicted);

let canonical_txids = graph
.canonical_view(&chain, chain_tip, CanonicalizationParams::default())
let canonical_txids = chain
.canonicalize(graph.graph(), chain_tip, CanonicalParams::default())
.txs()
.map(|tx| tx.txid)
.collect::<Vec<_>>();
Expand Down
23 changes: 7 additions & 16 deletions crates/chain/benches/canonicalization.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use bdk_chain::CanonicalizationParams;
use bdk_chain::CanonicalParams;
use bdk_chain::{keychain_txout::KeychainTxOutIndex, local_chain::LocalChain, IndexedTxGraph};
use bdk_core::{BlockId, CheckPoint};
use bdk_core::{ConfirmationBlockTime, TxUpdate};
Expand Down Expand Up @@ -95,31 +95,22 @@ fn setup<F: Fn(&mut KeychainTxGraph, &LocalChain)>(f: F) -> (KeychainTxGraph, Lo
}

fn run_list_canonical_txs(tx_graph: &KeychainTxGraph, chain: &LocalChain, exp_txs: usize) {
let view = tx_graph.canonical_view(
chain,
chain.tip().block_id(),
CanonicalizationParams::default(),
);
let chain_tip = chain.tip().block_id();
let view = chain.canonicalize(tx_graph.graph(), chain_tip, CanonicalParams::default());
let txs = view.txs();
assert_eq!(txs.count(), exp_txs);
}

fn run_filter_chain_txouts(tx_graph: &KeychainTxGraph, chain: &LocalChain, exp_txos: usize) {
let view = tx_graph.canonical_view(
chain,
chain.tip().block_id(),
CanonicalizationParams::default(),
);
let chain_tip = chain.tip().block_id();
let view = chain.canonicalize(tx_graph.graph(), chain_tip, CanonicalParams::default());
let utxos = view.filter_outpoints(tx_graph.index.outpoints().clone());
assert_eq!(utxos.count(), exp_txos);
}

fn run_filter_chain_unspents(tx_graph: &KeychainTxGraph, chain: &LocalChain, exp_utxos: usize) {
let view = tx_graph.canonical_view(
chain,
chain.tip().block_id(),
CanonicalizationParams::default(),
);
let chain_tip = chain.tip().block_id();
let view = chain.canonicalize(tx_graph.graph(), chain_tip, CanonicalParams::default());
let utxos = view.filter_unspent_outpoints(tx_graph.index.outpoints().clone());
assert_eq!(utxos.count(), exp_utxos);
}
Expand Down
6 changes: 3 additions & 3 deletions crates/chain/benches/indexer.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use bdk_chain::{
keychain_txout::{InsertDescriptorError, KeychainTxOutIndex},
local_chain::LocalChain,
CanonicalizationParams, IndexedTxGraph,
CanonicalParams, IndexedTxGraph,
};
use bdk_core::{BlockId, CheckPoint, ConfirmationBlockTime, TxUpdate};
use bitcoin::{
Expand Down Expand Up @@ -84,8 +84,8 @@ fn do_bench(indexed_tx_graph: &KeychainTxGraph, chain: &LocalChain) {
// Check balance
let chain_tip = chain.tip().block_id();
let op = graph.index.outpoints().clone();
let bal = graph
.canonical_view(chain, chain_tip, CanonicalizationParams::default())
let bal = chain
.canonicalize(graph.graph(), chain_tip, CanonicalParams::default())
.balance(op, |_, _| false, 1);
assert_eq!(bal.total(), AMOUNT * TX_CT as u64);
}
Expand Down
Loading
Loading