diff --git a/crates/chain/src/tx_graph.rs b/crates/chain/src/tx_graph.rs index 66d1e950..4dd7f0a2 100644 --- a/crates/chain/src/tx_graph.rs +++ b/crates/chain/src/tx_graph.rs @@ -40,20 +40,23 @@ //! # use bdk_chain::example_utils::*; //! # use bitcoin::Transaction; //! # let tx_a = tx_from_hex(RAW_TX_1); -//! let mut graph: TxGraph = TxGraph::default(); -//! let mut another_graph: TxGraph = TxGraph::default(); +//! let mut tx_graph: TxGraph = TxGraph::default(); //! //! // insert a transaction -//! let changeset = graph.insert_tx(tx_a); +//! let changeset = tx_graph.insert_tx(tx_a); //! -//! // the resulting changeset can be applied to another tx graph -//! another_graph.apply_changeset(changeset); +//! // We can restore the state of the `tx_graph` by applying all +//! // the changesets obtained by mutating the original (the order doesn't matter). +//! let mut restored_tx_graph: TxGraph = TxGraph::default(); +//! restored_tx_graph.apply_changeset(changeset); +//! +//! assert_eq!(tx_graph, restored_tx_graph); //! ``` //! -//! A [`TxGraph`] can also be updated with another [`TxGraph`]. +//! A [`TxGraph`] can also be updated with another [`TxGraph`] which merges them together. //! //! ``` -//! # use bdk_chain::BlockId; +//! # use bdk_chain::{Append, BlockId}; //! # use bdk_chain::tx_graph::TxGraph; //! # use bdk_chain::example_utils::*; //! # use bitcoin::Transaction; @@ -1212,11 +1215,6 @@ impl Default for ChangeSet { } impl ChangeSet { - /// Returns true if the [`ChangeSet`] is empty (no transactions or txouts). - pub fn is_empty(&self) -> bool { - self.txs.is_empty() && self.txouts.is_empty() - } - /// Iterates over all outpoints contained within [`ChangeSet`]. pub fn txouts(&self) -> impl Iterator { self.txs diff --git a/crates/chain/tests/test_tx_graph.rs b/crates/chain/tests/test_tx_graph.rs index a71e24f9..4afdd66e 100644 --- a/crates/chain/tests/test_tx_graph.rs +++ b/crates/chain/tests/test_tx_graph.rs @@ -213,7 +213,8 @@ fn insert_tx_graph_doesnt_count_coinbase_as_spent() { }; let mut graph = TxGraph::<()>::default(); - let _ = graph.insert_tx(tx); + let changeset = graph.insert_tx(tx); + assert!(!changeset.is_empty()); assert!(graph.outspends(OutPoint::null()).is_empty()); assert!(graph.tx_spends(Txid::all_zeros()).next().is_none()); } @@ -289,7 +290,7 @@ fn insert_tx_displaces_txouts() { }], }; - let _ = tx_graph.insert_txout( + let changeset = tx_graph.insert_txout( OutPoint { txid: tx.txid(), vout: 0, @@ -300,6 +301,8 @@ fn insert_tx_displaces_txouts() { }, ); + assert!(!changeset.is_empty()); + let _ = tx_graph.insert_txout( OutPoint { txid: tx.txid(), @@ -653,7 +656,8 @@ fn test_walk_ancestors() { ]); [&tx_a0, &tx_b1].iter().for_each(|&tx| { - let _ = graph.insert_anchor(tx.txid(), tip.block_id()); + let changeset = graph.insert_anchor(tx.txid(), tip.block_id()); + assert!(!changeset.is_empty()); }); let ancestors = [ @@ -1027,10 +1031,12 @@ fn test_changeset_last_seen_append() { last_seen: original_ls.map(|ls| (txid, ls)).into_iter().collect(), ..Default::default() }; + assert!(!original.is_empty() || original_ls.is_none()); let update = ChangeSet::<()> { last_seen: update_ls.map(|ls| (txid, ls)).into_iter().collect(), ..Default::default() }; + assert!(!update.is_empty() || update_ls.is_none()); original.append(update); assert_eq!(