Skip to content

Commit 538004c

Browse files
committed
Switch to (beta) async persistence of ChannelMonitors
1 parent 3604a21 commit 538004c

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

src/main.rs

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ use lightning::util::config::UserConfig;
4141
use lightning::util::hash_tables::hash_map::Entry;
4242
use lightning::util::hash_tables::HashMap;
4343
use lightning::util::persist::{
44-
self, KVStore, MonitorUpdatingPersister, OUTPUT_SWEEPER_PERSISTENCE_KEY,
44+
self, KVStore, MonitorUpdatingPersisterAsync, OUTPUT_SWEEPER_PERSISTENCE_KEY,
4545
OUTPUT_SWEEPER_PERSISTENCE_PRIMARY_NAMESPACE, OUTPUT_SWEEPER_PERSISTENCE_SECONDARY_NAMESPACE,
4646
};
4747
use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer};
@@ -139,15 +139,14 @@ type ChainMonitor = chainmonitor::ChainMonitor<
139139
Arc<BitcoindClient>,
140140
Arc<BitcoindClient>,
141141
Arc<FilesystemLogger>,
142-
Arc<
143-
MonitorUpdatingPersister<
144-
Arc<FilesystemStore>,
145-
Arc<FilesystemLogger>,
146-
Arc<KeysManager>,
147-
Arc<KeysManager>,
148-
Arc<BitcoindClient>,
149-
Arc<BitcoindClient>,
150-
>,
142+
chainmonitor::AsyncPersister<
143+
Arc<FilesystemStore>,
144+
TokioSpawner,
145+
Arc<FilesystemLogger>,
146+
Arc<KeysManager>,
147+
Arc<KeysManager>,
148+
Arc<BitcoindClient>,
149+
Arc<BitcoindClient>,
151150
>,
152151
Arc<KeysManager>,
153152
>;
@@ -679,36 +678,37 @@ async fn start_ldk() {
679678

680679
// Step 5: Initialize Persistence
681680
let fs_store = Arc::new(FilesystemStore::new(ldk_data_dir.clone().into()));
682-
let persister = Arc::new(MonitorUpdatingPersister::new(
681+
let persister = MonitorUpdatingPersisterAsync::new(
683682
Arc::clone(&fs_store),
683+
TokioSpawner,
684684
Arc::clone(&logger),
685685
1000,
686686
Arc::clone(&keys_manager),
687687
Arc::clone(&keys_manager),
688688
Arc::clone(&bitcoind_client),
689689
Arc::clone(&bitcoind_client),
690-
));
690+
);
691691
// Alternatively, you can use the `FilesystemStore` as a `Persist` directly, at the cost of
692692
// larger `ChannelMonitor` update writes (but no deletion or cleanup):
693693
//let persister = Arc::clone(&fs_store);
694694

695-
// Step 6: Initialize the ChainMonitor
696-
let chain_monitor: Arc<ChainMonitor> = Arc::new(chainmonitor::ChainMonitor::new(
695+
// Step 6: Read ChannelMonitor state from disk
696+
let mut channelmonitors = persister.read_all_channel_monitors_with_updates().await.unwrap();
697+
// If you are using the `FilesystemStore` as a `Persist` directly, use
698+
// `lightning::util::persist::read_channel_monitors` like this:
699+
// read_channel_monitors(Arc::clone(&persister), Arc::clone(&keys_manager), Arc::clone(&keys_manager)).unwrap();
700+
701+
// Step 7: Initialize the ChainMonitor
702+
let chain_monitor: Arc<ChainMonitor> = Arc::new(chainmonitor::ChainMonitor::new_async_beta(
697703
None,
698704
Arc::clone(&broadcaster),
699705
Arc::clone(&logger),
700706
Arc::clone(&fee_estimator),
701-
Arc::clone(&persister),
707+
persister,
702708
Arc::clone(&keys_manager),
703709
keys_manager.get_peer_storage_key(),
704710
));
705711

706-
// Step 7: Read ChannelMonitor state from disk
707-
let mut channelmonitors = persister.read_all_channel_monitors_with_updates().unwrap();
708-
// If you are using the `FilesystemStore` as a `Persist` directly, use
709-
// `lightning::util::persist::read_channel_monitors` like this:
710-
//read_channel_monitors(Arc::clone(&persister), Arc::clone(&keys_manager), Arc::clone(&keys_manager)).unwrap();
711-
712712
// Step 8: Poll for the best chain tip, which may be used by the channel manager & spv client
713713
let polled_chain_tip = init::validate_best_block_header(bitcoind_client.as_ref())
714714
.await
@@ -870,6 +870,8 @@ async fn start_ldk() {
870870
// Step 14: Give ChannelMonitors to ChainMonitor
871871
for (_, (channel_monitor, _, _, _), _) in chain_listener_channel_monitors {
872872
let channel_id = channel_monitor.channel_id();
873+
// Note that this may not return `Completed` for ChannelMonitors which were last written by
874+
// a version of LDK prior to 0.1.
873875
assert_eq!(
874876
chain_monitor.load_existing_monitor(channel_id, channel_monitor),
875877
Ok(ChannelMonitorUpdateStatus::Completed)

0 commit comments

Comments
 (0)