Skip to content

Commit 87fd560

Browse files
Aditya Sharmaadi2011
Aditya Sharma
authored andcommitted
Enable ChainMonitor to distribute PeerStorage
To enable ChainMonitor sending peer storage to channel partners whenever a new block is added, We implement BaseMessageHandler for ChainMonitor. This allows the `ChainMonitor` to handle the peer storage distribution. Key changes: - Add BaseMessageHandler into the MessageHandler. - Implement BaseMessageHandler for ChainMonitor. - Process BaseMessageHandler events inside process_events().
1 parent a743bea commit 87fd560

File tree

10 files changed

+191
-59
lines changed

10 files changed

+191
-59
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ struct TestChainMonitor {
191191
Arc<FuzzEstimator>,
192192
Arc<dyn Logger>,
193193
Arc<TestPersister>,
194+
Arc<KeyProvider>,
194195
>,
195196
>,
196197
pub latest_monitors: Mutex<HashMap<ChannelId, LatestMonitorState>>,
@@ -207,6 +208,8 @@ impl TestChainMonitor {
207208
logger.clone(),
208209
feeest,
209210
Arc::clone(&persister),
211+
Arc::clone(&keys),
212+
keys.get_peer_storage_key(),
210213
)),
211214
logger,
212215
keys,

fuzz/src/full_stack.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ type ChannelMan<'a> = ChannelManager<
225225
Arc<FuzzEstimator>,
226226
Arc<dyn Logger>,
227227
Arc<TestPersister>,
228+
Arc<KeyProvider>,
228229
>,
229230
>,
230231
Arc<TestBroadcaster>,
@@ -244,6 +245,7 @@ type PeerMan<'a> = PeerManager<
244245
Arc<dyn Logger>,
245246
IgnoringMessageHandler,
246247
Arc<KeyProvider>,
248+
IgnoringMessageHandler,
247249
>;
248250

249251
struct MoneyLossDetector<'a> {
@@ -256,6 +258,7 @@ struct MoneyLossDetector<'a> {
256258
Arc<FuzzEstimator>,
257259
Arc<dyn Logger>,
258260
Arc<TestPersister>,
261+
Arc<KeyProvider>,
259262
>,
260263
>,
261264
handler: PeerMan<'a>,
@@ -280,6 +283,7 @@ impl<'a> MoneyLossDetector<'a> {
280283
Arc<FuzzEstimator>,
281284
Arc<dyn Logger>,
282285
Arc<TestPersister>,
286+
Arc<KeyProvider>,
283287
>,
284288
>,
285289
handler: PeerMan<'a>,
@@ -580,6 +584,8 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
580584
Arc::clone(&logger),
581585
fee_est.clone(),
582586
Arc::new(TestPersister { update_ret: Mutex::new(ChannelMonitorUpdateStatus::Completed) }),
587+
Arc::clone(&keys_manager),
588+
keys_manager.get_peer_storage_key(),
583589
));
584590

