mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-25 15:20:24 +01:00
Refactor handle_open_channel to wrapper error handling function
Original version is from Antoine Riard <ariard@student.42.fr>, the error type and some return type fixes are from Matt Corallo <git@bluematt.me>
This commit is contained in:
parent
c578e4a346
commit
4afbc12568
1 changed files with 36 additions and 32 deletions
|
@ -1383,6 +1383,41 @@ impl ChannelManager {
|
||||||
pub fn test_restore_channel_monitor(&self) {
|
pub fn test_restore_channel_monitor(&self) {
|
||||||
unimplemented!();
|
unimplemented!();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn internal_open_channel(&self, their_node_id: &PublicKey, msg: &msgs::OpenChannel) -> Result<msgs::AcceptChannel, MsgHandleErrInternal> {
|
||||||
|
if msg.chain_hash != self.genesis_hash {
|
||||||
|
return Err(MsgHandleErrInternal::send_err_msg_no_close("Unknown genesis block hash", msg.temporary_channel_id.clone()));
|
||||||
|
}
|
||||||
|
let mut channel_state = self.channel_state.lock().unwrap();
|
||||||
|
if channel_state.by_id.contains_key(&msg.temporary_channel_id) {
|
||||||
|
return Err(MsgHandleErrInternal::send_err_msg_no_close("temporary_channel_id collision!", msg.temporary_channel_id.clone()));
|
||||||
|
}
|
||||||
|
|
||||||
|
let chan_keys = if cfg!(feature = "fuzztarget") {
|
||||||
|
ChannelKeys {
|
||||||
|
funding_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]).unwrap(),
|
||||||
|
revocation_base_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0]).unwrap(),
|
||||||
|
payment_base_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0]).unwrap(),
|
||||||
|
delayed_payment_base_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0]).unwrap(),
|
||||||
|
htlc_base_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0]).unwrap(),
|
||||||
|
channel_close_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0]).unwrap(),
|
||||||
|
channel_monitor_claim_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0]).unwrap(),
|
||||||
|
commitment_seed: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let mut key_seed = [0u8; 32];
|
||||||
|
rng::fill_bytes(&mut key_seed);
|
||||||
|
match ChannelKeys::new_from_seed(&key_seed) {
|
||||||
|
Ok(key) => key,
|
||||||
|
Err(_) => panic!("RNG is busted!")
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let channel = Channel::new_from_req(&*self.fee_estimator, chan_keys, their_node_id.clone(), msg, 0, false, self.announce_channels_publicly, Arc::clone(&self.logger)).map_err(|e| MsgHandleErrInternal::from_no_close(e))?;
|
||||||
|
let accept_msg = channel.get_accept_channel().map_err(|e| MsgHandleErrInternal::from_no_close(e))?;
|
||||||
|
channel_state.by_id.insert(channel.channel_id(), channel);
|
||||||
|
Ok(accept_msg)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl events::EventsProvider for ChannelManager {
|
impl events::EventsProvider for ChannelManager {
|
||||||
|
@ -1544,38 +1579,7 @@ macro_rules! handle_error {
|
||||||
impl ChannelMessageHandler for ChannelManager {
|
impl ChannelMessageHandler for ChannelManager {
|
||||||
//TODO: Handle errors and close channel (or so)
|
//TODO: Handle errors and close channel (or so)
|
||||||
fn handle_open_channel(&self, their_node_id: &PublicKey, msg: &msgs::OpenChannel) -> Result<msgs::AcceptChannel, HandleError> {
|
fn handle_open_channel(&self, their_node_id: &PublicKey, msg: &msgs::OpenChannel) -> Result<msgs::AcceptChannel, HandleError> {
|
||||||
if msg.chain_hash != self.genesis_hash {
|
handle_error!(self, self.internal_open_channel(their_node_id, msg), their_node_id)
|
||||||
return Err(HandleError{err: "Unknown genesis block hash", action: None});
|
|
||||||
}
|
|
||||||
let mut channel_state = self.channel_state.lock().unwrap();
|
|
||||||
if channel_state.by_id.contains_key(&msg.temporary_channel_id) {
|
|
||||||
return Err(HandleError{err: "temporary_channel_id collision!", action: None});
|
|
||||||
}
|
|
||||||
|
|
||||||
let chan_keys = if cfg!(feature = "fuzztarget") {
|
|
||||||
ChannelKeys {
|
|
||||||
funding_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]).unwrap(),
|
|
||||||
revocation_base_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0]).unwrap(),
|
|
||||||
payment_base_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0]).unwrap(),
|
|
||||||
delayed_payment_base_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0]).unwrap(),
|
|
||||||
htlc_base_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0]).unwrap(),
|
|
||||||
channel_close_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0]).unwrap(),
|
|
||||||
channel_monitor_claim_key: SecretKey::from_slice(&self.secp_ctx, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0]).unwrap(),
|
|
||||||
commitment_seed: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let mut key_seed = [0u8; 32];
|
|
||||||
rng::fill_bytes(&mut key_seed);
|
|
||||||
match ChannelKeys::new_from_seed(&key_seed) {
|
|
||||||
Ok(key) => key,
|
|
||||||
Err(_) => panic!("RNG is busted!")
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let channel = Channel::new_from_req(&*self.fee_estimator, chan_keys, their_node_id.clone(), msg, 0, false, self.announce_channels_publicly, Arc::clone(&self.logger))?;
|
|
||||||
let accept_msg = channel.get_accept_channel()?;
|
|
||||||
channel_state.by_id.insert(channel.channel_id(), channel);
|
|
||||||
Ok(accept_msg)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_accept_channel(&self, their_node_id: &PublicKey, msg: &msgs::AcceptChannel) -> Result<(), HandleError> {
|
fn handle_accept_channel(&self, their_node_id: &PublicKey, msg: &msgs::AcceptChannel) -> Result<(), HandleError> {
|
||||||
|
|
Loading…
Add table
Reference in a new issue