feat(tx_graph): Add method txs_with_no_anchor_or_last_seen
This commit is contained in:
parent
496601b8b1
commit
6204d2c766
@ -258,6 +258,19 @@ impl<A> TxGraph<A> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Iterate over graph transactions with no anchors or last-seen.
|
||||||
|
pub fn txs_with_no_anchor_or_last_seen(
|
||||||
|
&self,
|
||||||
|
) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, A>> {
|
||||||
|
self.full_txs().filter_map(|tx| {
|
||||||
|
if tx.anchors.is_empty() && tx.last_seen_unconfirmed.is_none() {
|
||||||
|
Some(tx)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/// Get a transaction by txid. This only returns `Some` for full transactions.
|
/// Get a transaction by txid. This only returns `Some` for full transactions.
|
||||||
///
|
///
|
||||||
/// Refer to [`get_txout`] for getting a specific [`TxOut`].
|
/// Refer to [`get_txout`] for getting a specific [`TxOut`].
|
||||||
|
@ -1127,6 +1127,8 @@ fn transactions_inserted_into_tx_graph_are_not_canonical_until_they_have_an_anch
|
|||||||
let mut graph = TxGraph::<BlockId>::new(txs);
|
let mut graph = TxGraph::<BlockId>::new(txs);
|
||||||
let full_txs: Vec<_> = graph.full_txs().collect();
|
let full_txs: Vec<_> = graph.full_txs().collect();
|
||||||
assert_eq!(full_txs.len(), 2);
|
assert_eq!(full_txs.len(), 2);
|
||||||
|
let unseen_txs: Vec<_> = graph.txs_with_no_anchor_or_last_seen().collect();
|
||||||
|
assert_eq!(unseen_txs.len(), 2);
|
||||||
|
|
||||||
// chain
|
// chain
|
||||||
let blocks: BTreeMap<u32, BlockHash> = [(0, h!("g")), (1, h!("A")), (2, h!("B"))]
|
let blocks: BTreeMap<u32, BlockHash> = [(0, h!("g")), (1, h!("A")), (2, h!("B"))]
|
||||||
@ -1154,6 +1156,7 @@ fn transactions_inserted_into_tx_graph_are_not_canonical_until_they_have_an_anch
|
|||||||
.map(|tx| tx.tx_node.txid)
|
.map(|tx| tx.tx_node.txid)
|
||||||
.collect();
|
.collect();
|
||||||
assert!(canonical_txids.contains(&txids[1]));
|
assert!(canonical_txids.contains(&txids[1]));
|
||||||
|
assert!(graph.txs_with_no_anchor_or_last_seen().next().is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -27,7 +27,7 @@ use bdk_chain::{
|
|||||||
self, ApplyHeaderError, CannotConnectError, CheckPoint, CheckPointIter, LocalChain,
|
self, ApplyHeaderError, CannotConnectError, CheckPoint, CheckPointIter, LocalChain,
|
||||||
},
|
},
|
||||||
spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult},
|
spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult},
|
||||||
tx_graph::{CanonicalTx, TxGraph},
|
tx_graph::{CanonicalTx, TxGraph, TxNode},
|
||||||
Append, BlockId, ChainPosition, ConfirmationTime, ConfirmationTimeHeightAnchor, FullTxOut,
|
Append, BlockId, ChainPosition, ConfirmationTime, ConfirmationTimeHeightAnchor, FullTxOut,
|
||||||
Indexed, IndexedTxGraph,
|
Indexed, IndexedTxGraph,
|
||||||
};
|
};
|
||||||
@ -2250,6 +2250,14 @@ impl Wallet {
|
|||||||
self.indexed_graph.graph()
|
self.indexed_graph.graph()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Iterate over transactions in the wallet that are unseen and unanchored likely
|
||||||
|
/// because they haven't been broadcast.
|
||||||
|
pub fn unbroadcast_transactions(
|
||||||
|
&self,
|
||||||
|
) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>> {
|
||||||
|
self.tx_graph().txs_with_no_anchor_or_last_seen()
|
||||||
|
}
|
||||||
|
|
||||||
/// Get a reference to the inner [`KeychainTxOutIndex`].
|
/// Get a reference to the inner [`KeychainTxOutIndex`].
|
||||||
pub fn spk_index(&self) -> &KeychainTxOutIndex<KeychainKind> {
|
pub fn spk_index(&self) -> &KeychainTxOutIndex<KeychainKind> {
|
||||||
&self.indexed_graph.index
|
&self.indexed_graph.index
|
||||||
|
Loading…
x
Reference in New Issue
Block a user