1855b95558
This commit modifies lnwire.NetAddress by adding a .Network() method. With this added method the struct now implements the net.Addr interface meaning that it can now be transparently passed into any context where a net.Addr is requested. This change paves the way to integration of btcd’s new connmgr into the daemon to handle establishing persistent connections to all channel counter parties.
62 lines
1.9 KiB
Go
62 lines
1.9 KiB
Go
package lnwire
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
|
|
"github.com/roasbeef/btcd/btcec"
|
|
"github.com/roasbeef/btcd/wire"
|
|
)
|
|
|
|
// ServiceFlag identifies the services supported by a particular Lightning
|
|
// Network peer.
|
|
type ServiceFlag uint64
|
|
|
|
// NetAddress represents information pertaining to the identity and network
|
|
// reachability of a peer. Information stored includes the node's identity
|
|
// public key for establishing a confidential+authenticated connection, the
|
|
// service bits it supports, and a TCP address the node is reachable at.
|
|
//
|
|
// TODO(roasbeef): merge with LinkNode in some fashion
|
|
type NetAddress struct {
|
|
// IdentityKey is the long-term static public key for a node. This node is
|
|
// used throughout the network as a node's identity key. It is used to
|
|
// authenticate any data sent to the network on behalf of the node, and
|
|
// additionally to establish a confidential+authenticated connection with
|
|
// the node.
|
|
IdentityKey *btcec.PublicKey
|
|
|
|
// Services defines the set of services supported by the node reachable at
|
|
// the address and identity key defined in the struct.
|
|
Services ServiceFlag
|
|
|
|
// Address is is the IP address and port of the node.
|
|
Address *net.TCPAddr
|
|
|
|
// ChainNet is the Bitcoin network this node is associated with.
|
|
// TODO(roasbeef): make a slice in the future for multi-chain
|
|
ChainNet wire.BitcoinNet
|
|
}
|
|
|
|
// A compile time assertion to ensure that NetAddress meets the net.Addr
|
|
// interface.
|
|
var _ net.Addr = (*NetAddress)(nil)
|
|
|
|
// String returns a human readable string describing the target NetAddress. The
|
|
// current string format is: <pubkey>@host.
|
|
//
|
|
// This part of the net.Addr interface.
|
|
func (n *NetAddress) String() string {
|
|
// TODO(roasbeef): use base58?
|
|
pubkey := n.IdentityKey.SerializeCompressed()
|
|
|
|
return fmt.Sprintf("%x@%v", pubkey, n.Address)
|
|
}
|
|
|
|
// Network returns the name of the network this address is binded to.
|
|
//
|
|
// This part of the net.Addr interface.
|
|
func (n *NetAddress) Network() string {
|
|
return n.Address.Network()
|
|
}
|