X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Fmsgs.rs;h=c971df906c281fc96fd852c483def81367618ee2;hb=dab08c1135098d02b3d0e808fd474f664888f916;hp=278352845ac7b81cba7d970b013df9c464870457;hpb=7eac8977467c06fb5746cb2ec0789ce1f37e02fa;p=rust-lightning diff --git a/lightning/src/ln/msgs.rs b/lightning/src/ln/msgs.rs index 27835284..c971df90 100644 --- a/lightning/src/ln/msgs.rs +++ b/lightning/src/ln/msgs.rs @@ -46,6 +46,8 @@ use crate::util::ser::{LengthReadable, Readable, ReadableArgs, Writeable, Writer use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret}; +use crate::routing::gossip::NodeId; + /// 21 million * 10^8 * 1000 pub(crate) const MAX_VALUE_MSAT: u64 = 21_000_000_0000_0000_000; @@ -632,6 +634,25 @@ impl Readable for NetAddress { } } +/// Represents the set of gossip messages that require a signature from a node's identity key. +pub enum UnsignedGossipMessage<'a> { + /// An unsigned channel announcement. + ChannelAnnouncement(&'a UnsignedChannelAnnouncement), + /// An unsigned channel update. + ChannelUpdate(&'a UnsignedChannelUpdate), + /// An unsigned node announcement. + NodeAnnouncement(&'a UnsignedNodeAnnouncement) +} + +impl<'a> Writeable for UnsignedGossipMessage<'a> { + fn write(&self, writer: &mut W) -> Result<(), io::Error> { + match self { + UnsignedGossipMessage::ChannelAnnouncement(ref msg) => msg.write(writer), + UnsignedGossipMessage::ChannelUpdate(ref msg) => msg.write(writer), + UnsignedGossipMessage::NodeAnnouncement(ref msg) => msg.write(writer), + } + } +} /// The unsigned part of a [`node_announcement`] message. /// @@ -644,7 +665,7 @@ pub struct UnsignedNodeAnnouncement { pub timestamp: u32, /// The `node_id` this announcement originated from (don't rebroadcast the `node_announcement` back /// to this node). - pub node_id: PublicKey, + pub node_id: NodeId, /// An RGB color for UI purposes pub rgb: [u8; 3], /// An alias, for UI purposes. @@ -679,13 +700,13 @@ pub struct UnsignedChannelAnnouncement { /// The short channel ID pub short_channel_id: u64, /// One of the two `node_id`s which are endpoints of this channel - pub node_id_1: PublicKey, + pub node_id_1: NodeId, /// The other of the two `node_id`s which are endpoints of this channel - pub node_id_2: PublicKey, + pub node_id_2: NodeId, /// The funding key for the first node - pub bitcoin_key_1: PublicKey, + pub bitcoin_key_1: NodeId, /// The funding key for the second node - pub bitcoin_key_2: PublicKey, + pub bitcoin_key_2: NodeId, pub(crate) excess_data: Vec, } /// A [`channel_announcement`] message to be sent to or received from a peer. @@ -814,7 +835,7 @@ pub struct QueryShortChannelIds { pub short_channel_ids: Vec, } -/// A [`reply_short_channel_ids_end message`] is sent as a reply to a +/// A [`reply_short_channel_ids_end`] message is sent as a reply to a /// message. The query recipient makes a best /// effort to respond based on their local network view which may not be /// a perfect view of the network. @@ -934,9 +955,9 @@ pub enum OptionalField { pub trait ChannelMessageHandler : MessageSendEventsProvider { // Channel init: /// Handle an incoming `open_channel` message from the given peer. - fn handle_open_channel(&self, their_node_id: &PublicKey, their_features: InitFeatures, msg: &OpenChannel); + fn handle_open_channel(&self, their_node_id: &PublicKey, msg: &OpenChannel); /// Handle an incoming `accept_channel` message from the given peer. - fn handle_accept_channel(&self, their_node_id: &PublicKey, their_features: InitFeatures, msg: &AcceptChannel); + fn handle_accept_channel(&self, their_node_id: &PublicKey, msg: &AcceptChannel); /// Handle an incoming `funding_created` message from the given peer. fn handle_funding_created(&self, their_node_id: &PublicKey, msg: &FundingCreated); /// Handle an incoming `funding_signed` message from the given peer. @@ -946,7 +967,7 @@ pub trait ChannelMessageHandler : MessageSendEventsProvider { // Channl close: /// Handle an incoming `shutdown` message from the given peer. - fn handle_shutdown(&self, their_node_id: &PublicKey, their_features: &InitFeatures, msg: &Shutdown); + fn handle_shutdown(&self, their_node_id: &PublicKey, msg: &Shutdown); /// Handle an incoming `closing_signed` message from the given peer. fn handle_closing_signed(&self, their_node_id: &PublicKey, msg: &ClosingSigned); @@ -1036,7 +1057,7 @@ pub trait RoutingMessageHandler : MessageSendEventsProvider { /// the node *after* the provided pubkey and including up to one announcement immediately /// higher (as defined by `::cmp`) than `starting_point`. /// If `None` is provided for `starting_point`, we start at the first node. - fn get_next_node_announcement(&self, starting_point: Option<&PublicKey>) -> Option; + fn get_next_node_announcement(&self, starting_point: Option<&NodeId>) -> Option; /// Called when a connection is established with a peer. This can be used to /// perform routing table synchronization using a strategy defined by the /// implementor. @@ -1824,7 +1845,7 @@ impl Readable for UnsignedNodeAnnouncement { fn read(r: &mut R) -> Result { let features: NodeFeatures = Readable::read(r)?; let timestamp: u32 = Readable::read(r)?; - let node_id: PublicKey = Readable::read(r)?; + let node_id: NodeId = Readable::read(r)?; let mut rgb = [0; 3]; r.read_exact(&mut rgb)?; let alias: [u8; 32] = Readable::read(r)?; @@ -2034,6 +2055,7 @@ mod tests { use crate::ln::features::{ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures}; use crate::ln::msgs; use crate::ln::msgs::{FinalOnionHopData, OptionalField, OnionErrorPacket, OnionHopDataFormat}; + use crate::routing::gossip::NodeId; use crate::util::ser::{Writeable, Readable, Hostname}; use bitcoin::hashes::hex::FromHex; @@ -2141,10 +2163,10 @@ mod tests { features, chain_hash: BlockHash::from_hex("6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000").unwrap(), short_channel_id: 2316138423780173, - node_id_1: pubkey_1, - node_id_2: pubkey_2, - bitcoin_key_1: pubkey_3, - bitcoin_key_2: pubkey_4, + node_id_1: NodeId::from_pubkey(&pubkey_1), + node_id_2: NodeId::from_pubkey(&pubkey_2), + bitcoin_key_1: NodeId::from_pubkey(&pubkey_3), + bitcoin_key_2: NodeId::from_pubkey(&pubkey_4), excess_data: if excess_data { vec![10, 0, 0, 20, 0, 0, 30, 0, 0, 40] } else { Vec::new() }, }; let channel_announcement = msgs::ChannelAnnouncement { @@ -2226,7 +2248,7 @@ mod tests { let unsigned_node_announcement = msgs::UnsignedNodeAnnouncement { features, timestamp: 20190119, - node_id: pubkey_1, + node_id: NodeId::from_pubkey(&pubkey_1), rgb: [32; 3], alias: [16;32], addresses,