Skip to content

Commit 8c2e3f0

Browse files
Parameterize ChannelManager by a Router trait
This will be used in upcoming work to fetch routes on-the-fly for trampoline payments.
1 parent edd9358 commit 8c2e3f0

File tree

17 files changed

+257
-138
lines changed

17 files changed

+257
-138
lines changed

fuzz/src/chanmon_consistency.rs

+24-4
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ use lightning::chain::keysinterface::{KeyMaterial, KeysInterface, InMemorySigner
4040
use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
4141
use lightning::ln::channelmanager::{self, ChainParameters, ChannelManager, PaymentSendFailure, ChannelManagerReadArgs};
4242
use lightning::ln::channel::FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE;
43-
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, DecodeError, UpdateAddHTLC, Init};
43+
use lightning::ln::msgs::{self, CommitmentUpdate, ChannelMessageHandler, DecodeError, UpdateAddHTLC, Init};
4444
use lightning::ln::script::ShutdownScript;
4545
use lightning::util::enforcing_trait_impls::{EnforcingSigner, EnforcementState};
4646
use lightning::util::errors::APIError;
@@ -49,7 +49,7 @@ use lightning::util::logger::Logger;
4949
use lightning::util::config::UserConfig;
5050
use lightning::util::events::MessageSendEventsProvider;
5151
use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer};
52-
use lightning::routing::router::{Route, RouteHop};
52+
use lightning::routing::router::{Route, RouteHop, RouteParameters};
5353

5454
use crate::utils::test_logger::{self, Output};
5555
use crate::utils::test_persister::TestPersister;
@@ -85,6 +85,24 @@ impl FeeEstimator for FuzzEstimator {
8585
}
8686
}
8787

88+
struct FuzzRouter {}
89+
90+
impl channelmanager::Router for FuzzRouter {
91+
fn find_route(
92+
&self, _payer: &PublicKey, _params: &RouteParameters, _first_hops: Option<&[&channelmanager::ChannelDetails]>,
93+
_inflight_htlcs: channelmanager::InFlightHtlcs
94+
) -> Result<Route, msgs::LightningError> {
95+
Err(msgs::LightningError {
96+
err: String::from("Not implemented"),
97+
action: msgs::ErrorAction::IgnoreError
98+
})
99+
}
100+
101+
fn notify_payment_path_failed(&self, _path: &[&RouteHop], _short_channel_id: u64) {}
102+
103+
fn notify_payment_path_successful(&self, _path: &[&RouteHop]) {}
104+
}
105+
88106
pub struct TestBroadcaster {}
89107
impl BroadcasterInterface for TestBroadcaster {
90108
fn broadcast_transaction(&self, _tx: &Transaction) { }
@@ -292,7 +310,7 @@ fn check_payment_err(send_err: PaymentSendFailure) {
292310
}
293311
}
294312

295-
type ChanMan = ChannelManager<Arc<TestChainMonitor>, Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>;
313+
type ChanMan = ChannelManager<Arc<TestChainMonitor>, Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<FuzzRouter>, Arc<dyn Logger>>;
296314

