Skip to content

Commit f383319

Browse files
committed
Added temporary_channel_id to create_channel.
By default, LDK will generate the initial temporary channel ID for you. However, in certain cases, it's desirable to have a temporary channel ID specified by the caller in case of any pre-negotiation that needs to happen between peers prior to the channel open message. For example, LND has a `FundingShim` API that allows for advanced funding flows based on the temporary channel ID of the channel. This patch adds support for optionally specifying the temporary channel ID of the channel through the `create_channel` API.
1 parent 1f399b0 commit f383319

File tree

13 files changed

+98
-90
lines changed

13 files changed

+98
-90
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
525525
features: $source.init_features(), networks: None, remote_network_address: None
526526
}, false).unwrap();
527527

528-
$source.create_channel($dest.get_our_node_id(), 100_000, 42, 0, None).unwrap();
528+
$source.create_channel($dest.get_our_node_id(), 100_000, 42, 0, None, None).unwrap();
529529
let open_channel = {
530530
let events = $source.get_and_clear_pending_msg_events();
531531
assert_eq!(events.len(), 1);

fuzz/src/full_stack.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
571571
let their_key = get_pubkey!();
572572
let chan_value = slice_to_be24(get_slice!(3)) as u64;
573573
let push_msat_value = slice_to_be24(get_slice!(3)) as u64;
574-
if channelmanager.create_channel(their_key, chan_value, push_msat_value, 0, None).is_err() { return; }
574+
if channelmanager.create_channel(their_key, chan_value, push_msat_value, 0, None, None).is_err() { return; }
575575
},
576576
6 => {
577577
let mut channels = channelmanager.list_channels();

lightning-background-processor/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1241,7 +1241,7 @@ mod tests {
12411241

12421242
macro_rules! begin_open_channel {
12431243
($node_a: expr, $node_b: expr, $channel_value: expr) => {{
1244-
$node_a.node.create_channel($node_b.node.get_our_node_id(), $channel_value, 100, 42, None).unwrap();
1244+
$node_a.node.create_channel($node_b.node.get_our_node_id(), $channel_value, 100, 42, None, None).unwrap();
12451245
$node_b.node.handle_open_channel(&$node_a.node.get_our_node_id(), &get_event_msg!($node_a, MessageSendEvent::SendOpenChannel, $node_b.node.get_our_node_id()));
12461246
$node_a.node.handle_accept_channel(&$node_b.node.get_our_node_id(), &get_event_msg!($node_b, MessageSendEvent::SendAcceptChannel, $node_a.node.get_our_node_id()));
12471247
}}

lightning-invoice/src/utils.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,7 +1141,7 @@ mod test {
11411141
// is never handled, the `channel.counterparty.forwarding_info` is never assigned.
11421142
let mut private_chan_cfg = UserConfig::default();
11431143
private_chan_cfg.channel_handshake_config.announced_channel = false;
1144-
let temporary_channel_id = nodes[2].node.create_channel(nodes[0].node.get_our_node_id(), 1_000_000, 500_000_000, 42, Some(private_chan_cfg)).unwrap();
1144+
let temporary_channel_id = nodes[2].node.create_channel(nodes[0].node.get_our_node_id(), 1_000_000, 500_000_000, 42, None, Some(private_chan_cfg)).unwrap();
11451145
let open_channel = get_event_msg!(nodes[2], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
11461146
nodes[0].node.handle_open_channel(&nodes[2].node.get_our_node_id(), &open_channel);
11471147
let accept_channel = get_event_msg!(nodes[0], MessageSendEvent::SendAcceptChannel, nodes[2].node.get_our_node_id());
@@ -1547,7 +1547,7 @@ mod test {
15471547
// is never handled, the `channel.counterparty.forwarding_info` is never assigned.
15481548
let mut private_chan_cfg = UserConfig::default();
15491549
private_chan_cfg.channel_handshake_config.announced_channel = false;
1550-
let temporary_channel_id = nodes[1].node.create_channel(nodes[3].node.get_our_node_id(), 1_000_000, 500_000_000, 42, Some(private_chan_cfg)).unwrap();
1550+
let temporary_channel_id = nodes[1].node.create_channel(nodes[3].node.get_our_node_id(), 1_000_000, 500_000_000, 42, None, Some(private_chan_cfg)).unwrap();
15511551
let open_channel = get_event_msg!(nodes[1], MessageSendEvent::SendOpenChannel, nodes[3].node.get_our_node_id());
15521552
nodes[3].node.handle_open_channel(&nodes[1].node.get_our_node_id(), &open_channel);
15531553
let accept_channel = get_event_msg!(nodes[3], MessageSendEvent::SendAcceptChannel, nodes[1].node.get_our_node_id());

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1850,7 +1850,7 @@ fn do_during_funding_monitor_fail(confirm_a_first: bool, restore_b_before_conf:
18501850
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
18511851
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
18521852

1853-
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43, None).unwrap();
1853+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43, None, None).unwrap();
18541854
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id()));
18551855
nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), &get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id()));
18561856

