tendermint: github.com/tendermint/tendermint/state Index | Files | Directories

package state

import "github.com/tendermint/tendermint/state"


Package Files

codec.go errors.go execution.go metrics.go services.go state.go store.go tx_filter.go validation.go


const (
    // MetricsSubsystem is a subsystem shared by all metrics exposed by this
    // package.
    MetricsSubsystem = "state"

func ExecCommitBlock Uses

func ExecCommitBlock(
    appConnConsensus proxy.AppConnConsensus,
    block *types.Block,
    logger log.Logger,
    stateDB dbm.DB,
) ([]byte, error)

ExecCommitBlock executes and commits a block on the proxyApp without validating or mutating the state. It returns the application root hash (result of abci.Commit).

func LoadConsensusParams Uses

func LoadConsensusParams(db dbm.DB, height int64) (types.ConsensusParams, error)

LoadConsensusParams loads the ConsensusParams for a given height.

func LoadValidators Uses

func LoadValidators(db dbm.DB, height int64) (*types.ValidatorSet, error)

LoadValidators loads the ValidatorSet for a given height. Returns ErrNoValSetForHeight if the validator set can't be found for this height.

func MakeGenesisDocFromFile Uses

func MakeGenesisDocFromFile(genDocFile string) (*types.GenesisDoc, error)

MakeGenesisDocFromFile reads and unmarshals genesis doc from the given file.

func MedianTime Uses

func MedianTime(commit *types.Commit, validators *types.ValidatorSet) time.Time

MedianTime computes a median time for a given Commit (based on Timestamp field of votes messages) and the corresponding validator set. The computed time is always between timestamps of the votes sent by honest processes, i.e., a faulty processes can not arbitrarily increase or decrease the computed value.

func SaveABCIResponses Uses

func SaveABCIResponses(db dbm.DB, height int64, abciResponses *ABCIResponses)

SaveABCIResponses persists the ABCIResponses to the database. This is useful in case we crash after app.Commit and before s.Save(). Responses are indexed by height so they can also be loaded later to produce Merkle proofs.

Exposed for testing.

func SaveState Uses

func SaveState(db dbm.DB, state State)

SaveState persists the State, the ValidatorsInfo, and the ConsensusParamsInfo to the database. This flushes the writes (e.g. calls SetSync).

func TxPostCheck Uses

func TxPostCheck(state State) mempl.PostCheckFunc

TxPostCheck returns a function to filter transactions after processing. The function limits the gas wanted by a transaction to the block's maximum total gas.

func TxPreCheck Uses

func TxPreCheck(state State) mempl.PreCheckFunc

TxPreCheck returns a function to filter transactions before processing. The function limits the size of a transaction to the block's maximum data size.

func VerifyEvidence Uses

func VerifyEvidence(stateDB dbm.DB, state State, evidence types.Evidence) error

VerifyEvidence verifies the evidence fully by checking: - it is sufficiently recent (MaxAge) - it is from a key who was a validator at the given height - it is internally consistent - it was properly signed by the alleged equivocator

type ABCIResponses Uses

type ABCIResponses struct {
    DeliverTxs []*abci.ResponseDeliverTx `json:"deliver_txs"`
    EndBlock   *abci.ResponseEndBlock    `json:"end_block"`
    BeginBlock *abci.ResponseBeginBlock  `json:"begin_block"`

ABCIResponses retains the responses of the various ABCI calls during block processing. It is persisted to disk for each height before calling Commit.

func LoadABCIResponses Uses

func LoadABCIResponses(db dbm.DB, height int64) (*ABCIResponses, error)

LoadABCIResponses loads the ABCIResponses for the given height from the database. This is useful for recovering from crashes where we called app.Commit and before we called s.Save(). It can also be used to produce Merkle proofs of the result of txs.

func NewABCIResponses Uses

func NewABCIResponses(block *types.Block) *ABCIResponses

NewABCIResponses returns a new ABCIResponses

func (*ABCIResponses) Bytes Uses

func (arz *ABCIResponses) Bytes() []byte

Bytes serializes the ABCIResponse using go-amino.

func (*ABCIResponses) ResultsHash Uses

func (arz *ABCIResponses) ResultsHash() []byte

type BlockExecutor Uses

type BlockExecutor struct {
    // contains filtered or unexported fields

BlockExecutor provides the context and accessories for properly executing a block.

func NewBlockExecutor Uses

func NewBlockExecutor(
    db dbm.DB,
    logger log.Logger,
    proxyApp proxy.AppConnConsensus,
    mempool mempl.Mempool,
    evpool EvidencePool,
    options ...BlockExecutorOption,
) *BlockExecutor

NewBlockExecutor returns a new BlockExecutor with a NopEventBus. Call SetEventBus to provide one.

func (*BlockExecutor) ApplyBlock Uses

func (blockExec *BlockExecutor) ApplyBlock(state State, blockID types.BlockID, block *types.Block) (State, error)

ApplyBlock validates the block against the state, executes it against the app, fires the relevant events, commits the app, and saves the new state and responses. It's the only function that needs to be called from outside this package to process and commit an entire block. It takes a blockID to avoid recomputing the parts hash.

func (*BlockExecutor) Commit Uses

func (blockExec *BlockExecutor) Commit(
    state State,
    block *types.Block,
    deliverTxResponses []*abci.ResponseDeliverTx,
) ([]byte, error)

Commit locks the mempool, runs the ABCI Commit message, and updates the mempool. It returns the result of calling abci.Commit (the AppHash), and an error. The Mempool must be locked during commit and update because state is typically reset on Commit and old txs must be replayed against committed state before new txs are run in the mempool, lest they be invalid.

func (*BlockExecutor) CreateProposalBlock Uses

func (blockExec *BlockExecutor) CreateProposalBlock(
    height int64,
    state State, commit *types.Commit,
    proposerAddr []byte,
) (*types.Block, *types.PartSet)

CreateProposalBlock calls state.MakeBlock with evidence from the evpool and txs from the mempool. The max bytes must be big enough to fit the commit. Up to 1/10th of the block space is allcoated for maximum sized evidence. The rest is given to txs, up to the max gas.

func (*BlockExecutor) DB Uses

func (blockExec *BlockExecutor) DB() dbm.DB

func (*BlockExecutor) SetEventBus Uses

func (blockExec *BlockExecutor) SetEventBus(eventBus types.BlockEventPublisher)

SetEventBus - sets the event bus for publishing block related events. If not called, it defaults to types.NopEventBus.

func (*BlockExecutor) ValidateBlock Uses

func (blockExec *BlockExecutor) ValidateBlock(state State, block *types.Block) error

ValidateBlock validates the given block against the given state. If the block is invalid, it returns an error. Validation does not mutate state, but does require historical information from the stateDB, ie. to verify evidence from a validator at an old height.

type BlockExecutorOption Uses

type BlockExecutorOption func(executor *BlockExecutor)

func BlockExecutorWithMetrics Uses

func BlockExecutorWithMetrics(metrics *Metrics) BlockExecutorOption

type BlockStore Uses

type BlockStore interface {
    SaveBlock(block *types.Block, blockParts *types.PartSet, seenCommit *types.Commit)

BlockStore defines the BlockStore interface used by the ConsensusState.

type BlockStoreRPC Uses

type BlockStoreRPC interface {
    Height() int64

    LoadBlockMeta(height int64) *types.BlockMeta
    LoadBlock(height int64) *types.Block
    LoadBlockByHash(hash []byte) *types.Block
    LoadBlockPart(height int64, index int) *types.Part

    LoadBlockCommit(height int64) *types.Commit
    LoadSeenCommit(height int64) *types.Commit

BlockStoreRPC is the block store interface used by the RPC.

type ConsensusParamsInfo Uses

type ConsensusParamsInfo struct {
    ConsensusParams   types.ConsensusParams
    LastHeightChanged int64

ConsensusParamsInfo represents the latest consensus params, or the last height it changed

func (ConsensusParamsInfo) Bytes Uses

func (params ConsensusParamsInfo) Bytes() []byte

Bytes serializes the ConsensusParamsInfo using go-amino.

type ErrAppBlockHeightTooHigh Uses

type ErrAppBlockHeightTooHigh struct {
    CoreHeight int64
    AppHeight  int64

func (ErrAppBlockHeightTooHigh) Error Uses

func (e ErrAppBlockHeightTooHigh) Error() string

type ErrBlockHashMismatch Uses

type ErrBlockHashMismatch struct {
    CoreHash []byte
    AppHash  []byte
    Height   int64

func (ErrBlockHashMismatch) Error Uses

func (e ErrBlockHashMismatch) Error() string

type ErrInvalidBlock Uses

type ErrInvalidBlock error

type ErrLastStateMismatch Uses

type ErrLastStateMismatch struct {
    Height int64
    Core   []byte
    App    []byte

func (ErrLastStateMismatch) Error Uses

func (e ErrLastStateMismatch) Error() string

type ErrNoABCIResponsesForHeight Uses

type ErrNoABCIResponsesForHeight struct {
    Height int64

func (ErrNoABCIResponsesForHeight) Error Uses

func (e ErrNoABCIResponsesForHeight) Error() string

type ErrNoConsensusParamsForHeight Uses

type ErrNoConsensusParamsForHeight struct {
    Height int64

func (ErrNoConsensusParamsForHeight) Error Uses

func (e ErrNoConsensusParamsForHeight) Error() string

type ErrNoValSetForHeight Uses

type ErrNoValSetForHeight struct {
    Height int64

func (ErrNoValSetForHeight) Error Uses

func (e ErrNoValSetForHeight) Error() string

type ErrProxyAppConn Uses

type ErrProxyAppConn error

type ErrStateMismatch Uses

type ErrStateMismatch struct {
    Got      *State
    Expected *State

func (ErrStateMismatch) Error Uses

func (e ErrStateMismatch) Error() string

type ErrUnknownBlock Uses

type ErrUnknownBlock struct {
    Height int64

func (ErrUnknownBlock) Error Uses

func (e ErrUnknownBlock) Error() string

type EvidencePool Uses

type EvidencePool interface {
    PendingEvidence(int64) []types.Evidence
    AddEvidence(types.Evidence) error
    Update(*types.Block, State)
    // IsCommitted indicates if this evidence was already marked committed in another block.
    IsCommitted(types.Evidence) bool

EvidencePool defines the EvidencePool interface used by the ConsensusState. Get/Set/Commit

type Metrics Uses

type Metrics struct {
    // Time between BeginBlock and EndBlock.
    BlockProcessingTime metrics.Histogram

Metrics contains metrics exposed by this package.

func NopMetrics Uses

func NopMetrics() *Metrics

NopMetrics returns no-op Metrics.

func PrometheusMetrics Uses

func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics

PrometheusMetrics returns Metrics build using Prometheus client library. Optionally, labels can be provided along with their values ("foo", "fooValue").

type MockEvidencePool Uses

type MockEvidencePool struct{}

MockEvidencePool is an empty implementation of EvidencePool, useful for testing.

func (MockEvidencePool) AddEvidence Uses

func (m MockEvidencePool) AddEvidence(types.Evidence) error

func (MockEvidencePool) IsCommitted Uses

func (m MockEvidencePool) IsCommitted(types.Evidence) bool

func (MockEvidencePool) PendingEvidence Uses

func (m MockEvidencePool) PendingEvidence(int64) []types.Evidence

func (MockEvidencePool) Update Uses

func (m MockEvidencePool) Update(*types.Block, State)

type State Uses

type State struct {
    Version Version

    // immutable
    ChainID string

    // LastBlockHeight=0 at genesis (ie. block(H=0) does not exist)
    LastBlockHeight int64
    LastBlockID     types.BlockID
    LastBlockTime   time.Time

    // LastValidators is used to validate block.LastCommit.
    // Validators are persisted to the database separately every time they change,
    // so we can query for historical validator sets.
    // Note that if s.LastBlockHeight causes a valset change,
    // we set s.LastHeightValidatorsChanged = s.LastBlockHeight + 1 + 1
    // Extra +1 due to nextValSet delay.
    NextValidators              *types.ValidatorSet
    Validators                  *types.ValidatorSet
    LastValidators              *types.ValidatorSet
    LastHeightValidatorsChanged int64

    // Consensus parameters used for validating blocks.
    // Changes returned by EndBlock and updated after Commit.
    ConsensusParams                  types.ConsensusParams
    LastHeightConsensusParamsChanged int64

    // Merkle root of the results from executing prev block
    LastResultsHash []byte

    // the latest AppHash we've received from calling abci.Commit()
    AppHash []byte

State is a short description of the latest committed block of the Tendermint consensus. It keeps all information necessary to validate new blocks, including the last validator set and the consensus params. All fields are exposed so the struct can be easily serialized, but none of them should be mutated directly. Instead, use state.Copy() or state.NextState(...). NOTE: not goroutine-safe.

func LoadState Uses

func LoadState(db dbm.DB) State

LoadState loads the State from the database.

func LoadStateFromDBOrGenesisDoc Uses

func LoadStateFromDBOrGenesisDoc(stateDB dbm.DB, genesisDoc *types.GenesisDoc) (State, error)

LoadStateFromDBOrGenesisDoc loads the most recent state from the database, or creates a new one from the given genesisDoc and persists the result to the database.

func LoadStateFromDBOrGenesisFile Uses

func LoadStateFromDBOrGenesisFile(stateDB dbm.DB, genesisFilePath string) (State, error)

LoadStateFromDBOrGenesisFile loads the most recent state from the database, or creates a new one from the given genesisFilePath and persists the result to the database.

func MakeGenesisState Uses

func MakeGenesisState(genDoc *types.GenesisDoc) (State, error)

MakeGenesisState creates state from types.GenesisDoc.

func MakeGenesisStateFromFile Uses

func MakeGenesisStateFromFile(genDocFile string) (State, error)

MakeGenesisStateFromFile reads and unmarshals state from the given file.

Used during replay and in tests.

func (State) Bytes Uses

func (state State) Bytes() []byte

Bytes serializes the State using go-amino.

func (State) Copy Uses

func (state State) Copy() State

Copy makes a copy of the State for mutating.

func (State) Equals Uses

func (state State) Equals(state2 State) bool

Equals returns true if the States are identical.

func (State) IsEmpty Uses

func (state State) IsEmpty() bool

IsEmpty returns true if the State is equal to the empty State.

func (State) MakeBlock Uses

func (state State) MakeBlock(
    height int64,
    txs []types.Tx,
    commit *types.Commit,
    evidence []types.Evidence,
    proposerAddress []byte,
) (*types.Block, *types.PartSet)

MakeBlock builds a block from the current state with the given txs, commit, and evidence. Note it also takes a proposerAddress because the state does not track rounds, and hence does not know the correct proposer. TODO: fix this!

type ValidatorsInfo Uses

type ValidatorsInfo struct {
    ValidatorSet      *types.ValidatorSet
    LastHeightChanged int64

ValidatorsInfo represents the latest validator set, or the last height it changed

func (*ValidatorsInfo) Bytes Uses

func (valInfo *ValidatorsInfo) Bytes() []byte

Bytes serializes the ValidatorsInfo using go-amino.

type Version Uses

type Version struct {
    Consensus version.Consensus
    Software  string

Version is for versioning the State. It holds the Block and App version needed for making blocks, and the software version to support upgrades to the format of the State as stored on disk.



Package state imports 23 packages (graph) and is imported by 62 packages. Updated 2020-02-28. Refresh now. Tools for package owners.