Skip to content

Commit 5d4e081

Browse files
joostjagerclaude
andcommitted
Add deferred bool to ChainMonitor
Add a `deferred` parameter to `ChainMonitor::new` and `ChainMonitor::new_async_beta`. When set to true, the Watch trait methods (watch_channel and update_channel) will unimplemented!() for now. All existing callers pass false to preserve current behavior. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b56258d commit 5d4e081

7 files changed

Lines changed: 21 additions & 4 deletions

File tree

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ impl TestChainMonitor {
283283
Arc::clone(&persister),
284284
Arc::clone(&keys),
285285
keys.get_peer_storage_key(),
286+
false,
286287
)),
287288
logger,
288289
keys,

fuzz/src/full_stack.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
597597
Arc::new(TestPersister { update_ret: Mutex::new(ChannelMonitorUpdateStatus::Completed) }),
598598
Arc::clone(&keys_manager),
599599
keys_manager.get_peer_storage_key(),
600+
false,
600601
));
601602

602603
let network = Network::Bitcoin;

fuzz/src/lsps_message.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ pub fn do_test(data: &[u8]) {
5959
Arc::clone(&kv_store),
6060
Arc::clone(&keys_manager),
6161
keys_manager.get_peer_storage_key(),
62+
false,
6263
));
6364
let best_block = BestBlock::from_network(network);
6465
let params = ChainParameters { network, best_block };

lightning/src/chain/chainmonitor.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,10 @@ pub struct ChainMonitor<
371371

372372
#[cfg(peer_storage)]
373373
our_peerstorage_encryption_key: PeerStorageKey,
374+
375+
/// When `true`, [`chain::Watch`] operations are queued rather than executed immediately.
376+
/// The queued operations can be flushed with [`Self::flush`].
377+
deferred: bool,
374378
}
375379

376380
impl<
@@ -397,7 +401,7 @@ where
397401
pub fn new_async_beta(
398402
chain_source: Option<C>, broadcaster: T, logger: L, feeest: F,
399403
persister: MonitorUpdatingPersisterAsync<K, S, L, ES, SP, T, F>, _entropy_source: ES,
400-
_our_peerstorage_encryption_key: PeerStorageKey,
404+
_our_peerstorage_encryption_key: PeerStorageKey, deferred: bool,
401405
) -> Self {
402406
let event_notifier = Arc::new(Notifier::new());
403407
Self {
@@ -414,6 +418,7 @@ where
414418
pending_send_only_events: Mutex::new(Vec::new()),
415419
#[cfg(peer_storage)]
416420
our_peerstorage_encryption_key: _our_peerstorage_encryption_key,
421+
deferred,
417422
}
418423
}
419424
}
@@ -603,7 +608,7 @@ where
603608
/// [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
604609
pub fn new(
605610
chain_source: Option<C>, broadcaster: T, logger: L, feeest: F, persister: P,
606-
_entropy_source: ES, _our_peerstorage_encryption_key: PeerStorageKey,
611+
_entropy_source: ES, _our_peerstorage_encryption_key: PeerStorageKey, deferred: bool,
607612
) -> Self {
608613
Self {
609614
monitors: RwLock::new(new_hash_map()),
@@ -619,6 +624,7 @@ where
619624
pending_send_only_events: Mutex::new(Vec::new()),
620625
#[cfg(peer_storage)]
621626
our_peerstorage_encryption_key: _our_peerstorage_encryption_key,
627+
deferred,
622628
}
623629
}
624630

@@ -1426,12 +1432,18 @@ where
14261432
fn watch_channel(
14271433
&self, channel_id: ChannelId, monitor: ChannelMonitor<ChannelSigner>,
14281434
) -> Result<ChannelMonitorUpdateStatus, ()> {
1435+
if self.deferred {
1436+
unimplemented!();
1437+
}
14291438
self.watch_channel_internal(channel_id, monitor)
14301439
}
14311440

14321441
fn update_channel(
14331442
&self, channel_id: ChannelId, update: &ChannelMonitorUpdate,
14341443
) -> ChannelMonitorUpdateStatus {
1444+
if self.deferred {
1445+
unimplemented!();
1446+
}
14351447
self.update_channel_internal(channel_id, update)
14361448
}
14371449

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4916,6 +4916,7 @@ fn native_async_persist() {
49164916
native_async_persister,
49174917
Arc::clone(&keys_manager),
49184918
keys_manager.get_peer_storage_key(),
4919+
false,
49194920
);
49204921

49214922
// Write the initial ChannelMonitor async, testing primarily that the `MonitorEvent::Completed`

lightning/src/ln/channelmanager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20600,7 +20600,7 @@ pub mod bench {
2060020600

2060120601
let seed_a = [1u8; 32];
2060220602
let keys_manager_a = KeysManager::new(&seed_a, 42, 42, true);
20603-
let chain_monitor_a = ChainMonitor::new(None, &tx_broadcaster, &logger_a, &fee_estimator, &persister_a, &keys_manager_a, keys_manager_a.get_peer_storage_key());
20603+
let chain_monitor_a = ChainMonitor::new(None, &tx_broadcaster, &logger_a, &fee_estimator, &persister_a, &keys_manager_a, keys_manager_a.get_peer_storage_key(), false);
2060420604
let node_a = ChannelManager::new(&fee_estimator, &chain_monitor_a, &tx_broadcaster, &router, &message_router, &logger_a, &keys_manager_a, &keys_manager_a, &keys_manager_a, config.clone(), ChainParameters {
2060520605
network,
2060620606
best_block: BestBlock::from_network(network),
@@ -20610,7 +20610,7 @@ pub mod bench {
2061020610
let logger_b = test_utils::TestLogger::with_id("node a".to_owned());
2061120611
let seed_b = [2u8; 32];
2061220612
let keys_manager_b = KeysManager::new(&seed_b, 42, 42, true);
20613-
let chain_monitor_b = ChainMonitor::new(None, &tx_broadcaster, &logger_a, &fee_estimator, &persister_b, &keys_manager_b, keys_manager_b.get_peer_storage_key());
20613+
let chain_monitor_b = ChainMonitor::new(None, &tx_broadcaster, &logger_a, &fee_estimator, &persister_b, &keys_manager_b, keys_manager_b.get_peer_storage_key(), false);
2061420614
let node_b = ChannelManager::new(&fee_estimator, &chain_monitor_b, &tx_broadcaster, &router, &message_router, &logger_b, &keys_manager_b, &keys_manager_b, &keys_manager_b, config.clone(), ChainParameters {
2061520615
network,
2061620616
best_block: BestBlock::from_network(network),

lightning/src/util/test_utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,7 @@ impl<'a> TestChainMonitor<'a> {
537537
persister,
538538
keys_manager,
539539
keys_manager.get_peer_storage_key(),
540+
false,
540541
),
541542
keys_manager,
542543
expect_channel_force_closed: Mutex::new(None),

0 commit comments

Comments
 (0)