BOLT 7 - p2p node and channel discovery
2022-03-17 ยท 2 min read
Source: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#htlc-fees
Overview #
- Node Discovery
- Nodes advertise their ID, host {oneof: IPv4/6, TORv3}, port
- Other nodes must be able to open connections with you
- Channel Discovery
- Nodes advertise their currently open channels so others can route through them
- Gossip Messages
node_announcement
: nodes exchange these for node discoverychannel_announcement
: nodes exchange these to announce new channels between some nodes. Should only ever be one per channel.channel_update
: Advertise updates to a channel. Dissemninated. At least two expected per channel.
short_channel_id: u64
#
- A compact descriptor pointing to a channel funding tx.
short_channel_id: {
block_height: u24,
block_tx_idx: u24,
tx_output_idx: u16,
}
node_announcement
Message #
node_announcement: {
signature,
features_len: u16,
features: bytes,
timestamp: u32,
node_id,
rgb_color: (u8, u8, u8),
alias: [u8; 32],
addrlen: u16, // serialized length of addresses
addresses: Vec<AddressDescriptor>,
}
enum AddressDescriptor {
Ipv4(addr, port),
Ipv6(addr, port),
Torv3(onion_addr, port)
}
channel_announcement
Message #
nodes must prove that there is actually a channel btw node 1 and node 2
- prove a funding tx that pays to btc_key_1 and btc_key_2
- verify via short_channel_id -> chain lookup
- prove node 1 owns btc_key_1
- verify btc_sig_1
- prove node 2 owns btc_key_2
- verify btc_sig_2
- prove both node 1 and node 2 agree to this announcement message
- verify node_sig_1 and node_sig_2 (signing over the rest of the announcement)
channel_announcement: {
node_sig_1: sig,
node_sig_2: sig,
btc_sig_1: sig,
btc_sig_2: sig,
features_len: u16,
features: bytes,
chain_hash,
short_channel_id,
node_id_1: pubkey,
node_id_2: pubkey,
btc_key_1: pubkey,
btc_key_2: pubkey,
}
channel_update
Message #
After announcement, each side independently announces their fees, supported features, etc
channel_update: {
signature,
chain_hash,
short_channel_id,
timestamp: u32,
message_flags: bytes,
channel_flags: bytes,
cltv_expiry_delta: u16,
htlc_min_msat: u64,
fee_base_msat: u32,
fee_proportional_mills: u32,
htlc_max_msat: u64,
}