protocol

package
v1.3.0-rc1 Latest Latest
Warning

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

Go to latest
Published: Jun 22, 2021 License: Apache-2.0 Imports: 12 Imported by: 41

Documentation

Index

Constants

View Source
const (
	// SystemNamespace is the namespace to store system information such as candidates/probationList/unproductiveDelegates
	SystemNamespace = "System"
)

Variables

View Source
var (
	ErrNoName = errors.New("name does not exist")
)

Errors

View Source
var (
	// ErrUnimplemented indicates a method is not implemented yet
	ErrUnimplemented = errors.New("method is unimplemented")
)

Functions

func WithActionCtx added in v0.11.0

func WithActionCtx(ctx context.Context, ac ActionCtx) context.Context

WithActionCtx add ActionCtx into context.

func WithBlockCtx added in v0.11.0

func WithBlockCtx(ctx context.Context, blk BlockCtx) context.Context

WithBlockCtx add BlockCtx into context.

func WithBlockchainCtx added in v0.11.0

func WithBlockchainCtx(ctx context.Context, bc BlockchainCtx) context.Context

WithBlockchainCtx add BlockchainCtx into context.

func WithRegistry added in v1.0.0

func WithRegistry(ctx context.Context, reg *Registry) context.Context

WithRegistry adds registry to context

Types

type AccountState added in v0.11.0

type AccountState func(StateReader, string) (*state.Account, error)

AccountState defines a function to return the account state of a given address

type ActionCtx added in v0.11.0

type ActionCtx struct {
	// Caller is the address of whom issues this action
	Caller address.Address
	// ActionHash is the hash of the action with the sealed envelope
	ActionHash hash.Hash256
	// GasPrice is the action gas price
	GasPrice *big.Int
	// IntrinsicGas is the action intrinsic gas
	IntrinsicGas uint64
	// Nonce is the nonce of the action
	Nonce uint64
}

ActionCtx provides action auxiliary information.

func GetActionCtx added in v0.11.0

func GetActionCtx(ctx context.Context) (ActionCtx, bool)

GetActionCtx gets ActionCtx

func MustGetActionCtx added in v0.11.0

func MustGetActionCtx(ctx context.Context) ActionCtx

MustGetActionCtx must get ActionCtx . If context doesn't exist, this function panic.

type ActionHandler

type ActionHandler interface {
	Handle(context.Context, action.Action, StateManager) (*action.Receipt, error)
}

ActionHandler is the interface for the action handlers. For each incoming action, the assembled actions will be called one by one to process it. ActionHandler implementation is supposed to parse the sub-type of the action to decide if it wants to handle this action or not.

type ActionValidator

type ActionValidator interface {
	Validate(context.Context, action.Action, StateReader) error
}

ActionValidator is the interface of validating an action

type BlockCtx added in v0.11.0

type BlockCtx struct {
	// height of block containing those actions
	BlockHeight uint64
	// timestamp of block containing those actions
	BlockTimeStamp time.Time
	// gas Limit for perform those actions
	GasLimit uint64
	// Producer is the address of whom composes the block containing this action
	Producer address.Address
}

BlockCtx provides block auxiliary information.

func GetBlockCtx added in v0.11.0

func GetBlockCtx(ctx context.Context) (BlockCtx, bool)

GetBlockCtx gets BlockCtx

func MustGetBlockCtx added in v0.11.0

func MustGetBlockCtx(ctx context.Context) BlockCtx

MustGetBlockCtx must get BlockCtx . If context doesn't exist, this function panic.

type BlockchainCtx added in v0.11.0

type BlockchainCtx struct {
	// Tip is the information of tip block
	Tip TipInfo
}

BlockchainCtx provides blockchain auxiliary information.

func GetBlockchainCtx added in v0.11.0

func GetBlockchainCtx(ctx context.Context) (BlockchainCtx, bool)

GetBlockchainCtx gets BlockchainCtx

func MustGetBlockchainCtx added in v0.11.0

func MustGetBlockchainCtx(ctx context.Context) BlockchainCtx

MustGetBlockchainCtx must get BlockchainCtx. If context doesn't exist, this function panic.

type Committer added in v1.0.0

type Committer interface {
	Commit(context.Context, StateManager) error
}

Committer performs commit action of the protocol

type Dock added in v1.0.0

type Dock interface {
	ProtocolDirty(string) bool
	Load(string, string, interface{}) error
	Unload(string, string, interface{}) error
	Reset()
}

Dock defines an interface for protocol to read/write their private data in StateReader/Manager data are stored as interface{}, user needs to type-assert on their own upon Unload()

func NewDock added in v1.0.0

func NewDock() Dock

NewDock returns a new dock

type GenericValidator

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

GenericValidator is the validator for generic action verification

func NewGenericValidator

