Skip to content

Commit 32e93ac

Browse files
committed
f only emit FundingTransactionReadyForSigning on initial commitment_signed exchange
1 parent dbed102 commit 32e93ac

File tree

3 files changed

+29
-31
lines changed

3 files changed

+29
-31
lines changed

lightning/src/events/mod.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2139,10 +2139,7 @@ impl Writeable for Event {
21392139
},
21402140
&Event::FundingTransactionReadyForSigning { .. } => {
21412141
49u8.write(writer)?;
2142-
// We never write out FundingTransactionReadyForSigning events as, upon disconnection, peers
2143-
// drop any V2-established/spliced channels which have not yet exchanged the initial `commitment_signed`.
2144-
// We only exhange the initial `commitment_signed` after the client calls
2145-
// `ChannelManager::funding_transaction_signed` and ALWAYS before we send a `tx_signatures`
2142+
// We never write out FundingTransactionReadyForSigning events as they will be regenerated necessary.
21462143
},
21472144
// Note that, going forward, all new events must only write data inside of
21482145
// `write_tlv_fields`. Versions 0.0.101+ will ignore odd-numbered events that write

lightning/src/ln/channel.rs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1766,7 +1766,7 @@ where
17661766

17671767
pub fn funding_tx_constructed<L: Deref>(
17681768
&mut self, signing_session: InteractiveTxSigningSession, logger: &L,
1769-
) -> Result<(msgs::CommitmentSigned, Option<Transaction>), ChannelError>
1769+
) -> Result<msgs::CommitmentSigned, ChannelError>
17701770
where
17711771
L::Target: Logger,
17721772
{
@@ -1788,7 +1788,7 @@ where
17881788
#[rustfmt::skip]
17891789
pub fn commitment_signed<L: Deref>(
17901790
&mut self, msg: &msgs::CommitmentSigned, best_block: BestBlock, signer_provider: &SP, logger: &L
1791-
) -> Result<(Option<ChannelMonitor<<SP::Target as SignerProvider>::EcdsaSigner>>, Option<ChannelMonitorUpdate>), ChannelError>
1791+
) -> Result<(Option<ChannelMonitor<<SP::Target as SignerProvider>::EcdsaSigner>>, Option<ChannelMonitorUpdate>, Option<Transaction>), ChannelError>
17921792
where
17931793
L::Target: Logger
17941794
{
@@ -1815,7 +1815,7 @@ where
18151815
pending_splice: None,
18161816
};
18171817
let res = funded_channel.commitment_signed_initial_v2(msg, best_block, signer_provider, logger)
1818-
.map(|monitor| (Some(monitor), None))
1818+
.map(|(monitor, funding_tx_opt)| (Some(monitor), None, funding_tx_opt))
18191819
// TODO: Change to `inspect_err` when MSRV is high enough.
18201820
.map_err(|err| {
18211821
// We always expect a `ChannelError` close.
@@ -1842,15 +1842,15 @@ where
18421842
let res = if has_negotiated_pending_splice && !session_received_commitment_signed {
18431843
funded_channel
18441844
.splice_initial_commitment_signed(msg, logger)
1845-
.map(|monitor_update_opt| (None, monitor_update_opt))
1845+
.map(|monitor_update_opt| (None, monitor_update_opt, None))
18461846
} else {
18471847
funded_channel.commitment_signed(msg, logger)
1848-
.map(|monitor_update_opt| (None, monitor_update_opt))
1848+
.map(|monitor_update_opt| (None, monitor_update_opt, None))
18491849
};
18501850

18511851
#[cfg(not(splicing))]
18521852
let res = funded_channel.commitment_signed(msg, logger)
1853-
.map(|monitor_update_opt| (None, monitor_update_opt));
1853+
.map(|monitor_update_opt| (None, monitor_update_opt, None));
18541854

18551855
self.phase = ChannelPhase::Funded(funded_channel);
18561856
res
@@ -2928,7 +2928,7 @@ where
29282928
#[rustfmt::skip]
29292929
pub fn funding_tx_constructed<L: Deref>(
29302930
&mut self, mut signing_session: InteractiveTxSigningSession, logger: &L
2931-
) -> Result<(msgs::CommitmentSigned, Option<Transaction>), ChannelError>
2931+
) -> Result<msgs::CommitmentSigned, ChannelError>
29322932
where
29332933
L::Target: Logger
29342934
{
@@ -2970,7 +2970,8 @@ where
29702970
},
29712971
};
29722972

2973-
let funding_tx_opt = if signing_session.local_inputs_count() == 0 {
2973+
// Check that we have the expected number of local inputs
2974+
if signing_session.local_inputs_count() == 0 {
29742975
debug_assert_eq!(our_funding_satoshis, 0);
29752976
if signing_session.provide_holder_witnesses(self.context.channel_id, Vec::new()).is_err() {
29762977
debug_assert!(
@@ -2982,10 +2983,7 @@ where
29822983
ClosureReason::HolderForceClosed { broadcasted_latest_txn: Some(false) }
29832984
)));
29842985
}
2985-
None
2986-
} else {
2987-
Some(signing_session.unsigned_tx().build_unsigned_tx())
2988-
};
2986+
}
29892987

