@@ -1280,6 +1280,9 @@ pub(super) struct ChannelContext<SP: Deref> where SP::Target: SignerProvider {
1280
1280
/// [`msgs::FundingCreated`] or [`msgs::FundingSigned`] depending on if this channel is
1281
1281
/// outbound or inbound.
1282
1282
signer_pending_funding: bool,
1283
+ /// Similar to [`Self::signer_pending_commitment_update`] but we're waiting to send a
1284
+ /// [`msgs::ChannelReady`].
1285
+ signer_pending_channel_ready: bool,
1283
1286
1284
1287
// pending_update_fee is filled when sending and receiving update_fee.
1285
1288
//
@@ -1741,6 +1744,7 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
1741
1744
signer_pending_revoke_and_ack: false,
1742
1745
signer_pending_commitment_update: false,
1743
1746
signer_pending_funding: false,
1747
+ signer_pending_channel_ready: false,
1744
1748
1745
1749
1746
1750
#[cfg(debug_assertions)]
@@ -1970,6 +1974,7 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
1970
1974
signer_pending_revoke_and_ack: false,
1971
1975
signer_pending_commitment_update: false,
1972
1976
signer_pending_funding: false,
1977
+ signer_pending_channel_ready: false,
1973
1978
1974
1979
// We'll add our counterparty's `funding_satoshis` to these max commitment output assertions
1975
1980
// when we receive `accept_channel2`.
@@ -5339,7 +5344,7 @@ impl<SP: Deref> Channel<SP> where
5339
5344
assert!(!self.context.is_outbound() || self.context.minimum_depth == Some(0),
5340
5345
"Funding transaction broadcast by the local client before it should have - LDK didn't do it!");
5341
5346
self.context.monitor_pending_channel_ready = false;
5342
- Some( self.get_channel_ready() )
5347
+ self.get_channel_ready(logger )
5343
5348
} else { None };
5344
5349
5345
5350
let announcement_sigs = self.get_announcement_sigs(node_signer, chain_hash, user_config, best_block_height, logger);
@@ -5708,7 +5713,7 @@ impl<SP: Deref> Channel<SP> where
5708
5713
5709
5714
// We have OurChannelReady set!
5710
5715
return Ok(ReestablishResponses {
5711
- channel_ready: Some( self.get_channel_ready() ),
5716
+ channel_ready: self.get_channel_ready(logger ),
5712
5717
raa: None, commitment_update: None,
5713
5718
order: RAACommitmentOrder::CommitmentFirst,
5714
5719
shutdown_msg, announcement_sigs,
@@ -5747,7 +5752,7 @@ impl<SP: Deref> Channel<SP> where
5747
5752
5748
5753
let channel_ready = if msg.next_local_commitment_number == 1 && INITIAL_COMMITMENT_NUMBER - self.context.holder_commitment_point.transaction_number() == 1 {
5749
5754
// We should never have to worry about MonitorUpdateInProgress resending ChannelReady
5750
- Some( self.get_channel_ready() )
5755
+ self.get_channel_ready(logger )
5751
5756
} else { None };
5752
5757
5753
5758
if msg.next_local_commitment_number == next_counterparty_commitment_number {
@@ -6654,19 +6659,23 @@ impl<SP: Deref> Channel<SP> where
6654
6659
return None;
6655
6660
}
6656
6661
6657
- // TODO: when get_per_commiment_point becomes async, check if the point is
6658
- // available, if not, set signer_pending_channel_ready and return None
6659
-
6660
- Some(self.get_channel_ready())
6662
+ self.get_channel_ready(logger)
6661
6663
}
6662
6664
6663
- fn get_channel_ready(&self) -> msgs::ChannelReady {
6664
- debug_assert!(self.context.holder_commitment_point.is_available());
6665
- msgs::ChannelReady {
6666
- channel_id: self.context.channel_id(),
6667
- next_per_commitment_point: self.context.holder_commitment_point.current_point()
6668
- .expect("TODO"),
6669
- short_channel_id_alias: Some(self.context.outbound_scid_alias),
6665
+ fn get_channel_ready<L: Deref>(&mut self, logger: &L) -> Option<msgs::ChannelReady>
6666
+ where L::Target: Logger
6667
+ {
6668
+ if let HolderCommitmentPoint::Available { current, .. } = self.context.holder_commitment_point {
6669
+ self.context.signer_pending_channel_ready = false;
6670
+ Some(msgs::ChannelReady {
6671
+ channel_id: self.context.channel_id(),
6672
+ next_per_commitment_point: current,
6673
+ short_channel_id_alias: Some(self.context.outbound_scid_alias),
6674
+ })
6675
+ } else {
6676
+ log_debug!(logger, "Not producing channel_ready: the holder commitment point is not available.");
6677
+ self.context.signer_pending_channel_ready = true;
6678
+ None
6670
6679
}
6671
6680
}
6672
6681
@@ -9486,6 +9495,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
9486
9495
signer_pending_revoke_and_ack: false,
9487
9496
signer_pending_commitment_update: false,
9488
9497
signer_pending_funding: false,
9498
+ signer_pending_channel_ready: false,
9489
9499
9490
9500
pending_update_fee,
9491
9501
holding_cell_update_fee,
0 commit comments