func NewGenericValidator(sr StateReader, accountState AccountState) *GenericValidator

NewGenericValidator constructs a new genericValidator

func (*GenericValidator) Validate

func (v *GenericValidator) Validate(ctx context.Context, selp action.SealedEnvelope) error

Validate validates a generic action

type GenesisStateCreator added in v0.11.0

type GenesisStateCreator interface {
	CreateGenesisStates(context.Context, StateManager) error
}

GenesisStateCreator creates some genesis states

type PostSystemActionsCreator added in v0.11.0

type PostSystemActionsCreator interface {
	CreatePostSystemActions(context.Context, StateReader) ([]action.Envelope, error)
}

PostSystemActionsCreator creates a list of system actions to be appended to block actions

type PreStatesCreator added in v0.11.0

type PreStatesCreator interface {
	CreatePreStates(context.Context, StateManager) error
}

PreStatesCreator creates preliminary states for state manager

type Protocol

type Protocol interface {
	ActionHandler
	ReadState(context.Context, StateReader, []byte, ...[]byte) ([]byte, uint64, error)
	Register(*Registry) error
	ForceRegister(*Registry) error
	Name() string
}

Protocol defines the protocol interfaces atop IoTeX blockchain

type Registry added in v0.5.0

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

Registry is the hub of all protocols deployed on the chain

func GetRegistry added in v1.0.0

func GetRegistry(ctx context.Context) (*Registry, bool)

GetRegistry returns the registry from context

func MustGetRegistry added in v1.0.0

func MustGetRegistry(ctx context.Context) *Registry

MustGetRegistry returns the registry from context

func NewRegistry added in v0.11.0

func NewRegistry() *Registry

NewRegistry create a new Registry

func (*Registry) All added in v0.5.0

func (r *Registry) All() []Protocol

All returns all protocols

func (*Registry) Find added in v0.5.0

func (r *Registry) Find(id string) (Protocol, bool)

Find finds a protocol by ID

func (*Registry) ForceRegister added in v0.5.0

func (r *Registry) ForceRegister(id string, p Protocol) error

ForceRegister registers the protocol with a unique ID and force replacing the previous protocol if it exists

func (*Registry) Register added in v0.5.0

func (r *Registry) Register(id string, p Protocol) error

Register registers the protocol with a unique ID

func (*Registry) StartAll added in v1.0.0

func (r *Registry) StartAll(ctx context.Context, sr StateReader) (View, error)

StartAll starts all protocols which are startable

type Starter added in v1.0.0

type Starter interface {
	Start(context.Context, StateReader) (interface{}, error)
}

Starter starts the protocol

type StateConfig added in v0.11.0

type StateConfig struct {
	Namespace string // namespace used by state's storage
	Key       []byte
	MinKey    []byte
	MaxKey    []byte
	Cond      db.Condition
}

StateConfig is the config for accessing stateDB

func CreateStateConfig added in v0.11.0

func CreateStateConfig(opts ...StateOption) (*StateConfig, error)

CreateStateConfig creates a config for accessing stateDB

type StateManager

type StateManager interface {
	StateReader
	// Accounts
	Snapshot() int
	Revert(int) error
	// General state
	PutState(interface{}, ...StateOption) (uint64, error)
	DelState(...StateOption) (uint64, error)
	WriteView(string, interface{}) error
	Dock
}

StateManager defines the stateDB interface atop IoTeX blockchain

type StateOption added in v0.11.0

type StateOption func(*StateConfig) error

StateOption sets parameter for access state

func FilterOption added in v0.11.0

func FilterOption(cond db.Condition, minKey, maxKey []byte) StateOption

FilterOption sets the filter

func KeyOption added in v0.11.0

func KeyOption(key []byte) StateOption

KeyOption sets the key for call

func LegacyKeyOption added in v0.11.0

func LegacyKeyOption(key hash.Hash160) StateOption

LegacyKeyOption sets the key for call with legacy key

func NamespaceOption added in v0.11.0

func NamespaceOption(ns string) StateOption

NamespaceOption creates an option for given namesapce

type StateReader added in v0.11.0

type StateReader interface {
	Height() (uint64, error)
	State(interface{}, ...StateOption) (uint64, error)
	States(...StateOption) (uint64, state.Iterator, error)
	ReadView(string) (interface{}, error)
}

StateReader defines an interface to read stateDB

type TipInfo added in v0.11.0

type TipInfo struct {
	Height    uint64
	Hash      hash.Hash256
	Timestamp time.Time
}

TipInfo contains the tip block information

type View added in v1.1.0

type View map[string]interface{}

View stores the view for all protocols

func (View) Read added in v1.1.0

func (view View) Read(name string) (interface{}, error)

func (View) Write added in v1.1.0

func (view View) Write(name string, v interface{}) error

Jump to

Keyboard shortcuts

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