github.com/decred/dcrlnd@v0.7.6/lnwire/netaddress.go (about) 1 package lnwire 2 3 import ( 4 "fmt" 5 "net" 6 7 "github.com/decred/dcrd/dcrec/secp256k1/v4" 8 "github.com/decred/dcrd/wire" 9 ) 10 11 // NetAddress represents information pertaining to the identity and network 12 // reachability of a peer. Information stored includes the node's identity 13 // public key for establishing a confidential+authenticated connection, the 14 // service bits it supports, and a TCP address the node is reachable at. 15 // 16 // TODO(roasbeef): merge with LinkNode in some fashion 17 type NetAddress struct { 18 // IdentityKey is the long-term static public key for a node. This node is 19 // used throughout the network as a node's identity key. It is used to 20 // authenticate any data sent to the network on behalf of the node, and 21 // additionally to establish a confidential+authenticated connection with 22 // the node. 23 IdentityKey *secp256k1.PublicKey 24 25 // Address is the IP address and port of the node. This is left 26 // general so that multiple implementations can be used. 27 Address net.Addr 28 29 // ChainNet is the network this node is associated with. 30 // TODO(roasbeef): make a slice in the future for multi-chain 31 ChainNet wire.CurrencyNet 32 } 33 34 // A compile time assertion to ensure that NetAddress meets the net.Addr 35 // interface. 36 var _ net.Addr = (*NetAddress)(nil) 37 38 // String returns a human readable string describing the target NetAddress. The 39 // current string format is: <pubkey>@host. 40 // 41 // This part of the net.Addr interface. 42 func (n *NetAddress) String() string { 43 // TODO(roasbeef): use base58? 44 pubkey := n.IdentityKey.SerializeCompressed() 45 46 return fmt.Sprintf("%x@%v", pubkey, n.Address) 47 } 48 49 // Network returns the name of the network this address is bound to. 50 // 51 // This part of the net.Addr interface. 52 func (n *NetAddress) Network() string { 53 return n.Address.Network() 54 }