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 }