585591
let network = Network::Bitcoin;
@@ -613,6 +619,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
613619
route_handler: gossip_sync.clone(),
614620
onion_message_handler: IgnoringMessageHandler {},
615621
custom_message_handler: IgnoringMessageHandler {},
622+
send_only_message_handler: IgnoringMessageHandler {},
616623
};
617624
let random_data = [
618625
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

lightning-background-processor/src/lib.rs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ use lightning::routing::utxo::UtxoLookup;
3737
use lightning::sign::ChangeDestinationSource;
3838
#[cfg(feature = "std")]
3939
use lightning::sign::ChangeDestinationSourceSync;
40+
use lightning::sign::EntropySource;
4041
use lightning::sign::OutputSpender;
4142
use lightning::util::logger::Logger;
4243
use lightning::util::persist::{KVStore, Persister};
@@ -668,14 +669,14 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
668669
/// # fn send_data(&mut self, _data: &[u8], _resume_read: bool) -> usize { 0 }
669670
/// # fn disconnect_socket(&mut self) {}
670671
/// # }
671-
/// # type ChainMonitor<B, F, FE> = lightning::chain::chainmonitor::ChainMonitor<lightning::sign::InMemorySigner, Arc<F>, Arc<B>, Arc<FE>, Arc<Logger>, Arc<Store>>;
672+
/// # type ChainMonitor<B, F, FE> = lightning::chain::chainmonitor::ChainMonitor<lightning::sign::InMemorySigner, Arc<F>, Arc<B>, Arc<FE>, Arc<Logger>, Arc<Store>, Arc<lightning::sign::KeysManager>>;
672673
/// # type NetworkGraph = lightning::routing::gossip::NetworkGraph<Arc<Logger>>;
673674
/// # type P2PGossipSync<UL> = lightning::routing::gossip::P2PGossipSync<Arc<NetworkGraph>, Arc<UL>, Arc<Logger>>;
674675
/// # type ChannelManager<B, F, FE> = lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor<B, F, FE>, B, FE, Logger>;
675676
/// # type OnionMessenger<B, F, FE> = lightning::onion_message::messenger::OnionMessenger<Arc<lightning::sign::KeysManager>, Arc<lightning::sign::KeysManager>, Arc<Logger>, Arc<ChannelManager<B, F, FE>>, Arc<lightning::onion_message::messenger::DefaultMessageRouter<Arc<NetworkGraph>, Arc<Logger>, Arc<lightning::sign::KeysManager>>>, Arc<ChannelManager<B, F, FE>>, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler>;
676677
/// # type LiquidityManager<B, F, FE> = lightning_liquidity::LiquidityManager<Arc<lightning::sign::KeysManager>, Arc<ChannelManager<B, F, FE>>, Arc<F>>;
677678
/// # type Scorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<NetworkGraph>, Arc<Logger>>>;
678-
/// # type PeerManager<B, F, FE, UL> = lightning::ln::peer_handler::SimpleArcPeerManager<SocketDescriptor, ChainMonitor<B, F, FE>, B, FE, Arc<UL>, Logger>;
679+
/// # type PeerManager<B, F, FE, UL> = lightning::ln::peer_handler::SimpleArcPeerManager<SocketDescriptor, ChainMonitor<B, F, FE>, B, FE, Arc<UL>, Logger, F, Store>;
679680
/// #
680681
/// # struct Node<
681682
/// # B: lightning::chain::chaininterface::BroadcasterInterface + Send + Sync + 'static,
@@ -780,8 +781,9 @@ pub async fn process_events_async<
780781
EventHandlerFuture: core::future::Future<Output = Result<(), ReplayEvent>>,
781782
EventHandler: Fn(Event) -> EventHandlerFuture,
782783
PS: 'static + Deref + Send,
784+
ES: 'static + Deref + Send,
783785
M: 'static
784-
+ Deref<Target = ChainMonitor<<CM::Target as AChannelManager>::Signer, CF, T, F, L, P>>
786+
+ Deref<Target = ChainMonitor<<CM::Target as AChannelManager>::Signer, CF, T, F, L, P, ES>>
785787
+ Send
786788
+ Sync,
787789
CM: 'static + Deref,
@@ -813,6 +815,7 @@ where
813815
L::Target: 'static + Logger,
814816
P::Target: 'static + Persist<<CM::Target as AChannelManager>::Signer>,
815817
PS::Target: 'static + Persister<'a, CM, L, S>,
818+
ES::Target: 'static + EntropySource,
816819
CM::Target: AChannelManager,
817820
OM::Target: AOnionMessenger,
818821
PM::Target: APeerManager,
@@ -976,8 +979,11 @@ impl BackgroundProcessor {
976979
P: 'static + Deref,
977980
EH: 'static + EventHandler + Send,
978981
PS: 'static + Deref + Send,
982+
ES: 'static + Deref + Send,
979983
M: 'static
980-
+ Deref<Target = ChainMonitor<<CM::Target as AChannelManager>::Signer, CF, T, F, L, P>>
984+
+ Deref<
985+
Target = ChainMonitor<<CM::Target as AChannelManager>::Signer, CF, T, F, L, P, ES>,
986+
>
981987
+ Send
982988
+ Sync,
983989
CM: 'static + Deref + Send,
@@ -1005,6 +1011,7 @@ impl BackgroundProcessor {
10051011
L::Target: 'static + Logger,
10061012
P::Target: 'static + Persist<<CM::Target as AChannelManager>::Signer>,
10071013
PS::Target: 'static + Persister<'a, CM, L, S>,
1014+
ES::Target: 'static + EntropySource,
10081015
CM::Target: AChannelManager,
10091016
OM::Target: AOnionMessenger,
10101017
PM::Target: APeerManager,
@@ -1174,7 +1181,7 @@ mod tests {
11741181
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
11751182
use lightning::routing::router::{CandidateRouteHop, DefaultRouter, Path, RouteHop};
11761183
use lightning::routing::scoring::{ChannelUsage, LockableScore, ScoreLookUp, ScoreUpdate};
1177-
use lightning::sign::{ChangeDestinationSourceSync, InMemorySigner, KeysManager};
1184+
use lightning::sign::{ChangeDestinationSourceSync, InMemorySigner, KeysManager, NodeSigner};
11781185
use lightning::types::features::{ChannelFeatures, NodeFeatures};
11791186
use lightning::types::payment::PaymentHash;
11801187
use lightning::util::config::UserConfig;
@@ -1250,6 +1257,7 @@ mod tests {
12501257
Arc<test_utils::TestFeeEstimator>,
12511258
Arc<test_utils::TestLogger>,
12521259
Arc<FilesystemStore>,
1260+
Arc<KeysManager>,
12531261
>;
12541262

12551263
type PGS = Arc<
@@ -1301,6 +1309,7 @@ mod tests {
13011309
Arc<test_utils::TestLogger>,
13021310
IgnoringMessageHandler,
13031311
Arc<KeysManager>,
1312+
IgnoringMessageHandler,
13041313
>,
13051314
>,
13061315
liquidity_manager: Arc<LM>,
@@ -1662,6 +1671,8 @@ mod tests {
16621671
logger.clone(),
16631672
fee_estimator.clone(),
16641673
kv_store.clone(),
1674+
keys_manager.clone(),
1675+
keys_manager.get_peer_storage_key(),
16651676
));
16661677
let best_block = BestBlock::from_network(network);
16671678
let params = ChainParameters { network, best_block };
@@ -1715,6 +1726,7 @@ mod tests {
17151726
route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()),
17161727
onion_message_handler: messenger.clone(),
17171728
custom_message_handler: IgnoringMessageHandler {},
1729+
send_only_message_handler: IgnoringMessageHandler {},
17181730
};
17191731
let peer_manager = Arc::new(PeerManager::new(
17201732
msg_handler,

lightning-block-sync/src/init.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ where
7676
/// P: chainmonitor::Persist<SP::EcdsaSigner>,
7777
/// >(
7878
/// block_source: &B,
79-
/// chain_monitor: &ChainMonitor<SP::EcdsaSigner, &C, &T, &F, &L, &P>,
79+
/// chain_monitor: &ChainMonitor<SP::EcdsaSigner, &C, &T, &F, &L, &P, &ES>,
8080
/// config: UserConfig,
8181
/// entropy_source: &ES,
8282
/// node_signer: &NS,
@@ -109,7 +109,7 @@ where
109109
/// config,
110110
/// vec![&mut monitor],
111111
/// );
112-
/// <(BlockHash, ChannelManager<&ChainMonitor<SP::EcdsaSigner, &C, &T, &F, &L, &P>, &T, &ES, &NS, &SP, &F, &R, &MR, &L>)>::read(
112+
/// <(BlockHash, ChannelManager<&ChainMonitor<SP::EcdsaSigner, &C, &T, &F, &L, &P, &ES>, &T, &ES, &NS, &SP, &F, &R, &MR, &L>)>::read(
113113
/// &mut Cursor::new(&serialized_manager), read_args).unwrap()
114114
/// };
115115
///

lightning-liquidity/tests/common/mod.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#![allow(unused_macros)]
66

77
use lightning::chain::Filter;
8-
use lightning::sign::EntropySource;
8+
use lightning::sign::{EntropySource, NodeSigner};
99

1010
use bitcoin::blockdata::constants::{genesis_block, ChainHash};
1111
use bitcoin::blockdata::transaction::Transaction;
@@ -101,6 +101,7 @@ type ChainMonitor = chainmonitor::ChainMonitor<
101101
Arc<test_utils::TestFeeEstimator>,
102102
Arc<test_utils::TestLogger>,
103103
Arc<FilesystemStore>,
104+
Arc<KeysManager>,
104105
>;
105106

106107
type PGS = Arc<
@@ -130,6 +131,7 @@ pub(crate) struct Node {
130131
>,
131132
>,
132133
Arc<KeysManager>,
134+
Arc<ChainMonitor>,
133135
>,
134136
>,
135137
pub(crate) liquidity_manager:
@@ -429,6 +431,8 @@ pub(crate) fn create_liquidity_node(
429431
logger.clone(),
430432
fee_estimator.clone(),
431433
kv_store.clone(),
434+
keys_manager.clone(),
435+
keys_manager.get_peer_storage_key(),
432436
));
433437
let best_block = BestBlock::from_network(network);
434438
let chain_params = ChainParameters { network, best_block };
@@ -467,6 +471,7 @@ pub(crate) fn create_liquidity_node(
467471
route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()),
468472
onion_message_handler: IgnoringMessageHandler {},
469473
custom_message_handler: Arc::clone(&liquidity_manager),
474+
send_only_message_handler: Arc::clone(&chain_monitor),
470475
};
471476
let peer_manager =
472477
Arc::new(PeerManager::new(msg_handler, 0, &seed, logger.clone(), keys_manager.clone()));

lightning-net-tokio/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,7 @@ mod tests {
839839
route_handler: Arc::clone(&a_handler),
840840
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
841841
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
842+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
842843
};
843844
let a_manager = Arc::new(PeerManager::new(
844845
a_msg_handler,
@@ -862,6 +863,7 @@ mod tests {
862863
route_handler: Arc::clone(&b_handler),
863864
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
864865
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
866+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
865867
};
866868
let b_manager = Arc::new(PeerManager::new(
867869
b_msg_handler,
@@ -924,6 +926,7 @@ mod tests {
924926
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
925927
route_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler {}),
926928
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
929+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
927930
};
928931
let a_manager = Arc::new(PeerManager::new(
929932
a_msg_handler,

0 commit comments

Comments
 (0)