execution

package
v0.44.1-background-sto... Latest Latest
Warning

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

Go to latest
Published: Dec 12, 2025 License: AGPL-3.0 Imports: 10 Imported by: 9

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BlockAttestationResult added in v0.31.0

type BlockAttestationResult struct {
	*BlockExecutionResult

	// TODO(ramtin): move this to the outside, everything needed for create this
	// should be available as part of computation result and most likely trieUpdate
	// was the reason this is kept here, long term we don't need this data and should
	// act based on register deltas
	*execution_data.BlockExecutionData
	// contains filtered or unexported fields
}

BlockAttestationResult holds collection attestation results

func NewEmptyBlockAttestationResult added in v0.31.0

func NewEmptyBlockAttestationResult(
	blockExecutionResult *BlockExecutionResult,
) *BlockAttestationResult

func (*BlockAttestationResult) AllChunkDataPacks added in v0.31.0

func (ar *BlockAttestationResult) AllChunkDataPacks() ([]*flow.ChunkDataPack, error)

func (*BlockAttestationResult) AllChunks added in v0.31.0

func (ar *BlockAttestationResult) AllChunks() ([]*flow.Chunk, error)

func (*BlockAttestationResult) AllEventCommitments added in v0.31.0

func (ar *BlockAttestationResult) AllEventCommitments() []flow.Identifier

func (*BlockAttestationResult) AppendCollectionAttestationResult added in v0.31.0

func (ar *BlockAttestationResult) AppendCollectionAttestationResult(
	startStateCommit flow.StateCommitment,
	endStateCommit flow.StateCommitment,
	stateProof flow.StorageProof,
	eventCommit flow.Identifier,
	chunkExecutionDatas *execution_data.ChunkExecutionData,
)

func (*BlockAttestationResult) ChunkAt added in v0.31.0

func (ar *BlockAttestationResult) ChunkAt(index int) (*flow.Chunk, error)

ChunkAt returns the Chunk for the collection at the given index. Receiver BlockAttestationResult is expected to be well-formed; callers must use an index that exists. No errors are expected during normal operation.

func (*BlockAttestationResult) ChunkDataPackAt added in v0.31.0

func (ar *BlockAttestationResult) ChunkDataPackAt(index int) (*flow.ChunkDataPack, error)

ChunkDataPackAt returns the ChunkDataPack for the collection at the given index. Receiver BlockAttestationResult is expected to be well-formed; callers must use an index that exists. No errors are expected during normal operation.

func (*BlockAttestationResult) CollectionAttestationResultAt added in v0.31.0

func (ar *BlockAttestationResult) CollectionAttestationResultAt(colIndex int) *CollectionAttestationResult

CollectionAttestationResultAt returns CollectionAttestationResult at collection index

func (*BlockAttestationResult) Size added in v0.31.0

func (ar *BlockAttestationResult) Size() int

Size returns the size of collection attestation results

type BlockExecutionResult added in v0.31.0

type BlockExecutionResult struct {
	*entity.ExecutableBlock

	ExecutionDataRoot *flow.BlockExecutionDataRoot // full root data structure produced from block
	// contains filtered or unexported fields
}

BlockExecutionResult captures artifacts of execution of block collections

func NewPopulatedBlockExecutionResult added in v0.31.0

func NewPopulatedBlockExecutionResult(eb *entity.ExecutableBlock) *BlockExecutionResult

NewPopulatedBlockExecutionResult constructs a new BlockExecutionResult, pre-populated with `chunkCounts` number of collection results

func (*BlockExecutionResult) AllConvertedServiceEvents added in v0.31.0

func (er *BlockExecutionResult) AllConvertedServiceEvents() flow.ServiceEventList

func (*BlockExecutionResult) AllEvents added in v0.31.0

func (er *BlockExecutionResult) AllEvents() flow.EventsList

func (*BlockExecutionResult) AllExecutionSnapshots added in v0.31.0

func (er *BlockExecutionResult) AllExecutionSnapshots() []*snapshot.ExecutionSnapshot

