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 canonical_view =
+ chain.canonical_view(graph.graph(), chain.tip().block_id(), Default::default());
let unspent: Vec<_> = canonical_view
.filter_unspent_outpoints(graph.index.outpoints().clone())
bitcoin::{Address, Amount, Txid},
local_chain::{CheckPoint, LocalChain},
spk_txout::SpkTxOutIndex,
- Balance, BlockId, CanonicalizationParams, IndexedTxGraph, Merge,
+ Balance, BlockId, IndexedTxGraph, Merge,
};
use bdk_testenv::{
anyhow,
recv_chain: &LocalChain,
recv_graph: &IndexedTxGraph<BlockId, SpkTxOutIndex<()>>,
) -> 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(),
+ recv_chain.tip().block_id(),
+ Default::default(),
+ )
+ .balance(outpoints, |_, _| true, 0);
Ok(balance)
}
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)]);
// 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, Default::default())
.txs()
.map(|tx| tx.txid)
.collect::<Vec<_>>();
-use bdk_chain::CanonicalizationParams;
use bdk_chain::{keychain_txout::KeychainTxOutIndex, local_chain::LocalChain, IndexedTxGraph};
use bdk_core::{BlockId, CheckPoint};
use bdk_core::{ConfirmationBlockTime, TxUpdate};
}
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 view = chain.canonical_view(tx_graph.graph(), chain.tip().block_id(), Default::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 view = chain.canonical_view(tx_graph.graph(), chain.tip().block_id(), Default::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 view = chain.canonical_view(tx_graph.graph(), chain.tip().block_id(), Default::default());
let utxos = view.filter_unspent_outpoints(tx_graph.index.outpoints().clone());
assert_eq!(utxos.count(), exp_utxos);
}
use bdk_chain::{
keychain_txout::{InsertDescriptorError, KeychainTxOutIndex},
local_chain::LocalChain,
- CanonicalizationParams, IndexedTxGraph,
+ IndexedTxGraph,
};
use bdk_core::{BlockId, CheckPoint, ConfirmationBlockTime, TxUpdate};
use bitcoin::{
.unwrap();
// 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().block_id(), Default::default())
.balance(op, |_, _| false, 1);
assert_eq!(bal.total(), AMOUNT * TX_CT as u64);
}
use std::collections::BTreeMap;
-use bdk_chain::{local_chain::LocalChain, CanonicalizationParams, ConfirmationBlockTime, TxGraph};
+use bdk_chain::{local_chain::LocalChain, ConfirmationBlockTime, TxGraph};
use bdk_testenv::{hash, utils::new_tx};
use bitcoin::{Amount, BlockHash, OutPoint, ScriptBuf, Transaction, TxIn, TxOut};
};
let _ = tx_graph.insert_anchor(txid, anchor_height_5);
- let chain_tip = chain.tip().block_id();
let canonical_view =
- tx_graph.canonical_view(&chain, chain_tip, CanonicalizationParams::default());
+ chain.canonical_view(&tx_graph, chain.tip().block_id(), Default::default());
// Test min_confirmations = 1: Should be confirmed (has 6 confirmations)
let balance_1_conf = canonical_view.balance(
};
let _ = tx_graph.insert_anchor(txid, anchor);
- let canonical_view = tx_graph.canonical_view(
- &chain,
- chain.tip().block_id(),
- CanonicalizationParams::default(),
- );
+ let canonical_view =
+ chain.canonical_view(&tx_graph, chain.tip().block_id(), Default::default());
// Test with min_confirmations = 5 and untrusted predicate
let balance = canonical_view.balance(
);
outpoints.push(((), outpoint2));
- let canonical_view = tx_graph.canonical_view(
- &chain,
- chain.tip().block_id(),
- CanonicalizationParams::default(),
- );
+ let canonical_view =
+ chain.canonical_view(&tx_graph, chain.tip().block_id(), Default::default());
// Test with min_confirmations = 5
// tx0: 11 confirmations -> confirmed
indexer::keychain_txout::KeychainTxOutIndex,
local_chain::LocalChain,
spk_txout::SpkTxOutIndex,
- tx_graph, Balance, CanonicalizationParams, ChainPosition, ConfirmationBlockTime, DescriptorExt,
- SpkIterator,
+ tx_graph, Balance, ChainPosition, ConfirmationBlockTime, DescriptorExt, SpkIterator,
};
use bdk_testenv::{
anyhow::{self},
.get(height)
.map(|cp| cp.block_id())
.unwrap_or_else(|| panic!("block must exist at {height}"));
- let txouts = graph
- .canonical_view(&local_chain, chain_tip, CanonicalizationParams::default())
+
+ let canonical_view =
+ local_chain.canonical_view(graph.graph(), chain_tip, Default::default());
+
+ let txouts = canonical_view
.filter_outpoints(graph.index.outpoints().iter().cloned())
.collect::<Vec<_>>();
- let utxos = graph
- .canonical_view(&local_chain, chain_tip, CanonicalizationParams::default())
+ let utxos = canonical_view
.filter_unspent_outpoints(graph.index.outpoints().iter().cloned())
.collect::<Vec<_>>();
- let balance = graph
- .canonical_view(&local_chain, chain_tip, CanonicalizationParams::default())
- .balance(
- graph.index.outpoints().iter().cloned(),
- |_, txout| trusted_spks.contains(&txout.txout.script_pubkey),
- 1,
- );
+ let balance = canonical_view.balance(
+ graph.index.outpoints().iter().cloned(),
+ |_, txout| trusted_spks.contains(&txout.txout.script_pubkey),
+ 0,
+ );
let confirmed_txouts_txid = txouts
.iter()
}
// check chain position
- let chain_pos = graph
- .canonical_view(
- chain,
- chain.tip().block_id(),
- CanonicalizationParams::default(),
- )
+ let chain_pos = chain
+ .canonical_view(graph.graph(), chain.tip().block_id(), Default::default())
.txs()
.find_map(|canon_tx| {
if canon_tx.txid == txid {
#[macro_use]
mod common;
-use bdk_chain::{collections::*, BlockId, CanonicalizationParams, ConfirmationBlockTime};
+use bdk_chain::{collections::*, BlockId, ConfirmationBlockTime};
use bdk_chain::{
local_chain::LocalChain,
tx_graph::{self, CalculateFeeError},
let build_canonical_spends =
|chain: &LocalChain, tx_graph: &TxGraph<ConfirmationBlockTime>| -> HashMap<OutPoint, _> {
- tx_graph
- .canonical_view(chain, tip.block_id(), CanonicalizationParams::default())
+ chain
+ .canonical_view(tx_graph, tip.block_id(), Default::default())
.filter_outpoints(tx_graph.all_txouts().map(|(op, _)| ((), op)))
.filter_map(|(_, full_txo)| Some((full_txo.outpoint, full_txo.spent_by?)))
.collect()
let build_canonical_positions = |chain: &LocalChain,
tx_graph: &TxGraph<ConfirmationBlockTime>|
-> HashMap<Txid, ChainPosition<ConfirmationBlockTime>> {
- tx_graph
- .canonical_view(chain, tip.block_id(), CanonicalizationParams::default())
+ chain
+ .canonical_view(tx_graph, tip.block_id(), Default::default())
.txs()
.map(|canon_tx| (canon_tx.txid, canon_tx.pos))
.collect()
.into_iter()
.collect();
let chain = LocalChain::from_blocks(blocks).unwrap();
- let canonical_txs: Vec<_> = graph
- .canonical_view(
- &chain,
- chain.tip().block_id(),
- CanonicalizationParams::default(),
- )
+ let canonical_txs: Vec<_> = chain
+ .canonical_view(&graph, chain.tip().block_id(), Default::default())
.txs()
.collect();
assert!(canonical_txs.is_empty());
// tx0 with seen_at should be returned by canonical txs
let _ = graph.insert_seen_at(txids[0], 2);
- let canonical_view = graph.canonical_view(
- &chain,
- chain.tip().block_id(),
- CanonicalizationParams::default(),
- );
- let mut canonical_txs = canonical_view.txs();
+ let view = chain.canonical_view(&graph, chain.tip().block_id(), Default::default());
+ let mut canonical_txs = view.txs();
assert_eq!(canonical_txs.next().map(|tx| tx.txid).unwrap(), txids[0]);
drop(canonical_txs);
// tx1 with anchor is also canonical
let _ = graph.insert_anchor(txids[1], block_id!(2, "B"));
- let canonical_txids: Vec<_> = graph
- .canonical_view(
- &chain,
- chain.tip().block_id(),
- CanonicalizationParams::default(),
- )
+ let canonical_txids: Vec<_> = chain
+ .canonical_view(&graph, chain.tip().block_id(), Default::default())
.txs()
.map(|tx| tx.txid)
.collect();
for scenario in scenarios {
let env = init_graph(scenario.tx_templates.iter());
- let txs = env
- .tx_graph
- .canonical_view(&local_chain, chain_tip, env.canonicalization_params.clone())
+ let canonical_view = local_chain.canonical_view(
+ &env.tx_graph,
+ chain_tip,
+ env.canonicalization_params.clone(),
+ );
+
+ let txs = canonical_view
.txs()
.map(|tx| tx.txid)
.collect::<BTreeSet<_>>();
scenario.name
);
- let txouts = env
- .tx_graph
- .canonical_view(&local_chain, chain_tip, env.canonicalization_params.clone())
+ let txouts = canonical_view
.filter_outpoints(env.indexer.outpoints().iter().cloned())
.map(|(_, full_txout)| full_txout.outpoint)
.collect::<BTreeSet<_>>();
scenario.name
);
- let utxos = env
- .tx_graph
- .canonical_view(&local_chain, chain_tip, env.canonicalization_params.clone())
+ let utxos = canonical_view
.filter_unspent_outpoints(env.indexer.outpoints().iter().cloned())
.map(|(_, full_txout)| full_txout.outpoint)
.collect::<BTreeSet<_>>();
scenario.name
);
- let balance = env
- .tx_graph
- .canonical_view(&local_chain, chain_tip, env.canonicalization_params.clone())
- .balance(
- env.indexer.outpoints().iter().cloned(),
- |_, txout| {
- env.indexer
- .index_of_spk(txout.txout.script_pubkey.as_script())
- .is_some()
- },
- 0,
- );
+ let balance = canonical_view.balance(
+ env.indexer.outpoints().iter().cloned(),
+ |_, txout| {
+ env.indexer
+ .index_of_spk(txout.txout.script_pubkey.as_script())
+ .is_some()
+ },
+ 0,
+ );
assert_eq!(
balance, scenario.exp_balance,
"\n[{}] 'balance' failed",
local_chain::LocalChain,
spk_client::{FullScanRequest, SyncRequest, SyncResponse},
spk_txout::SpkTxOutIndex,
- Balance, CanonicalizationParams, ConfirmationBlockTime, IndexedTxGraph, Indexer, Merge,
- TxGraph,
+ Balance, ConfirmationBlockTime, IndexedTxGraph, Indexer, Merge, TxGraph,
};
use bdk_core::bitcoin::{
key::{Secp256k1, UntweakedPublicKey},
recv_chain: &LocalChain,
recv_graph: &IndexedTxGraph<ConfirmationBlockTime, SpkTxOutIndex<()>>,
) -> 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(),
+ recv_chain.tip().block_id(),
+ Default::default(),
+ )
+ .balance(outpoints, |_, _| true, 0);
Ok(balance)
}
.chain_tip(chain.tip())
.spks_with_indexes(graph.index.all_spks().clone())
.expected_spk_txids(
- graph
- .canonical_view(&chain, chain.tip().block_id(), Default::default())
+ { chain.canonical_view(graph.graph(), chain.tip().block_id(), Default::default()) }
.list_expected_spk_txids(&graph.index, ..),
);
let sync_response = client.sync(sync_request, BATCH_SIZE, true)?;
.chain_tip(chain.tip())
.spks_with_indexes(graph.index.all_spks().clone())
.expected_spk_txids(
- graph
- .canonical_view(&chain, chain.tip().block_id(), Default::default())
+ { chain.canonical_view(graph.graph(), chain.tip().block_id(), Default::default()) }
.list_expected_spk_txids(&graph.index, ..),
);
let sync_response = client.sync(sync_request, BATCH_SIZE, true)?;
.chain_tip(chain.tip())
.spks_with_indexes(graph.index.all_spks().clone())
.expected_spk_txids(
- graph
- .canonical_view(&chain, chain.tip().block_id(), Default::default())
+ { chain.canonical_view(graph.graph(), chain.tip().block_id(), Default::default()) }
.list_expected_spk_txids(&graph.index, ..),
);
let sync_response = client.sync(sync_request, 1).await?;
.chain_tip(chain.tip())
.spks_with_indexes(graph.index.all_spks().clone())
.expected_spk_txids(
- graph
- .canonical_view(&chain, chain.tip().block_id(), Default::default())
+ { chain.canonical_view(graph.graph(), chain.tip().block_id(), Default::default()) }
.list_expected_spk_txids(&graph.index, ..),
);
let sync_response = client.sync(sync_request, 1).await?;
.chain_tip(chain.tip())
.spks_with_indexes(graph.index.all_spks().clone())
.expected_spk_txids(
- graph
- .canonical_view(&chain, chain.tip().block_id(), Default::default())
+ { chain.canonical_view(graph.graph(), chain.tip().block_id(), Default::default()) }
.list_expected_spk_txids(&graph.index, ..),
);
let sync_response = client.sync(sync_request, 1)?;
.chain_tip(chain.tip())
.spks_with_indexes(graph.index.all_spks().clone())
.expected_spk_txids(
- graph
- .canonical_view(&chain, chain.tip().block_id(), Default::default())
+ { chain.canonical_view(graph.graph(), chain.tip().block_id(), Default::default()) }
.list_expected_spk_txids(&graph.index, ..),
);
let sync_response = client.sync(sync_request, 1)?;