Documentation ¶
Overview ¶
Package service defines basic interfaces to for protocols to consume p2p functionality.
Index ¶
- type Data
- type DataBytes
- type DataMsgWrapper
- type DirectMessage
- type GossipDataHandler
- type GossipMessage
- type Listener
- type MessageValidation
- type Node
- func (sn *Node) Broadcast(protocol string, payload []byte) error
- func (sn *Node) GossipReady() <-chan struct{}
- func (sn *Node) ProcessDirectProtocolMessage(sender p2pcrypto.PublicKey, protocol string, payload Data, ...) error
- func (sn *Node) ProcessGossipProtocolMessage(sender p2pcrypto.PublicKey, protocol string, data Data, ...) error
- func (sn *Node) RegisterDirectProtocol(protocol string) chan DirectMessage
- func (sn *Node) RegisterDirectProtocolWithChannel(protocol string, ingressChannel chan DirectMessage) chan DirectMessage
- func (sn *Node) RegisterGossipProtocol(protocol string, prio priorityq.Priority) chan GossipMessage
- func (sn *Node) SendMessage(peerPubkey p2pcrypto.PublicKey, protocol string, payload []byte) error
- func (sn *Node) SendWrappedMessage(nodeID p2pcrypto.PublicKey, protocol string, payload *DataMsgWrapper) error
- func (sn *Node) Shutdown()
- func (sn *Node) Start() error
- func (sn *Node) SubscribePeerEvents() (conn chan p2pcrypto.PublicKey, disc chan p2pcrypto.PublicKey)
- type P2PMetadata
- type Service
- type Simulator
- func (s *Simulator) NewFaulty(isRandBehaviour bool, maxBroadcastDelaySec uint32, maxReceiveDelaySec uint32) *Node
- func (s *Simulator) NewNode() *Node
- func (s *Simulator) NewNodeFrom(n *node.Info) *Node
- func (s *Simulator) SubscribeToPeerEvents(myid p2pcrypto.Key) (chan p2pcrypto.PublicKey, chan p2pcrypto.PublicKey)
- type Syncer
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Data ¶
type Data interface {
Bytes() []byte
}
Data is a wrapper around a message that can hold either raw bytes message or a req-res wrapper.
type DataBytes ¶
type DataBytes struct {
Payload []byte
}
DataBytes is a byte array payload wrapper.
type DataMsgWrapper ¶
DataMsgWrapper is a req-res payload wrapper
func (DataMsgWrapper) Bytes ¶
func (m DataMsgWrapper) Bytes() []byte
Bytes returns the message as bytes
type DirectMessage ¶
type DirectMessage interface { Metadata() P2PMetadata Sender() p2pcrypto.PublicKey Bytes() []byte }
DirectMessage is an interface that represents a simple direct message structure
type GossipDataHandler ¶ added in v0.1.15
type GossipDataHandler func(data GossipMessage, syncer Syncer)
GossipDataHandler is the function type that will be called when data is
type GossipMessage ¶
type GossipMessage interface { Sender() p2pcrypto.PublicKey Bytes() []byte ValidationCompletedChan() chan MessageValidation ReportValidation(protocol string) }
GossipMessage is an interface that represents a simple gossip message structure
type Listener ¶ added in v0.1.15
Listener represents the main struct that reqisters delegates to gossip function
func NewListener ¶ added in v0.1.15
NewListener creates a new listener struct
func (*Listener) AddListener ¶ added in v0.1.15
func (l *Listener) AddListener(channel string, priority priorityq.Priority, dataHandler GossipDataHandler)
AddListener adds a listener to a specific gossip channel
type MessageValidation ¶
type MessageValidation struct {
// contains filtered or unexported fields
}
MessageValidation is a gossip message validation event.
func NewMessageValidation ¶
func NewMessageValidation(sender p2pcrypto.PublicKey, msg []byte, prot string) MessageValidation
NewMessageValidation creates a message validation struct to pass to the protocol.
func (MessageValidation) Message ¶
func (mv MessageValidation) Message() []byte
Message returns the message as bytes
func (MessageValidation) Protocol ¶
func (mv MessageValidation) Protocol() string
Protocol is the protocol this message is targeted to.
func (MessageValidation) Sender ¶
func (mv MessageValidation) Sender() p2pcrypto.PublicKey
Sender returns the public key of the sender of this message. (might not be the author)
type Node ¶
Node is a simulated p2p node that can be used as a p2p service
func (*Node) Broadcast ¶
Broadcast disseminates a message to all simulated nodes. sends to yourself first.
func (*Node) GossipReady ¶ added in v0.1.21
func (sn *Node) GossipReady() <-chan struct{}
GossipReady is a chan which is closed when we established initial min connections with peers.
func (*Node) ProcessDirectProtocolMessage ¶
func (sn *Node) ProcessDirectProtocolMessage(sender p2pcrypto.PublicKey, protocol string, payload Data, metadata P2PMetadata) error
ProcessDirectProtocolMessage passes a direct message to the protocol.
func (*Node) ProcessGossipProtocolMessage ¶
func (sn *Node) ProcessGossipProtocolMessage(sender p2pcrypto.PublicKey, protocol string, data Data, validationCompletedChan chan MessageValidation) error
ProcessGossipProtocolMessage passes a gossip message to the protocol.
func (*Node) RegisterDirectProtocol ¶
func (sn *Node) RegisterDirectProtocol(protocol string) chan DirectMessage
RegisterDirectProtocol creates and returns a channel for a given direct based protocol.
func (*Node) RegisterDirectProtocolWithChannel ¶
func (sn *Node) RegisterDirectProtocolWithChannel(protocol string, ingressChannel chan DirectMessage) chan DirectMessage
RegisterDirectProtocolWithChannel configures and returns a channel for a given protocol.
func (*Node) RegisterGossipProtocol ¶
func (sn *Node) RegisterGossipProtocol(protocol string, prio priorityq.Priority) chan GossipMessage
RegisterGossipProtocol creates and returns a channel for a given gossip based protocol.
func (*Node) SendMessage ¶
SendMessage send a message to another simulated node.
func (*Node) SendWrappedMessage ¶
func (sn *Node) SendWrappedMessage(nodeID p2pcrypto.PublicKey, protocol string, payload *DataMsgWrapper) error
SendWrappedMessage send a wrapped message to another simulated node.
type P2PMetadata ¶
P2PMetadata is a generic metadata interface
type Service ¶
type Service interface { Start() error RegisterGossipProtocol(protocol string, prio priorityq.Priority) chan GossipMessage RegisterDirectProtocol(protocol string) chan DirectMessage SubscribePeerEvents() (new chan p2pcrypto.PublicKey, del chan p2pcrypto.PublicKey) GossipReady() <-chan struct{} Broadcast(protocol string, payload []byte) error Shutdown() }
Service is an interface that represents a networking service (ideally p2p) that we can use to send messages or listen to incoming messages
type Simulator ¶
Simulator is a p2p node factory and message bridge that is used to simulate the p2p layer provided to protocols without using real network or p2p code. It resembles the `Service` interface API.
func NewSimulator ¶
func NewSimulator() *Simulator
NewSimulator Creates a p2p simulation by providing nodes as p2p services and bridge them.
func (*Simulator) NewFaulty ¶
func (s *Simulator) NewFaulty(isRandBehaviour bool, maxBroadcastDelaySec uint32, maxReceiveDelaySec uint32) *Node
NewFaulty creates a node that can deploy faulty behaviour, broadcast delay, receive delay and randomness.
func (*Simulator) NewNodeFrom ¶
NewNodeFrom creates a new node from existing details