chain

package
v1.18.1-qos Latest Latest
Warning

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

Go to latest
Published: Sep 26, 2025 License: BSD-3-Clause Imports: 14 Imported by: 3

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BlockWrapper

type BlockWrapper struct {
	chain.Block
	// contains filtered or unexported fields
}

BlockWrapper wraps a linear Block while adding a smart caching layer to improve VM performance.

func (*BlockWrapper) Accept

func (bw *BlockWrapper) Accept(ctx context.Context) error

Accept accepts the underlying block, removes it from verifiedBlocks, caches it as a decided block, and updates the last accepted block.

func (*BlockWrapper) Reject

func (bw *BlockWrapper) Reject(ctx context.Context) error

Reject rejects the underlying block, removes it from processing blocks, and caches it as a decided block.

func (*BlockWrapper) ShouldVerifyWithContext

func (bw *BlockWrapper) ShouldVerifyWithContext(ctx context.Context) (bool, error)

ShouldVerifyWithContext checks if the underlying block should be verified with a block context. If the underlying block does not implement the block.WithVerifyContext interface, returns false without an error. Does not touch any block cache.

func (*BlockWrapper) Verify

func (bw *BlockWrapper) Verify(ctx context.Context) error

Verify verifies the underlying block, evicts from the unverified block cache and if the block passes verification, adds it to [cache.verifiedBlocks]. Note: it is guaranteed that if a block passes verification it will be added to consensus and eventually be decided ie. either Accept/Reject will be called on [bw] removing it from [verifiedBlocks].

func (*BlockWrapper) VerifyWithContext

func (bw *BlockWrapper) VerifyWithContext(ctx context.Context, blockCtx *block.Context) error

VerifyWithContext verifies the underlying block with context

type Config

type Config struct {
	// Cache configuration:
	DecidedCacheSize, MissingCacheSize, UnverifiedCacheSize, BytesToIDCacheSize int

	LastAcceptedBlock     chain.Block
	GetBlock              func(context.Context, ids.ID) (chain.Block, error)
	UnmarshalBlock        func(context.Context, []byte) (chain.Block, error)
	BatchedUnmarshalBlock func(context.Context, [][]byte) ([]chain.Block, error)
	BuildBlock            func(context.Context) (chain.Block, error)
	BuildBlockWithContext func(context.Context, *block.Context) (chain.Block, error)
	GetBlockIDAtHeight    func(context.Context, uint64) (ids.ID, error)
}

Config defines all of the parameters necessary to initialize State

type OracleBlock added in v1.17.2

type OracleBlock interface {
	chain.Block

	// Options returns the block options that may be chosen by the oracle.
	Options(context.Context) ([2]chain.Block, error)
}

OracleBlock is a block that can have multiple valid children, and one needs to be chosen by an oracle.

type State

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

State implements an efficient caching layer used to wrap a VM implementation.

func NewMeteredState

func NewMeteredState(
	registerer metric.Registerer,
	config *Config,
) (*State, error)

func NewState

func NewState(config *Config) *State

func (*State) BatchedParseBlock

func (s *State) BatchedParseBlock(ctx context.Context, blksBytes [][]byte) ([]chain.Block, error)

BatchedParseBlock implements part of the block.BatchedChainVM interface. In addition to performing all the caching as the ParseBlock function, it performs at most one call to the underlying VM if [batchedUnmarshalBlock] was provided.

func (*State) BuildBlock

func (s *State) BuildBlock(ctx context.Context) (chain.Block, error)

BuildBlock attempts to build a new internal Block, wraps it, and adds it to the appropriate caching layer if successful.

func (*State) BuildBlockWithContext

func (s *State) BuildBlockWithContext(ctx context.Context, blockCtx *block.Context) (chain.Block, error)

BuildBlockWithContext attempts to build a new internal Block, wraps it, and adds it to the appropriate caching layer if successful. If [s.buildBlockWithContext] is nil, returns [BuildBlock].

func (*State) Flush

func (s *State) Flush()

Flush each block cache

func (*State) GetBlock

func (s *State) GetBlock(ctx context.Context, blkID ids.ID) (chain.Block, error)

GetBlock returns the BlockWrapper as chain.Block corresponding to [blkID]

func (*State) GetBlockInternal

func (s *State) GetBlockInternal(ctx context.Context, blkID ids.ID) (chain.Block, error)

GetBlockInternal returns the internal representation of [blkID]

func (*State) IsProcessing

func (s *State) IsProcessing(blkID ids.ID) bool

IsProcessing returns whether [blkID] is processing in consensus

func (*State) LastAccepted

func (s *State) LastAccepted(context.Context) (ids.ID, error)

func (*State) LastAcceptedBlock

func (s *State) LastAcceptedBlock() *BlockWrapper

LastAcceptedBlock returns the last accepted wrapped block

func (*State) LastAcceptedBlockInternal

func (s *State) LastAcceptedBlockInternal() chain.Block

LastAcceptedBlockInternal returns the internal chain.Block that was last accepted

func (*State) ParseBlock

func (s *State) ParseBlock(ctx context.Context, b []byte) (chain.Block, error)

ParseBlock attempts to parse [b] into an internal Block and adds it to the appropriate caching layer if successful.

func (*State) SetLastAcceptedBlock

func (s *State) SetLastAcceptedBlock(lastAcceptedBlock chain.Block) error

SetLastAcceptedBlock sets the last accepted block to [lastAcceptedBlock]. This should be called with an internal block - not a wrapped block returned from state.

This also flushes [lastAcceptedBlock] from missingBlocks and unverifiedBlocks to ensure that their contents stay valid.

type Status added in v1.11.14

type Status uint8

Status represents the status of a block

const (
	Unknown Status = iota
	Processing
	Rejected
	Accepted
)

type TestBlock added in v1.11.14

type TestBlock struct {
	IDV           ids.ID
	HeightV       uint64
	TimestampV    time.Time
	ParentV       ids.ID
	BytesV        []byte
	StatusV       Status
	ErrV          error
	ShouldVerifyV bool
}

TestBlock is a test implementation of Block

func (*TestBlock) Accept added in v1.11.14

func (b *TestBlock) Accept(context.Context) error

func (*TestBlock) Bytes added in v1.11.14

func (b *TestBlock) Bytes() []byte

func (*TestBlock) Height added in v1.11.14

func (b *TestBlock) Height() uint64

func (*TestBlock) ID added in v1.11.14

func (b *TestBlock) ID() ids.ID

func (*TestBlock) Parent added in v1.11.14

func (b *TestBlock) Parent() ids.ID

func (*TestBlock) ParentID added in v1.17.2

func (b *TestBlock) ParentID() ids.ID

func (*TestBlock) Reject added in v1.11.14

func (b *TestBlock) Reject(context.Context) error

func (*TestBlock) State added in v1.11.14

func (b *TestBlock) State() state.ReadOnlyChain

func (*TestBlock) Status added in v1.11.14

func (b *TestBlock) Status() uint8

func (*TestBlock) Timestamp added in v1.11.14

func (b *TestBlock) Timestamp() time.Time

func (*TestBlock) Verify added in v1.11.14

func (b *TestBlock) Verify(context.Context) error

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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