Documentation
¶
Index ¶
Constants ¶
const ( // MinPercentConnectedBuffer is the safety buffer for calculation of // MinPercentConnected. This increases the required percentage above // alpha/k. This value must be [0-1]. // 0 means MinPercentConnected = alpha/k. // 1 means MinPercentConnected = 1 (fully connected). MinPercentConnectedBuffer = .2 )
Variables ¶
var ( DefaultParameters = Parameters{ K: 20, AlphaPreference: 15, AlphaConfidence: 15, Beta: 20, ConcurrentRepolls: 4, OptimalProcessing: 10, MaxOutstandingItems: 256, MaxItemProcessingTime: 30 * time.Second, } ErrParametersInvalid = errors.New("parameters invalid") )
Functions ¶
This section is empty.
Types ¶
type Binary ¶ added in v1.11.0
type Binary interface {
fmt.Stringer
// Returns the currently preferred choice to be finalized
Preference() int
// RecordPoll records the results of a network poll
RecordPoll(count, choice int)
// RecordUnsuccessfulPoll resets the snowflake counter of this instance
RecordUnsuccessfulPoll()
// Return whether a choice has been finalized
Finalized() bool
}
Binary is a snow instance deciding between two values. The caller samples k nodes and calls RecordPoll with the result. RecordUnsuccessfulPoll resets the confidence counters when one or more consecutive polls fail to reach alphaPreference votes.
type Consensus ¶
type Consensus interface {
fmt.Stringer
// Adds a new choice to vote on
Add(newChoice ids.ID)
// Returns the currently preferred choice to be finalized
Preference() ids.ID
// RecordPoll records the results of a network poll. Assumes all choices
// have been previously added.
//
// If the consensus instance was not previously finalized, this function
// will return true if the poll was successful and false if the poll was
// unsuccessful.
//
// If the consensus instance was previously finalized, the function may
// return true or false.
RecordPoll(votes bag.Bag[ids.ID]) bool
// RecordUnsuccessfulPoll resets the snowflake counters of this consensus
// instance
RecordUnsuccessfulPoll()
// Return whether a choice has been finalized
Finalized() bool
}
Consensus represents a general snow instance that can be used directly to process the results of network queries.
type Factory ¶
type Factory interface {
NewNnary(params Parameters, choice ids.ID) Nnary
NewUnary(params Parameters) Unary
}
Factory produces Nnary and Unary decision instances
type Flat ¶
type Flat struct {
// wraps the n-nary snow logic
Nnary
// contains filtered or unexported fields
}
Flat is a naive implementation of a multi-choice snow instance
type Nnary ¶ added in v1.11.0
type Nnary interface {
fmt.Stringer
// Adds a new possible choice
Add(newChoice ids.ID)
// Returns the currently preferred choice to be finalized
Preference() ids.ID
// RecordPoll records the results of a network poll
RecordPoll(count int, choice ids.ID)
// RecordUnsuccessfulPoll resets the snowflake counter of this instance
RecordUnsuccessfulPoll()
// Return whether a choice has been finalized
Finalized() bool
}
Nnary is a snow instance deciding between an unbounded number of values. The caller samples k nodes and calls RecordPoll with the result. RecordUnsuccessfulPoll resets the confidence counters when one or more consecutive polls fail to reach alphaPreference votes.
type Parameters ¶
type Parameters struct {
// K is the number of nodes to query and sample in a round.
K int `json:"k" yaml:"k"`
// Alpha is used for backwards compatibility purposes and is only referenced
// during json parsing.
Alpha *int `json:"alpha,omitempty" yaml:"alpha,omitempty"`
// AlphaPreference is the vote threshold to change your preference.
AlphaPreference int `json:"alphaPreference" yaml:"alphaPreference"`
// AlphaConfidence is the vote threshold to increase your confidence.
AlphaConfidence int `json:"alphaConfidence" yaml:"alphaConfidence"`
// Beta is the number of consecutive successful queries required for
// finalization.
Beta int `json:"beta" yaml:"beta"`
// ConcurrentRepolls is the number of outstanding polls the engine will
// target to have while there is something processing.
ConcurrentRepolls int `json:"concurrentRepolls" yaml:"concurrentRepolls"`
// OptimalProcessing is used to limit block creation when a large number of
// blocks are processing.
OptimalProcessing int `json:"optimalProcessing" yaml:"optimalProcessing"`
// Reports unhealthy if more than this number of items are outstanding.
MaxOutstandingItems int `json:"maxOutstandingItems" yaml:"maxOutstandingItems"`
// Reports unhealthy if there is an item processing for longer than this
// duration.
MaxItemProcessingTime time.Duration `json:"maxItemProcessingTime" yaml:"maxItemProcessingTime"`
}
Parameters required for snowball consensus
func (Parameters) MinPercentConnectedHealthy ¶ added in v1.10.3
func (p Parameters) MinPercentConnectedHealthy() float64
func (Parameters) Verify ¶ added in v1.2.0
func (p Parameters) Verify() error
Verify returns nil if the parameters describe a valid initialization.
An initialization is valid if the following conditions are met:
- K/2 < AlphaPreference <= AlphaConfidence <= K - 0 < ConcurrentRepolls <= Beta - 0 < OptimalProcessing - 0 < MaxOutstandingItems - 0 < MaxItemProcessingTime
Note: K/2 < K implies that 0 <= K/2, so we don't need an explicit check that AlphaPreference is positive.
type Tree ¶
type Tree struct {
// contains filtered or unexported fields
}
Tree implements the Consensus interface by using a modified patricia tree.
func (*Tree) RecordUnsuccessfulPoll ¶
func (t *Tree) RecordUnsuccessfulPoll()
type Unary ¶ added in v1.11.0
type Unary interface {
fmt.Stringer
// RecordPoll records the results of a network poll
RecordPoll(count int)
// RecordUnsuccessfulPoll resets the snowflake counter of this instance
RecordUnsuccessfulPoll()
// Return whether a choice has been finalized
Finalized() bool
// Returns a new binary snowball instance with the original choice.
Extend(originalPreference int) Binary
// Returns a new unary snowflake instance with the same state
Clone() Unary
}
Unary is a snow instance deciding on one value. The caller samples k nodes and calls RecordPoll with the result. RecordUnsuccessfulPoll resets the confidence counters when one or more consecutive polls fail to reach alphaPreference votes.