@@ -7995,6 +7995,7 @@ impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
7995
7995
pub(super) struct InboundV1Channel<SP: Deref> where SP::Target: SignerProvider {
7996
7996
pub context: ChannelContext<SP>,
7997
7997
pub unfunded_context: UnfundedChannelContext,
7998
+ pub signer_pending_accept_channel: bool,
7998
7999
}
7999
8000
8000
8001
/// Fetches the [`ChannelTypeFeatures`] that will be used for a channel built from a given
@@ -8084,15 +8085,17 @@ impl<SP: Deref> InboundV1Channel<SP> where SP::Target: SignerProvider {
8084
8085
holder_commitment_point: HolderCommitmentPoint::new(&context.holder_signer, &context.secp_ctx),
8085
8086
};
8086
8087
8087
- let chan = Self { context, unfunded_context };
8088
+ let chan = Self { context, unfunded_context, signer_pending_accept_channel: false };
8088
8089
Ok(chan)
8089
8090
}
8090
8091
8091
8092
/// Marks an inbound channel as accepted and generates a [`msgs::AcceptChannel`] message which
8092
8093
/// should be sent back to the counterparty node.
8093
8094
///
8094
8095
/// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
8095
- pub fn accept_inbound_channel(&mut self) -> msgs::AcceptChannel {
8096
+ pub fn accept_inbound_channel<L: Deref>(&mut self, logger: &L) -> Option<msgs::AcceptChannel>
8097
+ where L::Target: Logger
8098
+ {
8096
8099
if self.context.is_outbound() {
8097
8100
panic!("Tried to send accept_channel for an outbound channel?");
8098
8101
}
@@ -8106,21 +8109,33 @@ impl<SP: Deref> InboundV1Channel<SP> where SP::Target: SignerProvider {
8106
8109
panic!("Tried to send an accept_channel for a channel that has already advanced");
8107
8110
}
8108
8111
8109
- self.generate_accept_channel_message()
8112
+ self.generate_accept_channel_message(logger )
8110
8113
}
8111
8114
8112
8115
/// This function is used to explicitly generate a [`msgs::AcceptChannel`] message for an
8113
8116
/// inbound channel. If the intention is to accept an inbound channel, use
8114
8117
/// [`InboundV1Channel::accept_inbound_channel`] instead.
8115
8118
///
8116
8119
/// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
8117
- fn generate_accept_channel_message(&self) -> msgs::AcceptChannel {
8118
- debug_assert!(self.unfunded_context.holder_commitment_point.map(|point| point.is_available()).unwrap_or(false));
8119
- let first_per_commitment_point = self.unfunded_context.holder_commitment_point
8120
- .expect("TODO: Handle holder_commitment_point not being set").current_point();
8120
+ fn generate_accept_channel_message<L: Deref>(&mut self, logger: &L) -> Option<msgs::AcceptChannel>
8121
+ where L::Target: Logger
8122
+ {
8123
+ let first_per_commitment_point = if let Some(holder_commitment_point) = self.unfunded_context.holder_commitment_point {
8124
+ self.signer_pending_accept_channel = false;
8125
+ holder_commitment_point.current_point()
8126
+ } else {
8127
+ #[cfg(not(async_signing))] {
8128
+ panic!("Failed getting commitment point for accept_channel message");
8129
+ }
8130
+ #[cfg(async_signing)] {
8131
+ log_trace!(logger, "Unable to generate accept_channel message, waiting for commitment point");
8132
+ self.signer_pending_accept_channel = true;
8133
+ return None;
8134
+ }
8135
+ };
8121
8136
let keys = self.context.get_holder_pubkeys();
8122
8137
8123
- msgs::AcceptChannel {
8138
+ Some( msgs::AcceptChannel {
8124
8139
common_fields: msgs::CommonAcceptChannelFields {
8125
8140
temporary_channel_id: self.context.channel_id,
8126
8141
dust_limit_satoshis: self.context.holder_dust_limit_satoshis,
@@ -8144,16 +8159,18 @@ impl<SP: Deref> InboundV1Channel<SP> where SP::Target: SignerProvider {
8144
8159
channel_reserve_satoshis: self.context.holder_selected_channel_reserve_satoshis,
8145
8160
#[cfg(taproot)]
8146
8161
next_local_nonce: None,
8147
- }
8162
+ })
8148
8163
}
8149
8164
8150
8165
/// Enables the possibility for tests to extract a [`msgs::AcceptChannel`] message for an
8151
8166
/// inbound channel without accepting it.
8152
8167
///
8153
8168
/// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
8154
8169
#[cfg(test)]
8155
- pub fn get_accept_channel_message(&self) -> msgs::AcceptChannel {
8156
- self.generate_accept_channel_message()
8170
+ pub fn get_accept_channel_message<L: Deref>(&mut self, logger: &L) -> Option<msgs::AcceptChannel>
8171
+ where L::Target: Logger
8172
+ {
8173
+ self.generate_accept_channel_message(logger)
8157
8174
}
8158
8175
8159
8176
fn check_funding_created_signature<L: Deref>(&mut self, sig: &Signature, logger: &L) -> Result<CommitmentTransaction, ChannelError> where L::Target: Logger {
@@ -9834,7 +9851,7 @@ mod tests {
9834
9851
let mut node_b_chan = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false).unwrap();
9835
9852
9836
9853
// Node B --> Node A: accept channel, explicitly setting B's dust limit.
9837
- let mut accept_channel_msg = node_b_chan.accept_inbound_channel();
9854
+ let mut accept_channel_msg = node_b_chan.accept_inbound_channel(&&logger).unwrap( );
9838
9855
accept_channel_msg.common_fields.dust_limit_satoshis = 546;
9839
9856
node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features(&config)).unwrap();
9840
9857
node_a_chan.context.holder_dust_limit_satoshis = 1560;
@@ -9966,7 +9983,7 @@ mod tests {
9966
9983
let mut node_b_chan = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false).unwrap();
9967
9984
9968
9985
// Node B --> Node A: accept channel
9969
- let accept_channel_msg = node_b_chan.accept_inbound_channel();
9986
+ let accept_channel_msg = node_b_chan.accept_inbound_channel(&&logger).unwrap( );
9970
9987
node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features(&config)).unwrap();
9971
9988
9972
9989
// Node A --> Node B: funding created
@@ -10153,7 +10170,7 @@ mod tests {
10153
10170
let mut node_b_chan = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false).unwrap();
10154
10171
10155
10172
// Node B --> Node A: accept channel, explicitly setting B's dust limit.
10156
- let mut accept_channel_msg = node_b_chan.accept_inbound_channel();
10173
+ let mut accept_channel_msg = node_b_chan.accept_inbound_channel(&&logger).unwrap( );
10157
10174
accept_channel_msg.common_fields.dust_limit_satoshis = 546;
10158
10175
node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features(&config)).unwrap();
10159
10176
node_a_chan.context.holder_dust_limit_satoshis = 1560;
@@ -10223,11 +10240,11 @@ mod tests {
10223
10240
let mut outbound_chan = OutboundV1Channel::<&TestKeysInterface>::new(
10224
10241
&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &features, 10000000, 100000, 42, &config, 0, 42, None, &logger
10225
10242
).unwrap();
10226
- let inbound_chan = InboundV1Channel::<&TestKeysInterface>::new(
10243
+ let mut inbound_chan = InboundV1Channel::<&TestKeysInterface>::new(
10227
10244
&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config),
10228
10245
&features, &outbound_chan.get_open_channel(ChainHash::using_genesis_block(network), &&logger).unwrap(), 7, &config, 0, &&logger, false
10229
10246
).unwrap();
10230
- outbound_chan.accept_channel(&inbound_chan.get_accept_channel_message(), &config.channel_handshake_limits, &features).unwrap();
10247
+ outbound_chan.accept_channel(&inbound_chan.get_accept_channel_message(&&logger).unwrap( ), &config.channel_handshake_limits, &features).unwrap();
10231
10248
let tx = Transaction { version: Version::ONE, lock_time: LockTime::ZERO, input: Vec::new(), output: vec![TxOut {
10232
10249
value: Amount::from_sat(10000000), script_pubkey: outbound_chan.context.get_funding_redeemscript(),
10233
10250
}]};
@@ -11279,13 +11296,13 @@ mod tests {
11279
11296
11280
11297
let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network), &&logger).unwrap();
11281
11298
11282
- let channel_b = InboundV1Channel::<&TestKeysInterface>::new(
11299
+ let mut channel_b = InboundV1Channel::<&TestKeysInterface>::new(
11283
11300
&fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
11284
11301
&channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config),
11285
11302
&open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
11286
11303
).unwrap();
11287
11304
11288
- let mut accept_channel_msg = channel_b.get_accept_channel_message();
11305
+ let mut accept_channel_msg = channel_b.get_accept_channel_message(&&logger).unwrap( );
11289
11306
accept_channel_msg.common_fields.channel_type = Some(simple_anchors_channel_type.clone());
11290
11307
11291
11308
let res = channel_a.accept_channel(
@@ -11345,7 +11362,7 @@ mod tests {
11345
11362
true, // Allow node b to send a 0conf channel_ready.
11346
11363
).unwrap();
11347
11364
11348
- let accept_channel_msg = node_b_chan.accept_inbound_channel();
11365
+ let accept_channel_msg = node_b_chan.accept_inbound_channel(&&logger).unwrap( );
11349
11366
node_a_chan.accept_channel(
11350
11367
&accept_channel_msg,
11351
11368
&config.channel_handshake_limits,
0 commit comments