From: Matt Corallo Date: Thu, 6 Sep 2018 15:31:33 +0000 (-0400) Subject: Ensure funding_created always returns Some(_) HandleError::action X-Git-Tag: v0.0.12~323^2~1 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=ed650ec5309bfe317959089d41d70741293e1d9f;p=rust-lightning Ensure funding_created always returns Some(_) HandleError::action --- diff --git a/src/ln/channel.rs b/src/ln/channel.rs index b2d6a70e1..ab8b3bcdf 100644 --- a/src/ln/channel.rs +++ b/src/ln/channel.rs @@ -1268,10 +1268,13 @@ impl Channel { pub fn funding_created(&mut self, msg: &msgs::FundingCreated) -> Result<(msgs::FundingSigned, ChannelMonitor), HandleError> { if self.channel_outbound { - return Err(HandleError{err: "Received funding_created for an outbound channel?", action: None}); + return Err(HandleError{err: "Received funding_created for an outbound channel?", action: Some(msgs::ErrorAction::SendErrorMessage {msg: msgs::ErrorMessage {channel_id: self.channel_id, data: "Received funding_created for an outbound channel?".to_string()}})}); } if self.channel_state != (ChannelState::OurInitSent as u32 | ChannelState::TheirInitSent as u32) { - return Err(HandleError{err: "Received funding_created after we got the channel!", action: None}); + // BOLT 2 says that if we disconnect before we send funding_signed we SHOULD NOT + // remember the channel, so its safe to just send an error_message here and drop the + // channel. + return Err(HandleError{err: "Received funding_created after we got the channel!", action: Some(msgs::ErrorAction::SendErrorMessage {msg: msgs::ErrorMessage {channel_id: self.channel_id, data: "Received funding_created after we got the channel!".to_string()}})}); } if self.channel_monitor.get_min_seen_secret() != (1 << 48) || self.cur_remote_commitment_transaction_number != (1 << 48) - 1 || self.cur_local_commitment_transaction_number != (1 << 48) - 1 { panic!("Should not have advanced channel commitment tx numbers prior to funding_created");