297315
#[inline]
298316
fn get_payment_secret_hash(dest: &ChanMan, payment_id: &mut u8) -> Option<(PaymentSecret, PaymentHash)> {
@@ -357,6 +375,7 @@ fn send_hop_payment(source: &ChanMan, middle: &ChanMan, middle_chan_id: u64, des
357375
pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
358376
let out = SearchingOutput::new(underlying_out);
359377
let broadcast = Arc::new(TestBroadcaster{});
378+
let router = Arc::new(FuzzRouter {});
360379

361380
macro_rules! make_node {
362381
($node_id: expr, $fee_estimator: expr) => { {
@@ -375,7 +394,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
375394
network,
376395
best_block: BestBlock::from_genesis(network),
377396
};
378-
(ChannelManager::new($fee_estimator.clone(), monitor.clone(), broadcast.clone(), Arc::clone(&logger), keys_manager.clone(), config, params),
397+
(ChannelManager::new($fee_estimator.clone(), monitor.clone(), broadcast.clone(), router.clone(), Arc::clone(&logger), keys_manager.clone(), config, params),
379398
monitor, keys_manager)
380399
} }
381400
}
@@ -409,6 +428,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
409428
fee_estimator: $fee_estimator.clone(),
410429
chain_monitor: chain_monitor.clone(),
411430
tx_broadcaster: broadcast.clone(),
431+
router: router.clone(),
412432
logger,
413433
default_config: config,
414434
channel_monitors: monitor_refs,

fuzz/src/full_stack.rs

+24-5
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ use lightning::chain::chainmonitor;
3535
use lightning::chain::transaction::OutPoint;
3636
use lightning::chain::keysinterface::{InMemorySigner, Recipient, KeyMaterial, KeysInterface};
3737
use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
38-
use lightning::ln::channelmanager::{ChainParameters, ChannelManager};
38+
use lightning::ln::channelmanager::{self, ChainParameters, ChannelManager};
3939
use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor,IgnoringMessageHandler};
40-
use lightning::ln::msgs::DecodeError;
40+
use lightning::ln::msgs::{self, DecodeError};
4141
use lightning::ln::script::ShutdownScript;
4242
use lightning::routing::gossip::{P2PGossipSync, NetworkGraph};
43-
use lightning::routing::router::{find_route, PaymentParameters, RouteParameters};
43+
use lightning::routing::router::{find_route, PaymentParameters, Route, RouteHop, RouteParameters};
4444
use lightning::routing::scoring::FixedPenaltyScorer;
4545
use lightning::util::config::UserConfig;
4646
use lightning::util::errors::APIError;
@@ -127,6 +127,24 @@ impl FeeEstimator for FuzzEstimator {
127127
}
128128
}
129129