func (*BlockExecutionResult) AllServiceEvents added in v0.31.0

func (er *BlockExecutionResult) AllServiceEvents() flow.EventsList

func (*BlockExecutionResult) AllTransactionResults added in v0.31.0

func (er *BlockExecutionResult) AllTransactionResults() flow.TransactionResults

func (*BlockExecutionResult) AllUpdatedRegisters added in v0.33.1

func (er *BlockExecutionResult) AllUpdatedRegisters() []flow.RegisterEntry

AllUpdatedRegisters returns all updated unique register entries Note: order is not determinstic

func (*BlockExecutionResult) CollectionExecutionResultAt added in v0.31.0

func (er *BlockExecutionResult) CollectionExecutionResultAt(colIndex int) *CollectionExecutionResult

func (*BlockExecutionResult) ServiceEventCountForChunk added in v0.39.0

func (er *BlockExecutionResult) ServiceEventCountForChunk(chunkIndex int) uint16

ServiceEventCountForChunk returns the number of service events emitted in the given chunk.

func (*BlockExecutionResult) Size added in v0.31.0

func (er *BlockExecutionResult) Size() int

Size returns the size of collection execution results

func (*BlockExecutionResult) TransactionResultAt added in v0.31.0

func (er *BlockExecutionResult) TransactionResultAt(txIdx int) *flow.TransactionResult

type CollectionAttestationResult added in v0.31.0

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

CollectionAttestationResult holds attestations generated during post-processing phase of collect execution.

func NewCollectionAttestationResult added in v0.31.0

func NewCollectionAttestationResult(
	startStateCommit flow.StateCommitment,
	endStateCommit flow.StateCommitment,
	stateProof flow.StorageProof,
	eventCommit flow.Identifier,
) *CollectionAttestationResult

func (*CollectionAttestationResult) EndStateCommitment added in v0.31.0

func (a *CollectionAttestationResult) EndStateCommitment() flow.StateCommitment

func (*CollectionAttestationResult) EventCommitment added in v0.31.0

func (a *CollectionAttestationResult) EventCommitment() flow.Identifier

func (*CollectionAttestationResult) StartStateCommitment added in v0.31.0

func (a *CollectionAttestationResult) StartStateCommitment() flow.StateCommitment

func (*CollectionAttestationResult) StateProof added in v0.31.0

func (*CollectionAttestationResult) UpdateEndStateCommitment added in v0.31.0

func (a *CollectionAttestationResult) UpdateEndStateCommitment(endState flow.StateCommitment)

TODO(ramtin): depricate in the future, temp method, needed for uploader for now

type CollectionExecutionResult added in v0.31.0

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

CollectionExecutionResult holds aggregated artifacts (events, tx resutls, ...) generated during collection execution

func NewEmptyCollectionExecutionResult added in v0.31.0

func NewEmptyCollectionExecutionResult() *CollectionExecutionResult

NewEmptyCollectionExecutionResult constructs a new CollectionExecutionResult

func (*CollectionExecutionResult) AppendTransactionResults added in v0.31.0

func (c *CollectionExecutionResult) AppendTransactionResults(
	events flow.EventsList,
	serviceEvents flow.EventsList,
	convertedServiceEvents flow.ServiceEventList,
	transactionResult flow.TransactionResult,
)

func (*CollectionExecutionResult) ConvertedServiceEvents added in v0.31.0

func (c *CollectionExecutionResult) ConvertedServiceEvents() flow.ServiceEventList

func (*CollectionExecutionResult) Events added in v0.31.0

func (*CollectionExecutionResult) ExecutionSnapshot added in v0.31.0

func (c *CollectionExecutionResult) ExecutionSnapshot() *snapshot.ExecutionSnapshot

func (*CollectionExecutionResult) ServiceEventList added in v0.31.0

func (c *CollectionExecutionResult) ServiceEventList() flow.EventsList

func (*CollectionExecutionResult) TransactionResults added in v0.31.0

