avalanche

package
v0.0.0-...-3fa05c8 Latest Latest
Warning

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

Go to latest
Published: Apr 12, 2023 License: BSD-3-Clause Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Consensus

type Consensus interface {
	health.Checker

	// Takes in alpha, beta1, beta2, the accepted frontier, the join statuses,
	// the mutation statuses, and the consumer statuses. If accept or reject is
	// called, the status maps should be immediately updated accordingly.
	// Assumes each element in the accepted frontier will return accepted from
	// the join status map.
	Initialize(context.Context, *snow.ConsensusContext, Parameters, []Vertex) error

	// Returns the number of vertices processing
	NumProcessing() int

	// Returns true if the transaction is virtuous.
	// That is, no transaction has been added that conflicts with it
	IsVirtuous(snowstorm.Tx) bool

	// Adds a new decision. Assumes the dependencies have already been added.
	// Assumes that mutations don't conflict with themselves. Returns if a
	// critical error has occurred.
	Add(context.Context, Vertex) error

	// VertexIssued returns true iff Vertex has been added
	VertexIssued(Vertex) bool

	// TxIssued returns true if a vertex containing this transaction has been added
	TxIssued(snowstorm.Tx) bool

	// Returns the set of transaction IDs that are virtuous but not contained in
	// any preferred vertices.
	Orphans() set.Set[ids.ID]

	// Returns a set of vertex IDs that were virtuous at the last update.
	Virtuous() set.Set[ids.ID]

	// Returns a set of vertex IDs that are preferred
	Preferences() set.Set[ids.ID]

	// RecordPoll collects the results of a network poll. If a result has not
	// been added, the result is dropped. Returns if a critical error has
	// occurred.
	RecordPoll(context.Context, bag.UniqueBag[ids.ID]) error

	// Quiesce is guaranteed to return true if the instance is finalized. It
	// may, but doesn't need to, return true if all processing vertices are
	// rogue. It must return false if there is a virtuous vertex that is still
	// processing.
	Quiesce() bool

	// Finalized returns true if all transactions that have been added have been
	// finalized. Note, it is possible that after returning finalized, a new
	// decision may be added such that this instance is no longer finalized.
	Finalized() bool
}

Consensus represents a general avalanche instance that can be used directly to process a series of partially ordered elements.

func Trace

func Trace(consensus Consensus, tracer trace.Tracer) Consensus

type Factory

type Factory interface {
	New() Consensus
}

Factory returns new instances of Consensus

type Parameters

type Parameters struct {
	snowball.Parameters
	Parents   int `json:"parents" yaml:"parents"`
	BatchSize int `json:"batchSize" yaml:"batchSize"`
}

Parameters the avalanche parameters include the snowball parameters and the optimal number of parents

func (Parameters) Valid

func (p Parameters) Valid() error

Valid returns nil if the parameters describe a valid initialization.

type TestVertex

type TestVertex struct {
	choices.TestDecidable

	VerifyErrV    error
	ParentsV      []Vertex
	ParentsErrV   error
	HasWhitelistV bool
	WhitelistV    set.Set[ids.ID]
	WhitelistErrV error
	HeightV       uint64
	HeightErrV    error
	TxsV          []snowstorm.Tx
	TxsErrV       error
	BytesV        []byte
}

TestVertex is a useful test vertex

func (*TestVertex) Bytes

func (v *TestVertex) Bytes() []byte

func (*TestVertex) HasWhitelist

func (v *TestVertex) HasWhitelist() bool

func (*TestVertex) Height

func (v *TestVertex) Height() (uint64, error)

func (*TestVertex) Parents

func (v *TestVertex) Parents() ([]Vertex, error)

func (*TestVertex) Txs

func (v *TestVertex) Txs(context.Context) ([]snowstorm.Tx, error)

func (*TestVertex) Verify

func (v *TestVertex) Verify(context.Context) error

func (*TestVertex) Whitelist

func (v *TestVertex) Whitelist(context.Context) (set.Set[ids.ID], error)

type Topological

type Topological struct {
	metrics.Latency
	// contains filtered or unexported fields
}

Topological performs the avalanche algorithm by utilizing a topological sort of the voting results. Assumes that vertices are inserted in topological order.

func (*Topological) Add

func (ta *Topological) Add(ctx context.Context, vtx Vertex) error

func (*Topological) Finalized

func (ta *Topological) Finalized() bool

func (*Topological) HealthCheck

func (ta *Topological) HealthCheck(ctx context.Context) (interface{}, error)

HealthCheck returns information about the consensus health.

func (*Topological) Initialize

func (ta *Topological) Initialize(
	ctx context.Context,
	chainCtx *snow.ConsensusContext,
	params Parameters,
	frontier []Vertex,
) error

func (*Topological) IsVirtuous

func (ta *Topological) IsVirtuous(tx snowstorm.Tx) bool

func (*Topological) NumProcessing

func (ta *Topological) NumProcessing() int

func (*Topological) Orphans

func (ta *Topological) Orphans() set.Set[ids.ID]

func (*Topological) Preferences

func (ta *Topological) Preferences() set.Set[ids.ID]

func (*Topological) Quiesce

func (ta *Topological) Quiesce() bool

func (*Topological) RecordPoll

func (ta *Topological) RecordPoll(ctx context.Context, responses bag.UniqueBag[ids.ID]) error

func (*Topological) TxIssued

func (ta *Topological) TxIssued(tx snowstorm.Tx) bool

func (*Topological) VertexIssued

func (ta *Topological) VertexIssued(vtx Vertex) bool

func (*Topological) Virtuous

func (ta *Topological) Virtuous() set.Set[ids.ID]

type TopologicalFactory

type TopologicalFactory struct{}

TopologicalFactory implements Factory by returning a topological struct

func (TopologicalFactory) New

type Vertex

type Vertex interface {
	choices.Decidable
	snowstorm.Whitelister

	// Vertex verification should be performed before issuance.
	Verify(context.Context) error

	// Returns the vertices this vertex depends on
	Parents() ([]Vertex, error)

	// Returns the height of this vertex. A vertex's height is defined by one
	// greater than the maximum height of the parents.
	Height() (uint64, error)

	// Returns a series of state transitions to be performed on acceptance
	Txs(context.Context) ([]snowstorm.Tx, error)

	// Returns the binary representation of this vertex
	Bytes() []byte
}

Vertex is a collection of multiple transactions tied to other vertices

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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