kernel

package
v0.9.0 Latest Latest
Warning

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

Go to latest
Published: Sep 1, 2020 License: GPL-3.0 Imports: 20 Imported by: 2

Documentation

Index

Constants

View Source
const (
	FinalPoolSlotsLimit     = config.SnapshotSyncRoundThreshold * 8
	FinalPoolRoundSizeLimit = 1024
	CachePoolSnapshotsLimit = 1024
)
View Source
const (
	CosiActionSelfEmpty = iota
	CosiActionSelfCommitment
	CosiActionSelfResponse
	CosiActionExternalAnnouncement
	CosiActionExternalChallenge
	CosiActionFinalization
)
View Source
const (
	MainnetMintPeriodForkBatch     = 72
	MainnetMintPeriodForkTimeBegin = 6
	MainnetMintPeriodForkTimeEnd   = 18
)
View Source
const (
	MainnetAcceptPeriodForkSnapshotHash = "b8855c19a38999f283d9be6daa45147aef47cc6d35007673f62390c2e137e4e1"
)
View Source
const (
	MinimumNodeCount = 7
)

Variables

View Source
var (
	MintPool        common.Integer
	MintLiquidity   common.Integer
	MintYearShares  int
	MintYearBatches int
	MintNodeMaximum int
)

Functions

func ComputeRoundHash added in v0.2.10

func ComputeRoundHash(nodeId crypto.Hash, number uint64, snapshots []*common.Snapshot) (uint64, uint64, crypto.Hash)

func LoadRoundGraph

func LoadRoundGraph(store storage.Store, networkId, idForNetwork crypto.Hash) (map[crypto.Hash]*CacheRound, map[crypto.Hash]*FinalRound, error)

func TestMockDiff added in v0.6.2

func TestMockDiff(at time.Duration)

func TestMockReset added in v0.8.3

func TestMockReset()

Types

type CNode added in v0.9.0

type CNode struct {
	IdForNetwork crypto.Hash
	Signer       common.Address
	Payee        common.Address
	Transaction  crypto.Hash
	Timestamp    uint64
	State        string
}

type CacheRound

type CacheRound struct {
	NodeId     crypto.Hash
	Number     uint64
	Timestamp  uint64
	References *common.RoundLink
	Snapshots  []*common.Snapshot `msgpack:"-"`
}

func (*CacheRound) Copy

func (c *CacheRound) Copy() *CacheRound

func (*CacheRound) Gap

func (c *CacheRound) Gap() (uint64, uint64)

func (*CacheRound) ValidateSnapshot

func (c *CacheRound) ValidateSnapshot(s *common.Snapshot, add bool) error

type Chain added in v0.9.0

type Chain struct {
	sync.RWMutex

	ChainId crypto.Hash

	State *ChainState

	CosiAggregators map[crypto.Hash]*CosiAggregator
	CosiVerifiers   map[crypto.Hash]*CosiVerifier
	CachePool       *util.RingBuffer
	CacheIndex      uint64
	FinalPool       [FinalPoolSlotsLimit]*ChainRound
	FinalIndex      int
	FinalCount      int
	// contains filtered or unexported fields
}

func (*Chain) AppendCosiAction added in v0.9.0

func (chain *Chain) AppendCosiAction(m *CosiAction) error

func (*Chain) AppendFinalSnapshot added in v0.9.0

func (chain *Chain) AppendFinalSnapshot(peerId crypto.Hash, s *common.Snapshot) error

func (*Chain) AppendSelfEmpty added in v0.9.0

func (chain *Chain) AppendSelfEmpty(s *common.Snapshot) error

func (*Chain) ConsumeFinalActions added in v0.9.0

func (chain *Chain) ConsumeFinalActions()

func (*Chain) QueuePollSnapshots added in v0.9.0

func (chain *Chain) QueuePollSnapshots()

func (*Chain) StepForward added in v0.9.0

func (chain *Chain) StepForward()

func (*Chain) Teardown added in v0.9.0

func (chain *Chain) Teardown()

type ChainRound added in v0.9.0

type ChainRound struct {
	Number    uint64
	Size      int
	Timestamp uint64
	Snapshots [FinalPoolRoundSizeLimit]*PeerSnapshot
	// contains filtered or unexported fields
}

type ChainState added in v0.9.0

type ChainState struct {
	sync.RWMutex
	CacheRound   *CacheRound
	FinalRound   *FinalRound
	RoundHistory []*FinalRound
	RoundLinks   map[crypto.Hash]uint64
}

