Documentation

Overview

Package dnsdisc implements node discovery via DNS (EIP-1459).

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ParseURL

func ParseURL(url string) (domain string, pubkey *ecdsa.PublicKey, err error)

ParseURL parses an enrtree:// URL and returns its components.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client discovers nodes by querying DNS servers.

func NewClient

func NewClient(cfg Config) *Client

NewClient creates a client.

func (*Client) NewIterator

func (c *Client) NewIterator(urls ...string) (enode.Iterator, error)

NewIterator creates an iterator that visits all nodes at the given tree URLs.

func (*Client) SyncTree

func (c *Client) SyncTree(url string) (*Tree, error)

SyncTree downloads the entire node tree at the given URL.

type Config

type Config struct {
	Timeout         time.Duration      // timeout used for DNS lookups (default 5s)
	RecheckInterval time.Duration      // time between tree root update checks (default 30min)
	CacheLimit      int                // maximum number of cached records (default 1000)
	RateLimit       float64            // maximum DNS requests / second (default 3)
	ValidSchemes    enr.IdentityScheme // acceptable ENR identity schemes (default enode.ValidSchemes)
	Resolver        Resolver           // the DNS resolver to use (defaults to system DNS)
	Logger          log.Logger         // destination of client log messages (defaults to root logger)
}

Config holds configuration options for the client.

type Resolver

type Resolver interface {
	LookupTXT(ctx context.Context, domain string) ([]string, error)
}

Resolver is a DNS resolver that can query TXT records.

type Tree

type Tree struct {
	// contains filtered or unexported fields
}

Tree is a merkle tree of node records.

func MakeTree

func MakeTree(seq uint, nodes []*enode.Node, links []string) (*Tree, error)

MakeTree creates a tree containing the given nodes and links.

func (t *Tree) Links() []string

Links returns all links contained in the tree.

func (*Tree) Nodes

func (t *Tree) Nodes() []*enode.Node

Nodes returns all nodes contained in the tree.

func (*Tree) Seq

func (t *Tree) Seq() uint

Seq returns the sequence number of the tree.

func (*Tree) SetSignature

func (t *Tree) SetSignature(pubkey *ecdsa.PublicKey, signature string) error

SetSignature verifies the given signature and assigns it as the tree's current signature if valid.

func (*Tree) Sign

func (t *Tree) Sign(key *ecdsa.PrivateKey, domain string) (url string, err error)

Sign signs the tree with the given private key and sets the sequence number.

func (*Tree) Signature

func (t *Tree) Signature() string

Signature returns the signature of the tree.

func (*Tree) ToTXT

func (t *Tree) ToTXT(domain string) map[string]string

ToTXT returns all DNS TXT records required for the tree.