@@ -130,8 +130,10 @@ use crate::util::ser::{
130130};
131131use crate::util::wakers::{Future, Notifier};
132132
133+ use super::channel::CommitmentSignedResult;
133134#[cfg(all(test, async_payments))]
134135use crate::blinded_path::payment::BlindedPaymentPath;
136+
135137#[cfg(async_payments)]
136138use {
137139 crate::blinded_path::message::BlindedMessagePath,
@@ -9621,37 +9623,44 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
96219623 let chan = chan_entry.get_mut();
96229624 let logger = WithChannelContext::from(&self.logger, &chan.context(), None);
96239625 let funding_txo = chan.funding().get_funding_txo();
9624- let (monitor_opt, monitor_update_opt, funding_tx_opt) = try_channel_entry!(
9626+ let res = try_channel_entry!(
96259627 self, peer_state, chan.commitment_signed(msg, best_block, &self.signer_provider, &&logger),
96269628 chan_entry);
96279629
96289630 if let Some(chan) = chan.as_funded_mut() {
9629- if let Some(unsigned_transaction) = funding_tx_opt {
9630- let mut pending_events = self.pending_events.lock().unwrap();
9631- pending_events.push_back((
9632- Event::FundingTransactionReadyForSigning {
9633- unsigned_transaction,
9634- counterparty_node_id: *counterparty_node_id,
9635- channel_id: msg.channel_id,
9636- user_channel_id: chan.context.get_user_id(),
9637- }, None));
9638- }
9639- if let Some(monitor) = monitor_opt {
9640- let monitor_res = self.chain_monitor.watch_channel(monitor.channel_id(), monitor);
9641- if let Ok(persist_state) = monitor_res {
9642- handle_new_monitor_update!(self, persist_state, peer_state_lock, peer_state,
9643- per_peer_state, chan, INITIAL_MONITOR);
9644- } else {
9645- let logger = WithChannelContext::from(&self.logger, &chan.context, None);
9646- log_error!(logger, "Persisting initial ChannelMonitor failed, implying the channel ID was duplicated");
9647- let msg = "Channel ID was a duplicate";
9648- let reason = ClosureReason::ProcessingError { err: msg.to_owned() };
9649- let err = ChannelError::Close((msg.to_owned(), reason));
9650- try_channel_entry!(self, peer_state, Err(err), chan_entry)
9651- }
9652- } else if let Some(monitor_update) = monitor_update_opt {
9653- handle_new_monitor_update!(self, funding_txo.unwrap(), monitor_update, peer_state_lock,
9654- peer_state, per_peer_state, chan);
9631+ let monitor = match res {
9632+ CommitmentSignedResult::ChannelMonitor(monitor) => monitor,
9633+ CommitmentSignedResult::ChannelMonitorWithUnsignedFundingTransaction(monitor, unsigned_transaction) => {
9634+ let mut pending_events = self.pending_events.lock().unwrap();
9635+ pending_events.push_back((
9636+ Event::FundingTransactionReadyForSigning {
9637+ unsigned_transaction,
9638+ counterparty_node_id: *counterparty_node_id,
9639+ channel_id: msg.channel_id,
9640+ user_channel_id: chan.context.get_user_id(),
9641+ }, None));
9642+
9643+ monitor
9644+ },
9645+ CommitmentSignedResult::ChannelMonitorUpdate(monitor_update) => {
9646+ handle_new_monitor_update!(self, funding_txo.unwrap(), monitor_update, peer_state_lock,
9647+ peer_state, per_peer_state, chan);
9648+ return Ok(());
9649+ },
9650+ CommitmentSignedResult::None => return Ok(()),
9651+ };
9652+
9653+ let monitor_res = self.chain_monitor.watch_channel(monitor.channel_id(), monitor);
9654+ if let Ok(persist_state) = monitor_res {
9655+ handle_new_monitor_update!(self, persist_state, peer_state_lock, peer_state,
9656+ per_peer_state, chan, INITIAL_MONITOR);
9657+ } else {
9658+ let logger = WithChannelContext::from(&self.logger, &chan.context, None);
9659+ log_error!(logger, "Persisting initial ChannelMonitor failed, implying the channel ID was duplicated");
9660+ let msg = "Channel ID was a duplicate";
9661+ let reason = ClosureReason::ProcessingError { err: msg.to_owned() };
9662+ let err = ChannelError::Close((msg.to_owned(), reason));
9663+ try_channel_entry!(self, peer_state, Err(err), chan_entry)
96559664 }
96569665 }
96579666 Ok(())
0 commit comments