mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-25 15:20:24 +01:00
Use new ChannelError type in accept_channel
This commit is contained in:
parent
aa2021dff5
commit
625e2b3532
2 changed files with 15 additions and 19 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue