Skip to content

Commit 4c1c405

Browse files
committed
Introduce Flow parameter in ChannelManager
1 parent eec4ccc commit 4c1c405

File tree

7 files changed

+205
-23
lines changed

7 files changed

+205
-23
lines changed

fuzz/src/chanmon_consistency.rs

+64-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
//! channel being force-closed.
2020
2121
use bitcoin::amount::Amount;
22-
use bitcoin::constants::genesis_block;
22+
use bitcoin::constants::{genesis_block, ChainHash};
2323
use bitcoin::locktime::absolute::LockTime;
2424
use bitcoin::network::Network;
2525
use bitcoin::opcodes;
@@ -57,6 +57,7 @@ use lightning::ln::msgs::{
5757
};
5858
use lightning::ln::script::ShutdownScript;
5959
use lightning::ln::types::ChannelId;
60+
use lightning::offers::flow::OffersMessageFlow;
6061
use lightning::offers::invoice::UnsignedBolt12Invoice;
6162
use lightning::onion_message::messenger::{Destination, MessageRouter, OnionMessagePath};
6263
use lightning::routing::router::{
@@ -84,6 +85,7 @@ use lightning::io::Cursor;
8485
use lightning::util::dyn_signer::DynSigner;
8586
use std::cmp::{self, Ordering};
8687
use std::mem;
88+
use std::ops::Deref;
8789
use std::sync::atomic;
8890
use std::sync::{Arc, Mutex};
8991

@@ -113,7 +115,52 @@ impl FeeEstimator for FuzzEstimator {
113115
}
114116
}
115117

116-
struct FuzzRouter {}
118+
#[derive(Clone)]
119+
struct InnerRouter {}
120+
121+
impl Router for InnerRouter {
122+
fn find_route(
123+
&self, _payer: &PublicKey, _params: &RouteParameters,
124+
_first_hops: Option<&[&ChannelDetails]>, _inflight_htlcs: InFlightHtlcs,
125+
) -> Result<Route, &'static str> {
126+
Err("Not implemented")
127+
}
128+
129+
fn create_blinded_payment_paths<T: secp256k1::Signing + secp256k1::Verification>(
130+
&self, _recipient: PublicKey, _first_hops: Vec<ChannelDetails>, _tlvs: ReceiveTlvs,
131+
_amount_msats: Option<u64>, _secp_ctx: &Secp256k1<T>,
132+
) -> Result<Vec<BlindedPaymentPath>, ()> {
133+
unreachable!()
134+
}
135+
}
136+
137+
impl MessageRouter for InnerRouter {
138+
fn find_path(
139+
&self, _sender: PublicKey, _peers: Vec<PublicKey>, _destination: Destination,
140+
) -> Result<OnionMessagePath, ()> {
141+
unreachable!()
142+
}
143+
144+
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
145+
&self, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>,
146+
_secp_ctx: &Secp256k1<T>,
147+
) -> Result<Vec<BlindedMessagePath>, ()> {
148+
unreachable!()
149+
}
150+
}
151+
152+
#[derive(Clone)]
153+
struct FuzzRouter {
154+
inner: InnerRouter,
155+
}
156+
157+
impl Deref for FuzzRouter {
158+
type Target = InnerRouter;
159+
160+
fn deref(&self) -> &Self::Target {
161+
&self.inner
162+
}
163+
}
117164