type CosiAction added in v0.5.0

type CosiAction struct {
	Action       int
	PeerId       crypto.Hash
	SnapshotHash crypto.Hash
	Snapshot     *common.Snapshot
	Commitment   *crypto.Key
	Signature    *crypto.CosiSignature
	Response     *[32]byte
	Transaction  *common.VersionedTransaction
	WantTx       bool
	// contains filtered or unexported fields
}

type CosiAggregator added in v0.5.0

type CosiAggregator struct {
	Snapshot    *common.Snapshot
	Transaction *common.VersionedTransaction
	WantTxs     map[crypto.Hash]bool
	Commitments map[int]*crypto.Key
	Responses   map[int]*[32]byte
	// contains filtered or unexported fields
}

type CosiVerifier added in v0.5.0

type CosiVerifier struct {
	Snapshot *common.Snapshot
	// contains filtered or unexported fields
}

type FinalRound

type FinalRound struct {
	NodeId crypto.Hash
	Number uint64
	Start  uint64
	End    uint64
	Hash   crypto.Hash
}

func (*FinalRound) Copy

func (f *FinalRound) Copy() *FinalRound

type Genesis

type Genesis struct {
	Epoch int64 `json:"epoch"`
	Nodes []struct {
		Signer  common.Address `json:"signer"`
		Payee   common.Address `json:"payee"`
		Balance common.Integer `json:"balance"`
	} `json:"nodes"`
	Domains []struct {
		Signer  common.Address `json:"signer"`
		Balance common.Integer `json:"balance"`
	} `json:"domains"`
}

type Node

type Node struct {
	IdForNetwork crypto.Hash
	Signer       common.Address
	Listener     string

	Peer        *network.Peer
	TopoCounter *TopologicalSequence
	SyncPoints  *syncMap

	AllNodesSorted       []*CNode
	AllNodesId           []crypto.Hash
	ConsensusNodes       map[crypto.Hash]*CNode
	SortedConsensusNodes []crypto.Hash
	ConsensusIndex       int
	ConsensusPledging    *CNode
	GraphTimestamp       uint64

	Epoch uint64
	// contains filtered or unexported fields
}

func SetupNode

func SetupNode(custom *config.Custom, persistStore storage.Store, cacheStore *fastcache.Cache, addr string, dir string) (*Node, error)

func (*Node) Authenticate

func (node *Node) Authenticate(msg []byte) (crypto.Hash, string, error)

func (*Node) BuildAuthenticationMessage

func (node *Node) BuildAuthenticationMessage() []byte

func (*Node) BuildChain added in v0.9.0

func (node *Node) BuildChain(chainId crypto.Hash) *Chain

func (*Node) BuildGraph

func (node *Node) BuildGraph() []*network.SyncPoint

func (*Node) BuildGraphWithPoolInfo added in v0.9.0

func (node *Node) BuildGraphWithPoolInfo() []map[string]interface{}

func (*Node) CachePutTransaction

func (node *Node) CachePutTransaction(peerId crypto.Hash, tx *common.VersionedTransaction) error

func (*Node) CacheVerify

func (node *Node) CacheVerify(snap crypto.Hash, sig crypto.Signature, pub crypto.Key) bool

func (*Node) CacheVerifyCosi added in v0.5.0

func (node *Node) CacheVerifyCosi(snap crypto.Hash, sig *crypto.CosiSignature, publics []*crypto.Key, threshold int) bool

func (*Node) CheckBroadcastedToPeers added in v0.2.12

func (node *Node) CheckBroadcastedToPeers() bool

func (*Node) CheckCatchUpWithPeers added in v0.2.12

func (node *Node) CheckCatchUpWithPeers() bool

func (*Node) ConsensusKeys added in v0.5.0

func (node *Node) ConsensusKeys(timestamp uint64) []*crypto.Key

func (*Node) ConsensusRemovedRecently added in v0.6.3

func (node *Node) ConsensusRemovedRecently(timestamp uint64) *CNode

func (*Node) ConsensusThreshold added in v0.5.0

func (node *Node) ConsensusThreshold(timestamp uint64) int

func (*Node) CosiAggregateSelfCommitments added in v0.5.0

func (node *Node) CosiAggregateSelfCommitments(peerId crypto.Hash, snap crypto.Hash, commitment *crypto.Key, wantTx bool) error

func (*Node) CosiAggregateSelfResponses added in v0.5.0

