Skip to content

Commit 886b7e3

Browse files
authored
Merge branch 'main' into waterson/cache-commitment-point
2 parents 2a474cc + 51d9ee3 commit 886b7e3

20 files changed

Lines changed: 1163 additions & 122 deletions

lightning/src/ln/channelmanager.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7857,15 +7857,15 @@ where
78577857
let payment_paths = self.create_blinded_payment_paths(amount_msats, payment_secret)
78587858
.map_err(|_| Bolt12SemanticError::MissingPaths)?;
78597859

7860-
#[cfg(not(feature = "no-std"))]
7860+
#[cfg(feature = "std")]
78617861
let builder = refund.respond_using_derived_keys(
78627862
payment_paths, payment_hash, expanded_key, entropy
78637863
)?;
7864-
#[cfg(feature = "no-std")]
7864+
#[cfg(not(feature = "std"))]
78657865
let created_at = Duration::from_secs(
78667866
self.highest_seen_timestamp.load(Ordering::Acquire) as u64
78677867
);
7868-
#[cfg(feature = "no-std")]
7868+
#[cfg(not(feature = "std"))]
78697869
let builder = refund.respond_using_derived_keys_no_std(
78707870
payment_paths, payment_hash, created_at, expanded_key, entropy
78717871
)?;
@@ -9304,17 +9304,17 @@ where
93049304
},
93059305
};
93069306

9307-
#[cfg(feature = "no-std")]
9307+
#[cfg(not(feature = "std"))]
93089308
let created_at = Duration::from_secs(
93099309
self.highest_seen_timestamp.load(Ordering::Acquire) as u64
93109310
);
93119311

