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!(