func (node *Node) CosiAggregateSelfResponses(peerId crypto.Hash, snap crypto.Hash, response *[32]byte) error

func (*Node) CosiQueueExternalAnnouncement added in v0.5.0

func (node *Node) CosiQueueExternalAnnouncement(peerId crypto.Hash, s *common.Snapshot, commitment *crypto.Key) error

func (*Node) CosiQueueExternalChallenge added in v0.5.0

func (node *Node) CosiQueueExternalChallenge(peerId crypto.Hash, snap crypto.Hash, cosi *crypto.CosiSignature, ver *common.VersionedTransaction) error

func (*Node) ElectionLoop added in v0.3.5

func (node *Node) ElectionLoop()

func (*Node) GetCacheStore added in v0.2.18

func (node *Node) GetCacheStore() *fastcache.Cache

func (*Node) GetOrCreateChain added in v0.9.0

func (node *Node) GetOrCreateChain(id crypto.Hash) *Chain

func (*Node) Import added in v0.9.0

func (node *Node) Import(configDir string, source storage.Store) error

func (*Node) ListenNeighbors

func (node *Node) ListenNeighbors() error

func (*Node) LoadAllChains added in v0.9.0

func (node *Node) LoadAllChains(store storage.Store, networkId crypto.Hash) error

func (*Node) LoadCacheToQueue

func (node *Node) LoadCacheToQueue() error

func (*Node) LoadConsensusNodes

func (node *Node) LoadConsensusNodes() error

func (*Node) LoadGenesis

func (node *Node) LoadGenesis(configDir string) error

func (*Node) LoadNodeConfig added in v0.2.15

func (node *Node) LoadNodeConfig()

func (*Node) Loop added in v0.1.2

func (node *Node) Loop() error

func (*Node) MintLoop added in v0.1.1

func (node *Node) MintLoop()

func (*Node) NetworkId

func (node *Node) NetworkId() crypto.Hash

func (*Node) PingNeighborsFromConfig added in v0.7.25

func (node *Node) PingNeighborsFromConfig() error

func (*Node) PoolInfo added in v0.9.0

func (node *Node) PoolInfo() (uint64, uint64)

func (*Node) PoolSize added in v0.6.0

func (node *Node) PoolSize() (common.Integer, error)

func (*Node) QueueTransaction added in v0.1.2

func (node *Node) QueueTransaction(tx *common.VersionedTransaction) (string, error)

func (*Node) ReadAllNodes added in v0.5.6

func (node *Node) ReadAllNodes() []crypto.Hash

func (*Node) ReadSnapshotsForNodeRound

func (node *Node) ReadSnapshotsForNodeRound(nodeIdWithNetwork crypto.Hash, round uint64) ([]*common.SnapshotWithTopologicalOrder, error)

func (*Node) ReadSnapshotsSinceTopology

func (node *Node) ReadSnapshotsSinceTopology(offset, count uint64) ([]*common.SnapshotWithTopologicalOrder, error)

func (*Node) SPS added in v0.9.0

func (node *Node) SPS() float64

func (*Node) SendTransactionToPeer

func (node *Node) SendTransactionToPeer(peerId, hash crypto.Hash) error

func (*Node) SortAllNodesByTimestampAndId added in v0.6.1

func (node *Node) SortAllNodesByTimestampAndId() []*CNode

func (*Node) Teardown added in v0.8.3

func (node *Node) Teardown()

func (*Node) TopoWrite added in v0.9.0

func (*Node) TopologicalOrder added in v0.1.2

func (node *Node) TopologicalOrder() uint64

func (*Node) UpdateNeighbors added in v0.8.3

func (node *Node) UpdateNeighbors(neighbors []string) error

func (*Node) UpdateSyncPoint

func (node *Node) UpdateSyncPoint(peerId crypto.Hash, points []*network.SyncPoint)

func (*Node) Uptime added in v0.1.14

func (node *Node) Uptime() time.Duration

func (*Node) VerifyAndQueueAppendSnapshotFinalization added in v0.5.0

func (node *Node) VerifyAndQueueAppendSnapshotFinalization(peerId crypto.Hash, s *common.Snapshot) error

type PeerSnapshot added in v0.9.0

type PeerSnapshot struct {
	Snapshot *common.Snapshot
	// contains filtered or unexported fields
}

type TopologicalSequence

type TopologicalSequence struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func (*TopologicalSequence) TopoStats added in v0.9.0

func (topo *TopologicalSequence) TopoStats()

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

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