130+
struct FuzzRouter {}
131+
132+
impl channelmanager::Router for FuzzRouter {
133+
fn find_route(
134+
&self, _payer: &PublicKey, _params: &RouteParameters, _first_hops: Option<&[&channelmanager::ChannelDetails]>,
135+
_inflight_htlcs: channelmanager::InFlightHtlcs
136+
) -> Result<Route, msgs::LightningError> {
137+
Err(msgs::LightningError {
138+
err: String::from("Not implemented"),
139+
action: msgs::ErrorAction::IgnoreError
140+
})
141+
}
142+
143+
fn notify_payment_path_failed(&self, _path: &[&RouteHop], _short_channel_id: u64) {}
144+
145+
fn notify_payment_path_successful(&self, _path: &[&RouteHop]) {}
146+
}
147+
130148
struct TestBroadcaster {
131149
txn_broadcasted: Mutex<Vec<Transaction>>,
132150
}
@@ -164,7 +182,7 @@ impl<'a> std::hash::Hash for Peer<'a> {
164182

165183
type ChannelMan = ChannelManager<
166184
Arc<chainmonitor::ChainMonitor<EnforcingSigner, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<TestPersister>>>,
167-
Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>;
185+
Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<FuzzRouter>, Arc<dyn Logger>>;
168186
type PeerMan<'a> = PeerManager<Peer<'a>, Arc<ChannelMan>, Arc<P2PGossipSync<Arc<NetworkGraph<Arc<dyn Logger>>>, Arc<dyn chain::Access>, Arc<dyn Logger>>>, IgnoringMessageHandler, Arc<dyn Logger>, IgnoringMessageHandler>;
169187

170188
struct MoneyLossDetector<'a> {
@@ -360,6 +378,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
360378
let fee_est = Arc::new(FuzzEstimator {
361379
input: input.clone(),
362380
});
381+
let router = Arc::new(FuzzRouter {});
363382

364383
macro_rules! get_slice {
365384
($len: expr) => {
@@ -399,7 +418,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
399418
network,
400419
best_block: BestBlock::from_genesis(network),
401420
};
402-
let channelmanager = Arc::new(ChannelManager::new(fee_est.clone(), monitor.clone(), broadcast.clone(), Arc::clone(&logger), keys_manager.clone(), config, params));
421+
let channelmanager = Arc::new(ChannelManager::new(fee_est.clone(), monitor.clone(), broadcast.clone(), router, Arc::clone(&logger), keys_manager.clone(), config, params));
403422
// Adding new calls to `KeysInterface::get_secure_random_bytes` during startup can change all the
404423
// keys subsequently generated in this test. Rather than regenerating all the messages manually,
405424
// it's easier to just increment the counter here so the keys don't change.

lightning-background-processor/src/lib.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use lightning::chain;
1818
use lightning::chain::chaininterface::{BroadcasterInterface, FeeEstimator};
1919
use lightning::chain::chainmonitor::{ChainMonitor, Persist};
2020
use lightning::chain::keysinterface::{Sign, KeysInterface};
21-
use lightning::ln::channelmanager::ChannelManager;
21+
use lightning::ln::channelmanager::{ChannelManager, Router};
2222
use lightning::ln::msgs::{ChannelMessageHandler, OnionMessageHandler, RoutingMessageHandler};
2323
use lightning::ln::peer_handler::{CustomMessageHandler, PeerManager, SocketDescriptor};
2424
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
@@ -478,6 +478,7 @@ impl BackgroundProcessor {
478478
T: 'static + Deref + Send + Sync,
479479
K: 'static + Deref + Send + Sync,
480480
F: 'static + Deref + Send + Sync,
481+
R: 'static + Deref + Send + Sync,
481482
G: 'static + Deref<Target = NetworkGraph<L>> + Send + Sync,
482483
L: 'static + Deref + Send + Sync,
483484
P: 'static + Deref + Send + Sync,
@@ -488,7 +489,7 @@ impl BackgroundProcessor {
488489
EH: 'static + EventHandler + Send,
489490
PS: 'static + Deref + Send,
490491
M: 'static + Deref<Target = ChainMonitor<Signer, CF, T, F, L, P>> + Send + Sync,
491-
CM: 'static + Deref<Target = ChannelManager<CW, T, K, F, L>> + Send + Sync,
492+
CM: 'static + Deref<Target = ChannelManager<CW, T, K, F, R, L>> + Send + Sync,
492493
PGS: 'static + Deref<Target = P2PGossipSync<G, CA, L>> + Send + Sync,
493494
RGS: 'static + Deref<Target = RapidGossipSync<G, L>> + Send,
494495
UMH: 'static + Deref + Send + Sync,
@@ -506,13 +507,14 @@ impl BackgroundProcessor {
506507
T::Target: 'static + BroadcasterInterface,
507508
K::Target: 'static + KeysInterface<Signer = Signer>,
508509
F::Target: 'static + FeeEstimator,
510+
R::Target: 'static + Router,
509511
L::Target: 'static + Logger,
510512
P::Target: 'static + Persist<Signer>,
511513
CMH::Target: 'static + ChannelMessageHandler,
512514
OMH::Target: 'static + OnionMessageHandler,
513515
RMH::Target: 'static + RoutingMessageHandler,
514516
UMH::Target: 'static + CustomMessageHandler,
515-
PS::Target: 'static + Persister<'a, Signer, CW, T, K, F, L, SC>,
517+
PS::Target: 'static + Persister<'a, Signer, CW, T, K, F, R, L, SC>,
516518
{
517519
let stop_thread = Arc::new(AtomicBool::new(false));
518520
let stop_thread_clone = stop_thread.clone();
@@ -625,7 +627,7 @@ mod tests {
625627
type RGS = Arc<RapidGossipSync<Arc<NetworkGraph<Arc<test_utils::TestLogger>>>, Arc<test_utils::TestLogger>>>;
626628

627629
struct Node {
628-
node: Arc<SimpleArcChannelManager<ChainMonitor, test_utils::TestBroadcaster, test_utils::TestFeeEstimator, test_utils::TestLogger>>,
630+
node: Arc<SimpleArcChannelManager<ChainMonitor, test_utils::TestBroadcaster, test_utils::TestFeeEstimator, test_utils::TestRouter, test_utils::TestLogger>>,
629631
p2p_gossip_sync: PGS,
630632
rapid_gossip_sync: RGS,
631633
peer_manager: Arc<PeerManager<TestDescriptor, Arc<test_utils::TestChannelMessageHandler>, Arc<test_utils::TestRoutingMessageHandler>, IgnoringMessageHandler, Arc<test_utils::TestLogger>, IgnoringMessageHandler>>,
@@ -732,6 +734,7 @@ mod tests {
732734
for i in 0..num_nodes {
733735
let tx_broadcaster = Arc::new(test_utils::TestBroadcaster{txn_broadcasted: Mutex::new(Vec::new()), blocks: Arc::new(Mutex::new(Vec::new()))});
734736
let fee_estimator = Arc::new(test_utils::TestFeeEstimator { sat_per_kw: Mutex::new(253) });
737+
let router = Arc::new(test_utils::TestRouter { });
735738
let chain_source = Arc::new(test_utils::TestChainSource::new(Network::Testnet));
736739
let logger = Arc::new(test_utils::TestLogger::with_id(format!("node {}", i)));
737740
let persister = Arc::new(FilesystemPersister::new(format!("{}_persister_{}", persist_dir, i)));
@@ -743,7 +746,7 @@ mod tests {
743746
let chain_monitor = Arc::new(chainmonitor::ChainMonitor::new(Some(chain_source.clone()), tx_broadcaster.clone(), logger.clone(), fee_estimator.clone(), persister.clone()));
744747
let best_block = BestBlock::from_genesis(network);
745748
let params = ChainParameters { network, best_block };
746-
let manager = Arc::new(ChannelManager::new(fee_estimator.clone(), chain_monitor.clone(), tx_broadcaster.clone(), logger.clone(), keys_manager.clone(), UserConfig::default(), params));
749+
let manager = Arc::new(ChannelManager::new(fee_estimator.clone(), chain_monitor.clone(), tx_broadcaster.clone(), router.clone(), logger.clone(), keys_manager.clone(), UserConfig::default(), params));
747750
let network_graph = Arc::new(NetworkGraph::new(genesis_block.header.block_hash(), logger.clone()));
748751
let p2p_gossip_sync = Arc::new(P2PGossipSync::new(network_graph.clone(), Some(chain_source.clone()), logger.clone()));
749752
let rapid_gossip_sync = Arc::new(RapidGossipSync::new(network_graph.clone()));

lightning-block-sync/src/init.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ BlockSourceResult<ValidatedBlockHeader> where B::Target: BlockSource {
4949
/// use lightning::chain::chaininterface::FeeEstimator;
5050
/// use lightning::chain::keysinterface;
5151
/// use lightning::chain::keysinterface::KeysInterface;
52-
/// use lightning::ln::channelmanager::ChannelManager;
53-
/// use lightning::ln::channelmanager::ChannelManagerReadArgs;
52+
/// use lightning::ln::channelmanager::{ChannelManager, ChannelManagerReadArgs, Router};
5453
/// use lightning::util::config::UserConfig;
5554
/// use lightning::util::logger::Logger;
5655
/// use lightning::util::ser::ReadableArgs;
@@ -65,6 +64,7 @@ BlockSourceResult<ValidatedBlockHeader> where B::Target: BlockSource {
6564
/// S: keysinterface::Sign,
6665
/// T: BroadcasterInterface,
6766
/// F: FeeEstimator,
67+
/// R: Router,
6868
/// L: Logger,
6969
/// C: chain::Filter,
7070
/// P: chainmonitor::Persist<S>,
@@ -75,6 +75,7 @@ BlockSourceResult<ValidatedBlockHeader> where B::Target: BlockSource {
7575
/// keys_manager: &K,
7676
/// tx_broadcaster: &T,
7777
/// fee_estimator: &F,
78+
/// router: &R,
7879
/// logger: &L,
7980
/// persister: &P,
8081
/// ) {
@@ -91,11 +92,12 @@ BlockSourceResult<ValidatedBlockHeader> where B::Target: BlockSource {
9192
/// fee_estimator,
9293
/// chain_monitor,
9394
/// tx_broadcaster,
95+
/// router,
9496
/// logger,
9597
/// config,
9698
/// vec![&mut monitor],
9799
/// );
98-
/// <(BlockHash, ChannelManager<&ChainMonitor<S, &C, &T, &F, &L, &P>, &T, &K, &F, &L>)>::read(
100+
/// <(BlockHash, ChannelManager<&ChainMonitor<S, &C, &T, &F, &L, &P>, &T, &K, &F, &R, &L>)>::read(
99101
/// &mut Cursor::new(&serialized_manager), read_args).unwrap()
100102
/// };
101103
///

lightning-invoice/src/utils.rs

+17-11
Original file line numberDiff line numberDiff line change
@@ -235,15 +235,16 @@ where
235235
///
236236
/// `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
237237
/// in excess of the current time.
238-
pub fn create_invoice_from_channelmanager<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
239-
channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
238+
pub fn create_invoice_from_channelmanager<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
239+
channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
240240
network: Currency, amt_msat: Option<u64>, description: String, invoice_expiry_delta_secs: u32
241241
) -> Result<Invoice, SignOrCreationError<()>>
242242
where
243243
M::Target: chain::Watch<<K::Target as KeysInterface>::Signer>,
244244
T::Target: BroadcasterInterface,
245245
K::Target: KeysInterface,
246246
F::Target: FeeEstimator,
247+
R::Target: Router,
247248
L::Target: Logger,
248249
{
249250
use std::time::SystemTime;
@@ -265,8 +266,8 @@ where
265266
///
266267
/// `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
267268
/// in excess of the current time.
268-
pub fn create_invoice_from_channelmanager_with_description_hash<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
269-
channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
269+
pub fn create_invoice_from_channelmanager_with_description_hash<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
270+
channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
270271
network: Currency, amt_msat: Option<u64>, description_hash: Sha256,
271272
invoice_expiry_delta_secs: u32
272273
) -> Result<Invoice, SignOrCreationError<()>>
@@ -275,6 +276,7 @@ where
275276
T::Target: BroadcasterInterface,
276277
K::Target: KeysInterface,
277278
F::Target: FeeEstimator,
279+
R::Target: Router,
278280
L::Target: Logger,
279281
{
280282
use std::time::SystemTime;
@@ -292,8 +294,8 @@ where
292294
/// See [`create_invoice_from_channelmanager_with_description_hash`]
293295
/// This version can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
294296
/// available and the current time is supplied by the caller.
295-
pub fn create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
296-
channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
297+
pub fn create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
298+
channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
297299
network: Currency, amt_msat: Option<u64>, description_hash: Sha256,
298300
duration_since_epoch: Duration, invoice_expiry_delta_secs: u32
299301
) -> Result<Invoice, SignOrCreationError<()>>
@@ -302,6 +304,7 @@ where
302304
T::Target: BroadcasterInterface,
303305
K::Target: KeysInterface,
304306
F::Target: FeeEstimator,
307+
R::Target: Router,
305308
L::Target: Logger,
306309
{
307310
_create_invoice_from_channelmanager_and_duration_since_epoch(
@@ -314,8 +317,8 @@ where
314317
/// See [`create_invoice_from_channelmanager`]
315318
/// This version can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
316319
/// available and the current time is supplied by the caller.
317-
pub fn create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
318-
channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
320+
pub fn create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
321+
channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
319322
network: Currency, amt_msat: Option<u64>, description: String, duration_since_epoch: Duration,
320323
invoice_expiry_delta_secs: u32
321324
) -> Result<Invoice, SignOrCreationError<()>>
@@ -324,6 +327,7 @@ where
324327
T::Target: BroadcasterInterface,
325328
K::Target: KeysInterface,
326329
F::Target: FeeEstimator,
330+
R::Target: Router,
327331
L::Target: Logger,
328332
{
329333
_create_invoice_from_channelmanager_and_duration_since_epoch(
@@ -335,8 +339,8 @@ where
335339
)
336340
}
337341

338-
fn _create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
339-
channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
342+
fn _create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
343+
channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
340344
network: Currency, amt_msat: Option<u64>, description: InvoiceDescription,
341345
duration_since_epoch: Duration, invoice_expiry_delta_secs: u32
342346
) -> Result<Invoice, SignOrCreationError<()>>
@@ -345,6 +349,7 @@ where
345349
T::Target: BroadcasterInterface,
346350
K::Target: KeysInterface,
347351
F::Target: FeeEstimator,
352+
R::Target: Router,
348353
L::Target: Logger,
349354
{
350355
// `create_inbound_payment` only returns an error if the amount is greater than the total bitcoin
@@ -590,12 +595,13 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref> ProbingRouter for D
590595
}
591596
}
592597

593-
impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Payer for ChannelManager<M, T, K, F, L>
598+
impl<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref> Payer for ChannelManager<M, T, K, F, R, L>
594599
where
595600
M::Target: chain::Watch<<K::Target as KeysInterface>::Signer>,
596601
T::Target: BroadcasterInterface,
597602
K::Target: KeysInterface,
598603
F::Target: FeeEstimator,
604+
R::Target: Router,
599605
L::Target: Logger,
600606
{
601607
fn node_id(&self) -> PublicKey {

lightning-net-tokio/src/lib.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,14 @@
3131
//! // Define concrete types for our high-level objects:
3232
//! type TxBroadcaster = dyn lightning::chain::chaininterface::BroadcasterInterface + Send + Sync;
3333
//! type FeeEstimator = dyn lightning::chain::chaininterface::FeeEstimator + Send + Sync;
34+
//! type Router = dyn lightning::ln::channelmanager::Router + Send + Sync;
3435
//! type Logger = dyn lightning::util::logger::Logger + Send + Sync;
3536
//! type ChainAccess = dyn lightning::chain::Access + Send + Sync;
3637
//! type ChainFilter = dyn lightning::chain::Filter + Send + Sync;
3738
//! type DataPersister = dyn lightning::chain::chainmonitor::Persist<lightning::chain::keysinterface::InMemorySigner> + Send + Sync;
3839
//! type ChainMonitor = lightning::chain::chainmonitor::ChainMonitor<lightning::chain::keysinterface::InMemorySigner, Arc<ChainFilter>, Arc<TxBroadcaster>, Arc<FeeEstimator>, Arc<Logger>, Arc<DataPersister>>;
39-
//! type ChannelManager = Arc<lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor, TxBroadcaster, FeeEstimator, Logger>>;
40-
//! type PeerManager = Arc<lightning::ln::peer_handler::SimpleArcPeerManager<lightning_net_tokio::SocketDescriptor, ChainMonitor, TxBroadcaster, FeeEstimator, ChainAccess, Logger>>;
40+
//! type ChannelManager = Arc<lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor, TxBroadcaster, FeeEstimator, Router, Logger>>;
41+
//! type PeerManager = Arc<lightning::ln::peer_handler::SimpleArcPeerManager<lightning_net_tokio::SocketDescriptor, ChainMonitor, TxBroadcaster, FeeEstimator, ChainAccess, Router, Logger>>;
4142
//!
4243
//! // Connect to node with pubkey their_node_id at addr:
4344
//! async fn connect_to_node(peer_manager: PeerManager, chain_monitor: Arc<ChainMonitor>, channel_manager: ChannelManager, their_node_id: PublicKey, addr: SocketAddr) {

0 commit comments

Comments
 (0)