network

package
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Feb 12, 2020 License: GPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PeerMessageTypePing               = 1
	PeerMessageTypeAuthentication     = 3
	PeerMessageTypeGraph              = 4
	PeerMessageTypeSnapshotConfirm    = 5
	PeerMessageTypeTransactionRequest = 6
	PeerMessageTypeTransaction        = 7

	PeerMessageTypeSnapshotAnnoucement  = 10 // leader send snapshot to peer
	PeerMessageTypeSnapshotCommitment   = 11 // peer generate ri based, send Ri to leader
	PeerMessageTypeTransactionChallenge = 12 // leader send bitmask Z and aggragated R to peer
	PeerMessageTypeSnapshotResponse     = 13 // peer generate A from nodes and Z, send response si = ri + H(R || A || M)ai to leader
	PeerMessageTypeSnapshotFinalization = 14 // leader generate A, verify si B = ri B + H(R || A || M)ai B = Ri + H(R || A || M)Ai, then finaliz based on threshold
)
View Source
const (
	MaxIncomingStreams = 128
	HandshakeTimeout   = 10 * time.Second
	IdleTimeout        = 60 * time.Second
	ReadDeadline       = 10 * time.Second
	WriteDeadline      = 10 * time.Second
)
View Source
const (
	TransportMessageVersion    = 2
	TransportMessageMaxSize    = 32 * 1024 * 1024
	TransportMessageHeaderSize = 6

	TransportCompressionGzip   = 1
	TransportCompressionZstd   = 2
	TransportCompressionMethod = TransportCompressionZstd
)

Variables

This section is empty.

Functions

This section is empty.

Types

type ChanMsg

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

type Client

type Client interface {
	RemoteAddr() net.Addr
	Receive() ([]byte, error)
	Send([]byte) error
	Close() error
}

type Peer

type Peer struct {
	IdForNetwork crypto.Hash
	Address      string
	// contains filtered or unexported fields
}

func NewPeer

func NewPeer(handle SyncHandle, idForNetwork crypto.Hash, addr string) *Peer

func (*Peer) AddNeighbor

func (me *Peer) AddNeighbor(idForNetwork crypto.Hash, addr string) (*Peer, error)

func (*Peer) ConfirmSnapshotForPeer

func (me *Peer) ConfirmSnapshotForPeer(idForNetwork, snap crypto.Hash)

func (*Peer) ListenNeighbors

func (me *Peer) ListenNeighbors() error

func (*Peer) SendSnapshotAnnouncementMessage

func (me *Peer) SendSnapshotAnnouncementMessage(idForNetwork crypto.Hash, s *common.Snapshot, R crypto.Key) error

func (*Peer) SendSnapshotCommitmentMessage

func (me *Peer) SendSnapshotCommitmentMessage(idForNetwork crypto.Hash, snap crypto.Hash, R crypto.Key, wantTx bool) error

func (*Peer) SendSnapshotConfirmMessage

func (me *Peer) SendSnapshotConfirmMessage(idForNetwork crypto.Hash, snap crypto.Hash) error

func (*Peer) SendSnapshotFinalizationMessage

func (me *Peer) SendSnapshotFinalizationMessage(idForNetwork crypto.Hash, s *common.Snapshot) error

func (*Peer) SendSnapshotResponseMessage

func (me *Peer) SendSnapshotResponseMessage(idForNetwork crypto.Hash, snap crypto.Hash, si [32]byte) error

func (*Peer) SendTransactionChallengeMessage

func (me *Peer) SendTransactionChallengeMessage(idForNetwork crypto.Hash, snap crypto.Hash, cosi *crypto.CosiSignature, tx *common.VersionedTransaction) error

func (*Peer) SendTransactionMessage

func (me *Peer) SendTransactionMessage(idForNetwork crypto.Hash, ver *common.VersionedTransaction) error

func (*Peer) SendTransactionRequestMessage

func (me *Peer) SendTransactionRequestMessage(idForNetwork crypto.Hash, tx crypto.Hash) error

type PeerMessage

type PeerMessage struct {
	Type            uint8
	Snapshot        *common.Snapshot
	SnapshotHash    crypto.Hash
	Transaction     *common.VersionedTransaction
	TransactionHash crypto.Hash
	Cosi            crypto.CosiSignature
	Commitment      crypto.Key
	Response        [32]byte
	WantTx          bool
	FinalCache      []*SyncPoint
	Auth            []byte
}

type QuicClient

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

func (*QuicClient) Close

func (c *QuicClient) Close() error

func (*QuicClient) Receive

func (c *QuicClient) Receive() ([]byte, error)

func (*QuicClient) RemoteAddr

func (c *QuicClient) RemoteAddr() net.Addr

func (*QuicClient) Send

func (c *QuicClient) Send(data []byte) error

type QuicTransport

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

func NewQuicClient

func NewQuicClient(addr string) (*QuicTransport, error)

func NewQuicServer

func NewQuicServer(addr string) (*QuicTransport, error)

func (*QuicTransport) Accept

func (t *QuicTransport) Accept() (Client, error)

func (*QuicTransport) Dial

func (t *QuicTransport) Dial() (Client, error)

func (*QuicTransport) Listen

func (t *QuicTransport) Listen() error

type SyncHandle

type SyncHandle interface {
	GetCacheStore() *fastcache.Cache
	BuildAuthenticationMessage() []byte
	Authenticate(msg []byte) (crypto.Hash, string, error)
	BuildGraph() []*SyncPoint
	UpdateSyncPoint(peerId crypto.Hash, points []*SyncPoint)
	ReadAllNodes() []crypto.Hash
	ReadSnapshotsSinceTopology(offset, count uint64) ([]*common.SnapshotWithTopologicalOrder, error)
	ReadSnapshotsForNodeRound(nodeIdWithNetwork crypto.Hash, round uint64) ([]*common.SnapshotWithTopologicalOrder, error)
	SendTransactionToPeer(peerId, tx crypto.Hash) error
	CachePutTransaction(peerId crypto.Hash, ver *common.VersionedTransaction) error
	CosiQueueExternalAnnouncement(peerId crypto.Hash, s *common.Snapshot, R *crypto.Key) error
	CosiAggregateSelfCommitments(peerId crypto.Hash, snap crypto.Hash, commitment *crypto.Key, wantTx bool) error
	CosiQueueExternalChallenge(peerId crypto.Hash, snap crypto.Hash, cosi *crypto.CosiSignature, ver *common.VersionedTransaction) error
	CosiAggregateSelfResponses(peerId crypto.Hash, snap crypto.Hash, response *[32]byte) error
	VerifyAndQueueAppendSnapshotFinalization(peerId crypto.Hash, s *common.Snapshot) error
}

type SyncPoint

type SyncPoint struct {
	NodeId crypto.Hash
	Number uint64
	Hash   crypto.Hash
}

type Transport

type Transport interface {
	Listen() error
	Dial() (Client, error)
	Accept() (Client, error)
}

type TransportMessage

type TransportMessage struct {
	Version     uint8
	Compression uint8
	Size        uint32
	Data        []byte
}

Jump to

Keyboard shortcuts

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