Skip to content

Commit ebe0583

Browse files
committed
f rm side-effects from and_then
1 parent cf1ad78 commit ebe0583

File tree

1 file changed

+10
-65
lines changed

1 file changed

+10
-65
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 10 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -4960,53 +4960,6 @@ where
49604960
result
49614961
}
49624962

4963-
/// Handles a signed funding transaction generated by interactive transaction construction and
4964-
/// provided by the client.
4965-
///
4966-
/// Do NOT broadcast the funding transaction yourself. When we have safely received our
4967-
/// counterparty's signature(s) the funding transaction will automatically be broadcast via the
4968-
/// [`BroadcasterInterface`] provided when this `ChannelManager` was constructed.
4969-
pub fn funding_transaction_signed(
4970-
&self, channel_id: &ChannelId, counterparty_node_id: &PublicKey, transaction: Transaction
4971-
) -> Result<(), APIError> {
4972-
let witnesses: Vec<_> = transaction.input.into_iter().filter_map(|input| {
4973-
if input.witness.is_empty() { None } else { Some(input.witness) }
4974-
}).collect();
4975-
4976-
let per_peer_state = self.per_peer_state.read().unwrap();
4977-
let peer_state_mutex = per_peer_state.get(counterparty_node_id)
4978-
.ok_or_else(|| APIError::ChannelUnavailable {
4979-
err: format!("Can't find a peer matching the passed counterparty node_id {}",
4980-
counterparty_node_id) })?;
4981-
4982-
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
4983-
let peer_state = &mut *peer_state_lock;
4984-
4985-
match peer_state.channel_by_id.get_mut(channel_id) {
4986-
Some(ChannelPhase::Funded(chan)) => {
4987-
chan.verify_interactive_tx_signatures(&witnesses);
4988-
if let Some(ref mut signing_session) = chan.interactive_tx_signing_session {
4989-
if let Some(tx_signatures) = signing_session.provide_holder_witnesses(*channel_id, witnesses) {
4990-
peer_state.pending_msg_events.push(events::MessageSendEvent::SendTxSignatures {
4991-
node_id: *counterparty_node_id,
4992-
msg: tx_signatures,
4993-
});
4994-
}
4995-
} else {
4996-
return Err(APIError::APIMisuseError {
4997-
err: format!("Channel with id {} not expecting funding signatures", channel_id)});
4998-
}
4999-
},
5000-
Some(_) => return Err(APIError::APIMisuseError {
5001-
err: format!("Channel with id {} not expecting funding signatures", channel_id)}),
5002-
None => return Err(APIError::ChannelUnavailable{
5003-
err: format!("Channel with id {} not found for the passed counterparty node_id {}", channel_id,
5004-
counterparty_node_id) }),
5005-
}
5006-
5007-
Ok(())
5008-
}
5009-
50104963
/// Atomically applies partial updates to the [`ChannelConfig`] of the given channels.
50114964
///
50124965
/// Once the updates are applied, each eligible channel (advertised with a known short channel
@@ -8110,7 +8063,7 @@ where
81108063
peer_state.pending_msg_events.push(msg_send_event);
81118064
};
81128065
if let Some(mut signing_session) = signing_session_opt {
8113-
match chan_phase_entry.get_mut() {
8066+
let (commitment_signed, funding_ready_for_sig_event_opt) = match chan_phase_entry.get_mut() {
81148067
ChannelPhase::UnfundedOutboundV2(chan) => {
81158068
chan.funding_tx_constructed(&mut signing_session, &self.logger)
81168069
},
@@ -8120,23 +8073,18 @@ where
81208073
_ => Err(ChannelError::Warn(
81218074
"Got a tx_complete message with no interactive transaction construction expected or in-progress"
81228075
.into())),
8123-
}.and_then(|(commitment_signed, funding_ready_for_sig_event_opt)| {
8124-
let (channel_id, channel_phase) = chan_phase_entry.remove_entry();
8125-
match channel_phase {
8126-
ChannelPhase::UnfundedOutboundV2(chan) => {
8127-
chan.into_channel(signing_session)
8128-
},
8129-
ChannelPhase::UnfundedInboundV2(chan) => {
8130-
chan.into_channel(signing_session)
8131-
},
8076+
}.map_err(|err| MsgHandleErrInternal::send_err_msg_no_close(format!("{}", err), msg.channel_id))?;
8077+
let (channel_id, channel_phase) = chan_phase_entry.remove_entry();
8078+
let channel = match channel_phase {
8079+
ChannelPhase::UnfundedOutboundV2(chan) => chan.into_channel(signing_session),
8080+
ChannelPhase::UnfundedInboundV2(chan) => chan.into_channel(signing_session),
81328081
_ => {
81338082
debug_assert!(false); // It cannot be another variant as we are in the `Ok` branch of the above match.
81348083
Err(ChannelError::Warn(
81358084
"Got a tx_complete message with no interactive transaction construction expected or in-progress"
81368085
.into()))
8137-
}
8138-
}.map(|channel| (channel_id, channel, funding_ready_for_sig_event_opt, commitment_signed))
8139-
}).map(|(channel_id, channel, funding_ready_for_sig_event_opt, commitment_signed)| {
8086+
},
8087+
}.map_err(|err| MsgHandleErrInternal::send_err_msg_no_close(format!("{}", err), msg.channel_id))?;
81408088
peer_state.channel_by_id.insert(channel_id, ChannelPhase::Funded(channel));
81418089
if let Some(funding_ready_for_sig_event) = funding_ready_for_sig_event_opt {
81428090
let mut pending_events = self.pending_events.lock().unwrap();
@@ -8153,11 +8101,8 @@ where
81538101
update_fee: None,
81548102
},
81558103
});
8156-
}).map_err(|err| MsgHandleErrInternal::send_err_msg_no_close(format!("{}", err), msg.channel_id))
8157-
} else {
8158-
// We're not in a signing session yet so we don't need to do anything else.
8159-
Ok(())
8160-
}
8104+
}
8105+
Ok(())
81618106
},
81628107
hash_map::Entry::Vacant(_) => {
81638108
Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id))

0 commit comments

Comments
 (0)