service

package
v0.1.16-profiler Latest Latest
Warning

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

Go to latest
Published: Nov 18, 2020 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package service defines basic interfaces to for protocols to consume p2p functionality.

Index

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.

func (DataBytes) Bytes

func (m DataBytes) Bytes() []byte

Bytes returns the message as bytes

type DataMsgWrapper

type DataMsgWrapper struct {
	Req     bool
	MsgType uint32
	ReqID   uint64
	Payload []byte
}

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 Fetcher added in v0.1.16

type Fetcher interface {
	FetchBlock(ID types.BlockID) error
	FetchAtx(ID types.ATXID) error
	GetPoetProof(ID types.Hash32) error
	GetTxs(IDs []types.TransactionID) error
	GetBlocks(IDs []types.BlockID) error
	GetAtxs(IDs []types.ATXID) error
	ListenToGossip() bool
	IsSynced() bool
}

Fetcher is a general interface that defines a component capable of fetching data from remote peers

type GossipDataHandler added in v0.1.15

type GossipDataHandler func(data GossipMessage, syncer Fetcher)

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

type Listener struct {
	*log.Log
	// contains filtered or unexported fields
}

Listener represents the main struct that reqisters delegates to gossip function

func NewListener added in v0.1.15

func NewListener(net Service, syncer Fetcher, log log.Log) *Listener

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

func (*Listener) Stop added in v0.1.15

func (l *Listener) Stop()

Stop stops listening to all gossip channels

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

Sender returns the public key of the sender of this message. (might not be the author)

type Node

type Node struct {
	*node.Info
	// contains filtered or unexported fields
}

Node is a simulated p2p node that can be used as a p2p service

func (*Node) Broadcast

func (sn *Node) Broadcast(protocol string, payload []byte) error

Broadcast disseminates a message to all simulated nodes. sends to yourself first.

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

func (sn *Node) SendMessage(peerPubkey p2pcrypto.PublicKey, protocol string, payload []byte) error

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.

func (*Node) Shutdown

func (sn *Node) Shutdown()

Shutdown closes all node channels are remove it from the Simulator map

func (*Node) Start

func (sn *Node) Start() error

Start is here to satisfy the Service interface.

func (*Node) SubscribePeerEvents

func (sn *Node) SubscribePeerEvents() (conn chan p2pcrypto.PublicKey, disc chan p2pcrypto.PublicKey)

SubscribePeerEvents satisfy the Service interface and registers channels for new simulator peers joining.

type P2PMetadata

type P2PMetadata struct {
	FromAddress net.Addr
}

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)
	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

type Simulator struct {
	io.Closer
	// contains filtered or unexported fields
}

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) NewNode

func (s *Simulator) NewNode() *Node

NewNode creates a new p2p node in this Simulator

func (*Simulator) NewNodeFrom

func (s *Simulator) NewNodeFrom(n *node.Info) *Node

NewNodeFrom creates a new node from existing details

func (*Simulator) SubscribeToPeerEvents

func (s *Simulator) SubscribeToPeerEvents(myid p2pcrypto.Key) (chan p2pcrypto.PublicKey, chan p2pcrypto.PublicKey)

SubscribeToPeerEvents starts listening to new peers and disconnected peers events.

type Syncer added in v0.1.15

type Syncer interface {
	FetchAtxReferences(atx *types.ActivationTx) error
	FetchPoetProof(poetProofRef []byte) error
	ListenToGossip() bool
	GetBlock(ID types.BlockID) (*types.Block, error)
	//GetTxs(IDs []types.TransactionID) error
	//GetBlocks(IDs []types.BlockID) error
	//GetAtxs(IDs []types.ATXID) error
	IsSynced() bool
}

Syncer is interface for sync services

Jump to

Keyboard shortcuts

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