abft

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Sep 23, 2021 License: MIT Imports: 18 Imported by: 3

Documentation

Index

Constants

View Source
const (
	FirstFrame = idx.Frame(1)
	FirstEpoch = idx.Epoch(1)
)

Variables

View Source
var (
	ErrNoGenesis = errors.New("genesis not applied")
)
View Source
var (
	ErrWrongFrame = errors.New("claimed frame mismatched with calculated")
)

Functions

This section is empty.

Types

type Config

type Config struct {
}

func DefaultConfig

func DefaultConfig() Config

DefaultStoreConfig for livenet.

func LiteConfig

func LiteConfig() Config

LiteStoreConfig is for tests or inmemory.

type DagIndex

type DagIndex interface {
	dagidx.VectorClock
	dagidx.ForklessCause
}

type DagIndexer

type DagIndexer interface {
	dagidx.VectorClock
	dagidx.ForklessCause

	Add(dag.Event) error
	Flush()
	DropNotFlushed()

	Reset(validators *pos.Validators, db kvdb.Store, getEvent func(hash.Event) dag.Event)
}

type EpochDBProducer

type EpochDBProducer func(epoch idx.Epoch) kvdb.DropableStore

type EpochState

type EpochState struct {
	// stored values
	// these values change only after a change of epoch
	Epoch      idx.Epoch
	Validators *pos.Validators
}

type EventSource

type EventSource interface {
	HasEvent(hash.Event) bool
	GetEvent(hash.Event) dag.Event
}

EventSource is a callback for getting events from an external storage.

type Genesis

type Genesis struct {
	Epoch      idx.Epoch
	Validators *pos.Validators
}

Genesis stores genesis state

type IndexedZilionBFT

type IndexedZilionBFT struct {
	*ZilionBFT
	// contains filtered or unexported fields
}

IndexedZilionBFT performs events ordering and detects cheaters It's a wrapper around Orderer, which adds features which might potentially be application-specific: confirmed events traversal, DAG index updates and cheaters detection. Use this structure if need a general-purpose consensus. Instead, use lower-level abft.Orderer.

func NewIndexedZilionBFT

func NewIndexedZilionBFT(store *Store, input EventSource, dagIndexer DagIndexer, crit func(error), config Config) *IndexedZilionBFT

New creates IndexedZilionBFT instance.

func (*IndexedZilionBFT) Bootstrap

func (p *IndexedZilionBFT) Bootstrap(callback zilionbft.ConsensusCallbacks) error

func (*IndexedZilionBFT) Build

func (p *IndexedZilionBFT) Build(e dag.MutableEvent) error

Build fills consensus-related fields: Frame, IsRoot returns error if event should be dropped

func (*IndexedZilionBFT) Process

func (p *IndexedZilionBFT) Process(e dag.Event) (err error)

Process takes event into processing. Event order matter: parents first. All the event checkers must be launched. Process is not safe for concurrent use.

type LastDecidedState

type LastDecidedState struct {
	// fields can change only after a frame is decided
	LastDecidedFrame idx.Frame
}

LastDecidedState is for persistent storing.

type Orderer

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

Unlike processes events to reach finality on their order. Unlike abft.ZilionBFT, this raw level of abstraction doesn't track cheaters detection

func NewOrderer

func NewOrderer(store *Store, input EventSource, dagIndex OrdererDagIndex, crit func(error), config Config) *Orderer

New creates Orderer instance. Unlike ZilionBFT, Orderer doesn't updates DAG indexes for events, and doesn't detect cheaters It has only one purpose - reaching consensus on events order.

func (*Orderer) Bootstrap

func (p *Orderer) Bootstrap(callback OrdererCallbacks) error

Bootstrap restores abft's state from store.

func (*Orderer) Build

func (p *Orderer) Build(e dag.MutableEvent) error

Build fills consensus-related fields: Frame, IsRoot returns error if event should be dropped

func (*Orderer) Process

func (p *Orderer) Process(e dag.Event) (err error)

Process takes event into processing. Event order matter: parents first. All the event checkers must be launched. Process is not safe for concurrent use.

type OrdererCallbacks

