@@ -130,8 +130,10 @@ use crate::util::ser::{
130
130
};
131
131
use crate::util::wakers::{Future, Notifier};
132
132
133
+ use super::channel::CommitmentSignedResult;
133
134
#[cfg(all(test, async_payments))]
134
135
use crate::blinded_path::payment::BlindedPaymentPath;
136
+
135
137
#[cfg(async_payments)]
136
138
use {
137
139
crate::blinded_path::message::BlindedMessagePath,
@@ -9638,37 +9640,44 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
9638
9640
let chan = chan_entry.get_mut();
9639
9641
let logger = WithChannelContext::from(&self.logger, &chan.context(), None);
9640
9642
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!(
9642
9644
self, peer_state, chan.commitment_signed(msg, best_block, &self.signer_provider, &&logger),
9643
9645
chan_entry);
9644
9646
9645
9647
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)
9672
9681
}
9673
9682
}
9674
9683
Ok(())
0 commit comments