Use new ChannelError type in accept_channel

This commit is contained in:
Matt Corallo 2018-09-30 19:08:24 -04:00
parent aa2021dff5
commit 625e2b3532
2 changed files with 15 additions and 19 deletions

View file

@ -1222,48 +1222,43 @@ impl Channel {
// Message handlers: // Message handlers:
pub fn accept_channel(&mut self, msg: &msgs::AcceptChannel) -> Result<(), HandleError> { pub fn accept_channel(&mut self, msg: &msgs::AcceptChannel) -> Result<(), ChannelError> {
macro_rules! return_error_message {
( $msg: expr ) => {
return Err(HandleError{err: $msg, action: Some(msgs::ErrorAction::SendErrorMessage{ msg: msgs::ErrorMessage { channel_id: msg.temporary_channel_id, data: $msg.to_string() }})});
}
}
// Check sanity of message fields: // Check sanity of message fields:
if !self.channel_outbound { if !self.channel_outbound {
return_error_message!("Got an accept_channel message from an inbound peer"); return Err(ChannelError::Close("Got an accept_channel message from an inbound peer"));
} }
if self.channel_state != ChannelState::OurInitSent as u32 { if self.channel_state != ChannelState::OurInitSent as u32 {
return_error_message!("Got an accept_channel message at a strange time"); return Err(ChannelError::Close("Got an accept_channel message at a strange time"));
} }
if msg.dust_limit_satoshis > 21000000 * 100000000 { if msg.dust_limit_satoshis > 21000000 * 100000000 {
return_error_message!("Peer never wants payout outputs?"); return Err(ChannelError::Close("Peer never wants payout outputs?"));
} }
if msg.channel_reserve_satoshis > self.channel_value_satoshis { if msg.channel_reserve_satoshis > self.channel_value_satoshis {
return_error_message!("Bogus channel_reserve_satoshis"); return Err(ChannelError::Close("Bogus channel_reserve_satoshis"));
} }
if msg.dust_limit_satoshis > msg.channel_reserve_satoshis { if msg.dust_limit_satoshis > msg.channel_reserve_satoshis {
return_error_message!("Bogus channel_reserve and dust_limit"); return Err(ChannelError::Close("Bogus channel_reserve and dust_limit"));
} }
if msg.channel_reserve_satoshis < self.our_dust_limit_satoshis { if msg.channel_reserve_satoshis < self.our_dust_limit_satoshis {
return_error_message!("Peer never wants payout outputs?"); return Err(ChannelError::Close("Peer never wants payout outputs?"));
} }
if msg.dust_limit_satoshis > Channel::get_our_channel_reserve_satoshis(self.channel_value_satoshis) { if msg.dust_limit_satoshis > Channel::get_our_channel_reserve_satoshis(self.channel_value_satoshis) {
return_error_message!("Dust limit is bigger than our channel reverse"); return Err(ChannelError::Close("Dust limit is bigger than our channel reverse"));
} }
if msg.htlc_minimum_msat >= (self.channel_value_satoshis - msg.channel_reserve_satoshis) * 1000 { if msg.htlc_minimum_msat >= (self.channel_value_satoshis - msg.channel_reserve_satoshis) * 1000 {
return_error_message!("Minimum htlc value is full channel value"); return Err(ChannelError::Close("Minimum htlc value is full channel value"));
} }
if msg.minimum_depth > Channel::derive_maximum_minimum_depth(self.channel_value_satoshis*1000, self.value_to_self_msat) { if msg.minimum_depth > Channel::derive_maximum_minimum_depth(self.channel_value_satoshis*1000, self.value_to_self_msat) {
return_error_message!("minimum_depth too large"); return Err(ChannelError::Close("minimum_depth too large"));
} }
if msg.to_self_delay > MAX_LOCAL_BREAKDOWN_TIMEOUT { if msg.to_self_delay > MAX_LOCAL_BREAKDOWN_TIMEOUT {
return_error_message!("They wanted our payments to be delayed by a needlessly long period"); return Err(ChannelError::Close("They wanted our payments to be delayed by a needlessly long period"));
} }
if msg.max_accepted_htlcs < 1 { if msg.max_accepted_htlcs < 1 {
return_error_message!("0 max_accpted_htlcs makes for a useless channel"); return Err(ChannelError::Close("0 max_accpted_htlcs makes for a useless channel"));
} }
if msg.max_accepted_htlcs > 483 { if msg.max_accepted_htlcs > 483 {
return_error_message!("max_accpted_htlcs > 483"); return Err(ChannelError::Close("max_accpted_htlcs > 483"));
} }
// TODO: Optional additional constraints mentioned in the spec // TODO: Optional additional constraints mentioned in the spec

View file

@ -1525,7 +1525,8 @@ impl ChannelManager {
//TODO: see issue #153, need a consistent behavior on obnoxious behavior from random node //TODO: see issue #153, need a consistent behavior on obnoxious behavior from random node
return Err(MsgHandleErrInternal::send_err_msg_no_close("Got a message for a channel from the wrong node!", msg.temporary_channel_id)); return Err(MsgHandleErrInternal::send_err_msg_no_close("Got a message for a channel from the wrong node!", msg.temporary_channel_id));
} }
chan.accept_channel(&msg).map_err(|e| MsgHandleErrInternal::from_maybe_close(e))?; chan.accept_channel(&msg)
.map_err(|e| MsgHandleErrInternal::from_chan_maybe_close(e, msg.temporary_channel_id))?;
(chan.get_value_satoshis(), chan.get_funding_redeemscript().to_v0_p2wsh(), chan.get_user_id()) (chan.get_value_satoshis(), chan.get_funding_redeemscript().to_v0_p2wsh(), chan.get_user_id())
}, },
//TODO: same as above //TODO: same as above