@@ -32,7 +32,7 @@ use lightning::routing::router::DefaultRouter;
32
32
use lightning:: routing:: scoring:: ProbabilisticScoringFeeParameters ;
33
33
use lightning:: sign:: { EntropySource , InMemorySigner , KeysManager , SpendableOutputDescriptor } ;
34
34
use lightning:: util:: config:: UserConfig ;
35
- use lightning:: util:: persist:: { self , read_channel_monitors , KVStore } ;
35
+ use lightning:: util:: persist:: { self , KVStore , MonitorUpdatingPersister } ;
36
36
use lightning:: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
37
37
use lightning:: { chain, impl_writeable_tlv_based, impl_writeable_tlv_based_enum} ;
38
38
use lightning_background_processor:: { process_events_async, GossipSync } ;
@@ -123,7 +123,14 @@ type ChainMonitor = chainmonitor::ChainMonitor<
123
123
Arc < BitcoindClient > ,
124
124
Arc < BitcoindClient > ,
125
125
Arc < FilesystemLogger > ,
126
- Arc < FilesystemStore > ,
126
+ Arc <
127
+ MonitorUpdatingPersister <
128
+ Arc < FilesystemStore > ,
129
+ Arc < FilesystemLogger > ,
130
+ Arc < KeysManager > ,
131
+ Arc < KeysManager > ,
132
+ > ,
133
+ > ,
127
134
> ;
128
135
129
136
pub ( crate ) type PeerManager = SimpleArcPeerManager <
@@ -536,19 +543,7 @@ async fn start_ldk() {
536
543
// broadcaster.
537
544
let broadcaster = bitcoind_client. clone ( ) ;
538
545
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
552
547
553
548
// The key seed that we use to derive the node privkey (that corresponds to the node pubkey) and
554
549
// other secret key material.
@@ -583,10 +578,35 @@ async fn start_ldk() {
583
578
Arc :: clone ( & logger) ,
584
579
) ) ;
585
580
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
+
586
603
// 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();
590
610
591
611
// Step 8: Poll for the best chain tip, which may be used by the channel manager & spv client
592
612
let polled_chain_tip = init:: validate_best_block_header ( bitcoind_client. as_ref ( ) )
@@ -817,7 +837,7 @@ async fn start_ldk() {
817
837
payment_info. status = HTLCStatus :: Failed ;
818
838
}
819
839
}
820
- persister
840
+ fs_store
821
841
. write ( "" , "" , OUTBOUND_PAYMENTS_FNAME , & outbound_payments. lock ( ) . unwrap ( ) . encode ( ) )
822
842
. unwrap ( ) ;
823
843
@@ -828,7 +848,7 @@ async fn start_ldk() {
828
848
let keys_manager_event_listener = Arc :: clone ( & keys_manager) ;
829
849
let inbound_payments_event_listener = Arc :: clone ( & inbound_payments) ;
830
850
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 ) ;
832
852
let network = args. network ;
833
853
let event_handler = move |event : Event | {
834
854
let channel_manager_event_listener = Arc :: clone ( & channel_manager_event_listener) ;
@@ -838,7 +858,7 @@ async fn start_ldk() {
838
858
let bump_tx_event_handler = Arc :: clone ( & bump_tx_event_handler) ;
839
859
let inbound_payments_event_listener = Arc :: clone ( & inbound_payments_event_listener) ;
840
860
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 ) ;
842
862
async move {
843
863
handle_ldk_events (
844
864
& channel_manager_event_listener,
@@ -848,7 +868,7 @@ async fn start_ldk() {
848
868
& bump_tx_event_handler,
849
869
inbound_payments_event_listener,
850
870
outbound_payments_event_listener,
851
- & persister_event_listener ,
871
+ & fs_store_event_listener ,
852
872
network,
853
873
event,
854
874
)
0 commit comments