@@ -480,7 +480,7 @@ mod state_flags {
480
480
pub const REMOTE_STFU_SENT: u32 = 1 << 16;
481
481
pub const QUIESCENT: u32 = 1 << 17;
482
482
pub const INTERACTIVE_SIGNING: u32 = 1 << 18;
483
- pub const OUR_TX_SIGNATURES_SENT : u32 = 1 << 19;
483
+ pub const OUR_TX_SIGNATURES_READY : u32 = 1 << 19;
484
484
pub const THEIR_TX_SIGNATURES_SENT: u32 = 1 << 20;
485
485
}
486
486
@@ -523,9 +523,9 @@ define_state_flags!(
523
523
("Indicates they sent us a `tx_signatures` message.",
524
524
THEIR_TX_SIGNATURES_SENT, state_flags::THEIR_TX_SIGNATURES_SENT,
525
525
is_their_tx_signatures_sent, set_their_tx_signatures_sent, clear_their_tx_signatures_sent),
526
- ("Indicates we sent them a `tx_signatures` message.",
527
- OUR_TX_SIGNATURES_SENT , state_flags::OUR_TX_SIGNATURES_SENT ,
528
- is_our_tx_signatures_sent, set_our_tx_signatures_sent, clear_our_tx_signatures_sent )
526
+ ("Indicates we are ready to send them a `tx_signatures` message and it has been queued to send .",
527
+ OUR_TX_SIGNATURES_READY , state_flags::OUR_TX_SIGNATURES_READY ,
528
+ is_our_tx_signatures_ready, set_our_tx_signatures_ready, clear_our_tx_signatures_ready )
529
529
]
530
530
);
531
531
@@ -675,7 +675,11 @@ impl ChannelState {
675
675
}
676
676
677
677
fn is_pre_funded_state(&self) -> bool {
678
- matches!(self, ChannelState::NegotiatingFunding(_)|ChannelState::FundingNegotiated(_))
678
+ match self {
679
+ ChannelState::NegotiatingFunding(_) => true,
680
+ ChannelState::FundingNegotiated(flags) if !flags.is_their_tx_signatures_sent() && !flags.is_our_tx_signatures_ready() => true,
681
+ _ => false,
682
+ }
679
683
}
680
684
681
685
fn is_both_sides_shutdown(&self) -> bool {
@@ -710,7 +714,7 @@ impl ChannelState {
710
714
impl_state_flag!(is_local_shutdown_sent, set_local_shutdown_sent, clear_local_shutdown_sent, FUNDED_STATES);
711
715
impl_state_flag!(is_remote_shutdown_sent, set_remote_shutdown_sent, clear_remote_shutdown_sent, FUNDED_STATES);
712
716
impl_state_flag!(is_interactive_signing, set_interactive_signing, clear_interactive_signing, FundingNegotiated);
713
- impl_state_flag!(is_our_tx_signatures_sent, set_our_tx_signatures_sent, clear_our_tx_signatures_sent , FundingNegotiated);
717
+ impl_state_flag!(is_our_tx_signatures_ready, set_our_tx_signatures_ready, clear_our_tx_signatures_ready , FundingNegotiated);
714
718
impl_state_flag!(is_their_tx_signatures_sent, set_their_tx_signatures_sent, clear_their_tx_signatures_sent, FundingNegotiated);
715
719
impl_state_flag!(is_our_channel_ready, set_our_channel_ready, clear_our_channel_ready, AwaitingChannelReady);
716
720
impl_state_flag!(is_their_channel_ready, set_their_channel_ready, clear_their_channel_ready, AwaitingChannelReady);
@@ -2337,10 +2341,7 @@ impl<SP: Deref> PendingV2Channel<SP> where SP::Target: SignerProvider {
2337
2341
self.context.assert_no_commitment_advancement(transaction_number, "initial commitment_signed");
2338
2342
let commitment_signed = self.context.get_initial_commitment_signed(&self.funding, logger);
2339
2343
let commitment_signed = match commitment_signed {
2340
- Ok(commitment_signed) => {
2341
- self.funding.funding_transaction = Some(signing_session.unsigned_tx().build_unsigned_tx());
2342
- commitment_signed
2343
- },
2344
+ Ok(commitment_signed) => commitment_signed,
2344
2345
Err(err) => {
2345
2346
self.funding.channel_transaction_parameters.funding_outpoint = None;
2346
2347
return Err(ChannelError::Close((err.to_string(), ClosureReason::HolderForceClosed { broadcasted_latest_txn: Some(false) })));
@@ -5449,6 +5450,8 @@ impl<SP: Deref> FundedChannel<SP> where
5449
5450
5450
5451
self.context.counterparty_prev_commitment_point = self.context.counterparty_cur_commitment_point;
5451
5452
self.context.counterparty_cur_commitment_point = Some(msg.next_per_commitment_point);
5453
+ // Clear any interactive signing session.
5454
+ self.interactive_tx_signing_session = None;
5452
5455
5453
5456
log_info!(logger, "Received channel_ready from peer for channel {}", &self.context.channel_id());
5454
5457
@@ -6300,10 +6303,8 @@ impl<SP: Deref> FundedChannel<SP> where
6300
6303
self.context.channel_state.set_their_tx_signatures_sent();
6301
6304
6302
6305
if funding_tx_opt.is_some() {
6303
- // We have a finalized funding transaction, so we can set the funding transaction and reset the
6304
- // signing session fields.
6306
+ // We have a finalized funding transaction, so we can set the funding transaction.
6305
6307
self.funding.funding_transaction = funding_tx_opt.clone();
6306
- self.interactive_tx_signing_session = None;
6307
6308
}
6308
6309
6309
6310
if holder_tx_signatures_opt.is_some() && self.is_awaiting_initial_mon_persist() {
@@ -6313,7 +6314,7 @@ impl<SP: Deref> FundedChannel<SP> where
6313
6314
}
6314
6315
6315
6316
if holder_tx_signatures_opt.is_some() {
6316
- self.context.channel_state.set_our_tx_signatures_sent ();
6317
+ self.context.channel_state.set_our_tx_signatures_ready ();
6317
6318
}
6318
6319
6319
6320
self.context.channel_state = ChannelState::AwaitingChannelReady(AwaitingChannelReadyFlags::new());
@@ -6579,7 +6580,7 @@ impl<SP: Deref> FundedChannel<SP> where
6579
6580
// transaction and waits for us to do it).
6580
6581
let tx_signatures = self.context.monitor_pending_tx_signatures.take();
6581
6582
if tx_signatures.is_some() {
6582
- self.context.channel_state.set_our_tx_signatures_sent ();
6583
+ self.context.channel_state.set_our_tx_signatures_ready ();
6583
6584
}
6584
6585
6585
6586
if self.context.channel_state.is_peer_disconnected() {
@@ -7102,7 +7103,7 @@ impl<SP: Deref> FundedChannel<SP> where
7102
7103
(None, None, Some(msgs::TxAbort { channel_id: self.context.channel_id(), data: vec![] }))
7103
7104
}
7104
7105
} else {
7105
- return Err(ChannelError::Warn("No active signing session. The associated funding transaction may have already been broadcast. ".into()));
7106
+ return Err(ChannelError::close("Counterparty set `next_funding_txid` at incorrect state ".into()));
7106
7107
}
7107
7108
} else {
7108
7109
// Don't send anything related to interactive signing if `next_funding_txid` is not set.
0 commit comments