@@ -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