Skip to content

Commit 27426f8

Browse files
authored
Merge pull request #517 from ccdle12/2020-02-per-channel-config
Add an override optional UserConfig per new outbound channel
2 parents ce4de5f + 53c894b commit 27426f8

File tree

6 files changed

+36
-16
lines changed

6 files changed

+36
-16
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ pub fn do_test(data: &[u8]) {
240240
let mut channel_txn = Vec::new();
241241
macro_rules! make_channel {
242242
($source: expr, $dest: expr, $chan_id: expr) => { {
243-
$source.create_channel($dest.get_our_node_id(), 10000000, 42, 0).unwrap();
243+
$source.create_channel($dest.get_our_node_id(), 10000000, 42, 0, None).unwrap();
244244
let open_channel = {
245245
let events = $source.get_and_clear_pending_msg_events();
246246
assert_eq!(events.len(), 1);

fuzz/src/full_stack.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
412412
let their_key = get_pubkey!();
413413
let chan_value = slice_to_be24(get_slice!(3)) as u64;
414414
let push_msat_value = slice_to_be24(get_slice!(3)) as u64;
415-
if channelmanager.create_channel(their_key, chan_value, push_msat_value, 0).is_err() { return; }
415+
if channelmanager.create_channel(their_key, chan_value, push_msat_value, 0, None).is_err() { return; }
416416
},
417417
6 => {
418418
let mut channels = channelmanager.list_channels();

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1638,7 +1638,7 @@ fn do_during_funding_monitor_fail(fail_on_generate: bool, restore_between_fails:
16381638
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
16391639
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
16401640

1641-
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43).unwrap();
1641+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43, None).unwrap();
16421642
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::supported(), &get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id()));
16431643
nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), InitFeatures::supported(), &get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id()));
16441644

lightning/src/ln/channelmanager.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -690,12 +690,13 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref, F: Deref> ChannelMan
690690
///
691691
/// Raises APIError::APIMisuseError when channel_value_satoshis > 2**24 or push_msat is
692692
/// greater than channel_value_satoshis * 1k or channel_value_satoshis is < 1000.
693-
pub fn create_channel(&self, their_network_key: PublicKey, channel_value_satoshis: u64, push_msat: u64, user_id: u64) -> Result<(), APIError> {
693+
pub fn create_channel(&self, their_network_key: PublicKey, channel_value_satoshis: u64, push_msat: u64, user_id: u64, override_config: Option<UserConfig>) -> Result<(), APIError> {
694694
if channel_value_satoshis < 1000 {
695695
return Err(APIError::APIMisuseError { err: "channel_value must be at least 1000 satoshis" });
696696
}
697697

698-
let channel = Channel::new_outbound(&self.fee_estimator, &self.keys_manager, their_network_key, channel_value_satoshis, push_msat, user_id, Arc::clone(&self.logger), &self.default_configuration)?;
698+
let config = if override_config.is_some() { override_config.as_ref().unwrap() } else { &self.default_configuration };
699+
let channel = Channel::new_outbound(&self.fee_estimator, &self.keys_manager, their_network_key, channel_value_satoshis, push_msat, user_id, Arc::clone(&self.logger), config)?;
699700
let res = channel.get_open_channel(self.genesis_hash.clone(), &self.fee_estimator);
700701

701702
let _ = self.total_consistency_lock.read().unwrap();

lightning/src/ln/functional_test_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ pub fn create_funding_transaction<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, expected_
246246
}
247247

248248
pub fn create_chan_between_nodes_with_value_init<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &Node<'a, 'b, 'c>, channel_value: u64, push_msat: u64, a_flags: InitFeatures, b_flags: InitFeatures) -> Transaction {
249-
node_a.node.create_channel(node_b.node.get_our_node_id(), channel_value, push_msat, 42).unwrap();
249+
node_a.node.create_channel(node_b.node.get_our_node_id(), channel_value, push_msat, 42, None).unwrap();
250250
node_b.node.handle_open_channel(&node_a.node.get_our_node_id(), a_flags, &get_event_msg!(node_a, MessageSendEvent::SendOpenChannel, node_b.node.get_our_node_id()));
251251
node_a.node.handle_accept_channel(&node_b.node.get_our_node_id(), b_flags, &get_event_msg!(node_b, MessageSendEvent::SendAcceptChannel, node_a.node.get_our_node_id()));
252252

lightning/src/ln/functional_tests.rs

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ fn test_insane_channel_opens() {
6565
let push_msat = (channel_value_sat - channel_reserve_satoshis) * 1000;
6666

6767
// Have node0 initiate a channel to node1 with aforementioned parameters
68-
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_sat, push_msat, 42).unwrap();
68+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_sat, push_msat, 42, None).unwrap();
6969

7070
// Extract the channel open message from node0 to node1
7171
let open_channel_message = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
@@ -436,7 +436,7 @@ fn do_test_sanity_on_in_flight_opens(steps: u8) {
436436
}
437437

438438
if steps & 0x0f == 0 { return; }
439-
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42).unwrap();
439+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, None).unwrap();
440440
let open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
441441

