Documentation ¶
Overview ¶
Package discover implements the Node Discovery Protocol.
The Node Discovery protocol provides a way to find RLPx nodes that can be connected to. It uses a Kademlia-like protocol to maintain a distributed database of the IDs and endpoints of all listening nodes.
Index ¶
- Constants
- func UseLogger(logger l.Logger)
- type Config
- type ReadPacket
- type Table
- type UDPConn
- type UDPv4
- func (t *UDPv4) Close()
- func (t *UDPv4) LookupPubkey(key *ecdsa.PublicKey) []*qnode.Node
- func (t *UDPv4) Ping(n *qnode.Node) error
- func (t *UDPv4) RandomNodes() qnode.Iterator
- func (t *UDPv4) RequestQNR(n *qnode.Node) (*qnode.Node, error)
- func (t *UDPv4) Resolve(n *qnode.Node) *qnode.Node
- func (t *UDPv4) Self() *qnode.Node
- type UDPv5
- func (t *UDPv5) AllNodes() []*qnode.Node
- func (t *UDPv5) Close()
- func (t *UDPv5) LocalNode() *qnode.LocalNode
- func (t *UDPv5) Lookup(target qnode.ID) []*qnode.Node
- func (t *UDPv5) Ping(n *qnode.Node) error
- func (t *UDPv5) RandomNodes() qnode.Iterator
- func (t *UDPv5) RequestQNR(n *qnode.Node) (*qnode.Node, error)
- func (t *UDPv5) Resolve(n *qnode.Node) *qnode.Node
- func (t *UDPv5) Self() *qnode.Node
Constants ¶
const ( MinTableNodes = 5 PollingPeriod = 6 * time.Second )
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Config ¶
type Config struct { // These settings are required and configure the UDP listener: PrivateKey *ecdsa.PrivateKey // These settings are optional: NetRestrict *netutil.Netlist // network whitelist Bootnodes []*qnode.Node // list of bootstrap nodes Unhandled chan<- ReadPacket // unhandled packets are sent on this channel ValidSchemes qnr.IdentityScheme // allowed identity schemes Clock mclock.Clock }
Config holds settings for the discovery listener.
type ReadPacket ¶
ReadPacket is a packet that couldn't be handled. Those packets are sent to the unhandled channel if configured.
type Table ¶
type Table struct {
// contains filtered or unexported fields
}
Table is the 'node table', a Kademlia-like index of neighbor nodes. The table keeps itself up-to-date by verifying the liveness of neighbors and requesting their node records when announcements of a new record version are received.
type UDPConn ¶
type UDPConn interface { ReadFromUDP(b []byte) (n int, addr *net.UDPAddr, err error) WriteToUDP(b []byte, addr *net.UDPAddr) (n int, err error) Close() error LocalAddr() net.Addr }
UDPConn is a network connection on which discovery can operate.
type UDPv4 ¶
type UDPv4 struct {
// contains filtered or unexported fields
}
UDPv4 implements the v4 wire protocol.
func (*UDPv4) Close ¶
func (t *UDPv4) Close()
Close shuts down the socket and aborts any running queries.
func (*UDPv4) LookupPubkey ¶
LookupPubkey finds the closest nodes to the given public key.
func (*UDPv4) RandomNodes ¶
RandomNodes is an iterator yielding nodes from a random walk of the DHT.
func (*UDPv4) RequestQNR ¶
RequestQNR sends qnrRequest to the given node and waits for a response.
type UDPv5 ¶
type UDPv5 struct {
// contains filtered or unexported fields
}
UDPv5 is the implementation of protocol version 5.
func (*UDPv5) Lookup ¶
Lookup performs a recursive lookup for the given target. It returns the closest nodes to target.
func (*UDPv5) RandomNodes ¶
func (*UDPv5) RequestQNR ¶
requestQNR requests n's record.