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  }