func (c *CollectionExecutionResult) TransactionResults() flow.TransactionResults

func (*CollectionExecutionResult) UpdateExecutionSnapshot added in v0.31.0

func (c *CollectionExecutionResult) UpdateExecutionSnapshot(
	executionSnapshot *snapshot.ExecutionSnapshot,
)

type ComputationResult

type ComputationResult struct {
	*BlockExecutionResult
	*BlockAttestationResult

	ExecutionReceipt *flow.ExecutionReceipt
}

ComputationResult captures artifacts of execution of block collections, collection attestation results and the full execution receipt, as sent by the Execution Node. CAUTION: This type is used to represent both a complete ComputationResult and a partially constructed ComputationResult. TODO: Consider using a Builder type to represent the partially constructed model.

func NewEmptyComputationResult added in v0.28.7

func NewEmptyComputationResult(
	block *entity.ExecutableBlock,
) *ComputationResult

NewEmptyComputationResult creates an empty ComputationResult. Construction ComputationResult allowed only within the constructor.

func (*ComputationResult) CurrentEndState added in v0.31.0

func (cr *ComputationResult) CurrentEndState() flow.StateCommitment

CurrentEndState returns the most recent end state if no attestation appended yet, it returns start state of block TODO(ramtin): we probably don't need this long term as part of this method

type ExecutedFinalizedWAL added in v0.33.1

type ExecutedFinalizedWAL interface {
	Append(height uint64, registers flow.RegisterEntries) error

	// Latest returns the latest height in the WAL.
	Latest() (uint64, error)

	GetReader(height uint64) WALReader
}

type ExtendableStorageSnapshot added in v0.33.1

type ExtendableStorageSnapshot interface {
	snapshot.StorageSnapshot
	Extend(newCommit flow.StateCommitment, updatedRegisters map[flow.RegisterID]flow.RegisterValue) ExtendableStorageSnapshot
	Commitment() flow.StateCommitment
}

type FinalizedReader added in v0.33.1

type FinalizedReader interface {
	// FinalizedBlockIDAtHeight returns the block ID of the finalized block at the given height.
	// It return storage.NotFound if the given height has not been finalized yet
	// any other error returned are exceptions
	FinalizedBlockIDAtHeight(height uint64) (flow.Identifier, error)
}

type InMemoryRegisterStore added in v0.33.1

type InMemoryRegisterStore interface {
	Prune(finalizedHeight uint64, finalizedBlockID flow.Identifier) error
	PrunedHeight() uint64

	// GetRegister will return the latest updated value of the given register since the pruned height.
	// It returns ErrPruned if the register is unknown or not updated since the pruned height
	// It returns exception if internal index is inconsistent
	GetRegister(height uint64, blockID flow.Identifier, register flow.RegisterID) (flow.RegisterValue, error)
	GetUpdatedRegisters(height uint64, blockID flow.Identifier) (flow.RegisterEntries, error)
	SaveRegisters(
		height uint64,
		blockID flow.Identifier,
		parentID flow.Identifier,
		registers flow.RegisterEntries,
	) error

	// IsBlockExecuted returns wheather the given block is executed.
	// It returns:
	// - (true, nil) if the block is above the pruned height and is executed
	// - (true, nil) if the block is the pruned block, since the prunded block are finalized and executed
	// - (false, nil) if the block is above the pruned height and is not executed
	// - (false, nil) if the block's height is the pruned height, but is different from the pruned block
	// - (false, exception) if the block is below the pruned height
	IsBlockExecuted(height uint64, blockID flow.Identifier) (bool, error)
}

see implementation in engine/execution/storehouse/in_memory_register_store.go

type OnDiskRegisterStore added in v0.33.1

type OnDiskRegisterStore = storage.RegisterIndex

type RegisterStore added in v0.33.1

