Skip to content

Commit 3d6f068

Browse files
committed
Introduce Flow parameter in ChannelManager
1 parent 1c1e923 commit 3d6f068

File tree

5 files changed

+77
-17
lines changed

5 files changed

+77
-17
lines changed

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(),

lightning/src/ln/channelmanager.rs

+22-8
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ use crate::events::{self, Event, EventHandler, EventsProvider, InboundChannelFun
4949
// construct one themselves.
5050
use crate::ln::inbound_payment;
5151
use crate::ln::types::ChannelId;
52+
use crate::offers::flow::OffersMessageFlow;
5253
use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
5354
use crate::ln::channel::{self, Channel, ChannelError, ChannelUpdateStatus, FundedChannel, ShutdownResult, UpdateFulfillCommitFetch, OutboundV1Channel, ReconnectionMsg, InboundV1Channel, WithChannelContext};
5455
use crate::ln::channel::PendingV2Channel;
@@ -1718,6 +1719,7 @@ where
17181719
/// # tx_broadcaster: &dyn lightning::chain::chaininterface::BroadcasterInterface,
17191720
/// # router: &lightning::routing::router::DefaultRouter<&NetworkGraph<&'a L>, &'a L, &ES, &S, SP, SL>,
17201721
/// # message_router: &lightning::onion_message::messenger::DefaultMessageRouter<&NetworkGraph<&'a L>, &'a L, &ES>,
1722+
/// flow: lightning::offers::flow::OffersMessageFlow<&ES,&lightning::onion_message::messenger::DefaultMessageRouter<&NetworkGraph<&'a L>, &'a L, &ES>, &lightning::routing::router::DefaultRouter<&NetworkGraph<&'a L>, &'a L, &ES, &S, SP, SL>>,
17211723
/// # logger: &L,
17221724
/// # entropy_source: &ES,
17231725
/// # node_signer: &dyn lightning::sign::NodeSigner,
@@ -1733,7 +1735,7 @@ where
17331735
/// };
17341736
/// let default_config = UserConfig::default();
17351737
/// let channel_manager = ChannelManager::new(
1736-
/// fee_estimator, chain_monitor, tx_broadcaster, router, message_router, logger,
1738+
/// fee_estimator, chain_monitor, tx_broadcaster, router, message_router, flow, logger,
17371739
/// entropy_source, node_signer, signer_provider, default_config.clone(), params, current_timestamp,
17381740
/// );
17391741
///
@@ -2445,6 +2447,11 @@ where
24452447
router: R,
24462448
message_router: MR,
24472449

2450+
#[cfg(test)]
2451+
pub(super) flow: OffersMessageFlow<ES, MR, R>,
2452+
#[cfg(not(test))]
2453+
flow: OffersMessageFlow<ES, MR, R>,
2454+
24482455
/// See `ChannelManager` struct-level documentation for lock order requirements.
24492456
#[cfg(any(test, feature = "_test_utils"))]
24502457
pub(super) best_block: RwLock<BestBlock>,
@@ -3540,8 +3547,8 @@ where
35403547
/// [`block_disconnected`]: chain::Listen::block_disconnected
35413548
/// [`params.best_block.block_hash`]: chain::BestBlock::block_hash
35423549
pub fn new(
3543-
fee_est: F, chain_monitor: M, tx_broadcaster: T, router: R, message_router: MR, logger: L,
3544-
entropy_source: ES, node_signer: NS, signer_provider: SP, config: UserConfig,
3550+
fee_est: F, chain_monitor: M, tx_broadcaster: T, router: R, message_router: MR, flow: OffersMessageFlow<ES, MR, R>,
3551+
logger: L, entropy_source: ES, node_signer: NS, signer_provider: SP, config: UserConfig,
35453552
params: ChainParameters, current_timestamp: u32,
35463553
) -> Self {
35473554
let mut secp_ctx = Secp256k1::new();
@@ -3555,6 +3562,7 @@ where
35553562
tx_broadcaster,
35563563
router,
35573564
message_router,
3565+
flow,
35583566

35593567
best_block: RwLock::new(params.best_block),
35603568

@@ -11499,6 +11507,7 @@ where
1149911507

1150011508
self.transactions_confirmed(header, txdata, height);
1150111509
self.best_block_updated(header, height);
11510+
self.flow.best_block_updated(header);
1150211511
}
1150311512

1150411513
fn block_disconnected(&self, header: &Header, height: u32) {
@@ -13602,7 +13611,7 @@ impl Readable for VecDeque<(Event, Option<EventCompletionAction>)> {
1360213611
/// which you've already broadcasted the transaction.
1360313612
///
1360413613
/// [`ChainMonitor`]: crate::chain::chainmonitor::ChainMonitor
13605-
pub struct ChannelManagerReadArgs<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13614+
pub struct ChannelManagerReadArgs<'a, M: Deref, T: Deref, ES: Deref + Clone, NS: Deref, SP: Deref, F: Deref, R: Deref + Clone, MR: Deref + Clone, L: Deref>
1360613615
where
1360713616
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1360813617
T::Target: BroadcasterInterface,
@@ -13648,6 +13657,7 @@ where
1364813657
/// The [`MessageRouter`] used for constructing [`BlindedMessagePath`]s for [`Offer`]s,
1364913658
/// [`Refund`]s, and any reply paths.
1365013659
pub message_router: MR,
13660+
1365113661
/// The Logger for use in the ChannelManager and which may be used to log information during
1365213662
/// deserialization.
1365313663
pub logger: L,
@@ -13669,7 +13679,7 @@ where
1366913679
pub channel_monitors: HashMap<ChannelId, &'a ChannelMonitor<<SP::Target as SignerProvider>::EcdsaSigner>>,
1367013680
}
1367113681

13672-
impl<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13682+
impl<'a, M: Deref, T: Deref, ES: Deref + Clone, NS: Deref, SP: Deref, F: Deref, R: Deref + Clone, MR: Deref + Clone, L: Deref>
1367313683
ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>
1367413684
where
1367513685
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13703,7 +13713,7 @@ where
1370313713

1370413714
// Implement ReadableArgs for an Arc'd ChannelManager to make it a bit easier to work with the
1370513715
// SipmleArcChannelManager type:
13706-
impl<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13716+
impl<'a, M: Deref, T: Deref, ES: Deref + Clone, NS: Deref, SP: Deref, F: Deref, R: Deref + Clone, MR: Deref + Clone, L: Deref>
1370713717
ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>> for (BlockHash, Arc<ChannelManager<M, T, ES, NS, SP, F, R, MR, L>>)
1370813718
where
1370913719
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13722,7 +13732,7 @@ where
1372213732
}
1372313733
}
1372413734