@@ -2768,7 +2768,7 @@ fn do_test_outbound_reload_without_init_mon(use_0conf: bool) {
27682768

27692769
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
27702770

2771-
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43, None).unwrap();
2771+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43, None, None).unwrap();
27722772
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id()));
27732773

27742774
let events = nodes[1].node.get_and_clear_pending_events();
@@ -2859,7 +2859,7 @@ fn do_test_inbound_reload_without_init_mon(use_0conf: bool, lock_commitment: boo
28592859

28602860
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
28612861

2862-
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43, None).unwrap();
2862+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43, None, None).unwrap();
28632863
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id()));
28642864

28652865
let events = nodes[1].node.get_and_clear_pending_events();

lightning/src/ln/channel.rs

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5730,7 +5730,7 @@ impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
57305730
pub fn new<ES: Deref, F: Deref>(
57315731
fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP, counterparty_node_id: PublicKey, their_features: &InitFeatures,
57325732
channel_value_satoshis: u64, push_msat: u64, user_id: u128, config: &UserConfig, current_chain_height: u32,
5733-
outbound_scid_alias: u64
5733+
outbound_scid_alias: u64, temporary_channel_id_opt: Option<ChannelId>
57345734
) -> Result<OutboundV1Channel<SP>, APIError>
57355735
where ES::Target: EntropySource,
57365736
F::Target: FeeEstimator
@@ -5797,7 +5797,7 @@ impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
57975797
Err(_) => return Err(APIError::ChannelUnavailable { err: "Failed to get destination script".to_owned()}),
57985798
};
57995799

5800-
let temporary_channel_id = ChannelId::temporary_from_entropy_source(entropy_source);
5800+
let temporary_channel_id = temporary_channel_id_opt.unwrap_or_else(|| ChannelId::temporary_from_entropy_source(entropy_source));
58015801

