2016-10-27 04:41:27 +03:00
|
|
|
package lnwire
|
|
|
|
|
|
|
|
import (
|
2016-10-28 05:19:16 +03:00
|
|
|
"fmt"
|
2016-10-27 04:41:27 +03:00
|
|
|
"net"
|
|
|
|
|
|
|
|
"github.com/roasbeef/btcd/btcec"
|
2016-10-28 05:19:16 +03:00
|
|
|
"github.com/roasbeef/btcd/wire"
|
2016-10-27 04:41:27 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
// 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
|
2016-10-28 05:19:16 +03:00
|
|
|
|
|
|
|
// ChainNet is the Bitcoin network this node is associated with.
|
|
|
|
// TODO(roasbeef): make a slice in the future for multi-chain
|
|
|
|
ChainNet wire.BitcoinNet
|
|
|
|
}
|
|
|
|
|
2016-11-08 05:18:04 +03:00
|
|
|
// A compile time assertion to ensure that NetAddress meets the net.Addr
|
|
|
|
// interface.
|
|
|
|
var _ net.Addr = (*NetAddress)(nil)
|
|
|
|
|
2016-10-28 05:19:16 +03:00
|
|
|
// String returns a human readable string describing the target NetAddress. The
|
|
|
|
// current string format is: <pubkey>@host.
|
2016-11-08 05:18:04 +03:00
|
|
|
//
|
|
|
|
// This part of the net.Addr interface.
|
2016-10-28 05:19:16 +03:00
|
|
|
func (n *NetAddress) String() string {
|
|
|
|
// TODO(roasbeef): use base58?
|
|
|
|
pubkey := n.IdentityKey.SerializeCompressed()
|
|
|
|
|
|
|
|
return fmt.Sprintf("%x@%v", pubkey, n.Address)
|
2016-10-27 04:41:27 +03:00
|
|
|
}
|
2016-11-08 05:18:04 +03:00
|
|
|
|
|
|
|
// 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()
|
|
|
|
}
|