p2p

package
v0.0.0-...-613d1fa Latest Latest
Warning

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

Go to latest
Published: Aug 26, 2021 License: Apache-2.0 Imports: 31 Imported by: 0

Documentation

Overview

package p2p is a low-level library responsible for peer discovery and sending/receiving messages.

Index

Constants

View Source
const DHTProtocolID = protocol.ID("/0x-mesh-dht/version/1")

Variables

View Source
var DefaultBootstrapList = []string{

	"/ip4/34.136.24.16/tcp/4002/ws/p2p/16Uiu2HAmFxhJFSefdVYzDwDcGLj5RvH6ZaMnmZx7dXFFprVUz7fP",
}

DefaultBootstrapList is a list of addresses to use by default for bootstrapping the DHT.

Functions

func BootstrapListToAddrInfos

func BootstrapListToAddrInfos(bootstrapList []string) ([]peer.AddrInfo, error)

func ConnectToBootstrapList

func ConnectToBootstrapList(ctx context.Context, host host.Host, bootstrapList []string) error

Types

type Config

type Config struct {
	// SubscribeTopic is the topic to subscribe to for new messages. Only messages
	// that are published on this topic will be received and processed.
	SubscribeTopic string
	// PublishTopics are the topics to publish messages to. Messages may be
	// published to more than one topic (e.g. a topic for all orders and a topic
	// for orders with a specific asset).
	PublishTopics []string
	// TCPPort is the port on which to listen for incoming TCP connections.
	TCPPort int
	// WebSocketsPort is the port on which to listen for incoming WebSockets
	// connections.
	WebSocketsPort int
	// Insecure controls whether or not messages should be encrypted. It should
	// always be set to false in production.
	Insecure bool
	// PrivateKey is the private key which will be used for signing messages and
	// generating a peer ID.
	PrivateKey p2pcrypto.PrivKey
	// MessageHandler is an interface responsible for validating, storing, and
	// finding new messages to share.
	MessageHandler MessageHandler
	// RendezvousPoints is a unique identifier for one or more rendezvous points
	// (in order of priority). This node will attempt to find peers with one or
	// more matching rendezvous points.
	RendezvousPoints []string
	// UseBootstrapList determines whether or not to use the list of hard-coded
	// peers to bootstrap the DHT for peer discovery.
	UseBootstrapList bool
	// BootstrapList is a list of multiaddress strings to use for bootstrapping
	// the DHT. If empty, the default list will be used.
	BootstrapList []string
	// DB is a database instance that provides access to key value stores for
	// the peerstore and the dht store.
	DB *db.DB
	// GlobalPubSubMessageLimit is the maximum number of messages per second that
	// will be forwarded through GossipSub on behalf of other peers. It is an
	// important mechanism for limiting our own upload bandwidth. Without a global
	// limit, we could use an unbounded amount of upload bandwidth on propagating
	// GossipSub messages sent by other peers. The global limit is required
	// because we can receive GossipSub messages from peers that we are not
	// connected to (so the per peer limit combined with a maximum number of peers
	// is not, by itself, sufficient).
	GlobalPubSubMessageLimit rate.Limit
	// GlobalPubSubMessageBurst is the maximum number of messages that will be
	// forwarded through GossipSub at once.
	GlobalPubSubMessageBurst int
	// PerPeerPubSubMessageLimit is the maximum number of messages per second that
	// each peer is allowed to send through the GossipSub network. Any additional
	// messages will be dropped.
	PerPeerPubSubMessageLimit rate.Limit
	// PerPeerPubSubMessageBurst is the maximum number of messages that each peer
	// is allowed to send at once through the GossipSub network. Any additional
	// messages will be dropped.
	PerPeerPubSubMessageBurst int
	// CustomMessageValidator is a custom validator for GossipSub messages. All
	// incoming and outgoing messages will be dropped unless they are valid
	// according to this custom validator, which will be run in addition to the
	// default validators.
	CustomMessageValidator pubsub.Validator
	// MaxBytesPerSecond is the maximum number of bytes per second that a peer is
	// allowed to send before failing the bandwidth check. Defaults to 5 MiB.
	MaxBytesPerSecond float64
}

Config contains configuration options for a Node.

type Message

type Message struct {
	// From is the peer ID of the peer who sent the message.
	From peer.ID
	// Data is the underlying data for the message.
	Data []byte
}

type MessageHandler

type MessageHandler interface {
	// HandleMessages is called whenever new messages are received. It should only
	// return an error if there was a problem handling the messages. It should not
	// return an error for invalid or duplicate messages.
	HandleMessages(context.Context, []*Message) error
}

MessageHandler is an interface responsible for validating and storing messages as well as selecting messages which are ready to be shared.

type Node

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

Node is the main type for the p2p package. It represents a particpant in the 0x Mesh network who is capable of sending, receiving, validating, and storing messages.

func New

func New(ctx context.Context, config Config) (*Node, error)

New creates a new Node with the given context and config. The Node will stop all background operations if the context is canceled.

func (*Node) AddPeerScore

func (n *Node) AddPeerScore(id peer.ID, tag string, diff int)

AddPeerScore adds diff to the current score for a given peer. Tag is a unique identifier for the score. A peer's total score is the sum of the scores associated with each tag. Peers that end up with a low total score will eventually be disconnected.

func (*Node) Connect

func (n *Node) Connect(peerInfo peer.AddrInfo, timeout time.Duration) error

Connect ensures there is a connection between this host and the peer with given peerInfo. If there is not an active connection, Connect will dial the peer, and block until a connection is open, timeout is exceeded, or an error is returned.

func (*Node) GetNumPeers

func (n *Node) GetNumPeers() int

GetNumPeers returns the number of peers the node is connected to

func (*Node) ID

func (n *Node) ID() peer.ID

ID returns the peer id of the node.

func (*Node) Multiaddrs

func (n *Node) Multiaddrs() []ma.Multiaddr

Multiaddrs returns all multi addresses at which the node is dialable.

func (*Node) Neighbors

func (n *Node) Neighbors() []peer.ID

Neighbors returns a list of peer IDs that this node is currently connected to.

func (*Node) NewStream

func (n *Node) NewStream(ctx context.Context, p peer.ID, pids ...protocol.ID) (network.Stream, error)

func (*Node) Send

func (n *Node) Send(data []byte) error

Send sends a message continaing the given data to all connected peers.

func (*Node) SetPeerScore

func (n *Node) SetPeerScore(id peer.ID, tag string, val int)

SetPeerScore sets the current score for a given peer (overwriting any previous value with the same tag). Tag is a unique identifier for the score. A peer's total score is the sum of the scores associated with each tag. Peers that end up with a low total score will eventually be disconnected.

func (*Node) SetStreamHandler

func (n *Node) SetStreamHandler(pid protocol.ID, handler network.StreamHandler)

SetStreamHandler registers a handler for a custom protocol.

func (*Node) Start

func (n *Node) Start() error

Start causes the Node to continuously send messages to and receive messages from its peers. It blocks until an error is encountered or `Stop` is called.

func (*Node) UnsetPeerScore

func (n *Node) UnsetPeerScore(id peer.ID, tag string)

UnsetPeerScore removes any scores associated with the given tag for a peer (i.e., they will no longer be counted toward the peers total score).

Directories

Path Synopsis
Package validatorset offers a way to combine a set of libp2p.Validators into a single validator.
Package validatorset offers a way to combine a set of libp2p.Validators into a single validator.

Jump to

Keyboard shortcuts

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