mesh

package
v0.2.8-beta.0 Latest Latest
Warning

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

Go to latest
Published: Dec 9, 2021 License: MIT Imports: 21 Imported by: 0

Documentation

Overview

Package mesh defines the main store point for all the block-mesh objects such as blocks, transactions and global state

Index

Constants

This section is empty.

Variables

View Source
var ErrAlreadyExist = errors.New("block already exists in database")

ErrAlreadyExist error returned when adding an existing value to the database.

View Source
var VERIFIED = []byte("verified")

VERIFIED refers to layers we pushed into the state.

Functions

func GenesisBlock

func GenesisBlock() *types.Block

GenesisBlock is a is the first static block that xists at the beginning of each network. it exist one layer before actual blocks could be created.

func GenesisLayer

func GenesisLayer() *types.Layer

GenesisLayer generates layer 0 should be removed after the genesis flow is implemented.

Types

type AtxDB

type AtxDB interface {
	GetAtxHeader(id types.ATXID) (*types.ActivationTxHeader, error)
	GetFullAtx(id types.ATXID) (*types.ActivationTx, error)
	SyntacticallyValidateAtx(ctx context.Context, atx *types.ActivationTx) error
}

AtxDB holds logic for working with atxs.

type AtxDbMock

type AtxDbMock struct {
	ProcCnt int
	// contains filtered or unexported fields
}

AtxDbMock is a mock of an activation DB.

func NewAtxDbMock

func NewAtxDbMock() *AtxDbMock

NewAtxDbMock returns a new AtxDbMock.

func (*AtxDbMock) AddAtx

func (t *AtxDbMock) AddAtx(id types.ATXID, atx *types.ActivationTx)

AddAtx stores an ATX for later retrieval.

func (*AtxDbMock) GetAtxHeader

func (t *AtxDbMock) GetAtxHeader(id types.ATXID) (*types.ActivationTxHeader, error)

GetAtxHeader returns a new ActivationTxHeader.

func (*AtxDbMock) GetFullAtx

func (t *AtxDbMock) GetFullAtx(id types.ATXID) (*types.ActivationTx, error)

GetFullAtx returns a full ATX.

func (*AtxDbMock) ProcessAtxs

func (t *AtxDbMock) ProcessAtxs(_ context.Context, atxs []*types.ActivationTx) error

ProcessAtxs counts how many ATXs were processed.

func (AtxDbMock) SyntacticallyValidateAtx

func (AtxDbMock) SyntacticallyValidateAtx(context.Context, *types.ActivationTx) error

SyntacticallyValidateAtx always returns no error.

type BlockFetcherDB

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

BlockFetcherDB implements API that allows fetcher to get a block from a remote database.

func NewBlockFetcherDB

func NewBlockFetcherDB(mdb *DB) *BlockFetcherDB

NewBlockFetcherDB returns reference to a BlockFetcherDB instance.

func (*BlockFetcherDB) Get

func (db *BlockFetcherDB) Get(hash []byte) ([]byte, error)

Get types.Block encoded in byte using hash.

type Config

type Config struct {
	BaseReward uint64 `mapstructure:"base-reward"`
}

Config defines the configuration options for Spacemesh rewards.

func DefaultMeshConfig

func DefaultMeshConfig() Config

DefaultMeshConfig returns the default Config.

type DB added in v0.1.11

type DB struct {
	log.Log

	InputVectorBackupFunc func(id types.LayerID) ([]types.BlockID, error)
	// contains filtered or unexported fields
}

DB represents a mesh database instance.

func NewMemMeshDB

func NewMemMeshDB(logger log.Log) *DB

NewMemMeshDB is a mock used for testing.

func NewPersistentMeshDB

func NewPersistentMeshDB(path string, blockCacheSize int, logger log.Log) (*DB, error)

NewPersistentMeshDB creates an instance of a mesh database.

func (*DB) AddBlock added in v0.1.11

func (m *DB) AddBlock(bl *types.Block) error

AddBlock adds a block to the database.

func (*DB) AddZeroBlockLayer added in v0.1.15

func (m *DB) AddZeroBlockLayer(index types.LayerID) error

AddZeroBlockLayer tags lyr as a layer without blocks.

func (*DB) Blocks

func (m *DB) Blocks() database.Getter

Blocks exports the block database.

func (*DB) BlocksByValidity added in v0.1.11

func (m *DB) BlocksByValidity(blocks []*types.Block) (validBlocks, invalidBlocks []*types.Block)

BlocksByValidity classifies a slice of blocks by validity.

func (*DB) Close added in v0.1.11

func (m *DB) Close()

Close closes all resources.

func (*DB) ContextualValidity added in v0.1.11

func (m *DB) ContextualValidity(id types.BlockID) (bool, error)

ContextualValidity retrieves opinion on block from the database.

