abft

package
v1.0.2 Latest Latest
Warning

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

Go to latest
Published: Nov 22, 2021 License: MIT Imports: 19 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 IndexedMugamboBFT added in v1.0.2

type IndexedMugamboBFT struct {
	*MugamboBFT
	// contains filtered or unexported fields
}

IndexedMugamboBFT 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 NewIndexedMugamboBFT added in v1.0.2

func NewIndexedMugamboBFT(store *Store, input EventSource, dagIndexer DagIndexer, crit func(error), config Config) *IndexedMugamboBFT

New creates IndexedMugamboBFT instance.

func (*IndexedMugamboBFT) Bootstrap added in v1.0.2

func (p *IndexedMugamboBFT) Bootstrap(callback mugambobft.ConsensusCallbacks) error

func (*IndexedMugamboBFT) Build added in v1.0.2

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

func (*IndexedMugamboBFT) Process added in v1.0.2

func (p *IndexedMugamboBFT) 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 MugamboBFT added in v1.0.2

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

MugamboBFT 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 NewMugamboBFT added in v1.0.2

func NewMugamboBFT(store *Store, input EventSource, dagIndex DagIndex, crit func(error), config Config) *MugamboBFT

New creates MugamboBFT instance.

func (*MugamboBFT) Bootstrap added in v1.0.2

func (p *MugamboBFT) Bootstrap(callback mugambobft.ConsensusCallbacks) error

func (*MugamboBFT) BootstrapWithOrderer added in v1.0.2

func (p *MugamboBFT) BootstrapWithOrderer(callback mugambobft.ConsensusCallbacks, ordererCallbacks OrdererCallbacks) error

func (*MugamboBFT) OrdererCallbacks added in v1.0.2

func (p *MugamboBFT) OrdererCallbacks() OrdererCallbacks

type Orderer

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

Unlike processes events to reach finality on their order. Unlike abft.MugamboBFT, 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 MugamboBFT, 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(scale cachescale.Func) StoreConfig

DefaultStoreConfig for livenet.

func LiteStoreConfig

func LiteStoreConfig() StoreConfig

LiteStoreConfig is for tests or inmemory.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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