network

package
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: Mar 25, 2024 License: AGPL-3.0 Imports: 39 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ProtocolHandshake           = "/ab/handshake/0.0.1"
	ProtocolBlockCertification  = "/ab/block-certification/0.0.1"
	ProtocolUnicityCertificates = "/ab/certificates/0.0.1"
)
View Source
const (
	ProtocolRootIrChangeReq = "/ab/root-change-req/0.0.1"
	ProtocolRootProposal    = "/ab/root-proposal/0.0.1"
	ProtocolRootVote        = "/ab/root-vote/0.0.1"
	ProtocolRootTimeout     = "/ab/root-timeout/0.0.1"
	ProtocolRootStateReq    = "/ab/root-state-req/0.0.1"
	ProtocolRootStateResp   = "/ab/root-state-resp/0.0.1"
)
View Source
const (
	ProtocolInputForward          = "/ab/input-forward/0.0.1"
	ProtocolBlockProposal         = "/ab/block-proposal/0.0.1"
	ProtocolLedgerReplicationReq  = "/ab/replication-req/0.0.1"
	ProtocolLedgerReplicationResp = "/ab/replication-resp/0.0.1"
)

Variables

View Source
var DefaultValidatorNetworkOptions = ValidatorNetworkOptions{
	ReceivedChannelCapacity:          1000,
	TxBufferSize:                     1000,
	TxBufferHashAlgorithm:            crypto.SHA256,
	BlockCertificationTimeout:        300 * time.Millisecond,
	BlockProposalTimeout:             300 * time.Millisecond,
	LedgerReplicationRequestTimeout:  300 * time.Millisecond,
	LedgerReplicationResponseTimeout: 300 * time.Millisecond,
	HandshakeTimeout:                 300 * time.Millisecond,
}
View Source
var (
	ErrPeerConfigurationIsNil = errors.New("peer configuration is nil")
)

Functions

func NewLibP2PValidatorNetwork

func NewLibP2PValidatorNetwork(self *Peer, opts ValidatorNetworkOptions, obs Observability) (*validatorNetwork, error)

NewLibP2PValidatorNetwork creates a new LibP2PNetwork based validator network.

Logger (log) is assumed to already have node_id attribute added, won't be added by NW component!

func NodeIDFromPublicKeyBytes

func NodeIDFromPublicKeyBytes(pubKey []byte) (peer.ID, error)

Types

type LibP2PNetwork

type LibP2PNetwork struct {
	// contains filtered or unexported fields
}

LibP2PNetwork implements "alphabill network" using libp2p.

Zero value is not useable, use one of the constructors to create network!

func NewLibP2PRootChainNetwork

func NewLibP2PRootChainNetwork(self *Peer, capacity uint, sendCertificateTimeout time.Duration, obs Observability) (*LibP2PNetwork, error)

Logger (log) is assumed to already have node_id attribute added, won't be added by NW component!

func NewLibP2RootConsensusNetwork

func NewLibP2RootConsensusNetwork(self *Peer, capacity uint, sendTimeout time.Duration, obs Observability) (*LibP2PNetwork, error)

func (*LibP2PNetwork) ReceivedChannel

func (n *LibP2PNetwork) ReceivedChannel() <-chan any

func (*LibP2PNetwork) Send

func (n *LibP2PNetwork) Send(ctx context.Context, msg any, receivers ...peer.ID) error

type Observability

type Observability interface {
	Tracer(name string, options ...trace.TracerOption) trace.Tracer
	Meter(name string, opts ...metric.MeterOption) metric.Meter
	Logger() *slog.Logger
}

type Peer

type Peer struct {
	// contains filtered or unexported fields
}

Peer represents a single node in p2p network. It is a wrapper around the libp2p host.Host.

func NewPeer

func NewPeer(ctx context.Context, conf *PeerConfiguration, log *slog.Logger, prom prometheus.Registerer) (*Peer, error)

NewPeer constructs a new peer node with given configuration. If no peer key is provided, it generates a random Secp256k1 key-pair and derives a new identity from it. If no transport and listen addresses are provided, the node listens to the multiaddresses "/ip4/0.0.0.0/tcp/0".

func (*Peer) Advertise added in v0.4.0

func (p *Peer) Advertise(ctx context.Context, topic string) error

func (*Peer) Close

func (p *Peer) Close() error

Close shuts down the libp2p host and related services.

func (*Peer) Configuration

func (p *Peer) Configuration() *PeerConfiguration

Configuration returns peer configuration

func (*Peer) CreateStream

func (p *Peer) CreateStream(ctx context.Context, peerID peer.ID, protocolID string) (network.Stream, error)

CreateStream opens a new stream to given peer p, and writes a libp2p protocol header with given ProtocolID.

func (*Peer) Discover added in v0.4.0

func (p *Peer) Discover(ctx context.Context, topic string) (<-chan peer.AddrInfo, error)

func (*Peer) FilterValidators

func (p *Peer) FilterValidators(exclude peer.ID) []peer.ID

func (*Peer) ID

func (p *Peer) ID() peer.ID

ID returns the identifier associated with this Peer.

func (*Peer) MultiAddresses

func (p *Peer) MultiAddresses() []ma.Multiaddr

MultiAddresses the address associated with this Peer.

func (*Peer) Network

func (p *Peer) Network() network.Network

Network returns the Network of the Peer.

func (*Peer) RegisterProtocolHandler

func (p *Peer) RegisterProtocolHandler(protocolID string, handler network.StreamHandler)

RegisterProtocolHandler sets the protocol stream handler for given protocol.

func (*Peer) RemoveProtocolHandler

func (p *Peer) RemoveProtocolHandler(protocolID string)

RemoveProtocolHandler removes the given protocol handler.

func (*Peer) String

func (p *Peer) String() string

String returns short representation of node id

func (*Peer) Validators

func (p *Peer) Validators() []peer.ID

type PeerConfiguration

type PeerConfiguration struct {
	ID             peer.ID         // peer identifier derived from the KeyPair.PublicKey.
	Address        string          // address to listen for incoming connections. Uses libp2p multiaddress format.
	KeyPair        *PeerKeyPair    // keypair for the peer.
	BootstrapPeers []peer.AddrInfo // a list of seed peers to connect to.
	Validators     []peer.ID       // a list of known peers (in case of partition node this list must contain all validators).
}

PeerConfiguration includes single peer configuration values.

func NewPeerConfiguration

func NewPeerConfiguration(
	addr string,
	keyPair *PeerKeyPair,
	bootstrapPeers []peer.AddrInfo,
	validators []peer.ID) (*PeerConfiguration, error)

type PeerKeyPair

type PeerKeyPair struct {
	PublicKey  []byte
	PrivateKey []byte
}

PeerKeyPair contains node's public and private key.

type TxProcessor

type TxProcessor func(ctx context.Context, tx *types.TransactionOrder) error

type ValidatorNetworkOptions

type ValidatorNetworkOptions struct {
	// How many messages will be buffered (ReceivedChannel) in case of slow consumer.
	// Once buffer is full messages will be dropped (ie not processed)
	// until consumer catches up.
	ReceivedChannelCapacity uint
	TxBufferSize            uint
	TxBufferHashAlgorithm   crypto.Hash

	BlockCertificationTimeout        time.Duration
	BlockProposalTimeout             time.Duration
	LedgerReplicationRequestTimeout  time.Duration
	LedgerReplicationResponseTimeout time.Duration
	HandshakeTimeout                 time.Duration
}

Directories

Path Synopsis
protocol

Jump to

Keyboard shortcuts

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