func (*DB) GetBallot

func (m *DB) GetBallot(ballotID types.BallotID) (*types.Ballot, error)

GetBallot returns true if the database has Ballot specified by the BallotID and false otherwise.

func (*DB) GetBlock added in v0.1.11

func (m *DB) GetBlock(id types.BlockID) (*types.Block, error)

GetBlock gets a block from the database by id.

func (*DB) GetCoinflip

func (m *DB) GetCoinflip(_ context.Context, layerID types.LayerID) (bool, bool)

GetCoinflip returns the weak coinflip result for the given layer.

func (*DB) GetInputVectorBackupFunc

func (m *DB) GetInputVectorBackupFunc() InputVectorBackupFunc

GetInputVectorBackupFunc gets the backup function for testing.

func (*DB) GetLayerInputVectorByID

func (m *DB) GetLayerInputVectorByID(layerID types.LayerID) ([]types.BlockID, error)

GetLayerInputVectorByID gets the input vote vector for a layer (hare results).

func (*DB) GetMeshTransaction

func (m *DB) GetMeshTransaction(id types.TransactionID) (*types.MeshTransaction, error)

GetMeshTransaction retrieves a tx by its id.

func (*DB) GetMeshTransactions

func (m *DB) GetMeshTransactions(transactions []types.TransactionID) ([]*types.MeshTransaction, map[types.TransactionID]struct{})

GetMeshTransactions retrieves list of txs with information in what blocks and layers they are included.

func (*DB) GetProcessedLayer

func (m *DB) GetProcessedLayer() (types.LayerID, error)

GetProcessedLayer loads processed layer from database.

func (*DB) GetProjection added in v0.1.11

func (m *DB) GetProjection(addr types.Address, prevNonce, prevBalance uint64) (nonce, balance uint64, err error)

GetProjection returns projection of address.

func (*DB) GetRewards added in v0.1.11

func (m *DB) GetRewards(account types.Address) (rewards []types.Reward, err error)

GetRewards retrieves account's rewards by address.

func (*DB) GetRewardsBySmesherID added in v0.1.28

func (m *DB) GetRewardsBySmesherID(smesherID types.NodeID) (rewards []types.Reward, err error)

GetRewardsBySmesherID retrieves rewards by smesherID.

func (*DB) GetTransactions added in v0.1.11

func (m *DB) GetTransactions(transactions []types.TransactionID) (txs []*types.Transaction, missing map[types.TransactionID]struct{})

GetTransactions retrieves a list of txs by their id's.

func (*DB) GetTransactionsByDestination added in v0.1.11

func (m *DB) GetTransactionsByDestination(l types.LayerID, account types.Address) (txs []types.TransactionID, err error)

GetTransactionsByDestination retrieves txs by destination and layer.

func (*DB) GetTransactionsByOrigin added in v0.1.11

func (m *DB) GetTransactionsByOrigin(l types.LayerID, account types.Address) (txs []types.TransactionID, err error)

GetTransactionsByOrigin retrieves txs by origin and layer.

func (*DB) HasBallot

func (m *DB) HasBallot(types.BallotID) bool

HasBallot returns true if the database has Ballot specified by the BallotID and false otherwise.

func (*DB) LayerBallots

func (m *DB) LayerBallots(layerID types.LayerID) ([]*types.Ballot, error)

LayerBallots retrieves all ballots from a layer by layer ID.

func (*DB) LayerBlockIds added in v0.1.11

func (m *DB) LayerBlockIds(index types.LayerID) ([]types.BlockID, error)

LayerBlockIds retrieves all block ids from a layer by layer index.

func (*DB) LayerBlocks added in v0.1.11

func (m *DB) LayerBlocks(index types.LayerID) ([]*types.Block, error)

LayerBlocks retrieves all blocks from a layer by layer index.

func (*DB) LayerContextuallyValidBlocks

func (m *DB) LayerContextuallyValidBlocks(ctx context.Context, layer types.LayerID) (map[types.BlockID]struct{}, error)

LayerContextuallyValidBlocks returns the set of contextually valid block IDs for the provided layer.

func (*DB) PersistentData added in v0.1.11

func (m *DB) PersistentData() bool

PersistentData checks to see if db is empty.

func (*DB) RecordCoinflip

func (m *DB) RecordCoinflip(ctx context.Context, layerID types.LayerID, coinflip bool)

RecordCoinflip saves the weak coinflip result to memory for the given layer.

func (*DB) SaveContextualValidity added in v0.1.11

func (m *DB) SaveContextualValidity(id types.BlockID, _ types.LayerID, valid bool) error

SaveContextualValidity persists opinion on block to the database.

func (*DB) SaveLayerInputVector

func (m *DB) SaveLayerInputVector(hash types.Hash32, vector []types.BlockID) error

SaveLayerInputVector saves the input vote vector for a layer (hare results).