93129312
if invoice_request.keys.is_some() {
9313-
#[cfg(not(feature = "no-std"))]
9313+
#[cfg(feature = "std")]
93149314
let builder = invoice_request.respond_using_derived_keys(
93159315
payment_paths, payment_hash
93169316
);
9317-
#[cfg(feature = "no-std")]
9317+
#[cfg(not(feature = "std"))]
93189318
let builder = invoice_request.respond_using_derived_keys_no_std(
93199319
payment_paths, payment_hash, created_at
93209320
);
@@ -9323,9 +9323,9 @@ where
93239323
Err(error) => Some(OffersMessage::InvoiceError(error.into())),
93249324
}
93259325
} else {
9326-
#[cfg(not(feature = "no-std"))]
9326+
#[cfg(feature = "std")]
93279327
let builder = invoice_request.respond_with(payment_paths, payment_hash);
9328-
#[cfg(feature = "no-std")]
9328+
#[cfg(not(feature = "std"))]
93299329
let builder = invoice_request.respond_with_no_std(
93309330
payment_paths, payment_hash, created_at
93319331
);
@@ -12577,7 +12577,7 @@ pub mod bench {
1257712577
use bitcoin::blockdata::locktime::absolute::LockTime;
1257812578
use bitcoin::hashes::Hash;
1257912579
use bitcoin::hashes::sha256::Hash as Sha256;
12580-
use bitcoin::{Block, Transaction, TxOut};
12580+
use bitcoin::{Transaction, TxOut};
1258112581

1258212582
use crate::sync::{Arc, Mutex, RwLock};
1258312583

@@ -12617,7 +12617,7 @@ pub mod bench {
1261712617
let fee_estimator = test_utils::TestFeeEstimator { sat_per_kw: Mutex::new(253) };
1261812618
let logger_a = test_utils::TestLogger::with_id("node a".to_owned());
1261912619
let scorer = RwLock::new(test_utils::TestScorer::new());
12620-
let router = test_utils::TestRouter::new(Arc::new(NetworkGraph::new(network, &logger_a)), &scorer);
12620+
let router = test_utils::TestRouter::new(Arc::new(NetworkGraph::new(network, &logger_a)), &logger_a, &scorer);
1262112621

1262212622
let mut config: UserConfig = Default::default();
1262312623
config.channel_config.max_dust_htlc_exposure = MaxDustHTLCExposure::FeeRateMultiplier(5_000_000 / 253);

lightning/src/ln/features.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -932,6 +932,13 @@ impl<T: sealed::AnchorsZeroFeeHtlcTx> Features<T> {
932932
}
933933
}
934934

935+
impl<T: sealed::RouteBlinding> Features<T> {
936+
#[cfg(test)]
937+
pub(crate) fn clear_route_blinding(&mut self) {
938+
<T as sealed::RouteBlinding>::clear_bits(&mut self.flags);
939+
}
940+
}
941+
935942
#[cfg(test)]
936943
impl<T: sealed::UnknownFeature> Features<T> {
937944
pub(crate) fn unknown() -> Self {

lightning/src/ln/functional_test_utils.rs

Lines changed: 70 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,28 @@
1111
//! nodes for functional tests.
1212
1313
use crate::chain::{BestBlock, ChannelMonitorUpdateStatus, Confirm, Listen, Watch, chainmonitor::Persist};
14-
use crate::sign::EntropySource;
1514
use crate::chain::channelmonitor::ChannelMonitor;
1615
use crate::chain::transaction::OutPoint;
1716
use crate::events::{ClaimedHTLC, ClosureReason, Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PathFailure, PaymentPurpose, PaymentFailureReason};
1817
use crate::events::bump_transaction::{BumpTransactionEvent, BumpTransactionEventHandler, Wallet, WalletSource};
1918
use crate::ln::{ChannelId, PaymentPreimage, PaymentHash, PaymentSecret};
2019
use crate::ln::channelmanager::{AChannelManager, ChainParameters, ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentSendFailure, RecipientOnionFields, PaymentId, MIN_CLTV_EXPIRY_DELTA};
21-
use crate::routing::gossip::{P2PGossipSync, NetworkGraph, NetworkUpdate};
22-
use crate::routing::router::{self, PaymentParameters, Route, RouteParameters};
2320
use crate::ln::features::InitFeatures;
2421
use crate::ln::msgs;
25-
use crate::ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
26-
use crate::util::test_channel_signer::TestChannelSigner;
22+
use crate::ln::msgs::{ChannelMessageHandler, OnionMessageHandler, RoutingMessageHandler};
23+
use crate::ln::peer_handler::IgnoringMessageHandler;
24+
use crate::onion_message::messenger::OnionMessenger;
25+
use crate::routing::gossip::{P2PGossipSync, NetworkGraph, NetworkUpdate};
26+
use crate::routing::router::{self, PaymentParameters, Route, RouteParameters};
27+
use crate::sign::{EntropySource, RandomBytes};
28+
use crate::util::config::{UserConfig, MaxDustHTLCExposure};
29+
use crate::util::errors::APIError;
30+
#[cfg(test)]
31+
use crate::util::logger::Logger;
2732
use crate::util::scid_utils;
33+
use crate::util::test_channel_signer::TestChannelSigner;
2834
use crate::util::test_utils;
2935
use crate::util::test_utils::{panicking, TestChainMonitor, TestScorer, TestKeysInterface};
30-
use crate::util::errors::APIError;
31-
use crate::util::config::{UserConfig, MaxDustHTLCExposure};
3236
use crate::util::ser::{ReadableArgs, Writeable};
3337
#[cfg(test)]
3438
use crate::util::logger::Logger;
@@ -45,13 +49,14 @@ use bitcoin::network::constants::Network;
4549
use bitcoin::pow::CompactTarget;
4650
use bitcoin::secp256k1::{PublicKey, SecretKey};
4751

52+
use alloc::rc::Rc;
53+
use core::cell::RefCell;
54+
use core::iter::repeat;
55+
use core::mem;
56+
use core::ops::Deref;
4857
use crate::io;
4958
use crate::prelude::*;
50-
use core::cell::RefCell;
51-
use alloc::rc::Rc;
5259
use crate::sync::{Arc, Mutex, LockTestExt, RwLock};
53-
use core::mem;
54-
use core::iter::repeat;
5560

5661
pub const CHAN_CONFIRM_DEPTH: u32 = 10;
5762

@@ -390,6 +395,7 @@ pub struct NodeCfg<'a> {
390395
pub tx_broadcaster: &'a test_utils::TestBroadcaster,
391396
pub fee_estimator: &'a test_utils::TestFeeEstimator,
392397
pub router: test_utils::TestRouter<'a>,
398+
pub message_router: test_utils::TestMessageRouter<'a>,
393399
pub chain_monitor: test_utils::TestChainMonitor<'a>,
394400
pub keys_manager: &'a test_utils::TestKeysInterface,
395401
pub logger: &'a test_utils::TestLogger,
@@ -409,6 +415,26 @@ type TestChannelManager<'node_cfg, 'chan_mon_cfg> = ChannelManager<
409415
&'chan_mon_cfg test_utils::TestLogger,
410416
>;
411417

418+
type TestOnionMessenger<'chan_man, 'node_cfg, 'chan_mon_cfg> = OnionMessenger<
419+
DedicatedEntropy,
420+
&'node_cfg test_utils::TestKeysInterface,
421+
&'chan_mon_cfg test_utils::TestLogger,
422+
&'node_cfg test_utils::TestMessageRouter<'chan_mon_cfg>,
423+
&'chan_man TestChannelManager<'node_cfg, 'chan_mon_cfg>,
424+
IgnoringMessageHandler,
425+
>;
426+
427+
/// For use with [`OnionMessenger`] otherwise `test_restored_packages_retry` will fail. This is
428+
/// because that test uses older serialized data produced by calling [`EntropySource`] in a specific
429+
/// manner. Using the same [`EntropySource`] with [`OnionMessenger`] would introduce another call,
430+
/// causing the produced data to no longer match.
431+
pub struct DedicatedEntropy(RandomBytes);
432+
433+
impl Deref for DedicatedEntropy {
434+
type Target = RandomBytes;
435+
fn deref(&self) -> &Self::Target { &self.0 }
436+
}
437+
412438
pub struct Node<'chan_man, 'node_cfg: 'chan_man, 'chan_mon_cfg: 'node_cfg> {
413439
pub chain_source: &'chan_mon_cfg test_utils::TestChainSource,
414440
pub tx_broadcaster: &'chan_mon_cfg test_utils::TestBroadcaster,
@@ -417,6 +443,7 @@ pub struct Node<'chan_man, 'node_cfg: 'chan_man, 'chan_mon_cfg: 'node_cfg> {
417443
pub chain_monitor: &'node_cfg test_utils::TestChainMonitor<'chan_mon_cfg>,
418444
pub keys_manager: &'chan_mon_cfg test_utils::TestKeysInterface,
419445
pub node: &'chan_man TestChannelManager<'node_cfg, 'chan_mon_cfg>,
446+
pub onion_messenger: TestOnionMessenger<'chan_man, 'node_cfg, 'chan_mon_cfg>,
420447
pub network_graph: &'node_cfg NetworkGraph<&'chan_mon_cfg test_utils::TestLogger>,
421448
pub gossip_sync: P2PGossipSync<&'node_cfg NetworkGraph<&'chan_mon_cfg test_utils::TestLogger>, &'chan_mon_cfg test_utils::TestChainSource, &'chan_mon_cfg test_utils::TestLogger>,
422449
pub node_seed: [u8; 32],
@@ -434,6 +461,14 @@ pub struct Node<'chan_man, 'node_cfg: 'chan_man, 'chan_mon_cfg: 'node_cfg> {
434461
&'chan_mon_cfg test_utils::TestLogger,
435462
>,
436463
}
464+
465+
impl<'a, 'b, 'c> Node<'a, 'b, 'c> {
466+
pub fn init_features(&self, peer_node_id: &PublicKey) -> InitFeatures {
467+
self.override_init_features.borrow().clone()
468+
.unwrap_or_else(|| self.node.init_features() | self.onion_messenger.provided_init_features(peer_node_id))
469+
}
470+
}
471+
437472
#[cfg(feature = "std")]
438473
impl<'a, 'b, 'c> std::panic::UnwindSafe for Node<'a, 'b, 'c> {}
439474
#[cfg(feature = "std")]
@@ -614,7 +649,7 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
614649
node_signer: self.keys_manager,
615650
signer_provider: self.keys_manager,
616651
fee_estimator: &test_utils::TestFeeEstimator { sat_per_kw: Mutex::new(253) },
617-
router: &test_utils::TestRouter::new(Arc::new(network_graph), &scorer),
652+
router: &test_utils::TestRouter::new(Arc::new(network_graph), &self.logger, &scorer),
618653
chain_monitor: self.chain_monitor,
619654
tx_broadcaster: &broadcaster,
620655
logger: &self.logger,
@@ -1069,6 +1104,7 @@ macro_rules! reload_node {
10691104

10701105
$new_channelmanager = _reload_node(&$node, $new_config, &chanman_encoded, $monitors_encoded);
10711106
$node.node = &$new_channelmanager;
1107+
$node.onion_messenger.set_offers_handler(&$new_channelmanager);
10721108
};
10731109
($node: expr, $chanman_encoded: expr, $monitors_encoded: expr, $persister: ident, $new_chain_monitor: ident, $new_channelmanager: ident) => {
10741110
reload_node!($node, $crate::util::config::UserConfig::default(), $chanman_encoded, $monitors_encoded, $persister, $new_chain_monitor, $new_channelmanager);
@@ -2912,7 +2948,8 @@ pub fn create_node_cfgs_with_persisters<'a>(node_count: usize, chanmon_cfgs: &'a
29122948
logger: &chanmon_cfgs[i].logger,
29132949
tx_broadcaster: &chanmon_cfgs[i].tx_broadcaster,
29142950
fee_estimator: &chanmon_cfgs[i].fee_estimator,
2915-
router: test_utils::TestRouter::new(network_graph.clone(), &chanmon_cfgs[i].scorer),
2951+
router: test_utils::TestRouter::new(network_graph.clone(), &chanmon_cfgs[i].logger, &chanmon_cfgs[i].scorer),
2952+
message_router: test_utils::TestMessageRouter::new(network_graph.clone()),
29162953
chain_monitor,
29172954
keys_manager: &chanmon_cfgs[i].keys_manager,
29182955
node_seed: seed,
@@ -2966,14 +3003,19 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
29663003
let connect_style = Rc::new(RefCell::new(ConnectStyle::random_style()));
29673004

29683005
for i in 0..node_count {
3006+
let dedicated_entropy = DedicatedEntropy(RandomBytes::new([i as u8; 32]));
3007+
let onion_messenger = OnionMessenger::new(
3008+
dedicated_entropy, cfgs[i].keys_manager, cfgs[i].logger, &cfgs[i].message_router,
3009+
&chan_mgrs[i], IgnoringMessageHandler {},
3010+
);
29693011
let gossip_sync = P2PGossipSync::new(cfgs[i].network_graph.as_ref(), None, cfgs[i].logger);
29703012
let wallet_source = Arc::new(test_utils::TestWalletSource::new(SecretKey::from_slice(&[i as u8 + 1; 32]).unwrap()));
29713013
nodes.push(Node{
29723014
chain_source: cfgs[i].chain_source, tx_broadcaster: cfgs[i].tx_broadcaster,
29733015
fee_estimator: cfgs[i].fee_estimator, router: &cfgs[i].router,
29743016
chain_monitor: &cfgs[i].chain_monitor, keys_manager: &cfgs[i].keys_manager,
29753017
node: &chan_mgrs[i], network_graph: cfgs[i].network_graph.as_ref(), gossip_sync,
2976-
node_seed: cfgs[i].node_seed, network_chan_count: chan_count.clone(),
3018+
node_seed: cfgs[i].node_seed, onion_messenger, network_chan_count: chan_count.clone(),
29773019
network_payment_count: payment_count.clone(), logger: cfgs[i].logger,
29783020
blocks: Arc::clone(&cfgs[i].tx_broadcaster.blocks),
29793021
connect_style: Rc::clone(&connect_style),
@@ -2988,16 +3030,24 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
29883030

29893031
for i in 0..node_count {
29903032
for j in (i+1)..node_count {
2991-
nodes[i].node.peer_connected(&nodes[j].node.get_our_node_id(), &msgs::Init {
2992-
features: nodes[j].override_init_features.borrow().clone().unwrap_or_else(|| nodes[j].node.init_features()),
3033+
let node_id_i = nodes[i].node.get_our_node_id();
3034+
let node_id_j = nodes[j].node.get_our_node_id();
3035+
3036+
let init_i = msgs::Init {
3037+
features: nodes[i].init_features(&node_id_j),
29933038
networks: None,
29943039
remote_network_address: None,
2995-
}, true).unwrap();
2996-
nodes[j].node.peer_connected(&nodes[i].node.get_our_node_id(), &msgs::Init {
2997-
features: nodes[i].override_init_features.borrow().clone().unwrap_or_else(|| nodes[i].node.init_features()),
3040+
};
3041+
let init_j = msgs::Init {
3042+
features: nodes[j].init_features(&node_id_i),
29983043
networks: None,
29993044
remote_network_address: None,
3000-
}, false).unwrap();
3045+
};
3046+
3047+
nodes[i].node.peer_connected(&node_id_j, &init_j, true).unwrap();
3048+
nodes[j].node.peer_connected(&node_id_i, &init_i, false).unwrap();
3049+
nodes[i].onion_messenger.peer_connected(&node_id_j, &init_j, true).unwrap();
3050+
nodes[j].onion_messenger.peer_connected(&node_id_i, &init_i, false).unwrap();
30013051
}
30023052
}
30033053

lightning/src/ln/functional_tests.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5533,8 +5533,9 @@ fn test_key_derivation_params() {
55335533
let chain_monitor = test_utils::TestChainMonitor::new(Some(&chanmon_cfgs[0].chain_source), &chanmon_cfgs[0].tx_broadcaster, &chanmon_cfgs[0].logger, &chanmon_cfgs[0].fee_estimator, &chanmon_cfgs[0].persister, &keys_manager);
55345534
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &chanmon_cfgs[0].logger));
55355535
let scorer = RwLock::new(test_utils::TestScorer::new());
5536-
let router = test_utils::TestRouter::new(network_graph.clone(), &scorer);
5537-
let node = NodeCfg { chain_source: &chanmon_cfgs[0].chain_source, logger: &chanmon_cfgs[0].logger, tx_broadcaster: &chanmon_cfgs[0].tx_broadcaster, fee_estimator: &chanmon_cfgs[0].fee_estimator, router, chain_monitor, keys_manager: &keys_manager, network_graph, node_seed: seed, override_init_features: alloc::rc::Rc::new(core::cell::RefCell::new(None)) };
5536+
let router = test_utils::TestRouter::new(network_graph.clone(), &chanmon_cfgs[0].logger, &scorer);
5537+
let message_router = test_utils::TestMessageRouter::new(network_graph.clone());
5538+
let node = NodeCfg { chain_source: &chanmon_cfgs[0].chain_source, logger: &chanmon_cfgs[0].logger, tx_broadcaster: &chanmon_cfgs[0].tx_broadcaster, fee_estimator: &chanmon_cfgs[0].fee_estimator, router, message_router, chain_monitor, keys_manager: &keys_manager, network_graph, node_seed: seed, override_init_features: alloc::rc::Rc::new(core::cell::RefCell::new(None)) };
55385539
let mut node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
55395540
node_cfgs.remove(0);
55405541
node_cfgs.insert(0, node);

lightning/src/ln/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ mod shutdown_tests;
7979
#[cfg(all(test, async_signing))]
8080
#[allow(unused_mut)]
8181
mod async_signer_tests;
82+
#[cfg(test)]
83+
#[allow(unused_mut)]
84+
mod offers_tests;
8285

8386
pub use self::peer_channel_encryptor::LN_MAX_MSG_LEN;
8487

0 commit comments

Comments
 (0)