tortoise

package
v1.1.6 Latest Latest
Warning

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

Go to latest
Published: Sep 16, 2023 License: MIT Imports: 34 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Verifying = 0
	Full      = 1
)

Variables

View Source
var (
	ErrBallotExists = errors.New("tortoise: ballot exists")
)

Functions

func RecoverLayer added in v1.0.0

func RecoverLayer(ctx context.Context, trtl *Tortoise, db *datastore.CachedDB, beacon system.BeaconGetter, lid, current types.LayerID) error

func RunTrace added in v1.0.0

func RunTrace(path string, breakpoint func(), opts ...Opt) error

Types

type AtxTrace added in v1.0.0

type AtxTrace struct {
	Header *types.AtxTortoiseData `json:",inline"`
}

func (*AtxTrace) New added in v1.0.0

func (a *AtxTrace) New() traceEvent

func (*AtxTrace) Run added in v1.0.0

func (a *AtxTrace) Run(r *traceRunner) error

func (*AtxTrace) Type added in v1.0.0

func (a *AtxTrace) Type() eventType

type BallotData added in v1.1.4

type BallotData struct {
	ID           types.BallotID
	Layer        types.LayerID
	ATXID        types.ATXID
	Smesher      types.NodeID
	Beacon       types.Beacon
	Eligiblities uint32
}

type BallotTrace added in v1.0.0

type BallotTrace struct {
	Ballot *types.BallotTortoiseData `json:",inline"`
}

func (*BallotTrace) New added in v1.0.0

func (b *BallotTrace) New() traceEvent

func (*BallotTrace) Run added in v1.0.0

func (b *BallotTrace) Run(r *traceRunner) error

func (*BallotTrace) Type added in v1.0.0

func (b *BallotTrace) Type() eventType

type BeaconTrace added in v1.0.0

type BeaconTrace struct {
	Epoch  types.EpochID `json:"epoch"`
	Beacon types.Beacon  `json:"beacon"`
}

func (*BeaconTrace) New added in v1.0.0

func (b *BeaconTrace) New() traceEvent

func (*BeaconTrace) Run added in v1.0.0

func (b *BeaconTrace) Run(r *traceRunner) error

func (*BeaconTrace) Type added in v1.0.0

func (b *BeaconTrace) Type() eventType

type BlockTrace added in v1.0.0

type BlockTrace struct {
	Header types.BlockHeader `json:",inline"`
	Valid  bool              `json:"v"`
}

func (*BlockTrace) New added in v1.0.0

func (b *BlockTrace) New() traceEvent

func (*BlockTrace) Run added in v1.0.0

func (b *BlockTrace) Run(r *traceRunner) error

func (*BlockTrace) Type added in v1.0.0

func (b *BlockTrace) Type() eventType

type Config added in v1.0.0

type Config struct {
	Hdist uint32 `mapstructure:"tortoise-hdist"` // hare output lookback distance
	Zdist uint32 `mapstructure:"tortoise-zdist"` // hare result wait distance
	// how long we are waiting for a switch from verifying to full. relevant during rerun.
	WindowSize    uint32 `mapstructure:"tortoise-window-size"`    // size of the tortoise sliding window (in layers)
	MaxExceptions int    `mapstructure:"tortoise-max-exceptions"` // if candidate for base ballot has more than max exceptions it will be ignored
	// number of layers to delay votes for blocks with bad beacon values during self-healing. ideally a full epoch.
	BadBeaconVoteDelayLayers uint32 `mapstructure:"tortoise-delay-layers"`
	// EnableTracer will write tortoise traces to the stderr.
	EnableTracer bool `mapstructure:"tortoise-enable-tracer"`
	// MinimalActiveSetWeight denotes weight that will replace weight
	// recorded in the first ballot, if that weight is less than minimal
	// for purposes of eligibility computation.
	MinimalActiveSetWeight uint64        `mapstructure:"tortoise-activeset-weight"`
	EmitEmptyActiveSet     types.LayerID `mapstructure:"emit-empty-active-set"`

	LayerSize uint32
}

