use amplify::Slice32;
use internet2::addr::NodeId;
use secp256k1::ecdsa::Signature;
use super::{
AddressList, Alias, ChannelId, InitFeatures, NodeColor, ShortChannelId,
};
use crate::bolt::ChannelFeatures;
#[derive(Copy, Clone, PartialEq, Eq, Debug, Display)]
#[derive(LightningEncode, LightningDecode)]
#[cfg_attr(feature = "strict_encoding", derive(NetworkEncode, NetworkDecode))]
#[display(
"announcement_signature({channel_id}, {short_channel_id}, ...signatures)"
)]
pub struct AnnouncementSignatures {
pub channel_id: ChannelId,
pub short_channel_id: ShortChannelId,
pub node_signature: Signature,
pub bitcoin_signature: Signature,
}
#[derive(Clone, PartialEq, Eq, Debug, Display)]
#[derive(LightningEncode, LightningDecode)]
#[cfg_attr(feature = "strict_encoding", derive(NetworkEncode, NetworkDecode))]
#[display("channel_announcement({chain_hash}, {short_channel_id}, ...)")]
pub struct ChannelAnnouncement {
pub node_signature_1: Signature,
pub node_signature_2: Signature,
pub bitcoin_signature_1: Signature,
pub bitcoin_signature_2: Signature,
pub features: ChannelFeatures,
pub chain_hash: Slice32,
pub short_channel_id: ShortChannelId,
pub node_id_1: NodeId,
pub node_id_2: NodeId,
pub bitcoin_key_1: NodeId,
pub bitcoin_key_2: NodeId,
}
#[derive(Clone, PartialEq, Eq, Debug, Display)]
#[derive(LightningEncode, LightningDecode)]
#[cfg_attr(feature = "strict_encoding", derive(NetworkEncode, NetworkDecode))]
#[display("node_announcement({node_id}, {alias}, {addresses}, ...)")]
pub struct NodeAnnouncements {
pub signature: Signature,
pub features: InitFeatures,
pub timestamp: u32,
pub node_id: NodeId,
pub rgb_color: NodeColor,
pub alias: Alias,
pub addresses: AddressList,
}
#[derive(Copy, Clone, PartialEq, Eq, Debug, Display)]
#[derive(LightningEncode, LightningDecode)]
#[cfg_attr(feature = "strict_encoding", derive(NetworkEncode, NetworkDecode))]
#[display("channel_id({chain_hash}, {short_channel_id}, {timestamp}, ...)")]
pub struct ChannelUpdate {
pub signature: Signature,
pub chain_hash: Slice32,
pub short_channel_id: ShortChannelId,
pub timestamp: u32,
pub message_flags: u8,
pub channel_flags: u8,
pub cltv_expiry_delta: u16,
pub htlc_minimum_msat: u64,
pub fee_base_msat: u32,
pub fee_proportional_millionths: u32,
pub htlc_maximum_msat: u64,
}
#[derive(Clone, PartialEq, Eq, Hash, Debug, Display)]
#[derive(LightningEncode, LightningDecode)]
#[cfg_attr(feature = "strict_encoding", derive(NetworkEncode, NetworkDecode))]
#[display("query_short_channel_ids({chain_hash}, {short_ids:#?}, ...tlvs)")]
pub struct QueryShortChannelIds {
pub chain_hash: Slice32,
pub short_ids: Vec<ShortChannelId>,
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, Display)]
#[derive(LightningEncode, LightningDecode)]
#[cfg_attr(feature = "strict_encoding", derive(NetworkEncode, NetworkDecode))]
#[display("reply_short_channel_ids_end({chain_hash}, {full_information})")]
pub struct ReplyShortChannelIdsEnd {
pub chain_hash: Slice32,
pub full_information: u8,
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, Display)]
#[derive(LightningEncode, LightningDecode)]
#[cfg_attr(feature = "strict_encoding", derive(NetworkEncode, NetworkDecode))]
#[display(
"querry_channel_range({chain_hash}, {first_blocknum}, {number_of_blocks}, \
...tlvs)"
)]
pub struct QueryChannelRange {
pub chain_hash: Slice32,
pub first_blocknum: u32,
pub number_of_blocks: u32,
}
#[derive(Clone, PartialEq, Eq, Hash, Debug, Display)]
#[derive(LightningEncode, LightningDecode)]
#[cfg_attr(feature = "strict_encoding", derive(NetworkEncode, NetworkDecode))]
#[display(
"reply_channel_range({chain_hash}, {first_blocknum}, {number_of_blocks}, \
...)"
)]
pub struct ReplyChannelRange {
pub chain_hash: Slice32,
pub first_blocknum: u32,
pub number_of_blocks: u32,
pub full_information: u8,
pub encoded_short_ids: Vec<ShortChannelId>,
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, Display)]
#[derive(LightningEncode, LightningDecode)]
#[cfg_attr(feature = "strict_encoding", derive(NetworkEncode, NetworkDecode))]
#[display(
"gossip_time_stamp_filter({chain_hash}, {first_timestamp}, \
{timestamp_range})"
)]
pub struct GossipTimestampFilter {
pub chain_hash: Slice32,
pub first_timestamp: u32,
pub timestamp_range: u32,
}