Documentation
¶
Overview ¶
Package api implements the P2P API.
Index ¶
- Constants
- func AddrInfoToString(info peer.AddrInfo) []string
- func AddrInfosFromConsensusAddrs(addrs []string) ([]peer.AddrInfo, error)
- func PubKeyToPublicKey(pubKey libp2pCrypto.PubKey) (signature.PublicKey, error)
- func PublicKeyMapToPeerIDs(pks map[signature.PublicKey]struct{}) ([]core.PeerID, error)
- func PublicKeyToPeerID(pk signature.PublicKey) (core.PeerID, error)
- func SignerToPrivKey(signer signature.Signer) libp2pCrypto.PrivKey
- type CommitteeMessage
- type Handler
- type ImportanceKind
- type PeerManager
- type PeerRegistry
- type PeerTagger
- type SeedService
- type Service
- type Status
- type TopicKind
- type TxMessage
Constants ¶
const ( ImportantNodeCompute = 1 ImportantNodeKeyManager = 2 )
Variables ¶
This section is empty.
Functions ¶
func AddrInfoToString ¶
AddrInfoToString converts AddressInfo to a list of p2p string multiaddresses.
For example, an address info with ID 1234 and multiaddresses /ip4/127.0.0.1/tcp/8080 and /ip6/::1/tcp/8080 would be converted to a list ["/ip4/127.0.0.1/tcp/8080/p2p/1234", "/ip6/::1/tcp/8080/p2p/1234"].
func AddrInfosFromConsensusAddrs ¶
AddrInfosFromConsensusAddrs converts string consensus addresses to addr infos.
func PubKeyToPublicKey ¶
func PubKeyToPublicKey(pubKey libp2pCrypto.PubKey) (signature.PublicKey, error)
PubKeyToPublicKey converts a libp2pCrypto.PubKey to a PublicKey.
func PublicKeyMapToPeerIDs ¶
PublicKeyMapToPeerIDs converts a map of public keys to a list of peer identifiers.
func PublicKeyToPeerID ¶
PublicKeyToPeerID converts a public key to a peer identifier.
func SignerToPrivKey ¶
func SignerToPrivKey(signer signature.Signer) libp2pCrypto.PrivKey
SignerToPrivKey converts a Signer to a libp2pCrypto.PrivKey.
Types ¶
type CommitteeMessage ¶
type CommitteeMessage struct {
// Epoch is the epoch this message belongs to.
Epoch beacon.EpochTime `json:"epoch,omitempty"`
// Proposal is a batch proposal.
Proposal *commitment.Proposal `json:",omitempty"`
}
CommitteeMessage is a message published to nodes via gossipsub on the committee topic.
type Handler ¶
type Handler interface {
// DecodeMessage decodes the given incoming message.
DecodeMessage(msg []byte) (interface{}, error)
// AuthorizeMessage handles authorizing an incoming message.
//
// The message handler will be re-invoked on error with a periodic backoff unless errors are
// wrapped via `p2pError.Permanent`.
AuthorizeMessage(ctx context.Context, peerID signature.PublicKey, msg interface{}) error
// HandleMessage handles an incoming message from a peer.
//
// The message handler will be re-invoked on error with a periodic backoff unless errors are
// wrapped via `p2pError.Permanent`.
HandleMessage(ctx context.Context, peerID signature.PublicKey, msg interface{}, isOwn bool) error
}
Handler is a handler for P2P messages.
type ImportanceKind ¶
type ImportanceKind uint8
ImportanceKind is the node importance kind.
func (ImportanceKind) Tag ¶
func (ik ImportanceKind) Tag(runtimeID common.Namespace) string
Tag returns the connection manager tag associated with the given importance kind.
func (ImportanceKind) TagValue ¶
func (ik ImportanceKind) TagValue() int
TagValue returns the connection manager tag value associated with the given importance kind.
type PeerManager ¶
type PeerManager interface {
// PeerRegistry returns the peer registry.
PeerRegistry() PeerRegistry
// PeerTagger returns the peer tagger.
PeerTagger() PeerTagger
}
PeerManager is an interface for managing peers in the P2P network.
type PeerRegistry ¶
type PeerRegistry interface {
// Initialized returns a channel that will be closed once the first node refresh event from
// the registry is received.
Initialized() <-chan struct{}
// NumPeers returns the number of registered peers.
NumPeers() int
}
PeerRegistry is an interface for accessing peer information from the registry.
type PeerTagger ¶
type PeerTagger interface {
// SetPeerImportance configures peer importance for the given list of peers.
//
// This makes it less likely for those peers to be pruned.
SetPeerImportance(kind ImportanceKind, runtimeID common.Namespace, pids []peer.ID)
}
PeerTagger is an interface for tagging important peers.
type SeedService ¶
type SeedService interface {
service.BackgroundService
// Addresses returns the listen addresses of the host.
Addresses() []string
// Peers returns a list of peers located in the peer store.
Peers() []string
}
SeedService is a P2P node service interface.
type Service ¶
type Service interface {
service.BackgroundService
// GetStatus returns the P2P status of the node.
GetStatus() *Status
// Addresses returns the P2P addresses of the node.
Addresses() []node.Address
// Peers returns a list of connected P2P peers for the given runtime.
Peers(runtimeID common.Namespace) []string
// Publish publishes the given message to the given topic.
Publish(ctx context.Context, topic string, msg interface{})
// RegisterHandler registers a message handler for the specified runtime and topic kind.
RegisterHandler(topic string, handler Handler)
// BlockPeer blocks a specific peer from being used by the local node.
BlockPeer(peerID core.PeerID)
// Host returns the P2P host.
Host() core.Host
// PeerManager returns the P2P peer manager.
PeerManager() PeerManager
// RegisterProtocol starts tracking and managing peers that support the given protocol.
RegisterProtocol(p core.ProtocolID, min int, total int)
// RegisterProtocolServer registers a protocol server for the given protocol.
RegisterProtocolServer(srv rpc.Server)
// GetMinRepublishInterval returns the minimum republish interval that needs to be respected by
// the caller when publishing the same message. If Publish is called for the same message more
// quickly, the message may be dropped and not published.
GetMinRepublishInterval() time.Duration
}
Service is a P2P node service interface.
type Status ¶
type Status struct {
// PubKey is the public key used for P2P communication.
PubKey signature.PublicKey `json:"pub_key"`
// PeerID is the peer ID derived by hashing peer's public key.
PeerID peer.ID `json:"peer_id"`
// Addresses is a list of configured P2P addresses used when registering the node.
Addresses []node.Address `json:"addresses"`
// NumPeers is the number of connected peers.
NumPeers int `json:"num_peers"`
// NumConnections is the number of peer connections.
NumConnections int `json:"num_connections"`
// Protocols is a set of registered protocols together with the number of connected peers.
Protocols map[core.ProtocolID]int `json:"protocols"`
// Topics is a set of registered topics together with the number of connected peers.
Topics map[string]int `json:"topics"`
}
Status is the P2P status of a node.