Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Standardize trait derives in network message and graph objects #803

Merged
merged 4 commits into from
Feb 22, 2021
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 46 additions & 48 deletions lightning/src/ln/msgs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,16 +66,14 @@ pub enum DecodeError {
}

/// An init message to be sent or received from a peer
#[derive(Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct Init {
#[cfg(not(feature = "fuzztarget"))]
pub(crate) features: InitFeatures,
#[cfg(feature = "fuzztarget")]
/// The relevant features which the sender supports
pub features: InitFeatures,
Comment on lines -71 to 72
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I take it this was necessary for the bindings?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm honestly not sure why it was here, I think it's just left over from when we had all the message guts hidden instead of exposed. Features is a well-exposed type now, though.

}

/// An error message to be sent or received from a peer
#[derive(Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct ErrorMessage {
/// The channel ID involved in the error
pub channel_id: [u8; 32],
Expand All @@ -87,7 +85,7 @@ pub struct ErrorMessage {
}

/// A ping message to be sent or received from a peer
#[derive(Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct Ping {
/// The desired response length
pub ponglen: u16,
Expand All @@ -97,15 +95,15 @@ pub struct Ping {
}

/// A pong message to be sent or received from a peer
#[derive(Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct Pong {
/// The pong packet size.
/// This field is not sent on the wire. byteslen zeros are sent.
pub byteslen: u16,
}

/// An open_channel message to be sent or received from a peer
#[derive(Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct OpenChannel {
/// The genesis hash of the blockchain where the channel is to be opened
pub chain_hash: BlockHash,
Expand Down Expand Up @@ -148,7 +146,7 @@ pub struct OpenChannel {
}

/// An accept_channel message to be sent or received from a peer
#[derive(Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct AcceptChannel {
/// A temporary channel ID, until the funding outpoint is announced
pub temporary_channel_id: [u8; 32],
Expand Down Expand Up @@ -183,7 +181,7 @@ pub struct AcceptChannel {
}

/// A funding_created message to be sent or received from a peer
#[derive(Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct FundingCreated {
/// A temporary channel ID, until the funding is established
pub temporary_channel_id: [u8; 32],
Expand All @@ -196,7 +194,7 @@ pub struct FundingCreated {
}

/// A funding_signed message to be sent or received from a peer
#[derive(Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct FundingSigned {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -205,7 +203,7 @@ pub struct FundingSigned {
}