13725-
impl<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13735+
impl<'a, M: Deref, T: Deref, ES: Deref + Clone, NS: Deref, SP: Deref, F: Deref, R: Deref + Clone, MR: Deref + Clone, L: Deref>
1372613736
ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>> for (BlockHash, ChannelManager<M, T, ES, NS, SP, F, R, MR, L>)
1372713737
where
1372813738
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -14704,15 +14714,19 @@ where
1470414714
}
1470514715
}
1470614716

14717+
let best_block = BestBlock::new(best_block_hash, best_block_height);
14718+
let flow = OffersMessageFlow::new(chain_hash, best_block, our_network_pubkey, highest_seen_timestamp, expanded_inbound_key, args.entropy_source.clone(), args.message_router.clone(), args.router.clone());
14719+
1470714720
let channel_manager = ChannelManager {
1470814721
chain_hash,
1470914722
fee_estimator: bounded_fee_estimator,
1471014723
chain_monitor: args.chain_monitor,
1471114724
tx_broadcaster: args.tx_broadcaster,
1471214725
router: args.router,
1471314726
message_router: args.message_router,
14727+
flow,
1471414728

14715-
best_block: RwLock::new(BestBlock::new(best_block_hash, best_block_height)),
14729+
best_block: RwLock::new(best_block),
1471614730

1471714731
inbound_payment_key: expanded_inbound_key,
1471814732
pending_outbound_payments: pending_outbounds,

lightning/src/ln/functional_test_utils.rs

+14-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use crate::chain::transaction::OutPoint;
1616
use crate::events::{ClaimedHTLC, ClosureReason, Event, HTLCDestination, PaidBolt12Invoice, PathFailure, PaymentFailureReason, PaymentPurpose};
1717
use crate::events::bump_transaction::{BumpTransactionEvent, BumpTransactionEventHandler, Wallet, WalletSource};
1818
use crate::ln::types::ChannelId;
19+
use crate::offers::flow::OffersMessageFlow;
1920
use crate::types::payment::{PaymentPreimage, PaymentHash, PaymentSecret};
2021
use crate::ln::channelmanager::{AChannelManager, ChainParameters, ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, RecipientOnionFields, PaymentId, MIN_CLTV_EXPIRY_DELTA};
2122
use crate::types::features::InitFeatures;
@@ -27,7 +28,7 @@ use crate::onion_message::messenger::OnionMessenger;
2728
use crate::ln::onion_utils::LocalHTLCFailureReason;
2829
use crate::routing::gossip::{P2PGossipSync, NetworkGraph, NetworkUpdate};
2930
use crate::routing::router::{self, PaymentParameters, Route, RouteParameters};
30-
use crate::sign::{EntropySource, RandomBytes};
31+
use crate::sign::{EntropySource, NodeSigner, RandomBytes, Recipient};
3132
use crate::util::config::{MaxDustHTLCExposure, UserConfig};
3233
use crate::util::logger::Logger;
3334
use crate::util::scid_utils;
@@ -37,6 +38,7 @@ use crate::util::test_utils;
3738
use crate::util::test_utils::{TestChainMonitor, TestScorer, TestKeysInterface};
3839
use crate::util::ser::{ReadableArgs, Writeable};
3940

41+
use bitcoin::constants::ChainHash;
4042
use bitcoin::{Weight, WPubkeyHash};
4143
use bitcoin::amount::Amount;
4244
use bitcoin::block::{Block, Header, Version as BlockVersion};
@@ -3383,7 +3385,17 @@ pub fn create_node_chanmgrs<'a, 'b>(node_count: usize, cfgs: &'a Vec<NodeCfg<'b>
33833385
network,
33843386
best_block: BestBlock::from_network(network),
33853387
};
3386-
let node = ChannelManager::new(cfgs[i].fee_estimator, &cfgs[i].chain_monitor, cfgs[i].tx_broadcaster, &cfgs[i].router, &cfgs[i].message_router, cfgs[i].logger, cfgs[i].keys_manager,
3388+
let chain_hash = ChainHash::using_genesis_block(params.network);
3389+
let our_network_pubkey = cfgs[i].keys_manager.get_node_id(Recipient::Node).unwrap();
3390+
let expanded_inbound_key = cfgs[i].keys_manager.get_inbound_payment_key();
3391+
3392+
let flow = OffersMessageFlow::new(
3393+
chain_hash, params.best_block, our_network_pubkey,
3394+
genesis_block.header.time, expanded_inbound_key,
3395+
cfgs[i].keys_manager, &cfgs[i].message_router, &cfgs[i].router
3396+
);
3397+
3398+
let node = ChannelManager::new(cfgs[i].fee_estimator, &cfgs[i].chain_monitor, cfgs[i].tx_broadcaster, &cfgs[i].router, &cfgs[i].message_router, flow, cfgs[i].logger, cfgs[i].keys_manager,
33873399
cfgs[i].keys_manager, cfgs[i].keys_manager, if node_config[i].is_some() { node_config[i].clone().unwrap() } else { test_default_channel_config() }, params, genesis_block.header.time);
33883400
chanmgrs.push(node);
33893401
}

lightning/src/offers/flow.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ where
162162
now
163163
}
164164

165-
fn best_block_updated(&self, header: &Header) {
165+
pub(crate) fn best_block_updated(&self, header: &Header) {
166166
macro_rules! max_time {
167167
($timestamp: expr) => {
168168
loop {

0 commit comments

Comments
 (0)