Skip to content

Commit 444bd57

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 e6695a8 commit 444bd57

File tree

7 files changed

+20
-4
lines changed

7 files changed

+20
-4
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ impl TestChainMonitor {
285285
Arc::clone(&persister),
286286
Arc::clone(&keys),
287287
keys.get_peer_storage_key(),
288+
false,
288289
)),
289290
logger,
290291
keys,

fuzz/src/full_stack.rs

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

604605
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: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,9 @@ 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+
deferred: bool,
374377
}
375378

376379
impl<
@@ -397,7 +400,7 @@ where
397400
pub fn new_async_beta(
398401
chain_source: Option<C>, broadcaster: T, logger: L, feeest: F,
399402
persister: MonitorUpdatingPersisterAsync<K, S, L, ES, SP, T, F>, _entropy_source: ES,
400-
_our_peerstorage_encryption_key: PeerStorageKey,
403+
_our_peerstorage_encryption_key: PeerStorageKey, deferred: bool,
401404
) -> Self {
402405
let event_notifier = Arc::new(Notifier::new());
403406
Self {
@@ -414,6 +417,7 @@ where
414417
pending_send_only_events: Mutex::new(Vec::new()),
415418
#[cfg(peer_storage)]
416419
our_peerstorage_encryption_key: _our_peerstorage_encryption_key,
420+
deferred,
417421
}
418422
}
419423
}
@@ -603,7 +607,7 @@ where
603607
/// [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
604608
pub fn new(
605609
chain_source: Option<C>, broadcaster: T, logger: L, feeest: F, persister: P,
606-
_entropy_source: ES, _our_peerstorage_encryption_key: PeerStorageKey,
610+
_entropy_source: ES, _our_peerstorage_encryption_key: PeerStorageKey, deferred: bool,
607611
) -> Self {
608612
Self {
609613
monitors: RwLock::new(new_hash_map()),
@@ -619,6 +623,7 @@ where
619623
pending_send_only_events: Mutex::new(Vec::new()),
620624
#[cfg(peer_storage)]
621625
our_peerstorage_encryption_key: _our_peerstorage_encryption_key,
626+
deferred,
622627
}
623628
}
624629

@@ -1426,12 +1431,18 @@ where
14261431
fn watch_channel(
14271432
&self, channel_id: ChannelId, monitor: ChannelMonitor<ChannelSigner>,
14281433
) -> Result<ChannelMonitorUpdateStatus, ()> {
1434+
if self.deferred {
1435+
unimplemented!();
1436+
}
14291437
self.watch_channel_internal(channel_id, monitor)
14301438
}
14311439

14321440
fn update_channel(
14331441
&self, channel_id: ChannelId, update: &ChannelMonitorUpdate,
14341442
) -> ChannelMonitorUpdateStatus {
1443+
if self.deferred {
1444+
unimplemented!();
1445+
}
14351446
self.update_channel_internal(channel_id, update)
14361447
}
14371448

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4913,6 +4913,7 @@ fn native_async_persist() {
49134913
native_async_persister,
49144914
Arc::clone(&keys_manager),
49154915
keys_manager.get_peer_storage_key(),
4916+
false,
49164917
);
49174918

49184919
// 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
@@ -20690,7 +20690,7 @@ pub mod bench {
2069020690

2069120691
let seed_a = [1u8; 32];
2069220692
let keys_manager_a = KeysManager::new(&seed_a, 42, 42, true);
20693-
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());
20693+
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);
2069420694
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 {
2069520695
network,
2069620696
best_block: BestBlock::from_network(network),
@@ -20700,7 +20700,7 @@ pub mod bench {
2070020700
let logger_b = test_utils::TestLogger::with_id("node a".to_owned());
2070120701
let seed_b = [2u8; 32];
2070220702
let keys_manager_b = KeysManager::new(&seed_b, 42, 42, true);
20703-
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());
20703+
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);
2070420704
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 {
2070520705
network,
2070620706
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)