Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
8ad0128
refactor(chain)!: introduce `CanonicalizationTask`
oleonardolima Sep 18, 2025
c6f11d9
refactor(chain)!: use `CanonicalizationTask` instead of `CanonicalIter`
oleonardolima Sep 22, 2025
276da3b
refactor(chain)!: remove `canonical_iter` module
oleonardolima Sep 23, 2025
e034e90
refactor(core,chain)!: extract generic `ChainQuery` trait from `Canon…
oleonardolima Sep 25, 2025
0d4a64a
refactor(chain)!: generalize `ChainQuery` trait with generic type
oleonardolima Sep 25, 2025
77fcf91
refactor(chain): use single queue for `anchored_txs` in canonicalization
oleonardolima Oct 3, 2025
f6b2565
refactor(chain)!: introduce stage based canonicalization processing
oleonardolima Oct 3, 2025
afa097c
refactor(core,chain)!: consolidate state machine into `next_query` loop
evanlinjin Feb 13, 2026
6d9a7d6
refactor(chain)!: split canonicalization into two tasks with generic …
evanlinjin Feb 13, 2026
1e27917
refactor(core,chain)!: move `chain_tip` from `ChainRequest` to `Chain…
evanlinjin Feb 13, 2026
e306a36
refactor(core)!: remove generics from `ChainQuery`, `ChainRequest`, `…
evanlinjin Feb 13, 2026
f07b1b3
fix(chain): check anchors for assumed txs in `CanonicalViewTask`
evanlinjin Feb 13, 2026
031de40
refactor(chain): split `canonical_view.rs` into `canonical.rs` + `can…
evanlinjin Feb 13, 2026
37eb136
chore(chain,example)!: Remove `ChainOracle` and fix docs
evanlinjin Mar 8, 2026
c1ad161
refactor(core,chain)!: redesign `ChainQuery` as a sans-IO task trait
evanlinjin Mar 9, 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.canonical_view(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
.canonical_view(recv_graph.graph(), chain_tip, CanonicalParams::default())
.balance(outpoints, |_, _| true, 0);
Ok(balance)
}

Expand Down Expand Up @@ -634,8 +634,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
.canonical_view(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 @@ -650,8 +650,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
.canonical_view(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.canonical_view(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.canonical_view(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.canonical_view(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
.canonical_view(graph.graph(), chain_tip, CanonicalParams::default())
.balance(op, |_, _| false, 1);
assert_eq!(bal.total(), AMOUNT * TX_CT as u64);
}
Expand Down
Loading
Loading