github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/p2p/interfaces.go (about)

     1  package p2p
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/ethereum/go-ethereum/p2p/enr"
     7  	"github.com/libp2p/go-libp2p-core/connmgr"
     8  	"github.com/libp2p/go-libp2p-core/host"
     9  	"github.com/libp2p/go-libp2p-core/network"
    10  	"github.com/libp2p/go-libp2p-core/peer"
    11  	pubsub "github.com/libp2p/go-libp2p-pubsub"
    12  	"github.com/multiformats/go-multiaddr"
    13  	"github.com/prysmaticlabs/prysm/beacon-chain/p2p/encoder"
    14  	"github.com/prysmaticlabs/prysm/beacon-chain/p2p/peers"
    15  	ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
    16  	"github.com/prysmaticlabs/prysm/shared/interfaces"
    17  	"google.golang.org/protobuf/proto"
    18  )
    19  
    20  // P2P represents the full p2p interface composed of all of the sub-interfaces.
    21  type P2P interface {
    22  	Broadcaster
    23  	SetStreamHandler
    24  	EncodingProvider
    25  	PubSubProvider
    26  	PubSubTopicUser
    27  	PeerManager
    28  	Sender
    29  	ConnectionHandler
    30  	PeersProvider
    31  	MetadataProvider
    32  }
    33  
    34  // Broadcaster broadcasts messages to peers over the p2p pubsub protocol.
    35  type Broadcaster interface {
    36  	Broadcast(context.Context, proto.Message) error
    37  	BroadcastAttestation(ctx context.Context, subnet uint64, att *ethpb.Attestation) error
    38  }
    39  
    40  // SetStreamHandler configures p2p to handle streams of a certain topic ID.
    41  type SetStreamHandler interface {
    42  	SetStreamHandler(topic string, handler network.StreamHandler)
    43  }
    44  
    45  // PubSubTopicUser provides way to join, use and leave PubSub topics.
    46  type PubSubTopicUser interface {
    47  	JoinTopic(topic string, opts ...pubsub.TopicOpt) (*pubsub.Topic, error)
    48  	LeaveTopic(topic string) error
    49  	PublishToTopic(ctx context.Context, topic string, data []byte, opts ...pubsub.PubOpt) error
    50  	SubscribeToTopic(topic string, opts ...pubsub.SubOpt) (*pubsub.Subscription, error)
    51  }
    52  
    53  // ConnectionHandler configures p2p to handle connections with a peer.
    54  type ConnectionHandler interface {
    55  	AddConnectionHandler(f func(ctx context.Context, id peer.ID) error,
    56  		j func(ctx context.Context, id peer.ID) error)
    57  	AddDisconnectionHandler(f func(ctx context.Context, id peer.ID) error)
    58  	connmgr.ConnectionGater
    59  }
    60  
    61  // EncodingProvider provides p2p network encoding.
    62  type EncodingProvider interface {
    63  	Encoding() encoder.NetworkEncoding
    64  }
    65  
    66  // PubSubProvider provides the p2p pubsub protocol.
    67  type PubSubProvider interface {
    68  	PubSub() *pubsub.PubSub
    69  }
    70  
    71  // PeerManager abstracts some peer management methods from libp2p.
    72  type PeerManager interface {
    73  	Disconnect(peer.ID) error
    74  	PeerID() peer.ID
    75  	Host() host.Host
    76  	ENR() *enr.Record
    77  	DiscoveryAddresses() ([]multiaddr.Multiaddr, error)
    78  	RefreshENR()
    79  	FindPeersWithSubnet(ctx context.Context, topic string, index, threshold uint64) (bool, error)
    80  	AddPingMethod(reqFunc func(ctx context.Context, id peer.ID) error)
    81  }
    82  
    83  // Sender abstracts the sending functionality from libp2p.
    84  type Sender interface {
    85  	Send(context.Context, interface{}, string, peer.ID) (network.Stream, error)
    86  }
    87  
    88  // PeersProvider abstracts obtaining our current list of known peers status.
    89  type PeersProvider interface {
    90  	Peers() *peers.Status
    91  }
    92  
    93  // MetadataProvider returns the metadata related information for the local peer.
    94  type MetadataProvider interface {
    95  	Metadata() interfaces.Metadata
    96  	MetadataSeq() uint64
    97  }