Skip to content

Commit 3113509

Browse files
committed
feat: Add list_locked_unspent
1 parent 13e024d commit 3113509

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

wallet/src/wallet/mod.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2385,9 +2385,16 @@ impl Wallet {
23852385
&self.chain
23862386
}
23872387

2388-
/// List locked outpoints.
2389-
pub fn list_locked_outpoints(&self) -> impl Iterator<Item = UtxoLock> + '_ {
2390-
self.locked_outpoints.values().copied()
2388+
/// Get a reference to the locked outpoints.
2389+
pub fn locked_outpoints(&self) -> &BTreeMap<OutPoint, UtxoLock> {
2390+
&self.locked_outpoints
2391+
}
2392+
2393+
/// List unspent outpoints that are currently locked.
2394+
pub fn list_locked_unspent(&self) -> impl Iterator<Item = OutPoint> + '_ {
2395+
self.list_unspent()
2396+
.filter(|output| self.is_outpoint_locked(output.outpoint))
2397+
.map(|output| output.outpoint)
23912398
}
23922399

23932400
/// Whether the `outpoint` is currently locked. See [`Wallet::lock_outpoint`] for more.

wallet/tests/wallet.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,10 @@ fn test_lock_outpoint_persist() -> anyhow::Result<()> {
6464
.create_wallet(&mut conn)?;
6565

6666
// Receive coins.
67+
let mut outpoints = vec![];
6768
for i in 0..3 {
68-
let _ = receive_output(&mut wallet, Amount::from_sat(10_000), ReceiveTo::Mempool(i));
69+
let op = receive_output(&mut wallet, Amount::from_sat(10_000), ReceiveTo::Mempool(i));
70+
outpoints.push(op);
6971
}
7072

7173
// Test: lock outpoints
@@ -94,7 +96,8 @@ fn test_lock_outpoint_persist() -> anyhow::Result<()> {
9496
"Expect recover lock value"
9597
);
9698
}
97-
assert!(wallet.list_locked_outpoints().all(|u| u.is_locked));
99+
let locked_unspent = wallet.list_locked_unspent().collect::<Vec<_>>();
100+
assert_eq!(locked_unspent, outpoints);
98101

99102
// Test: Locked outpoints are excluded from coin selection
100103
let addr = wallet.next_unused_address(KeychainKind::External).address;
@@ -127,7 +130,8 @@ fn test_lock_outpoint_persist() -> anyhow::Result<()> {
127130
"Expect outpoint is not locked"
128131
);
129132
}
130-
assert!(!wallet.list_locked_outpoints().any(|u| u.is_locked));
133+
assert!(!wallet.locked_outpoints().values().any(|u| u.is_locked));
134+
assert!(wallet.list_locked_unspent().next().is_none());
131135
wallet.persist(&mut conn)?;
132136

133137
// Test: Update lock expiry

0 commit comments

Comments
 (0)