/// A funding_locked message to be sent or received from a peer
#[derive(Clone, PartialEq)]
#[derive(Clone, Debug, PartialEq)]
pub struct FundingLocked {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -214,7 +212,7 @@ pub struct FundingLocked {
}

/// A shutdown message to be sent or received from a peer
#[derive(Clone, PartialEq)]
#[derive(Clone, Debug, PartialEq)]
pub struct Shutdown {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -224,7 +222,7 @@ pub struct Shutdown {
}

/// A closing_signed message to be sent or received from a peer
#[derive(Clone, PartialEq)]
#[derive(Clone, Debug, PartialEq)]
pub struct ClosingSigned {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -235,7 +233,7 @@ pub struct ClosingSigned {
}

/// An update_add_htlc message to be sent or received from a peer
#[derive(Clone, PartialEq)]
#[derive(Clone, Debug, PartialEq)]
pub struct UpdateAddHTLC {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -251,7 +249,7 @@ pub struct UpdateAddHTLC {
}

/// An update_fulfill_htlc message to be sent or received from a peer
#[derive(Clone, PartialEq)]
#[derive(Clone, Debug, PartialEq)]
pub struct UpdateFulfillHTLC {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -262,7 +260,7 @@ pub struct UpdateFulfillHTLC {
}

/// An update_fail_htlc message to be sent or received from a peer
#[derive(Clone, PartialEq)]
#[derive(Clone, Debug, PartialEq)]
pub struct UpdateFailHTLC {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -272,7 +270,7 @@ pub struct UpdateFailHTLC {
}

/// An update_fail_malformed_htlc message to be sent or received from a peer
#[derive(Clone, PartialEq)]
#[derive(Clone, Debug, PartialEq)]
pub struct UpdateFailMalformedHTLC {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -284,7 +282,7 @@ pub struct UpdateFailMalformedHTLC {
}

/// A commitment_signed message to be sent or received from a peer
#[derive(Clone, PartialEq)]
#[derive(Clone, Debug, PartialEq)]
pub struct CommitmentSigned {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -295,7 +293,7 @@ pub struct CommitmentSigned {
}

/// A revoke_and_ack message to be sent or received from a peer
#[derive(Clone, PartialEq)]
#[derive(Clone, Debug, PartialEq)]
pub struct RevokeAndACK {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -306,15 +304,15 @@ pub struct RevokeAndACK {
}

/// An update_fee message to be sent or received from a peer
#[derive(PartialEq, Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct UpdateFee {
/// The channel ID
pub channel_id: [u8; 32],
/// Fee rate per 1000-weight of the transaction
pub feerate_per_kw: u32,
}

#[derive(PartialEq, Clone)]
#[derive(Clone, Debug, PartialEq)]
/// Proof that the sender knows the per-commitment secret of the previous commitment transaction.
/// This is used to convince the recipient that the channel is at a certain commitment
/// number even if they lost that data due to a local failure. Of course, the peer may lie
Expand All @@ -328,7 +326,7 @@ pub struct DataLossProtect {
}

/// A channel_reestablish message to be sent or received from a peer
#[derive(PartialEq, Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct ChannelReestablish {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -341,7 +339,7 @@ pub struct ChannelReestablish {
}

/// An announcement_signatures message to be sent or received from a peer
#[derive(PartialEq, Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct AnnouncementSignatures {
/// The channel ID
pub channel_id: [u8; 32],
Expand All @@ -354,7 +352,7 @@ pub struct AnnouncementSignatures {
}

/// An address which can be used to connect to a remote peer
#[derive(Clone, PartialEq, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub enum NetAddress {
/// An IPv4 address/port on which the peer is listening.
IPv4 {
Expand Down Expand Up @@ -472,7 +470,7 @@ impl Readable for Result<NetAddress, u8> {
}

/// The unsigned part of a node_announcement
#[derive(PartialEq, Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct UnsignedNodeAnnouncement {
/// The advertised features
pub features: NodeFeatures,
Expand All @@ -491,7 +489,7 @@ pub struct UnsignedNodeAnnouncement {
pub(crate) excess_address_data: Vec<u8>,
pub(crate) excess_data: Vec<u8>,
}
#[derive(PartialEq, Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
/// A node_announcement message to be sent or received from a peer
pub struct NodeAnnouncement {
/// The signature by the node key
Expand All @@ -501,7 +499,7 @@ pub struct NodeAnnouncement {
}

/// The unsigned part of a channel_announcement
#[derive(PartialEq, Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct UnsignedChannelAnnouncement {
/// The advertised channel features
pub features: ChannelFeatures,
Expand All @@ -520,7 +518,7 @@ pub struct UnsignedChannelAnnouncement {
pub(crate) excess_data: Vec<u8>,
}
/// A channel_announcement message to be sent or received from a peer
#[derive(PartialEq, Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct ChannelAnnouncement {
/// Authentication of the announcement by the first public node
pub node_signature_1: Signature,
Expand All @@ -535,7 +533,7 @@ pub struct ChannelAnnouncement {
}

/// The unsigned part of a channel_update
#[derive(PartialEq, Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct UnsignedChannelUpdate {
/// The genesis hash of the blockchain where the channel is to be opened
pub chain_hash: BlockHash,
Expand All @@ -558,7 +556,7 @@ pub struct UnsignedChannelUpdate {
pub(crate) excess_data: Vec<u8>,
}
/// A channel_update message to be sent or received from a peer
#[derive(PartialEq, Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct ChannelUpdate {
/// A signature of the channel update
pub signature: Signature,
Expand All @@ -570,7 +568,7 @@ pub struct ChannelUpdate {
/// UTXOs in a range of blocks. The recipient of a query makes a best
/// effort to reply to the query using one or more reply_channel_range
/// messages.
#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct QueryChannelRange {
/// The genesis hash of the blockchain being queried
pub chain_hash: BlockHash,
Expand All @@ -587,7 +585,7 @@ pub struct QueryChannelRange {
/// not be a perfect view of the network. The short_channel_ids in the
/// reply are encoded. We only support encoding_type=0 uncompressed
/// serialization and do not support encoding_type=1 zlib serialization.
#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct ReplyChannelRange {
/// The genesis hash of the blockchain being queried
pub chain_hash: BlockHash,
Expand All @@ -609,7 +607,7 @@ pub struct ReplyChannelRange {
/// reply_short_channel_ids_end message. The short_channel_ids sent in
/// this query are encoded. We only support encoding_type=0 uncompressed
/// serialization and do not support encoding_type=1 zlib serialization.
#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct QueryShortChannelIds {
/// The genesis hash of the blockchain being queried
pub chain_hash: BlockHash,
Expand All @@ -621,7 +619,7 @@ pub struct QueryShortChannelIds {
/// query_short_channel_ids 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.
#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct ReplyShortChannelIdsEnd {
/// The genesis hash of the blockchain that was queried
pub chain_hash: BlockHash,
Expand All @@ -633,7 +631,7 @@ pub struct ReplyShortChannelIdsEnd {
/// A gossip_timestamp_filter message is used by a node to request
/// gossip relay for messages in the requested time range when the
/// gossip_queries feature has been negotiated.
#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub struct GossipTimestampFilter {
/// The genesis hash of the blockchain for channel and node information
pub chain_hash: BlockHash,
Expand All @@ -650,7 +648,7 @@ enum EncodingType {
}

/// Used to put an error message in a LightningError
#[derive(Clone)]
#[derive(Clone, Debug)]
pub enum ErrorAction {
/// The peer took some action which made us think they were useless. Disconnect them.
DisconnectPeer {
Expand All @@ -667,7 +665,7 @@ pub enum ErrorAction {
}

/// An Err type for failure to process messages.
#[derive(Clone)]
#[derive(Clone, Debug)]
pub struct LightningError {
/// A human-readable message describing the error
pub err: String,
Expand All @@ -677,7 +675,7 @@ pub struct LightningError {

/// Struct used to return values from revoke_and_ack messages, containing a bunch of commitment
/// transaction updates if they were pending.
#[derive(PartialEq, Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct CommitmentUpdate {
/// update_add_htlc messages which should be sent
pub update_add_htlcs: Vec<UpdateAddHTLC>,
Expand All @@ -696,7 +694,7 @@ pub struct CommitmentUpdate {
/// The information we received from a peer along the route of a payment we originated. This is
/// returned by ChannelMessageHandler::handle_update_fail_htlc to be passed into
/// RoutingMessageHandler::handle_htlc_fail_channel_update to update our network map.
#[derive(Clone)]
#[derive(Clone, Debug, PartialEq)]
pub enum HTLCFailChannelUpdate {
/// We received an error which included a full ChannelUpdate message.
ChannelUpdateMessage {
Expand Down Expand Up @@ -727,7 +725,7 @@ pub enum HTLCFailChannelUpdate {
/// OptionalFeild simply gets Present if there are enough bytes to read into it), we have a
/// separate enum type for them.
/// (C-not exported) due to a free generic in T
#[derive(Clone, PartialEq, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub enum OptionalField<T> {
/// Optional field is included in message
Present(T),
Expand Down Expand Up @@ -912,7 +910,13 @@ impl PartialEq for OnionPacket {
}
}

#[derive(Clone, PartialEq)]
impl fmt::Debug for OnionPacket {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_fmt(format_args!("OnionPacket version {} with hmac {:?}", self.version, &self.hmac[..]))
}
}

#[derive(Clone, Debug, PartialEq)]
pub(crate) struct OnionErrorPacket {
// This really should be a constant size slice, but the spec lets these things be up to 128KB?
// (TODO) We limit it in decode to much lower...
Expand All @@ -932,12 +936,6 @@ impl fmt::Display for DecodeError {
}
}

impl fmt::Debug for LightningError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(self.err.as_str())
}
}

impl From<::std::io::Error> for DecodeError {
fn from(e: ::std::io::Error) -> Self {
if e.kind() == ::std::io::ErrorKind::UnexpectedEof {
Expand Down