type RegisterStore interface {
	// GetRegister first try to get the register from InMemoryRegisterStore, then OnDiskRegisterStore
	// It returns:
	//  - (value, nil) if the register value is found at the given block
	//  - (nil, nil) if the register is not found
	//  - (nil, storage.ErrHeightNotIndexed) if the height is below the first height that is indexed.
	//  - (nil, storehouse.ErrNotExecuted) if the block is not executed yet
	//  - (nil, storehouse.ErrNotExecuted) if the block is conflicting iwth finalized block
	//  - (nil, err) for any other exceptions
	GetRegister(height uint64, blockID flow.Identifier, register flow.RegisterID) (flow.RegisterValue, error)

	// SaveRegisters saves to InMemoryRegisterStore first, then trigger the same check as OnBlockFinalized
	// Depend on InMemoryRegisterStore.SaveRegisters
	// It returns:
	// - nil if the registers are saved successfully
	// - exception is the block is above the pruned height but does not connect to the pruned height (conflicting block).
	// - exception if the block is below the pruned height
	// - exception if the save block is saved again
	// - exception for any other exception
	SaveRegisters(header *flow.Header, registers flow.RegisterEntries) error

	// Depend on FinalizedReader's FinalizedBlockIDAtHeight
	// Depend on ExecutedFinalizedWAL.Append
	// Depend on OnDiskRegisterStore.SaveRegisters
	// OnBlockFinalized trigger the check of whether a block at the next height becomes finalized and executed.
	// Note: This is a blocking call
	// the next height is the existing finalized and executed block's height + 1.
	// If a block at next height becomes finalized and executed, then:
	// 1. write the registers to write ahead logs
	// 2. save the registers of the block to OnDiskRegisterStore
	// 3. prune the height in InMemoryRegisterStore
	// any error returned are exception
	OnBlockFinalized() error

	// LastFinalizedAndExecutedHeight returns the height of the last finalized and executed block,
	// which has been saved in OnDiskRegisterStore
	LastFinalizedAndExecutedHeight() uint64

	// IsBlockExecuted returns whether the given block is executed.
	// If a block is not executed, it does not distinguish whether the block exists or not.
	// It returns:
	// - (true, nil) if the block is executed, regardless of whether the registers of the block is pruned on disk or not
	// - (false, nil) if the block is not executed
	// - (false, exception) if running into any exception
	IsBlockExecuted(height uint64, blockID flow.Identifier) (bool, error)
}

RegisterStore is the interface for register store see implementation in engine/execution/storehouse/register_store.go

type RegisterStoreNotifier added in v0.33.1

type RegisterStoreNotifier interface {
	OnFinalizedAndExecutedHeightUpdated(height uint64)
}

RegisterStoreNotifier is the interface for register store to notify when a block is finalized and executed

type ScriptExecutor added in v0.32.0

type ScriptExecutor interface {

	// ExecuteScriptAtBlockID executes a script at the given Block id
	// it returns the value, the computation used and the error (if any)
	ExecuteScriptAtBlockID(ctx context.Context, script []byte, arguments [][]byte, blockID flow.Identifier) ([]byte, uint64, error)

	// GetAccount returns the Account details at the given Block id
	GetAccount(ctx context.Context, address flow.Address, blockID flow.Identifier) (*flow.Account, error)

	// GetRegisterAtBlockID returns the value of a register at the given Block id (if available)
	GetRegisterAtBlockID(ctx context.Context, owner, key []byte, blockID flow.Identifier) ([]byte, error)
}

ScriptExecutor represents the RPC calls that the execution script engine exposes to support the Access Node API calls

type WALReader added in v0.33.1

type WALReader interface {
	// Next returns the next height and trie updates in the WAL.
	// It returns EOF when there are no more entries.
	Next() (height uint64, registers flow.RegisterEntries, err error)
}

Directories

Path Synopsis
The factory provides functions for the execution_builder to load and initialize the register store and background indexer engine, simplifying the builder by encapsulating database setup, bootstrapping, and checkpoint import logic.
The factory provides functions for the execution_builder to load and initialize the register store and background indexer engine, simplifying the builder by encapsulating database setup, bootstrapping, and checkpoint import logic.

Jump to

Keyboard shortcuts

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