29902988
let mut channel_state = ChannelState::FundingNegotiated(FundingNegotiatedFlags::new());
29912989
channel_state.set_interactive_signing();
@@ -2995,7 +2993,7 @@ where
29952993
self.interactive_tx_constructor.take();
29962994
self.interactive_tx_signing_session = Some(signing_session);
29972995

2998-
Ok((commitment_signed, funding_tx_opt))
2996+
Ok(commitment_signed)
29992997
}
30002998
}
30012999

@@ -6632,7 +6630,7 @@ where
66326630
#[rustfmt::skip]
66336631
pub fn commitment_signed_initial_v2<L: Deref>(
66346632
&mut self, msg: &msgs::CommitmentSigned, best_block: BestBlock, signer_provider: &SP, logger: &L
6635-
) -> Result<ChannelMonitor<<SP::Target as SignerProvider>::EcdsaSigner>, ChannelError>
6633+
) -> Result<(ChannelMonitor<<SP::Target as SignerProvider>::EcdsaSigner>, Option<Transaction>), ChannelError>
66366634
where L::Target: Logger
66376635
{
66386636
if !self.context.channel_state.is_interactive_signing()
@@ -6663,8 +6661,11 @@ where
66636661
// so they'll be sent as soon as that's done.
66646662
self.context.monitor_pending_tx_signatures = Some(tx_signatures);
66656663
}
6664+
// Only build the unsigned transaction for signing if there are any holder inputs to actually sign
6665+
let funding_tx_opt = self.interactive_tx_signing_session.as_ref().and_then(|session|
6666+
session.local_inputs_count().gt(&0).then_some(session.unsigned_tx().build_unsigned_tx()));
66666667

6667-
Ok(channel_monitor)
6668+
Ok((channel_monitor, funding_tx_opt))
66686669
}
66696670

66706671
/// Handles an incoming `commitment_signed` message for the first commitment transaction of the

lightning/src/ln/channelmanager.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9137,20 +9137,10 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
91379137
peer_state.pending_msg_events.push(msg_send_event);
91389138
};
91399139
if let Some(signing_session) = signing_session_opt {
9140-
let (commitment_signed, funding_tx_opt) = chan_entry
9140+
let commitment_signed = chan_entry
91419141
.get_mut()
91429142
.funding_tx_constructed(signing_session, &self.logger)
91439143
.map_err(|err| MsgHandleErrInternal::send_err_msg_no_close(format!("{}", err), msg.channel_id))?;
9144-
if let Some(unsigned_transaction) = funding_tx_opt {
9145-
let mut pending_events = self.pending_events.lock().unwrap();
9146-
pending_events.push_back((
9147-
Event::FundingTransactionReadyForSigning {
9148-
unsigned_transaction,
9149-
counterparty_node_id,
9150-
channel_id: msg.channel_id,
9151-
user_channel_id: chan_entry.get().context().get_user_id(),
9152-
}, None));
9153-
}
91549144
peer_state.pending_msg_events.push(MessageSendEvent::UpdateHTLCs {
91559145
node_id: counterparty_node_id,
91569146
channel_id: msg.channel_id,
@@ -9682,11 +9672,21 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
96829672
let chan = chan_entry.get_mut();
96839673
let logger = WithChannelContext::from(&self.logger, &chan.context(), None);
96849674
let funding_txo = chan.funding().get_funding_txo();
9685-
let (monitor_opt, monitor_update_opt) = try_channel_entry!(
9675+
let (monitor_opt, monitor_update_opt, funding_tx_opt) = try_channel_entry!(
96869676
self, peer_state, chan.commitment_signed(msg, best_block, &self.signer_provider, &&logger),
96879677
chan_entry);
96889678

96899679
if let Some(chan) = chan.as_funded_mut() {
9680+
if let Some(unsigned_transaction) = funding_tx_opt {
9681+
let mut pending_events = self.pending_events.lock().unwrap();
9682+
pending_events.push_back((
9683+
Event::FundingTransactionReadyForSigning {
9684+
unsigned_transaction,
9685+
counterparty_node_id: *counterparty_node_id,
9686+
channel_id: msg.channel_id,
9687+
user_channel_id: chan.context.get_user_id(),
9688+
}, None));
9689+
}
96909690
if let Some(monitor) = monitor_opt {
96919691
let monitor_res = self.chain_monitor.watch_channel(monitor.channel_id(), monitor);
96929692
if let Ok(persist_state) = monitor_res {

0 commit comments

Comments
 (0)