Config for protocol parameters.

func DefaultConfig added in v1.0.0

func DefaultConfig() Config

DefaultConfig for Tortoise.

type ConfigTrace added in v1.0.0

type ConfigTrace struct {
	Hdist                    uint32 `json:"hdist"`
	Zdist                    uint32 `json:"zdist"`
	WindowSize               uint32 `json:"window"`
	MaxExceptions            uint32 `json:"exceptions"`
	BadBeaconVoteDelayLayers uint32 `json:"delay"`
	LayerSize                uint32 `json:"layer-size"`
	EpochSize                uint32 `json:"epoch-size"` // this field is not set in the original config
	EffectiveGenesis         uint32 `json:"effective-genesis"`
}

func (*ConfigTrace) New added in v1.0.0

func (c *ConfigTrace) New() traceEvent

func (*ConfigTrace) Run added in v1.0.0

func (c *ConfigTrace) Run(r *traceRunner) error

func (*ConfigTrace) Type added in v1.0.0

func (c *ConfigTrace) Type() eventType

type DecodeBallotTrace added in v1.0.0

type DecodeBallotTrace struct {
	Ballot *types.BallotTortoiseData `json:",inline"`
	Error  string                    `json:"e"`
}

func (*DecodeBallotTrace) New added in v1.0.0

func (d *DecodeBallotTrace) New() traceEvent

func (*DecodeBallotTrace) Run added in v1.0.0

func (b *DecodeBallotTrace) Run(r *traceRunner) error

func (*DecodeBallotTrace) Type added in v1.0.0

func (d *DecodeBallotTrace) Type() eventType

type DecodedBallot added in v1.0.0

type DecodedBallot struct {
	*types.BallotTortoiseData
	// contains filtered or unexported fields
}

DecodedBallot created after unwrapping exceptions list and computing internal opinion.

type EncodeVotesOpts added in v1.0.0

type EncodeVotesOpts func(*encodeConf)

EncodeVotesOpts is for configuring EncodeVotes options.

func EncodeVotesWithCurrent added in v1.0.0

func EncodeVotesWithCurrent(current types.LayerID) EncodeVotesOpts

EncodeVotesWithCurrent changes last known layer that will be used for encoding votes.

NOTE(dshulyak) why do we need this? tortoise computes threshold from last non-verified till the last known layer, since we dont download atxs before starting tortoise we won't be able to compute threshold based on the last clock layer (see https://github.com/spacemeshos/go-spacemesh/issues/3003)

type EncodeVotesTrace added in v1.0.0

type EncodeVotesTrace struct {
	Layer   types.LayerID  `json:"lid"`
	Opinion *types.Opinion `json:"opinion"`
	Error   string         `json:"e"`
}

func (*EncodeVotesTrace) New added in v1.0.0

func (e *EncodeVotesTrace) New() traceEvent

func (*EncodeVotesTrace) Run added in v1.0.0

func (e *EncodeVotesTrace) Run(r *traceRunner) error

func (*EncodeVotesTrace) Type added in v1.0.0

func (e *EncodeVotesTrace) Type() eventType

type HareTrace added in v1.0.0

type HareTrace struct {
	Layer types.LayerID `json:"lid"`
	Vote  types.BlockID `json:"vote"`
}

func (*HareTrace) New added in v1.0.0

func (h *HareTrace) New() traceEvent

func (*HareTrace) Run added in v1.0.0

func (h *HareTrace) Run(r *traceRunner) error

func (*HareTrace) Type added in v1.0.0

func (h *HareTrace) Type() eventType

type MalfeasanceTrace added in v1.0.0

type MalfeasanceTrace struct {
	ID types.NodeID `json:"id"`
}

func (*MalfeasanceTrace) New added in v1.0.0

func (m *MalfeasanceTrace) New() traceEvent

func (*MalfeasanceTrace) Run added in v1.0.0