type OrdererCallbacks struct {
	ApplyAtropos func(decidedFrame idx.Frame, atropos hash.Event) (sealEpoch *pos.Validators)

	EpochDBLoaded func(idx.Epoch)
}

type OrdererDagIndex

type OrdererDagIndex interface {
	dagidx.ForklessCause
}

type Store

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

Store is a abft persistent storage working over parent key-value database.

func NewMemStore

func NewMemStore() *Store

NewMemStore creates store over memory map. Store is always blank.

func NewStore

func NewStore(mainDB kvdb.Store, getDB EpochDBProducer, crit func(error), cfg StoreConfig) *Store

NewStore creates store over key-value db.

func (*Store) AddRoot

func (s *Store) AddRoot(selfParentFrame idx.Frame, root dag.Event)

AddRoot stores the new root Not safe for concurrent use due to the complex mutable cache!

func (*Store) ApplyGenesis

func (s *Store) ApplyGenesis(g *Genesis) error

ApplyGenesis writes initial state.

func (*Store) Close

func (s *Store) Close() error

Close leaves underlying database.

func (*Store) GetEpoch

func (s *Store) GetEpoch() idx.Epoch

GetEpoch returns current epoch

func (*Store) GetEpochState

func (s *Store) GetEpochState() *EpochState

GetEpochState returns stored epoch.

func (*Store) GetEventConfirmedOn

func (s *Store) GetEventConfirmedOn(e hash.Event) idx.Frame

GetEventConfirmedOn returns confirmed event hash.

func (*Store) GetFrameRoots

func (s *Store) GetFrameRoots(f idx.Frame) []election.RootAndSlot

GetFrameRoots returns all the roots in the specified frame Not safe for concurrent use due to the complex mutable cache!

func (*Store) GetLastDecidedFrame

func (s *Store) GetLastDecidedFrame() idx.Frame

func (*Store) GetLastDecidedState

func (s *Store) GetLastDecidedState() *LastDecidedState

GetLastDecidedState returns stored LastDecidedState. State is seldom read; so no cache.

func (*Store) GetValidators

func (s *Store) GetValidators() *pos.Validators

GetValidators returns current validators

func (*Store) SetEpochState

func (s *Store) SetEpochState(e *EpochState)

SetEpochState stores epoch.

func (*Store) SetEventConfirmedOn

func (s *Store) SetEventConfirmedOn(e hash.Event, on idx.Frame)

SetEventConfirmedOn stores confirmed event hash.

func (*Store) SetLastDecidedState

func (s *Store) SetLastDecidedState(v *LastDecidedState)

SetLastDecidedState save LastDecidedState. LastDecidedState is seldom read; so no cache.

type StoreCacheConfig

type StoreCacheConfig struct {
	// Cache size for Roots.
	RootsNum    uint
	RootsFrames int
}

StoreCacheConfig is a cache config for store db.

type StoreConfig

type StoreConfig struct {
	Cache StoreCacheConfig
}

StoreConfig is a config for store db.

func DefaultStoreConfig

func DefaultStoreConfig() StoreConfig

DefaultStoreConfig for livenet.

func LiteStoreConfig

func LiteStoreConfig() StoreConfig

LiteStoreConfig is for tests or inmemory.

type ZilionBFT

type ZilionBFT struct {
	*Orderer
	// contains filtered or unexported fields
}

ZilionBFT performs events ordering and detects cheaters It's a wrapper around Orderer, which adds features which might potentially be application-specific: confirmed events traversal, cheaters detection. Use this structure if need a general-purpose consensus. Instead, use lower-level abft.Orderer.

func NewZilionBFT

func NewZilionBFT(store *Store, input EventSource, dagIndex DagIndex, crit func(error), config Config) *ZilionBFT

New creates ZilionBFT instance.

func (*ZilionBFT) Bootstrap

func (p *ZilionBFT) Bootstrap(callback zilionbft.ConsensusCallbacks) error

func (*ZilionBFT) BootstrapWithOrderer

func (p *ZilionBFT) BootstrapWithOrderer(callback zilionbft.ConsensusCallbacks, ordererCallbacks OrdererCallbacks) error

func (*ZilionBFT) OrdererCallbacks

func (p *ZilionBFT) OrdererCallbacks() OrdererCallbacks

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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