118165
impl Router for FuzzRouter {
119166
fn find_route(
@@ -617,7 +664,7 @@ fn send_hop_payment(
617664
pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
618665
let out = SearchingOutput::new(underlying_out);
619666
let broadcast = Arc::new(TestBroadcaster {});
620-
let router = FuzzRouter {};
667+
let router = FuzzRouter { inner: InnerRouter {} };
621668

622669
macro_rules! make_node {
623670
($node_id: expr, $fee_estimator: expr) => {{
@@ -653,13 +700,27 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
653700
let network = Network::Bitcoin;
654701
let best_block_timestamp = genesis_block(network).header.time;
655702
let params = ChainParameters { network, best_block: BestBlock::from_network(network) };
703+
let chain_hash = ChainHash::using_genesis_block(network);
704+
705+
let flow = OffersMessageFlow::new(
706+
chain_hash,
707+
params.best_block,
708+
keys_manager.get_node_id(Recipient::Node).unwrap(),
709+
best_block_timestamp,
710+
keys_manager.get_inbound_payment_key(),
711+
keys_manager.clone(),
712+
&router,
713+
&router,
714+
);
715+
656716
(
657717
ChannelManager::new(
658718
$fee_estimator.clone(),
659719
monitor.clone(),
660720
broadcast.clone(),
661721
&router,
662722
&router,
723+
flow,
663724
Arc::clone(&logger),
664725
keys_manager.clone(),
665726
keys_manager.clone(),

fuzz/src/full_stack.rs

+64-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
1616
use bitcoin::amount::Amount;
1717
use bitcoin::consensus::encode::deserialize;
18-
use bitcoin::constants::genesis_block;
18+
use bitcoin::constants::{genesis_block, ChainHash};
1919
use bitcoin::locktime::absolute::LockTime;
2020
use bitcoin::network::Network;
2121
use bitcoin::opcodes;
@@ -49,6 +49,7 @@ use lightning::ln::peer_handler::{
4949
};
5050
use lightning::ln::script::ShutdownScript;
5151
use lightning::ln::types::ChannelId;
52+
use lightning::offers::flow::OffersMessageFlow;
5253
use lightning::offers::invoice::UnsignedBolt12Invoice;
5354
use lightning::onion_message::messenger::{Destination, MessageRouter, OnionMessagePath};
5455
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
@@ -78,6 +79,7 @@ use bitcoin::secp256k1::{self, Message, PublicKey, Scalar, Secp256k1, SecretKey}
7879
use lightning::util::dyn_signer::DynSigner;
7980
use std::cell::RefCell;
8081
use std::cmp;
82+
use std::ops::Deref;
8183
use std::sync::atomic::{AtomicBool, AtomicU64, AtomicUsize, Ordering};
8284
use std::sync::{Arc, Mutex};
8385

@@ -145,7 +147,52 @@ impl FeeEstimator for FuzzEstimator {
145147
}
146148
}
147149

148-
struct FuzzRouter {}
150+
#[derive(Clone)]
151+
struct InnerRouter {}
152+
153+
impl Router for InnerRouter {
154+
fn find_route(
155+
&self, _payer: &PublicKey, _params: &RouteParameters,
156+
_first_hops: Option<&[&ChannelDetails]>, _inflight_htlcs: InFlightHtlcs,
157+
) -> Result<Route, &'static str> {
158+
Err("Not implemented")
159+
}
160+
161+
fn create_blinded_payment_paths<T: secp256k1::Signing + secp256k1::Verification>(
162+
&self, _recipient: PublicKey, _first_hops: Vec<ChannelDetails>, _tlvs: ReceiveTlvs,
163+
_amount_msats: Option<u64>, _secp_ctx: &Secp256k1<T>,
164+
) -> Result<Vec<BlindedPaymentPath>, ()> {
165+
unreachable!()
166+
}
167+
}
168+
169+
impl MessageRouter for InnerRouter {
170+
fn find_path(
171+
&self, _sender: PublicKey, _peers: Vec<PublicKey>, _destination: Destination,
172+
) -> Result<OnionMessagePath, ()> {
173+
unreachable!()
174+
}
175+
176+
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
177+
&self, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>,
178+
_secp_ctx: &Secp256k1<T>,
179+
) -> Result<Vec<BlindedMessagePath>, ()> {
180+
unreachable!()
181+
}
182+
}
183+
184+
#[derive(Clone)]
185+
struct FuzzRouter {
186+
inner: InnerRouter,
187+
}
188+
189+
impl Deref for FuzzRouter {
190+
type Target = InnerRouter;
191+
192+
fn deref(&self) -> &Self::Target {
193+
&self.inner
194+
}
195+
}
149196

150197
impl Router for FuzzRouter {
151198
fn find_route(
@@ -571,7 +618,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
571618
halt_fee_est_reads: AtomicBool::new(false),
572619
});
573620
let fee_est = Arc::new(FuzzEstimator { input: input.clone() });
574-
let router = FuzzRouter {};
621+
let router = FuzzRouter { inner: InnerRouter {} };
575622

576623
macro_rules! get_slice {
577624
($len: expr) => {
@@ -625,12 +672,26 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
625672
let network = Network::Bitcoin;
626673
let best_block_timestamp = genesis_block(network).header.time;
627674
let params = ChainParameters { network, best_block: BestBlock::from_network(network) };
675+
let chain_hash = ChainHash::using_genesis_block(network);
676+
677+
let flow = OffersMessageFlow::new(
678+
chain_hash,
679+
params.best_block,
680+
keys_manager.get_node_id(Recipient::Node).unwrap(),
681+
best_block_timestamp,
682+
keys_manager.get_inbound_payment_key(),
683+
keys_manager.clone(),
684+
&router,
685+
&router,
686+
);
687+
628688
let channelmanager = Arc::new(ChannelManager::new(
629689
fee_est.clone(),
630690
monitor.clone(),
631691
broadcast.clone(),
632692
&router,
633693
&router,
694+
flow,
634695
Arc::clone(&logger),
635696
keys_manager.clone(),
636697
keys_manager.clone(),

lightning-background-processor/src/lib.rs

+21-3
Original file line numberDiff line numberDiff line change
@@ -1081,11 +1081,14 @@ mod tests {
10811081
IgnoringMessageHandler, MessageHandler, PeerManager, SocketDescriptor,
10821082
};
10831083
use lightning::ln::types::ChannelId;
1084+
use lightning::offers::flow::OffersMessageFlow;
10841085
use lightning::onion_message::messenger::{DefaultMessageRouter, OnionMessenger};
10851086
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
10861087
use lightning::routing::router::{CandidateRouteHop, DefaultRouter, Path, RouteHop};
10871088
use lightning::routing::scoring::{ChannelUsage, LockableScore, ScoreLookUp, ScoreUpdate};
1088-
use lightning::sign::{ChangeDestinationSource, InMemorySigner, KeysManager};
1089+
use lightning::sign::{
1090+
ChangeDestinationSource, InMemorySigner, KeysManager, NodeSigner, Recipient,
1091+
};
10891092
use lightning::types::features::{ChannelFeatures, NodeFeatures};
10901093
use lightning::types::payment::PaymentHash;
10911094
use lightning::util::config::UserConfig;
@@ -1557,6 +1560,21 @@ mod tests {
15571560
network_graph.clone(),
15581561
Arc::clone(&keys_manager),
15591562
));
1563+
let best_block = BestBlock::from_network(network);
1564+
let params = ChainParameters { network, best_block };
1565+
let chain_hash = ChainHash::using_genesis_block(params.network);
1566+
1567+
let flow = OffersMessageFlow::new(
1568+
chain_hash,
1569+
params.best_block,
1570+
keys_manager.get_node_id(Recipient::Node).unwrap(),
1571+
genesis_block.header.time,
1572+
keys_manager.get_inbound_payment_key(),
1573+
keys_manager.clone(),
1574+
msg_router.clone(),
1575+
router.clone(),
1576+
);
1577+
15601578
let chain_source = Arc::new(test_utils::TestChainSource::new(Network::Bitcoin));
15611579
let kv_store =
15621580
Arc::new(FilesystemStore::new(format!("{}_persister_{}", &persist_dir, i).into()));
@@ -1569,14 +1587,14 @@ mod tests {
15691587
fee_estimator.clone(),
15701588
kv_store.clone(),
15711589
));
1572-
let best_block = BestBlock::from_network(network);
1573-
let params = ChainParameters { network, best_block };
1590+
15741591
let manager = Arc::new(ChannelManager::new(
15751592
fee_estimator.clone(),
15761593
chain_monitor.clone(),
15771594
tx_broadcaster.clone(),
15781595
router.clone(),
15791596
msg_router.clone(),
1597+
flow,
15801598
logger.clone(),
15811599
keys_manager.clone(),
15821600
keys_manager.clone(),

lightning-liquidity/tests/common/mod.rs

+19-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
#![allow(unused_macros)]
66

77
use lightning::chain::Filter;
8-
use lightning::sign::EntropySource;
8+
use lightning::offers::flow::OffersMessageFlow;
9+
use lightning::sign::{EntropySource, NodeSigner, Recipient};
910

1011
use bitcoin::blockdata::constants::{genesis_block, ChainHash};
1112
use bitcoin::blockdata::transaction::Transaction;
@@ -421,6 +422,22 @@ pub(crate) fn create_liquidity_node(
421422
));
422423
let msg_router =
423424
Arc::new(DefaultMessageRouter::new(Arc::clone(&network_graph), Arc::clone(&keys_manager)));
425+
426+
let best_block = BestBlock::from_network(network);
427+
let chain_params = ChainParameters { network, best_block };
428+
let chain_hash = ChainHash::using_genesis_block(chain_params.network);
429+
430+
let flow = OffersMessageFlow::new(
431+
chain_hash,
432+
chain_params.best_block,
433+
keys_manager.get_node_id(Recipient::Node).unwrap(),
434+
genesis_block.header.time,
435+
keys_manager.get_inbound_payment_key(),
436+
keys_manager.clone(),
437+
msg_router.clone(),
438+
router.clone(),
439+
);
440+
424441
let chain_source = Arc::new(test_utils::TestChainSource::new(Network::Bitcoin));
425442
let kv_store =
426443
Arc::new(FilesystemStore::new(format!("{}_persister_{}", &persist_dir, i).into()));
@@ -431,14 +448,13 @@ pub(crate) fn create_liquidity_node(
431448
fee_estimator.clone(),
432449
kv_store.clone(),
433450
));
434-
let best_block = BestBlock::from_network(network);
435-
let chain_params = ChainParameters { network, best_block };
436451
let channel_manager = Arc::new(ChannelManager::new(
437452
fee_estimator.clone(),
438453
chain_monitor.clone(),
439454
tx_broadcaster.clone(),
440455
router.clone(),
441456
msg_router.clone(),
457+
flow,
442458
logger.clone(),
443459
keys_manager.clone(),
444460
keys_manager.clone(),

0 commit comments

Comments
 (0)