func (m *MalfeasanceTrace) Run(r *traceRunner) error

func (*MalfeasanceTrace) Type added in v1.0.0

func (m *MalfeasanceTrace) Type() eventType

type Mode added in v1.0.0

type Mode int

func (Mode) String added in v1.0.0

func (m Mode) String() string

type Opt added in v1.0.0

type Opt func(t *Tortoise)

Opt for configuring tortoise.

func WithConfig added in v1.0.0

func WithConfig(cfg Config) Opt

WithConfig defines protocol parameters.

func WithLogger added in v1.0.0

func WithLogger(logger log.Log) Opt

WithLogger defines logger for tortoise.

func WithTracer added in v1.0.0

func WithTracer(opts ...TraceOpt) Opt

WithTracer enables tracing of every call to the tortoise.

type ResultsTrace added in v1.0.0

type ResultsTrace struct {
	From    types.LayerID  `json:"from"`
	To      types.LayerID  `json:"to"`
	Error   string         `json:"e"`
	Results []result.Layer `json:"results"`
}

func (*ResultsTrace) New added in v1.0.0

func (r *ResultsTrace) New() traceEvent

func (*ResultsTrace) Run added in v1.0.0

func (r *ResultsTrace) Run(rt *traceRunner) error

func (*ResultsTrace) Type added in v1.0.0

func (r *ResultsTrace) Type() eventType

type StoreBallotTrace added in v1.0.0

type StoreBallotTrace struct {
	ID        types.BallotID `json:"id"`
	Malicious bool           `json:"mal"`
	Error     string         `json:"e,omitempty"`
}

func (*StoreBallotTrace) New added in v1.0.0

func (s *StoreBallotTrace) New() traceEvent

func (*StoreBallotTrace) Run added in v1.0.0

func (s *StoreBallotTrace) Run(r *traceRunner) error

func (*StoreBallotTrace) Type added in v1.0.0

func (s *StoreBallotTrace) Type() eventType

type TallyTrace added in v1.0.0

type TallyTrace struct {
	Layer types.LayerID `json:"lid"`
}

func (*TallyTrace) New added in v1.0.0

func (t *TallyTrace) New() traceEvent

func (*TallyTrace) Run added in v1.0.0

func (t *TallyTrace) Run(r *traceRunner) error

func (*TallyTrace) Type added in v1.0.0

func (t *TallyTrace) Type() eventType

type Tortoise

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

Tortoise is a thread safe verifying tortoise wrapper, it just locks all actions.

func New added in v1.0.0

func New(opts ...Opt) (*Tortoise, error)

New creates Tortoise instance.

func Recover added in v1.0.0

func Recover(db *datastore.CachedDB, latest types.LayerID, beacon system.BeaconGetter, opts ...Opt) (*Tortoise, error)

Recover tortoise state from database.

func (*Tortoise) DecodeBallot added in v1.0.0

func (t *Tortoise) DecodeBallot(ballot *types.BallotTortoiseData) (*DecodedBallot, error)

DecodeBallot decodes ballot if it wasn't processed earlier.

func (*Tortoise) EncodeVotes added in v1.0.0

func (t *Tortoise) EncodeVotes(ctx context.Context, opts ...EncodeVotesOpts) (*types.Opinion, error)

EncodeVotes chooses a base ballot and creates a differences list. needs the hare results for latest layers.

func (*Tortoise) GetBallot added in v1.1.4

func (t *Tortoise) GetBallot(id types.BallotID) *BallotData

func (*Tortoise) GetMissingActiveSet added in v1.0.0

func (t *Tortoise) GetMissingActiveSet(epoch types.EpochID, atxs []types.ATXID) []types.ATXID

GetMissingActiveSet returns unknown atxs from the original list. It is done for a specific epoch as active set atxs never cross epoch boundary.

func (*Tortoise) LatestComplete

func (t *Tortoise) LatestComplete() types.LayerID

LatestComplete returns the latest verified layer.

