Skip to content

Commit 48d21ba

Browse files
authored
Merge pull request #1707 from TheBlueMatt/2022-09-no-global-features
Move supported-feature-set logic into the supporting modules
2 parents 58f76f2 + 9170804 commit 48d21ba

30 files changed

+894
-1041
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,8 @@ use lightning::chain::transaction::OutPoint;
3838
use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator};
3939
use lightning::chain::keysinterface::{KeyMaterial, KeysInterface, InMemorySigner, Recipient};
4040
use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
41-
use lightning::ln::channelmanager::{ChainParameters, ChannelManager, PaymentSendFailure, ChannelManagerReadArgs};
41+
use lightning::ln::channelmanager::{self, ChainParameters, ChannelManager, PaymentSendFailure, ChannelManagerReadArgs};
4242
use lightning::ln::channel::FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE;
43-
use lightning::ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
4443
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, DecodeError, UpdateAddHTLC, Init};
4544
use lightning::ln::script::ShutdownScript;
4645
use lightning::util::enforcing_trait_impls::{EnforcingSigner, EnforcementState};
@@ -315,9 +314,9 @@ fn send_payment(source: &ChanMan, dest: &ChanMan, dest_chan_id: u64, amt: u64, p
315314
if let Err(err) = source.send_payment(&Route {
316315
paths: vec![vec![RouteHop {
317316
pubkey: dest.get_our_node_id(),
318-
node_features: NodeFeatures::known(),
317+
node_features: channelmanager::provided_node_features(),
319318
short_channel_id: dest_chan_id,
320-
channel_features: ChannelFeatures::known(),
319+
channel_features: channelmanager::provided_channel_features(),
321320
fee_msat: amt,
322321
cltv_expiry_delta: 200,
323322
}]],
@@ -334,16 +333,16 @@ fn send_hop_payment(source: &ChanMan, middle: &ChanMan, middle_chan_id: u64, des
334333
if let Err(err) = source.send_payment(&Route {
335334
paths: vec![vec![RouteHop {
336335
pubkey: middle.get_our_node_id(),
337-
node_features: NodeFeatures::known(),
336+
node_features: channelmanager::provided_node_features(),
338337
short_channel_id: middle_chan_id,
339-
channel_features: ChannelFeatures::known(),
338+
channel_features: channelmanager::provided_channel_features(),
340339
fee_msat: 50000,
341340
cltv_expiry_delta: 100,
342341
},RouteHop {
343342
pubkey: dest.get_our_node_id(),
344-
node_features: NodeFeatures::known(),
343+
node_features: channelmanager::provided_node_features(),
345344
short_channel_id: dest_chan_id,
346-
channel_features: ChannelFeatures::known(),
345+
channel_features: channelmanager::provided_channel_features(),
347346
fee_msat: amt,
348347
cltv_expiry_delta: 200,
349348
}]],
@@ -422,8 +421,8 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
422421
let mut channel_txn = Vec::new();
423422
macro_rules! make_channel {
424423
($source: expr, $dest: expr, $chan_id: expr) => { {
425-
$source.peer_connected(&$dest.get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
426-
$dest.peer_connected(&$source.get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
424+
$source.peer_connected(&$dest.get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
425+
$dest.peer_connected(&$source.get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
427426

428427
$source.create_channel($dest.get_our_node_id(), 100_000, 42, 0, None).unwrap();
429428
let open_channel = {
@@ -434,7 +433,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
434433
} else { panic!("Wrong event type"); }
435434
};
436435

437-
$dest.handle_open_channel(&$source.get_our_node_id(), InitFeatures::known(), &open_channel);
436+
$dest.handle_open_channel(&$source.get_our_node_id(), channelmanager::provided_init_features(), &open_channel);
438437
let accept_channel = {
439438
let events = $dest.get_and_clear_pending_msg_events();
440439
assert_eq!(events.len(), 1);
@@ -443,7 +442,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
443442
} else { panic!("Wrong event type"); }
444443
};
445444

446-
$source.handle_accept_channel(&$dest.get_our_node_id(), InitFeatures::known(), &accept_channel);
445+
$source.handle_accept_channel(&$dest.get_our_node_id(), channelmanager::provided_init_features(), &accept_channel);
447446
let funding_output;
448447
{
449448
let events = $source.get_and_clear_pending_events();
@@ -940,15 +939,15 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
940939
},
941940
0x0e => {
942941
if chan_a_disconnected {
943-
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
944-
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
942+
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
943+
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
945944
chan_a_disconnected = false;
946945
}
947946
},
948947
0x0f => {
949948
if chan_b_disconnected {
950-
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
951-
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
949+
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
950+
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
952951
chan_b_disconnected = false;
953952
}
954953
},
@@ -1143,13 +1142,13 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
11431142

11441143
// Next, make sure peers are all connected to each other
11451144
if chan_a_disconnected {
1146-
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
1147-
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
1145+
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
1146+
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
11481147
chan_a_disconnected = false;
11491148
}
11501149
if chan_b_disconnected {
1151-
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
1152-
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
1150+
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
1151+
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
11531152
chan_b_disconnected = false;
11541153
}
11551154

fuzz/src/router.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ use bitcoin::hash_types::BlockHash;
1313

1414
use lightning::chain;
1515
use lightning::chain::transaction::OutPoint;
16-
use lightning::ln::channelmanager::{ChannelDetails, ChannelCounterparty};
17-
use lightning::ln::features::InitFeatures;
16+
use lightning::ln::channelmanager::{self, ChannelDetails, ChannelCounterparty};
1817
use lightning::ln::msgs;
1918
use lightning::routing::gossip::{NetworkGraph, RoutingFees};
2019
use lightning::routing::router::{find_route, PaymentParameters, RouteHint, RouteHintHop, RouteParameters};
@@ -211,7 +210,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
211210
channel_id: [0; 32],
212211
counterparty: ChannelCounterparty {
213212
node_id: *rnid,
214-
features: InitFeatures::known(),
213+
features: channelmanager::provided_init_features(),
215214
unspendable_punishment_reserve: 0,
216215
forwarding_info: None,
217216
outbound_htlc_minimum_msat: None,

lightning-background-processor/src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -581,8 +581,8 @@ mod tests {
581581
use lightning::chain::keysinterface::{InMemorySigner, Recipient, KeysInterface, KeysManager};
582582
use lightning::chain::transaction::OutPoint;
583583
use lightning::get_event_msg;
584-
use lightning::ln::channelmanager::{BREAKDOWN_TIMEOUT, ChainParameters, ChannelManager, SimpleArcChannelManager};
585-
use lightning::ln::features::{ChannelFeatures, InitFeatures};
584+
use lightning::ln::channelmanager::{self, BREAKDOWN_TIMEOUT, ChainParameters, ChannelManager, SimpleArcChannelManager};
585+
use lightning::ln::features::ChannelFeatures;
586586
use lightning::ln::msgs::{ChannelMessageHandler, Init};
587587
use lightning::ln::peer_handler::{PeerManager, MessageHandler, SocketDescriptor, IgnoringMessageHandler};
588588
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
@@ -754,8 +754,8 @@ mod tests {
754754

755755
for i in 0..num_nodes {
756756
for j in (i+1)..num_nodes {
757-
nodes[i].node.peer_connected(&nodes[j].node.get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
758-
nodes[j].node.peer_connected(&nodes[i].node.get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None }).unwrap();
757+
nodes[i].node.peer_connected(&nodes[j].node.get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
758+
nodes[j].node.peer_connected(&nodes[i].node.get_our_node_id(), &Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
759759
}
760760
}
761761

@@ -776,8 +776,8 @@ mod tests {
776776
macro_rules! begin_open_channel {
777777
($node_a: expr, $node_b: expr, $channel_value: expr) => {{
778778
$node_a.node.create_channel($node_b.node.get_our_node_id(), $channel_value, 100, 42, None).unwrap();
779-
$node_b.node.handle_open_channel(&$node_a.node.get_our_node_id(), InitFeatures::known(), &get_event_msg!($node_a, MessageSendEvent::SendOpenChannel, $node_b.node.get_our_node_id()));
780-
$node_a.node.handle_accept_channel(&$node_b.node.get_our_node_id(), InitFeatures::known(), &get_event_msg!($node_b, MessageSendEvent::SendAcceptChannel, $node_a.node.get_our_node_id()));
779+
$node_b.node.handle_open_channel(&$node_a.node.get_our_node_id(), channelmanager::provided_init_features(), &get_event_msg!($node_a, MessageSendEvent::SendOpenChannel, $node_b.node.get_our_node_id()));
780+
$node_a.node.handle_accept_channel(&$node_b.node.get_our_node_id(), channelmanager::provided_init_features(), &get_event_msg!($node_b, MessageSendEvent::SendAcceptChannel, $node_a.node.get_our_node_id()));
781781
}}
782782
}
783783

lightning-invoice/src/lib.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1712,11 +1712,14 @@ mod test {
17121712
}.unwrap();
17131713
assert_eq!(Invoice::from_signed(invoice), Err(SemanticError::InvalidFeatures));
17141714

1715+
let mut payment_secret_features = InvoiceFeatures::empty();
1716+
payment_secret_features.set_payment_secret_required();
1717+
17151718
// Including payment secret and feature bits
17161719
let invoice = {
17171720
let mut invoice = invoice_template.clone();
17181721
invoice.data.tagged_fields.push(PaymentSecret(payment_secret).into());
1719-
invoice.data.tagged_fields.push(Features(InvoiceFeatures::known()).into());
1722+
invoice.data.tagged_fields.push(Features(payment_secret_features.clone()).into());
17201723
invoice.sign::<_, ()>(|hash| Ok(Secp256k1::new().sign_ecdsa_recoverable(hash, &private_key)))
17211724
}.unwrap();
17221725
assert!(Invoice::from_signed(invoice).is_ok());
@@ -1739,7 +1742,7 @@ mod test {
17391742
// Missing payment secret
17401743
let invoice = {
17411744
let mut invoice = invoice_template.clone();
1742-
invoice.data.tagged_fields.push(Features(InvoiceFeatures::known()).into());
1745+
invoice.data.tagged_fields.push(Features(payment_secret_features).into());
17431746
invoice.sign::<_, ()>(|hash| Ok(Secp256k1::new().sign_ecdsa_recoverable(hash, &private_key)))
17441747
}.unwrap();
17451748
assert_eq!(Invoice::from_signed(invoice), Err(SemanticError::NoPaymentSecret));
@@ -1944,7 +1947,12 @@ mod test {
19441947
);
19451948
assert_eq!(invoice.payment_hash(), &sha256::Hash::from_slice(&[21;32][..]).unwrap());
19461949
assert_eq!(invoice.payment_secret(), &PaymentSecret([42; 32]));
1947-
assert_eq!(invoice.features(), Some(&InvoiceFeatures::known()));
1950+
1951+
let mut expected_features = InvoiceFeatures::empty();
1952+
expected_features.set_variable_length_onion_required();
1953+
expected_features.set_payment_secret_required();
1954+
expected_features.set_basic_mpp_optional();
1955+
assert_eq!(invoice.features(), Some(&expected_features));
19481956

19491957
let raw_invoice = builder.build_raw().unwrap();
19501958
assert_eq!(raw_invoice, *invoice.into_signed_raw().raw_invoice())

lightning-invoice/src/payment.rs

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,8 @@ mod tests {
780780
use utils::create_invoice_from_channelmanager_and_duration_since_epoch;
781781
use bitcoin_hashes::sha256::Hash as Sha256;
782782
use lightning::ln::PaymentPreimage;
783-
use lightning::ln::features::{ChannelFeatures, NodeFeatures, InitFeatures};
783+
use lightning::ln::channelmanager;
784+
use lightning::ln::features::{ChannelFeatures, NodeFeatures};
784785
use lightning::ln::functional_test_utils::*;
785786
use lightning::ln::msgs::{ChannelMessageHandler, ErrorAction, LightningError};
786787
use lightning::routing::gossip::{EffectiveCapacity, NodeId};
@@ -2160,24 +2161,24 @@ mod tests {
21602161
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None, None]);
21612162
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
21622163

2163-
create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 0, InitFeatures::known(), InitFeatures::known());
2164-
create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 0, InitFeatures::known(), InitFeatures::known());
2164+
create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 0, channelmanager::provided_init_features(), channelmanager::provided_init_features());
2165+
create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 0, channelmanager::provided_init_features(), channelmanager::provided_init_features());
21652166
let chans = nodes[0].node.list_usable_channels();
21662167
let mut route = Route {
21672168
paths: vec![
21682169
vec![RouteHop {
21692170
pubkey: nodes[1].node.get_our_node_id(),
2170-
node_features: NodeFeatures::known(),
2171+
node_features: channelmanager::provided_node_features(),
21712172
short_channel_id: chans[0].short_channel_id.unwrap(),
2172-
channel_features: ChannelFeatures::known(),
2173+
channel_features: channelmanager::provided_channel_features(),
21732174
fee_msat: 10_000,
21742175
cltv_expiry_delta: 100,
21752176
}],
21762177
vec![RouteHop {
21772178
pubkey: nodes[1].node.get_our_node_id(),
2178-
node_features: NodeFeatures::known(),
2179+
node_features: channelmanager::provided_node_features(),
21792180
short_channel_id: chans[1].short_channel_id.unwrap(),
2180-
channel_features: ChannelFeatures::known(),
2181+
channel_features: channelmanager::provided_channel_features(),
21812182
fee_msat: 100_000_001, // Our default max-HTLC-value is 10% of the channel value, which this is one more than
21822183
cltv_expiry_delta: 100,
21832184
}],
@@ -2212,16 +2213,16 @@ mod tests {
22122213
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None, None]);
22132214
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
22142215

2215-
create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 0, InitFeatures::known(), InitFeatures::known());
2216-
create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 0, InitFeatures::known(), InitFeatures::known());
2216+
create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 0, channelmanager::provided_init_features(), channelmanager::provided_init_features());
2217+
create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 0, channelmanager::provided_init_features(), channelmanager::provided_init_features());
22172218
let chans = nodes[0].node.list_usable_channels();
22182219
let mut route = Route {
22192220
paths: vec![
22202221
vec![RouteHop {
22212222
pubkey: nodes[1].node.get_our_node_id(),
2222-
node_features: NodeFeatures::known(),
2223+
node_features: channelmanager::provided_node_features(),
22232224
short_channel_id: chans[0].short_channel_id.unwrap(),
2224-
channel_features: ChannelFeatures::known(),
2225+
channel_features: channelmanager::provided_channel_features(),
22252226
fee_msat: 100_000_001, // Our default max-HTLC-value is 10% of the channel value, which this is one more than
22262227
cltv_expiry_delta: 100,
22272228
}],
@@ -2271,38 +2272,38 @@ mod tests {
22712272
let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
22722273
let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
22732274

2274-
let chan_1_scid = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 10_000_000, 0, InitFeatures::known(), InitFeatures::known()).0.contents.short_channel_id;
2275-
let chan_2_scid = create_announced_chan_between_nodes_with_value(&nodes, 1, 2, 10_000_000, 0, InitFeatures::known(), InitFeatures::known()).0.contents.short_channel_id;
2275+
let chan_1_scid = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 10_000_000, 0, channelmanager::provided_init_features(), channelmanager::provided_init_features()).0.contents.short_channel_id;
2276+
let chan_2_scid = create_announced_chan_between_nodes_with_value(&nodes, 1, 2, 10_000_000, 0, channelmanager::provided_init_features(), channelmanager::provided_init_features()).0.contents.short_channel_id;
22762277

22772278
let mut route = Route {
22782279
paths: vec![
22792280
vec![RouteHop {
22802281
pubkey: nodes[1].node.get_our_node_id(),
2281-
node_features: NodeFeatures::known(),
2282+
node_features: channelmanager::provided_node_features(),
22822283
short_channel_id: chan_1_scid,
2283-
channel_features: ChannelFeatures::known(),
2284+
channel_features: channelmanager::provided_channel_features(),
22842285
fee_msat: 0,
22852286
cltv_expiry_delta: 100,
22862287
}, RouteHop {
22872288
pubkey: nodes[2].node.get_our_node_id(),
2288-
node_features: NodeFeatures::known(),
2289+
node_features: channelmanager::provided_node_features(),
22892290
short_channel_id: chan_2_scid,
2290-
channel_features: ChannelFeatures::known(),
2291+
channel_features: channelmanager::provided_channel_features(),
22912292
fee_msat: 100_000_000,
22922293
cltv_expiry_delta: 100,
22932294
}],
22942295
vec![RouteHop {
22952296
pubkey: nodes[1].node.get_our_node_id(),
2296-
node_features: NodeFeatures::known(),
2297+
node_features: channelmanager::provided_node_features(),
22972298
short_channel_id: chan_1_scid,
2298-
channel_features: ChannelFeatures::known(),
2299+
channel_features: channelmanager::provided_channel_features(),
22992300
fee_msat: 0,
23002301
cltv_expiry_delta: 100,
23012302
}, RouteHop {
23022303
pubkey: nodes[2].node.get_our_node_id(),
2303-
node_features: NodeFeatures::known(),
2304+
node_features: channelmanager::provided_node_features(),
23042305
short_channel_id: chan_2_scid,
2305-
channel_features: ChannelFeatures::known(),
2306+
channel_features: channelmanager::provided_channel_features(),
23062307
fee_msat: 100_000_000,
23072308
cltv_expiry_delta: 100,
23082309
}]

0 commit comments

Comments
 (0)