p2p

package
v0.6.0 Latest Latest
Warning

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

Go to latest
Published: Jun 7, 2022 License: GPL-3.0 Imports: 41 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DecodeENR added in v0.2.0

func DecodeENR(enrStr string) (enr.Record, error)

DecodeENR returns a enr record decoded from the string. See reference github.com/ethereum/go-ethereum@v1.10.10/p2p/dnsdisc/tree.go:378.

func EncodeENR added in v0.2.0

func EncodeENR(record enr.Record) (string, error)

EncodeENR returns an encoded string format of the enr record.

func KeyPath added in v0.3.0

func KeyPath(datadir string) string

KeyPath returns the p2pkey path relative to the data dir.

func LoadPrivKey added in v0.3.0

func LoadPrivKey(dataDir string) (*ecdsa.PrivateKey, error)

LoadPrivKey returns the ecdsa k1 key saved in the directory.

func NewLocalEnode added in v0.1.1

func NewLocalEnode(config Config, key *ecdsa.PrivateKey) (*enode.LocalNode, *enode.DB, error)

NewLocalEnode returns a local enode and a peer DB or an error.

func NewPingService added in v0.2.0

func NewPingService(h host.Host, peers []peer.ID, callback func(peer.ID)) func(context.Context)

NewPingService returns a start function of a p2p ping service that pings all peers every second and collects metrics. TODO(corver): Cluster wide req/resp doesn't scale since it is O(n^2).

func NewRelayReserver added in v0.4.0

func NewRelayReserver(tcpNode host.Host, relay Peer) lifecycle.HookFunc

NewRelayReserver returns a life cycle hook function that continuously reserves a relay circuit until the context is closed.

func NewSavedPrivKey added in v0.3.0

func NewSavedPrivKey(datadir string) (*ecdsa.PrivateKey, error)

NewSavedPrivKey generates a new ecdsa k1 key and saves it to the directory.

func NewTCPNode added in v0.1.1

func NewTCPNode(cfg Config, key *ecdsa.PrivateKey, connGater ConnGater,
	udpNode *discover.UDPv5, peers, relays []Peer) (host.Host, error,
)

NewTCPNode returns a started tcp-based libp2p host.

func NewUDPBootnodes added in v0.4.0

func NewUDPBootnodes(ctx context.Context, config Config, peers []Peer,
	localEnode enode.ID,
) ([]*enode.Node, error)

NewUDPBootnodes returns the udp bootnodes from the config.

func NewUDPNode added in v0.1.1

func NewUDPNode(config Config, ln *enode.LocalNode,
	key *ecdsa.PrivateKey, bootnodes []*enode.Node,
) (*discover.UDPv5, error)

NewUDPNode starts and returns a discv5 UDP implementation.

func PeerName added in v0.6.0

func PeerName(id peer.ID) string

PeerName calculates the polynomial rolling hash of the peerID string.

func SendAsync added in v0.6.0

func SendAsync(ctx context.Context, tcpNode host.Host, protoID protocol.ID, peerID peer.ID, msg proto.Message)

SendAsync sends a libp2p message and logs a warning on error.

Usage: go p2p.SendAsync(ctx, tcpNode, protoId, peerId, msg)

Types

type Config

type Config struct {
	// UDPBootnodes defines the discv5 boot node URLs.
	UDPBootnodes []string
	// UDPBootLock enables using cluster-lock ENRs as discv5 boot nodes.
	UDPBootLock bool
	// UDPAddr defines the discv5 udp listen address.
	UDPAddr string
	// ExternalIP is the IP advertised by libp2p.
	ExternalIP string
	// ExternalHost is the DNS hostname advertised by libp2p.
	ExternalHost string
	// TCPAddrs defines the lib-p2p tcp listen addresses.
	TCPAddrs []string
	// Allowlist defines csv CIDR blocks for lib-p2p allowed connections.
	Allowlist string
	// Allowlist defines csv CIDR blocks for lib-p2p denied connections.
	Denylist string
	// BootnodeRelay enables circuit relay via bootnodes if direct connections fail.
	// Only applicable to charon nodes not bootnodes.
	BootnodeRelay bool
}

func (Config) Multiaddrs

func (c Config) Multiaddrs() ([]ma.Multiaddr, error)

Multiaddrs returns the configured addresses as libp2p multiaddrs.

func (Config) ParseTCPAddrs added in v0.1.1

func (c Config) ParseTCPAddrs() ([]*net.TCPAddr, error)

ParseTCPAddrs returns the configured tcp addresses as typed net tcp addresses.

type ConnGater

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

ConnGater filters incoming connections by the cluster peers.

func NewConnGater added in v0.1.1

func NewConnGater(peers []peer.ID, relays []Peer) (ConnGater, error)

NewConnGater return a new connection gater that limits access to the cluster peers and relays.

func NewOpenGater added in v0.4.0

func NewOpenGater() ConnGater

NewOpenGater returns a connection gater that is open, not gating any connections.

func (ConnGater) InterceptAccept

func (ConnGater) InterceptAccept(_ network.ConnMultiaddrs) (allow bool)

func (ConnGater) InterceptAddrDial

func (ConnGater) InterceptAddrDial(_ peer.ID, _ multiaddr.Multiaddr) (allow bool)

func (ConnGater) InterceptPeerDial

func (ConnGater) InterceptPeerDial(_ peer.ID) (allow bool)

InterceptPeerDial does nothing.

func (ConnGater) InterceptSecured

func (c ConnGater) InterceptSecured(_ network.Direction, id peer.ID, _ network.ConnMultiaddrs) bool

InterceptSecured rejects nodes with a peer ID that isn't part of any known DV.

func (ConnGater) InterceptUpgraded

func (ConnGater) InterceptUpgraded(_ network.Conn) (bool, control.DisconnectReason)

InterceptUpgraded does nothing.

type Peer added in v0.2.0

type Peer struct {
	// ENR defines the networking information of the peer.
	ENR enr.Record

	// Enode represents the networking host of the peer.
	Enode enode.Node

	// ID is a libp2p peer identity. It is inferred from the ENR.
	ID peer.ID

	// Index is the order of this node in the cluster.
	// This is only applicable to charon nodes, not relays.
	Index int

	// Name represents a human friendly name for the peer.
	Name string
}

Peer represents a peer in the libp2p network, either a charon node or a relay.

func NewPeer added in v0.2.0

func NewPeer(record enr.Record, index int) (Peer, error)

NewPeer returns a new charon peer.

func NewRelays added in v0.4.0

func NewRelays(conf Config, bootnodes []*enode.Node) ([]Peer, error)

NewRelays returns the libp2p circuit relays from bootnodes if enabled.

type UDPNode added in v0.4.0

type UDPNode struct {
	*discover.UDPv5
	Relays []Peer
}

UDPNode wraps a discv5 udp node and adds the bootnodes relays.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL