@@ -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,
@@ -9638,37 +9640,44 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
96389640 let chan = chan_entry.get_mut();
96399641 let logger = WithChannelContext::from(&self.logger, &chan.context(), None);
96409642 let funding_txo = chan.funding().get_funding_txo();
9641- let (monitor_opt, monitor_update_opt, funding_tx_opt) = try_channel_entry!(
9643+ let res = try_channel_entry!(
96429644 self, peer_state, chan.commitment_signed(msg, best_block, &self.signer_provider, &&logger),
96439645 chan_entry);
96449646
96459647 if let Some(chan) = chan.as_funded_mut() {
9646- if let Some(unsigned_transaction) = funding_tx_opt {
9647- let mut pending_events = self.pending_events.lock().unwrap();
9648- pending_events.push_back((
9649- Event::FundingTransactionReadyForSigning {
9650- unsigned_transaction,
9651- counterparty_node_id: *counterparty_node_id,
9652- channel_id: msg.channel_id,
9653- user_channel_id: chan.context.get_user_id(),
9654- }, None));
9655- }
9656- if let Some(monitor) = monitor_opt {
9657- let monitor_res = self.chain_monitor.watch_channel(monitor.channel_id(), monitor);
9658- if let Ok(persist_state) = monitor_res {
9659- handle_new_monitor_update!(self, persist_state, peer_state_lock, peer_state,
9660- per_peer_state, chan, INITIAL_MONITOR);
9661- } else {
9662- let logger = WithChannelContext::from(&self.logger, &chan.context, None);
9663- log_error!(logger, "Persisting initial ChannelMonitor failed, implying the channel ID was duplicated");
9664- let msg = "Channel ID was a duplicate";
9665- let reason = ClosureReason::ProcessingError { err: msg.to_owned() };
9666- let err = ChannelError::Close((msg.to_owned(), reason));
9667- try_channel_entry!(self, peer_state, Err(err), chan_entry)
9668- }
9669- } else if let Some(monitor_update) = monitor_update_opt {
9670- handle_new_monitor_update!(self, funding_txo.unwrap(), monitor_update, peer_state_lock,
9671- peer_state, per_peer_state, chan);
9648+ let monitor = match res {
9649+ CommitmentSignedResult::ChannelMonitor(monitor) => monitor,
9650+ CommitmentSignedResult::ChannelMonitorWithUnsignedFundingTransaction(monitor, unsigned_transaction) => {
9651+ let mut pending_events = self.pending_events.lock().unwrap();
9652+ pending_events.push_back((
9653+ Event::FundingTransactionReadyForSigning {
9654+ unsigned_transaction,
9655+ counterparty_node_id: *counterparty_node_id,
9656+ channel_id: msg.channel_id,
9657+ user_channel_id: chan.context.get_user_id(),
9658+ }, None));
9659+
9660+ monitor
9661+ },
9662+ CommitmentSignedResult::ChannelMonitorUpdate(monitor_update) => {
9663+ handle_new_monitor_update!(self, funding_txo.unwrap(), monitor_update, peer_state_lock,
9664+ peer_state, per_peer_state, chan);
9665+ return Ok(());
9666+ },
9667+ CommitmentSignedResult::None => return Ok(()),
9668+ };
9669+
9670+ let monitor_res = self.chain_monitor.watch_channel(monitor.channel_id(), monitor);
9671+ if let Ok(persist_state) = monitor_res {
9672+ handle_new_monitor_update!(self, persist_state, peer_state_lock, peer_state,
9673+ per_peer_state, chan, INITIAL_MONITOR);
9674+ } else {
9675+ let logger = WithChannelContext::from(&self.logger, &chan.context, None);
9676+ log_error!(logger, "Persisting initial ChannelMonitor failed, implying the channel ID was duplicated");
9677+ let msg = "Channel ID was a duplicate";
9678+ let reason = ClosureReason::ProcessingError { err: msg.to_owned() };
9679+ let err = ChannelError::Close((msg.to_owned(), reason));
9680+ try_channel_entry!(self, peer_state, Err(err), chan_entry)
96729681 }
96739682 }
96749683 Ok(())
0 commit comments