58025802
Ok(Self {
58035803
context: ChannelContext {
@@ -7793,7 +7793,7 @@ mod tests {
77937793
let secp_ctx = Secp256k1::new();
77947794
let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
77957795
let config = UserConfig::default();
7796-
match OutboundV1Channel::<&TestKeysInterface>::new(&LowerBoundedFeeEstimator::new(&TestFeeEstimator { fee_est: 253 }), &&keys_provider, &&keys_provider, node_id, &features, 10000000, 100000, 42, &config, 0, 42) {
7796+
match OutboundV1Channel::<&TestKeysInterface>::new(&LowerBoundedFeeEstimator::new(&TestFeeEstimator { fee_est: 253 }), &&keys_provider, &&keys_provider, node_id, &features, 10000000, 100000, 42, &config, 0, 42, None) {
77977797
Err(APIError::IncompatibleShutdownScript { script }) => {
77987798
assert_eq!(script.into_inner(), non_v0_segwit_shutdown_script.into_inner());
77997799
},
@@ -7816,7 +7816,7 @@ mod tests {
78167816

78177817
let node_a_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
78187818
let config = UserConfig::default();
7819-
let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&bounded_fee_estimator, &&keys_provider, &&keys_provider, node_a_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
7819+
let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&bounded_fee_estimator, &&keys_provider, &&keys_provider, node_a_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
78207820

78217821
// Now change the fee so we can check that the fee in the open_channel message is the
78227822
// same as the old fee.
@@ -7843,7 +7843,7 @@ mod tests {
78437843
// Create Node A's channel pointing to Node B's pubkey
78447844
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
78457845
let config = UserConfig::default();
7846-
let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
7846+
let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
78477847

78487848
// Create Node B's channel by receiving Node A's open_channel message
78497849
// Make sure A's dust limit is as we expect.
@@ -7924,7 +7924,7 @@ mod tests {
79247924

79257925
let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
79267926
let config = UserConfig::default();
7927-
let mut chan = OutboundV1Channel::<&TestKeysInterface>::new(&fee_est, &&keys_provider, &&keys_provider, node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
7927+
let mut chan = OutboundV1Channel::<&TestKeysInterface>::new(&fee_est, &&keys_provider, &&keys_provider, node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
79287928

79297929
let commitment_tx_fee_0_htlcs = commit_tx_fee_msat(chan.context.feerate_per_kw, 0, chan.context.get_channel_type());
79307930
let commitment_tx_fee_1_htlc = commit_tx_fee_msat(chan.context.feerate_per_kw, 1, chan.context.get_channel_type());
@@ -7973,7 +7973,7 @@ mod tests {
79737973
// Create Node A's channel pointing to Node B's pubkey
79747974
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
79757975
let config = UserConfig::default();
7976-
let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
7976+
let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
79777977

79787978
// Create Node B's channel by receiving Node A's open_channel message
79797979
let open_channel_msg = node_a_chan.get_open_channel(chain_hash);
@@ -8036,12 +8036,12 @@ mod tests {
80368036
// Test that `OutboundV1Channel::new` creates a channel with the correct value for
80378037
// `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
80388038
// which is set to the lower bound + 1 (2%) of the `channel_value`.
8039-
let chan_1 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_2_percent), 10000000, 100000, 42, &config_2_percent, 0, 42).unwrap();
8039+
let chan_1 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_2_percent), 10000000, 100000, 42, &config_2_percent, 0, 42, None).unwrap();
80408040
let chan_1_value_msat = chan_1.context.channel_value_satoshis * 1000;
80418041
assert_eq!(chan_1.context.holder_max_htlc_value_in_flight_msat, (chan_1_value_msat as f64 * 0.02) as u64);
80428042

80438043
// Test with the upper bound - 1 of valid values (99%).
8044-
let chan_2 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_99_percent), 10000000, 100000, 42, &config_99_percent, 0, 42).unwrap();
8044+
let chan_2 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_99_percent), 10000000, 100000, 42, &config_99_percent, 0, 42, None).unwrap();
80458045
let chan_2_value_msat = chan_2.context.channel_value_satoshis * 1000;
80468046
assert_eq!(chan_2.context.holder_max_htlc_value_in_flight_msat, (chan_2_value_msat as f64 * 0.99) as u64);
80478047

@@ -8061,14 +8061,14 @@ mod tests {
80618061

80628062
// Test that `OutboundV1Channel::new` uses the lower bound of the configurable percentage values (1%)
80638063
// if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
8064-
let chan_5 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_0_percent), 10000000, 100000, 42, &config_0_percent, 0, 42).unwrap();
8064+
let chan_5 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_0_percent), 10000000, 100000, 42, &config_0_percent, 0, 42, None).unwrap();
80658065
let chan_5_value_msat = chan_5.context.channel_value_satoshis * 1000;
80668066
assert_eq!(chan_5.context.holder_max_htlc_value_in_flight_msat, (chan_5_value_msat as f64 * 0.01) as u64);
80678067

80688068
// Test that `OutboundV1Channel::new` uses the upper bound of the configurable percentage values
80698069
// (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
80708070
// than 100.
8071-
let chan_6 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_101_percent), 10000000, 100000, 42, &config_101_percent, 0, 42).unwrap();
8071+
let chan_6 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_101_percent), 10000000, 100000, 42, &config_101_percent, 0, 42, None).unwrap();
80728072
let chan_6_value_msat = chan_6.context.channel_value_satoshis * 1000;
80738073
assert_eq!(chan_6.context.holder_max_htlc_value_in_flight_msat, chan_6_value_msat);
80748074

