app

package
v0.0.0-...-1abf0d1 Latest Latest
Warning

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

Go to latest
Published: May 19, 2023 License: Apache-2.0 Imports: 23 Imported by: 0

Documentation

Overview

nolint: gosec

nolint: gosec

Index

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

ApplySnapshotChunk implements ABCI.

func (*Application) CheckTx

CheckTx implements ABCI.

func (*Application) Commit

func (app *Application) Commit(_ context.Context) (*abci.ResponseCommit, error)

Commit implements ABCI.

func (*Application) ExtendVote

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

FinalizeBlock implements ABCI.

func (*Application) Info

Info implements ABCI.

func (*Application) InitChain

Info implements ABCI.

func (*Application) ListSnapshots

ListSnapshots implements ABCI.

func (*Application) LoadSnapshotChunk

LoadSnapshotChunk implements ABCI.

func (*Application) OfferSnapshot

OfferSnapshot implements ABCI.

func (*Application) PrepareProposal

PrepareProposal will take the given transactions and attempt to prepare a proposal from them when it's our turn to do so. In the process, vote extensions from the previous round of consensus, if present, will be used to construct a special transaction whose value is the sum of all of the vote extensions from the previous round.

NB: Assumes that the supplied transactions do not exceed `req.MaxTxBytes`. If adding a special vote extension-generated transaction would cause the total number of transaction bytes to exceed `req.MaxTxBytes`, we will not append our special vote extension transaction.

func (*Application) ProcessProposal

ProcessProposal implements part of the Application interface. It accepts any proposal that does not contain a malformed transaction.

func (*Application) Query

Query implements ABCI.

func (*Application) Rollback

func (app *Application) Rollback() error

func (*Application) VerifyVoteExtension

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/.tendermint/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
	PrepareProposalDelayMS uint64 `toml:"prepare_proposal_delay_ms"`
	ProcessProposalDelayMS uint64 `toml:"process_proposal_delay_ms"`
	CheckTxDelayMS         uint64 `toml:"check_tx_delay_ms"`
	VoteExtensionDelayMS   uint64 `toml:"vote_extension_delay_ms"`
	FinalizeBlockDelayMS   uint64 `toml:"finalize_block_delay_ms"`
}

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

func DefaultConfig(dir string) *Config

type SnapshotStore

type SnapshotStore struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

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) LoadChunk

func (s *SnapshotStore) LoadChunk(height uint64, format uint32, chunk uint32) ([]byte, error)

LoadChunk loads a snapshot chunk.

func (*SnapshotStore) Prune

func (s *SnapshotStore) Prune(n int) error

Prune removes old snapshots ensuring only the most recent n snapshots remain

type State

type State struct {
	sync.RWMutex
	Height uint64
	Values map[string]string
	Hash   []byte
	// contains filtered or unexported fields
}

State is the application state.

func NewState

func NewState(dir string, persistInterval uint64) (*State, error)

NewState creates a new state.

func (*State) Commit

func (s *State) Commit() (uint64, error)

Commit commits the current state.

func (*State) Export

func (s *State) Export() ([]byte, error)

Export exports key/value pairs as JSON, used for state sync snapshots.

func (*State) Finalize

func (s *State) Finalize() []byte

Finalize is called after applying a block, updating the height and returning the new app_hash

func (*State) Get

func (s *State) Get(key string) string

Get fetches a value. A missing value is returned as an empty string.

func (*State) Import

func (s *State) Import(height uint64, jsonBytes []byte) error

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) Rollback

func (s *State) Rollback() error

func (*State) Set

func (s *State) Set(key, value string)

Set sets a value. Setting an empty value is equivalent to deleting it.

Jump to

Keyboard shortcuts

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