func (*DB) SaveLayerInputVectorByID

func (m *DB) SaveLayerInputVectorByID(ctx context.Context, id types.LayerID, blks []types.BlockID) error

SaveLayerInputVectorByID gets the input vote vector for a layer (hare results).

func (*DB) SetInputVectorBackupFunc

func (m *DB) SetInputVectorBackupFunc(fn InputVectorBackupFunc)

SetInputVectorBackupFunc sets the backup function for testing.

func (*DB) Transactions

func (m *DB) Transactions() database.Getter

Transactions exports the transactions DB.

type DbTransaction

type DbTransaction struct {
	*types.Transaction
	Origin  types.Address
	BlockID types.BlockID
	LayerID types.LayerID
}

DbTransaction is the transaction type stored in DB.

type InputVectorBackupFunc

type InputVectorBackupFunc func(id types.LayerID) ([]types.BlockID, error)

InputVectorBackupFunc specifies a backup function for testing.

type Mesh

type Mesh struct {
	log.Log
	*DB
	AtxDB

	Validator
	// contains filtered or unexported fields
}

Mesh is the logic layer above our mesh.DB database.

func NewMesh

func NewMesh(db *DB, atxDb AtxDB, rewardConfig Config, fetcher system.BlockFetcher, trtl tortoise, txPool txMemPool, state state, logger log.Log) *Mesh

NewMesh creates a new instant of a mesh.

func NewRecoveredMesh

func NewRecoveredMesh(ctx context.Context, db *DB, atxDb AtxDB, rewardConfig Config, fetcher system.BlockFetcher, trtl tortoise, txPool txMemPool, state state, logger log.Log) *Mesh

NewRecoveredMesh creates new instance of mesh with recovered mesh data fom database.

func (*Mesh) AddBlockWithTxs

func (msh *Mesh) AddBlockWithTxs(ctx context.Context, blk *types.Block) error

AddBlockWithTxs adds a block to the database blk - the block to add txs - block txs that we dont have in our tx database yet.

func (*Mesh) AddProposal

func (msh *Mesh) AddProposal(*types.Proposal) error

AddProposal saves the Proposal into database.

func (*Mesh) CacheWarmUp added in v0.1.4

func (msh *Mesh) CacheWarmUp(layerSize int)

CacheWarmUp warms up cache with latest blocks.

func (*Mesh) GetATXs

func (msh *Mesh) GetATXs(ctx context.Context, atxIds []types.ATXID) (map[types.ATXID]*types.ActivationTx, []types.ATXID)

GetATXs uses GetFullAtx to return a list of atxs corresponding to atxIds requested.

func (*Mesh) GetAggregatedLayerHash

func (msh *Mesh) GetAggregatedLayerHash(layerID types.LayerID) types.Hash32

GetAggregatedLayerHash returns the aggregated layer hash up to the specified layer.

func (*Mesh) GetLayer

func (msh *Mesh) GetLayer(i types.LayerID) (*types.Layer, error)

GetLayer returns Layer i from the database.

func (*Mesh) GetLayerHash

func (msh *Mesh) GetLayerHash(layerID types.LayerID) types.Hash32

GetLayerHash returns layer hash for received blocks.

func (*Mesh) HandleValidatedLayer added in v0.1.11

func (msh *Mesh) HandleValidatedLayer(ctx context.Context, validatedLayer types.LayerID, blockIDs []types.BlockID)

HandleValidatedLayer receives hare output once it finishes running for a given layer.

func (*Mesh) HasProposal

func (msh *Mesh) HasProposal(types.ProposalID) bool

HasProposal returns true if the database has the Proposal specified by the ProposalID and false otherwise.

func (*Mesh) LatestLayer

func (msh *Mesh) LatestLayer() types.LayerID

LatestLayer - returns the latest layer we saw from the network.

func (*Mesh) LatestLayerInState

func (msh *Mesh) LatestLayerInState() types.LayerID

LatestLayerInState returns the latest layer we applied to state.

func (*Mesh) ProcessedLayer

func (msh *Mesh) ProcessedLayer() types.LayerID

ProcessedLayer returns the last processed layer ID.

func (*Mesh) SetZeroBlockLayer added in v0.1.6

func (msh *Mesh) SetZeroBlockLayer(lyr types.LayerID) error

SetZeroBlockLayer tags lyr as a layer without blocks.

func (*Mesh) StoreTransactionsFromPool added in v0.1.16

func (msh *Mesh) StoreTransactionsFromPool(blk *types.Block) error

StoreTransactionsFromPool takes declared txs from provided block blk and writes them to DB. it then invalidates the transactions from txpool.

type Validator added in v0.1.6

type Validator interface {
	ValidateLayer(context.Context, *types.Layer)
}

Validator interface to be used in tests to mock validation flow.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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