Skip to content

Commit f27446d

Browse files
committed
Switch to MonitorUpdatingPersister
1 parent 44b7ad3 commit f27446d

File tree

1 file changed

+42
-22
lines changed

1 file changed

+42
-22
lines changed

src/main.rs

Lines changed: 42 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ use lightning::routing::router::DefaultRouter;
3232
use lightning::routing::scoring::ProbabilisticScoringFeeParameters;
3333
use lightning::sign::{EntropySource, InMemorySigner, KeysManager, SpendableOutputDescriptor};
3434
use lightning::util::config::UserConfig;
35-
use lightning::util::persist::{self, read_channel_monitors, KVStore};
35+
use lightning::util::persist::{self, KVStore, MonitorUpdatingPersister};
3636
use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer};
3737
use lightning::{chain, impl_writeable_tlv_based, impl_writeable_tlv_based_enum};
3838
use lightning_background_processor::{process_events_async, GossipSync};
@@ -123,7 +123,14 @@ type ChainMonitor = chainmonitor::ChainMonitor<
123123
Arc<BitcoindClient>,
124124
Arc<BitcoindClient>,
125125
Arc<FilesystemLogger>,
126-
Arc<FilesystemStore>,
126+
Arc<
127+
MonitorUpdatingPersister<
128+
Arc<FilesystemStore>,
129+
Arc<FilesystemLogger>,
130+
Arc<KeysManager>,
131+
Arc<KeysManager>,
132+
>,
133+
>,
127134
>;
128135

129136
pub(crate) type PeerManager = SimpleArcPeerManager<
@@ -536,19 +543,7 @@ async fn start_ldk() {
536543
// broadcaster.
537544
let broadcaster = bitcoind_client.clone();
538545

539-
// Step 4: Initialize Persist
540-
let persister = Arc::new(FilesystemStore::new(ldk_data_dir.clone().into()));
541-
542-
// Step 5: Initialize the ChainMonitor
543-
let chain_monitor: Arc<ChainMonitor> = Arc::new(chainmonitor::ChainMonitor::new(
544-
None,
545-
broadcaster.clone(),
546-
logger.clone(),
547-
fee_estimator.clone(),
548-
persister.clone(),
549-
));
550-
551-
// Step 6: Initialize the KeysManager
546+
// Step 4: Initialize the KeysManager
552547

553548
// The key seed that we use to derive the node privkey (that corresponds to the node pubkey) and
554549
// other secret key material.
@@ -583,10 +578,35 @@ async fn start_ldk() {
583578
Arc::clone(&logger),
584579
));
585580

581+
// Step 5: Initialize Persistence
582+
let fs_store = Arc::new(FilesystemStore::new(ldk_data_dir.clone().into()));
583+
let persister = Arc::new(MonitorUpdatingPersister::new(
584+
Arc::clone(&fs_store),
585+
Arc::clone(&logger),
586+
1000,
587+
Arc::clone(&keys_manager),
588+
Arc::clone(&keys_manager),
589+
));
590+
// Alternatively, you can use the `FilesystemStore` as a `Persist` directly, at the cost of
591+
// larger `ChannelMonitor` update writes (but no deletion or cleanup):
592+
//let persister = Arc::clone(&fs_store);
593+
594+
// Step 6: Initialize the ChainMonitor
595+
let chain_monitor: Arc<ChainMonitor> = Arc::new(chainmonitor::ChainMonitor::new(
596+
None,
597+
Arc::clone(&broadcaster),
598+
Arc::clone(&logger),
599+
Arc::clone(&fee_estimator),
600+
Arc::clone(&persister),
601+
));
602+
586603
// Step 7: Read ChannelMonitor state from disk
587-
let mut channelmonitors =
588-
read_channel_monitors(Arc::clone(&persister), keys_manager.clone(), keys_manager.clone())
589-
.unwrap();
604+
let mut channelmonitors = persister
605+
.read_all_channel_monitors_with_updates(&bitcoind_client, &bitcoind_client)
606+
.unwrap();
607+
// If you are using the `FilesystemStore` as a `Persist` directly, use
608+
// `lightning::util::persist::read_channel_monitors` like this:
609+
//read_channel_monitors(Arc::clone(&persister), Arc::clone(&keys_manager), Arc::clone(&keys_manager)).unwrap();
590610

591611
// Step 8: Poll for the best chain tip, which may be used by the channel manager & spv client
592612
let polled_chain_tip = init::validate_best_block_header(bitcoind_client.as_ref())
@@ -817,7 +837,7 @@ async fn start_ldk() {
817837
payment_info.status = HTLCStatus::Failed;
818838
}
819839
}
820-
persister
840+
fs_store
821841
.write("", "", OUTBOUND_PAYMENTS_FNAME, &outbound_payments.lock().unwrap().encode())
822842
.unwrap();
823843

@@ -828,7 +848,7 @@ async fn start_ldk() {
828848
let keys_manager_event_listener = Arc::clone(&keys_manager);
829849
let inbound_payments_event_listener = Arc::clone(&inbound_payments);
830850
let outbound_payments_event_listener = Arc::clone(&outbound_payments);
831-
let persister_event_listener = Arc::clone(&persister);
851+
let fs_store_event_listener = Arc::clone(&fs_store);
832852
let network = args.network;
833853
let event_handler = move |event: Event| {
834854
let channel_manager_event_listener = Arc::clone(&channel_manager_event_listener);
@@ -838,7 +858,7 @@ async fn start_ldk() {
838858
let bump_tx_event_handler = Arc::clone(&bump_tx_event_handler);
839859
let inbound_payments_event_listener = Arc::clone(&inbound_payments_event_listener);
840860
let outbound_payments_event_listener = Arc::clone(&outbound_payments_event_listener);
841-
let persister_event_listener = Arc::clone(&persister_event_listener);
861+
let fs_store_event_listener = Arc::clone(&fs_store_event_listener);
842862
async move {
843863
handle_ldk_events(
844864
&channel_manager_event_listener,
@@ -848,7 +868,7 @@ async fn start_ldk() {
848868
&bump_tx_event_handler,
849869
inbound_payments_event_listener,
850870
outbound_payments_event_listener,
851-
&persister_event_listener,
871+
&fs_store_event_listener,
852872
network,
853873
event,
854874
)

0 commit comments

Comments
 (0)