@@ -8121,7 +8121,7 @@ mod tests {
81218121

81228122
let mut outbound_node_config = UserConfig::default();
81238123
outbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (outbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
8124-
let chan = OutboundV1Channel::<&TestKeysInterface>::new(&&fee_est, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&outbound_node_config), channel_value_satoshis, 100_000, 42, &outbound_node_config, 0, 42).unwrap();
8124+
let chan = OutboundV1Channel::<&TestKeysInterface>::new(&&fee_est, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&outbound_node_config), channel_value_satoshis, 100_000, 42, &outbound_node_config, 0, 42, None).unwrap();
81258125

81268126
let expected_outbound_selected_chan_reserve = cmp::max(MIN_THEIR_CHAN_RESERVE_SATOSHIS, (chan.context.channel_value_satoshis as f64 * outbound_selected_channel_reserve_perc) as u64);
81278127
assert_eq!(chan.context.holder_selected_channel_reserve_satoshis, expected_outbound_selected_chan_reserve);
@@ -8158,7 +8158,7 @@ mod tests {
81588158
// Create Node A's channel pointing to Node B's pubkey
81598159
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
81608160
let config = UserConfig::default();
8161-
let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
8161+
let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
81628162

81638163
// Create Node B's channel by receiving Node A's open_channel message
81648164
// Make sure A's dust limit is as we expect.
@@ -9006,7 +9006,7 @@ mod tests {
90069006
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
90079007
let config = UserConfig::default();
90089008
let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider,
9009-
node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
9009+
node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
90109010

90119011
let mut channel_type_features = ChannelTypeFeatures::only_static_remote_key();
90129012
channel_type_features.set_zero_conf_required();
@@ -9041,7 +9041,7 @@ mod tests {
90419041
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
90429042
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
90439043
&channelmanager::provided_init_features(&UserConfig::default()), 10000000, 100000, 42,
9044-
&config, 0, 42
9044+
&config, 0, 42, None
90459045
).unwrap();
90469046
assert!(!channel_a.context.channel_type.supports_anchors_zero_fee_htlc_tx());
90479047

@@ -9051,7 +9051,8 @@ mod tests {
90519051

90529052
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
90539053
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9054-
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42
9054+
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
9055+
None
90559056
).unwrap();
90569057

90579058
let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -9088,7 +9089,8 @@ mod tests {
90889089

90899090
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
90909091
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9091-
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42
9092+
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
9093+
None
90929094
).unwrap();
90939095

90949096
// Set `channel_type` to `None` to force the implicit feature negotiation.
@@ -9134,7 +9136,8 @@ mod tests {
91349136
// B as it's not supported by LDK.
91359137
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
91369138
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9137-
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42
9139+
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
9140+
None
91389141
).unwrap();
91399142

91409143
let mut open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -9153,7 +9156,7 @@ mod tests {
91539156
// LDK.
91549157
let mut channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
91559158
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b, &simple_anchors_init,
9156-
10000000, 100000, 42, &config, 0, 42
9159+
10000000, 100000, 42, &config, 0, 42, None
91579160
).unwrap();
91589161

91599162
let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -9203,6 +9206,7 @@ mod tests {
92039206
&config,
92049207
0,
92059208
42,
9209+
None
92069210
).unwrap();
92079211

92089212
let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));

0 commit comments

Comments
 (0)