func (*Tortoise) Mode added in v1.0.0

func (t *Tortoise) Mode() Mode

Mode returns 0 for verifying.

func (*Tortoise) OnAtx added in v1.0.0

func (t *Tortoise) OnAtx(header *types.AtxTortoiseData)

OnAtx is expected to be called before ballots that use this atx.

func (*Tortoise) OnBallot added in v1.0.0

func (t *Tortoise) OnBallot(ballot *types.BallotTortoiseData)

OnBallot should be called every time new ballot is received. Dependencies (base ballot, ref ballot, active set and its own atx) must be processed before ballot.

func (*Tortoise) OnBeacon added in v1.0.0

func (t *Tortoise) OnBeacon(eid types.EpochID, beacon types.Beacon)

func (*Tortoise) OnBlock added in v1.0.0

func (t *Tortoise) OnBlock(header types.BlockHeader)

OnBlock updates tortoise with information that data is available locally.

func (*Tortoise) OnHareOutput added in v1.0.0

func (t *Tortoise) OnHareOutput(lid types.LayerID, bid types.BlockID)

OnHareOutput should be called when hare terminated or certificate for a block was synced from a peer. This method is expected to be called any number of times, with layers in any order.

This method should be called with EmptyBlockID if node received proof of malicious behavior, such as signing same block id by members of the same committee.

func (*Tortoise) OnMalfeasance added in v1.0.0

func (t *Tortoise) OnMalfeasance(id types.NodeID)

OnMalfeasance registers node id as malfeasent. - ballots from this id will have zero weight - atxs - will not be counted towards global/local threhsolds If node registers equivocating ballot/atx it should call OnMalfeasance before storing ballot/atx.

func (*Tortoise) OnValidBlock added in v1.0.0

func (t *Tortoise) OnValidBlock(header types.BlockHeader)

OnValidBlock inserts block, updates that data is stored locally and that block was previously considered valid by tortoise.

func (*Tortoise) OnWeakCoin added in v1.0.0

func (t *Tortoise) OnWeakCoin(lid types.LayerID, coin bool)

func (*Tortoise) Results added in v1.0.0

func (t *Tortoise) Results(from, to types.LayerID) ([]result.Layer, error)

Results returns layers that crossed threshold in range [from, to].

func (*Tortoise) StoreBallot added in v1.0.0

func (t *Tortoise) StoreBallot(decoded *DecodedBallot) error

StoreBallot stores previously decoded ballot.

func (*Tortoise) TallyVotes added in v1.0.0

func (t *Tortoise) TallyVotes(ctx context.Context, lid types.LayerID)

TallyVotes up to the specified layer.

func (*Tortoise) Updates added in v1.0.0

func (t *Tortoise) Updates() []result.Layer

Updates returns list of layers where opinion was changed since previous call.

type TraceOpt added in v1.0.0

type TraceOpt func(*zap.Config)

func WithOutput added in v1.0.0

func WithOutput(path string) TraceOpt

type UpdatesTrace added in v1.0.0

type UpdatesTrace struct {
	ResultsTrace `json:",inline"`
}

func (*UpdatesTrace) New added in v1.0.0

func (u *UpdatesTrace) New() traceEvent

func (*UpdatesTrace) Run added in v1.0.0

func (u *UpdatesTrace) Run(r *traceRunner) error

func (*UpdatesTrace) Type added in v1.0.0

func (u *UpdatesTrace) Type() eventType

type WeakCoinTrace added in v1.0.0

type WeakCoinTrace struct {
	Layer types.LayerID `json:"lid"`
	Coin  bool          `json:"coin"`
}

func (*WeakCoinTrace) New added in v1.0.0

func (w *WeakCoinTrace) New() traceEvent

func (*WeakCoinTrace) Run added in v1.0.0

func (w *WeakCoinTrace) Run(r *traceRunner) error

func (*WeakCoinTrace) Type added in v1.0.0

func (w *WeakCoinTrace) Type() eventType

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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