Documentation ¶
Index ¶
- type Application
- func (app *Application) ApplySnapshotChunk(_ context.Context, req *abci.RequestApplySnapshotChunk) (*abci.ResponseApplySnapshotChunk, error)
- func (app *Application) CheckTx(_ context.Context, req *abci.RequestCheckTx) (*abci.ResponseCheckTx, error)
- func (app *Application) Commit(_ context.Context, _ *abci.RequestCommit) (*abci.ResponseCommit, error)
- func (app *Application) ExtendVote(_ context.Context, req *abci.RequestExtendVote) (*abci.ResponseExtendVote, error)
- func (app *Application) FinalizeBlock(_ context.Context, req *abci.RequestFinalizeBlock) (*abci.ResponseFinalizeBlock, error)
- func (app *Application) Info(context.Context, *abci.RequestInfo) (*abci.ResponseInfo, error)
- func (app *Application) InitChain(_ context.Context, req *abci.RequestInitChain) (*abci.ResponseInitChain, error)
- func (app *Application) ListSnapshots(context.Context, *abci.RequestListSnapshots) (*abci.ResponseListSnapshots, error)
- func (app *Application) LoadSnapshotChunk(_ context.Context, req *abci.RequestLoadSnapshotChunk) (*abci.ResponseLoadSnapshotChunk, error)
- func (app *Application) OfferSnapshot(_ context.Context, req *abci.RequestOfferSnapshot) (*abci.ResponseOfferSnapshot, error)
- func (app *Application) PrepareProposal(_ context.Context, req *abci.RequestPrepareProposal) (*abci.ResponsePrepareProposal, error)
- func (app *Application) ProcessProposal(_ context.Context, req *abci.RequestProcessProposal) (*abci.ResponseProcessProposal, error)
- func (app *Application) Query(_ context.Context, req *abci.RequestQuery) (*abci.ResponseQuery, error)
- func (app *Application) Rollback() error
- func (app *Application) VerifyVoteExtension(_ context.Context, req *abci.RequestVerifyVoteExtension) (*abci.ResponseVerifyVoteExtension, error)
- type Config
- type SnapshotStore
- type State
- func (s *State) Commit() (uint64, error)
- func (s *State) Export() ([]byte, uint64, []byte, error)
- func (s *State) Finalize() []byte
- func (s *State) Get(key string) string
- func (s *State) GetHash() []byte
- func (s *State) Import(height uint64, jsonBytes []byte) error
- func (s *State) Info() (uint64, []byte)
- func (s *State) MarshalJSON() ([]byte, error)
- func (s *State) Query(key string) (string, uint64)
- func (s *State) Rollback() error
- func (s *State) Set(key, value string)
- func (s *State) UnmarshalJSON(b []byte) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Application ¶
type Application struct { abci.BaseApplication // contains filtered or unexported fields }
Application is an ABCI application for use by end-to-end tests. It is a simple key/value store for strings, storing data in memory and persisting to disk as JSON, taking state sync snapshots if requested.
func NewApplication ¶
func NewApplication(cfg *Config) (*Application, error)
NewApplication creates the application.
func (*Application) ApplySnapshotChunk ¶
func (app *Application) ApplySnapshotChunk(_ context.Context, req *abci.RequestApplySnapshotChunk) (*abci.ResponseApplySnapshotChunk, error)
ApplySnapshotChunk implements ABCI.
func (*Application) CheckTx ¶
func (app *Application) CheckTx(_ context.Context, req *abci.RequestCheckTx) (*abci.ResponseCheckTx, error)
CheckTx implements ABCI.
func (*Application) Commit ¶
func (app *Application) Commit(_ context.Context, _ *abci.RequestCommit) (*abci.ResponseCommit, error)
Commit implements ABCI.
func (*Application) ExtendVote ¶
func (app *Application) ExtendVote(_ context.Context, req *abci.RequestExtendVote) (*abci.ResponseExtendVote, error)
ExtendVote will produce vote extensions in the form of random numbers to demonstrate vote extension nondeterminism.
In the next block, if there are any vote extensions from the previous block, a new transaction will be proposed that updates a special value in the key/value store ("extensionSum") with the sum of all of the numbers collected from the vote extensions.
func (*Application) FinalizeBlock ¶
func (app *Application) FinalizeBlock(_ context.Context, req *abci.RequestFinalizeBlock) (*abci.ResponseFinalizeBlock, error)
FinalizeBlock implements ABCI.
func (*Application) Info ¶
func (app *Application) Info(context.Context, *abci.RequestInfo) (*abci.ResponseInfo, error)
Info implements ABCI.
func (*Application) InitChain ¶
func (app *Application) InitChain(_ context.Context, req *abci.RequestInitChain) (*abci.ResponseInitChain, error)
Info implements ABCI.
func (*Application) ListSnapshots ¶
func (app *Application) ListSnapshots(context.Context, *abci.RequestListSnapshots) (*abci.ResponseListSnapshots, error)
ListSnapshots implements ABCI.
func (*Application) LoadSnapshotChunk ¶
func (app *Application) LoadSnapshotChunk(_ context.Context, req *abci.RequestLoadSnapshotChunk) (*abci.ResponseLoadSnapshotChunk, error)
LoadSnapshotChunk implements ABCI.
func (*Application) OfferSnapshot ¶
func (app *Application) OfferSnapshot(_ context.Context, req *abci.RequestOfferSnapshot) (*abci.ResponseOfferSnapshot, error)
OfferSnapshot implements ABCI.
func (*Application) PrepareProposal ¶
func (app *Application) PrepareProposal( _ context.Context, req *abci.RequestPrepareProposal, ) (*abci.ResponsePrepareProposal, error)
PrepareProposal will take the given transactions and attempt to prepare a proposal from them when it's our turn to do so. If the current height has vote extension enabled, this method will use vote extensions from the previous height, passed from CometBFT as parameters to construct a special transaction whose value is the sum of all of the vote extensions from the previous round.
Additionally, we verify the vote extension signatures passed from CometBFT and include all data necessary for such verification in the special transaction's payload so that ProcessProposal at other nodes can also verify the proposer constructed the special transaction correctly.
If vote extensions are enabled for the current height, PrepareProposal makes sure there was at least one non-empty vote extension whose signature it could verify. If vote extensions are not enabled for the current height, PrepareProposal makes sure non-empty vote extensions are not present.
The special vote extension-generated transaction must fit within an empty block and takes precedence over all other transactions coming from the mempool.
func (*Application) ProcessProposal ¶
func (app *Application) ProcessProposal(_ context.Context, req *abci.RequestProcessProposal) (*abci.ResponseProcessProposal, error)
ProcessProposal implements part of the Application interface. It accepts any proposal that does not contain a malformed transaction. NOTE It is up to real Applications to effect punitive behavior in the cases ProcessProposal returns ResponseProcessProposal_REJECT, as it is evidence of misbehavior.
func (*Application) Query ¶
func (app *Application) Query(_ context.Context, req *abci.RequestQuery) (*abci.ResponseQuery, error)
Query implements ABCI.
func (*Application) Rollback ¶
func (app *Application) Rollback() error
func (*Application) VerifyVoteExtension ¶
func (app *Application) VerifyVoteExtension(_ context.Context, req *abci.RequestVerifyVoteExtension) (*abci.ResponseVerifyVoteExtension, error)
VerifyVoteExtension simply validates vote extensions from other validators without doing anything about them. In this case, it just makes sure that the vote extension is a well-formed integer value.
type Config ¶
type Config struct { // The directory with which state.json will be persisted in. Usually $HOME/.cometbft/data Dir string `toml:"dir"` // SnapshotInterval specifies the height interval at which the application // will take state sync snapshots. Defaults to 0 (disabled). SnapshotInterval uint64 `toml:"snapshot_interval"` // RetainBlocks specifies the number of recent blocks to retain. Defaults to // 0, which retains all blocks. Must be greater that PersistInterval, // SnapshotInterval and EvidenceAgeHeight. RetainBlocks uint64 `toml:"retain_blocks"` // KeyType sets the curve that will be used by validators. // Options are ed25519 & secp256k1 KeyType string `toml:"key_type"` // PersistInterval specifies the height interval at which the application // will persist state to disk. Defaults to 1 (every height), setting this to // 0 disables state persistence. PersistInterval uint64 `toml:"persist_interval"` // ValidatorUpdates is a map of heights to validator names and their power, // and will be returned by the ABCI application. For example, the following // changes the power of validator01 and validator02 at height 1000: // // [validator_update.1000] // validator01 = 20 // validator02 = 10 // // Specifying height 0 returns the validator update during InitChain. The // application returns the validator updates as-is, i.e. removing a // validator must be done by returning it with power 0, and any validators // not specified are not changed. // // height <-> pubkey <-> voting power ValidatorUpdates map[string]map[string]uint8 `toml:"validator_update"` // Add artificial delays to each of the main ABCI calls to mimic computation time // of the application PrepareProposalDelay time.Duration `toml:"prepare_proposal_delay"` ProcessProposalDelay time.Duration `toml:"process_proposal_delay"` CheckTxDelay time.Duration `toml:"check_tx_delay"` FinalizeBlockDelay time.Duration `toml:"finalize_block_delay"` VoteExtensionDelay time.Duration `toml:"vote_extension_delay"` // VoteExtensionsEnableHeight configures the first height during which // the chain will use and require vote extension data to be present // in precommit messages. VoteExtensionsEnableHeight int64 `toml:"vote_extensions_enable_height"` // VoteExtensionsUpdateHeight configures the height at which consensus // param VoteExtensionsEnableHeight will be set. // -1 denotes it is set at genesis. // 0 denotes it is set at InitChain. VoteExtensionsUpdateHeight int64 `toml:"vote_extensions_update_height"` }
Config allows for the setting of high level parameters for running the e2e Application KeyType and ValidatorUpdates must be the same for all nodes running the same application.
func DefaultConfig ¶
type SnapshotStore ¶
SnapshotStore stores state sync snapshots. Snapshots are stored simply as JSON files, and chunks are generated on-the-fly by splitting the JSON data into fixed-size chunks.
func NewSnapshotStore ¶
func NewSnapshotStore(dir string) (*SnapshotStore, error)
NewSnapshotStore creates a new snapshot store.
func (*SnapshotStore) Create ¶
func (s *SnapshotStore) Create(state *State) (abci.Snapshot, error)
Create creates a snapshot of the given application state's key/value pairs.
func (*SnapshotStore) List ¶
func (s *SnapshotStore) List() ([]*abci.Snapshot, error)
List lists available snapshots.
func (*SnapshotStore) Prune ¶
func (s *SnapshotStore) Prune(n int) error
Prune removes old snapshots ensuring only the most recent n snapshots remain
type State ¶
State is the application state.
func (*State) Export ¶
Export exports key/value pairs as JSON, used for state sync snapshots. Additionally returns the current height and hash of the state.
func (*State) Finalize ¶
Finalize is called after applying a block, updating the height and returning the new app_hash
func (*State) GetHash ¶
GetHash provides a thread-safe way of accessing a copy of the current state hash.
func (*State) Import ¶
Import imports key/value pairs from JSON bytes, used for InitChain.AppStateBytes and state sync snapshots. It also saves the state once imported.
func (*State) Info ¶
Info returns both the height and hash simultaneously, and is used in the ABCI Info call.
func (*State) MarshalJSON ¶
func (*State) Query ¶
Query is used in the ABCI Query call, and provides both the current height and the value associated with the given key.