Version: v0.0.0-...-9fa4df0 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Dec 4, 2018 License: GPL-3.0 Imports: 22 Imported by: 0



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.



This section is empty.


This section is empty.


This section is empty.


type Config

type Config struct {
	// These settings are required and configure the UDP listener:
	PrivateKey *ecdsa.PrivateKey

	// These settings are optional:
	AnnounceAddr *net.UDPAddr      // local address announced in the DHT
	NodeDBPath   string            // if set, the node database is stored at this filesystem location
	NetRestrict  *netutil.Netlist  // network whitelist
	Bootnodes    []*enode.Node     // list of bootstrap nodes
	Unhandled    chan<- ReadPacket // unhandled packets are sent on this channel

Config holds Table-related settings.

type ReadPacket

type ReadPacket struct {
	Data []byte
	Addr *net.UDPAddr

ReadPacket is sent to the unhandled channel when it could not be processed

type Table

type Table struct {
	// contains filtered or unexported fields

func ListenUDP

func ListenUDP(c conn, cfg Config) (*Table, error)

ListenUDP returns a new table that listens for UDP packets on laddr.

func (*Table) Close

func (tab *Table) Close()

Close terminates the network listener and flushes the node database.

func (*Table) LookupRandom

func (tab *Table) LookupRandom() []*enode.Node

LookupRandom finds random nodes in the network.

func (*Table) ReadRandomNodes

func (tab *Table) ReadRandomNodes(buf []*enode.Node) (n int)

ReadRandomNodes fills the given slice with random nodes from the table. The results are guaranteed to be unique for a single invocation, no node will appear twice.

func (*Table) Resolve

func (tab *Table) Resolve(n *enode.Node) *enode.Node

Resolve searches for a specific node with the given ID. It returns nil if the node could not be found.

func (*Table) Self

func (tab *Table) Self() *enode.Node

Self returns the local node.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
t or T : Toggle theme light dark auto
y or Y : Canonical URL