442442
if steps & 0x0f == 1 { return; }
@@ -5442,12 +5442,12 @@ fn bolt2_open_channel_sending_node_checks_part1() { //This test needs to be on i
54425442
// BOLT #2 spec: Sending node must ensure temporary_channel_id is unique from any other channel ID with the same peer.
54435443
let channel_value_satoshis=10000;
54445444
let push_msat=10001;
5445-
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).unwrap();
5445+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).unwrap();
54465446
let node0_to_1_send_open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
54475447
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::supported(), &node0_to_1_send_open_channel);
54485448

54495449
//Create a second channel with a channel_id collision
5450-
assert!(nodes[0].node.create_channel(nodes[0].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_err());
5450+
assert!(nodes[0].node.create_channel(nodes[0].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).is_err());
54515451
}
54525452

54535453
#[test]
@@ -5460,18 +5460,18 @@ fn bolt2_open_channel_sending_node_checks_part2() {
54605460
// BOLT #2 spec: Sending node must set funding_satoshis to less than 2^24 satoshis
54615461
let channel_value_satoshis=2^24;
54625462
let push_msat=10001;
5463-
assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_err());
5463+
assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).is_err());
54645464

54655465
// BOLT #2 spec: Sending node must set push_msat to equal or less than 1000 * funding_satoshis
54665466
let channel_value_satoshis=10000;
54675467
// Test when push_msat is equal to 1000 * funding_satoshis.
54685468
let push_msat=1000*channel_value_satoshis+1;
5469-
assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_err());
5469+
assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).is_err());
54705470

54715471
// BOLT #2 spec: Sending node must set set channel_reserve_satoshis greater than or equal to dust_limit_satoshis
54725472
let channel_value_satoshis=10000;
54735473
let push_msat=10001;
5474-
assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_ok()); //Create a valid channel
5474+
assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).is_ok()); //Create a valid channel
54755475
let node0_to_1_send_open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
54765476
assert!(node0_to_1_send_open_channel.channel_reserve_satoshis>=node0_to_1_send_open_channel.dust_limit_satoshis);
54775477

@@ -6501,7 +6501,7 @@ fn test_user_configurable_csv_delay() {
65016501
} else { assert!(false) }
65026502

65036503
// We test config.our_to_self > BREAKDOWN_TIMEOUT is enforced in Channel::new_from_req()
6504-
nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 1000000, 1000000, 42).unwrap();
6504+
nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 1000000, 1000000, 42, None).unwrap();
65056505
let mut open_channel = get_event_msg!(nodes[1], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
65066506
open_channel.to_self_delay = 200;
65076507
if let Err(error) = Channel::new_from_req(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &keys_manager, nodes[1].node.get_our_node_id(), InitFeatures::supported(), &open_channel, 0, Arc::new(test_utils::TestLogger::new()), &low_our_to_self_config) {
@@ -6512,7 +6512,7 @@ fn test_user_configurable_csv_delay() {
65126512
} else { assert!(false); }
65136513

65146514
// We test msg.to_self_delay <= config.their_to_self_delay is enforced in Chanel::accept_channel()
6515-
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 1000000, 1000000, 42).unwrap();
6515+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 1000000, 1000000, 42, None).unwrap();
65166516
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::supported(), &get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id()));
65176517
let mut accept_channel = get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
65186518
accept_channel.to_self_delay = 200;
@@ -6527,7 +6527,7 @@ fn test_user_configurable_csv_delay() {
65276527
} else { assert!(false); }
65286528

65296529
// We test msg.to_self_delay <= config.their_to_self_delay is enforced in Channel::new_from_req()
6530-
nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 1000000, 1000000, 42).unwrap();
6530+
nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 1000000, 1000000, 42, None).unwrap();
65316531
let mut open_channel = get_event_msg!(nodes[1], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
65326532
open_channel.to_self_delay = 200;
65336533
if let Err(error) = Channel::new_from_req(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &keys_manager, nodes[1].node.get_our_node_id(), InitFeatures::supported(), &open_channel, 0, Arc::new(test_utils::TestLogger::new()), &high_their_to_self_config) {
@@ -7310,3 +7310,22 @@ fn test_bump_txn_sanitize_tracking_maps() {
73107310
}
73117311
}
73127312
}
7313+
7314+
#[test]
7315+
fn test_override_channel_config() {
7316+
let chanmon_cfgs = create_chanmon_cfgs(2);
7317+
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
7318+
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
7319+
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7320+
7321+
// Node0 initiates a channel to node1 using the override config.
7322+
let mut override_config = UserConfig::default();
7323+
override_config.own_channel_config.our_to_self_delay = 200;
7324+
7325+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 16_000_000, 12_000_000, 42, Some(override_config)).unwrap();
7326+
7327+
// Assert the channel created by node0 is using the override config.
7328+
let res = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
7329+
assert_eq!(res.channel_flags, 0);
7330+
assert_eq!(res.to_self_delay, 200);
7331+
}

0 commit comments

Comments
 (0)