state

package
v0.30.1 Latest Latest
Warning

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

Go to latest
Published: Apr 6, 2023 License: AGPL-3.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultMaxKeySize   = 16_000      // ~16KB
	DefaultMaxValueSize = 256_000_000 // ~256MB
)

Variables

This section is empty.

Functions

This section is empty.

Types

type EmptyStorageSnapshot added in v0.30.0

type EmptyStorageSnapshot struct{}

func (EmptyStorageSnapshot) Get added in v0.30.0

type ExecutionSnapshot added in v0.30.0

type ExecutionSnapshot struct {
	// Note that the ReadSet only include reads from the storage snapshot.
	// Reads from the WriteSet are excluded from the ReadSet.
	ReadSet map[flow.RegisterID]struct{}

	WriteSet map[flow.RegisterID]flow.RegisterValue

	// Note that the spock secret may be nil if the view does not support spock.
	SpockSecret []byte

	// Note that the meter may be nil if the view does not support metering.
	*meter.Meter
}

func (*ExecutionSnapshot) AllRegisterIDs added in v0.30.0

func (snapshot *ExecutionSnapshot) AllRegisterIDs() []flow.RegisterID

AllRegisterIDs returns all register ids that were read / write by this view. The returned ids are unsorted.

func (*ExecutionSnapshot) ReadRegisterIDs added in v0.30.0

func (snapshot *ExecutionSnapshot) ReadRegisterIDs() []flow.RegisterID

ReadRegisterIDs returns a list of register ids that were read. The returned ids are unsorted

func (*ExecutionSnapshot) UpdatedRegisterIDs added in v0.30.0

func (snapshot *ExecutionSnapshot) UpdatedRegisterIDs() []flow.RegisterID

UpdatedRegisterIDs returns all register ids that were updated by this view. The returned ids are unsorted.

func (*ExecutionSnapshot) UpdatedRegisters added in v0.30.0

func (snapshot *ExecutionSnapshot) UpdatedRegisters() flow.RegisterEntries

UpdatedRegisters returns all registers that were updated by this view. The returned entries are sorted by ids.

type ExecutionState added in v0.30.0

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

TODO(patrick): make State implement the View interface.

State represents the execution state it holds draft of updates and captures all register touches

func NewExecutionState added in v0.30.0

func NewExecutionState(view View, params StateParameters) *ExecutionState

NewExecutionState constructs a new state

func (*ExecutionState) BytesWritten added in v0.30.0

func (state *ExecutionState) BytesWritten() uint64

BytesWritten returns the amount of total ledger bytes written

func (*ExecutionState) ComputationIntensities added in v0.30.0

func (state *ExecutionState) ComputationIntensities() meter.MeteredComputationIntensities

ComputationIntensities returns computation intensities

func (*ExecutionState) DropChanges added in v0.30.0

func (state *ExecutionState) DropChanges() error

func (*ExecutionState) Finalize added in v0.30.0

func (state *ExecutionState) Finalize() *ExecutionSnapshot

func (*ExecutionState) Get added in v0.30.0

Get returns a register value given owner and key

func (*ExecutionState) InteractionUsed added in v0.30.0

func (state *ExecutionState) InteractionUsed() uint64

InteractionUsed returns the amount of ledger interaction (total ledger byte read + total ledger byte written)

func (*ExecutionState) MemoryIntensities added in v0.30.0

func (state *ExecutionState) MemoryIntensities() meter.MeteredMemoryIntensities

MemoryIntensities returns computation intensities

func (*ExecutionState) Merge added in v0.30.0

func (state *ExecutionState) Merge(other *ExecutionSnapshot) error

MergeState the changes from a the given view to this view.

func (*ExecutionState) MeterComputation added in v0.30.0

func (state *ExecutionState) MeterComputation(kind common.ComputationKind, intensity uint) error

MeterComputation meters computation usage

func (*ExecutionState) MeterEmittedEvent added in v0.30.0

func (state *ExecutionState) MeterEmittedEvent(byteSize uint64) error

func (*ExecutionState) MeterMemory added in v0.30.0

func (state *ExecutionState) MeterMemory(kind common.MemoryKind, intensity uint) error

MeterMemory meters memory usage

func (*ExecutionState) NewChild added in v0.30.0

func (state *ExecutionState) NewChild() *ExecutionState

NewChild generates a new child state using the parent's meter parameters.

func (*ExecutionState) NewChildWithMeterParams added in v0.30.0

func (state *ExecutionState) NewChildWithMeterParams(
	params meter.MeterParameters,
) *ExecutionState

NewChildWithMeterParams generates a new child state using the provide meter parameters.

func (ExecutionState) RunWithAllLimitsDisabled added in v0.30.0

func (controller ExecutionState) RunWithAllLimitsDisabled(f func())

func (*ExecutionState) Set added in v0.30.0

func (state *ExecutionState) Set(id flow.RegisterID, value flow.RegisterValue) error

Set updates state delta with a register update

func (*ExecutionState) TotalComputationLimit added in v0.30.0

func (state *ExecutionState) TotalComputationLimit() uint

TotalComputationLimit returns total computation limit

func (*ExecutionState) TotalComputationUsed added in v0.30.0

func (state *ExecutionState) TotalComputationUsed() uint64

TotalComputationUsed returns total computation used

func (*ExecutionState) TotalEmittedEventBytes added in v0.30.0

func (state *ExecutionState) TotalEmittedEventBytes() uint64

func (*ExecutionState) TotalMemoryEstimate added in v0.30.0

func (state *ExecutionState) TotalMemoryEstimate() uint64

TotalMemoryEstimate returns total memory used

func (*ExecutionState) TotalMemoryLimit added in v0.30.0

func (state *ExecutionState) TotalMemoryLimit() uint

TotalMemoryLimit returns total memory limit

func (*ExecutionState) View added in v0.30.0

func (state *ExecutionState) View() View

type MapStorageSnapshot added in v0.30.0

type MapStorageSnapshot map[flow.RegisterID]flow.RegisterValue

func (MapStorageSnapshot) Get added in v0.30.0

func (storage MapStorageSnapshot) Get(
	id flow.RegisterID,
) (
	flow.RegisterValue,
	error,
)

type Meter added in v0.30.0

type Meter interface {
	MeterComputation(kind common.ComputationKind, intensity uint) error
	ComputationIntensities() meter.MeteredComputationIntensities
	TotalComputationLimit() uint
	TotalComputationUsed() uint64

	MeterMemory(kind common.MemoryKind, intensity uint) error
	MemoryIntensities() meter.MeteredMemoryIntensities
	TotalMemoryEstimate() uint64

	InteractionUsed() uint64

	MeterEmittedEvent(byteSize uint64) error
	TotalEmittedEventBytes() uint64

	// RunWithAllLimitsDisabled runs f with limits disabled
	RunWithAllLimitsDisabled(f func())
}

type NestedTransaction added in v0.30.0

type NestedTransaction interface {
	Meter

	// NumNestedTransactions returns the number of uncommitted nested
	// transactions.  Note that the main transaction is not considered a
	// nested transaction.
	NumNestedTransactions() int

	// IsParseRestricted returns true if the current nested transaction is in
	// parse resticted access mode.
	IsParseRestricted() bool

	MainTransactionId() NestedTransactionId

	// IsCurrent returns true if the provide id refers to the current (nested)
	// transaction.
	IsCurrent(id NestedTransactionId) bool

	// FinalizeMainTransaction finalizes the main transaction and returns
	// its execution snapshot.  The finalized main transaction will not accept
	// any new commits after this point.  This returns an error if there are
	// outstanding nested transactions.
	FinalizeMainTransaction() (*ExecutionSnapshot, error)

	// BeginNestedTransaction creates a unrestricted nested transaction within
	// the current unrestricted (nested) transaction.  The meter parameters are
	// inherited from the current transaction.  This returns error if the
	// current nested transaction is program restricted.
	BeginNestedTransaction() (
		NestedTransactionId,
		error,
	)

	// BeginNestedTransactionWithMeterParams creates a unrestricted nested
	// transaction within the current unrestricted (nested) transaction, using
	// the provided meter parameters. This returns error if the current nested
	// transaction is program restricted.
	BeginNestedTransactionWithMeterParams(
		params meter.MeterParameters,
	) (
		NestedTransactionId,
		error,
	)

	// BeginParseRestrictedNestedTransaction creates a restricted nested
	// transaction within the current (nested) transaction.  The meter
	// parameters are inherited from the current transaction.
	BeginParseRestrictedNestedTransaction(
		location common.AddressLocation,
	) (
		NestedTransactionId,
		error,
	)

	// CommitNestedTransaction commits the changes in the current unrestricted
	// nested transaction to the parent (nested) transaction.  This returns
	// error if the expectedId does not match the current nested transaction.
	// This returns the committed execution snapshot otherwise.
	//
	// Note: The returned committed execution snapshot may be reused by another
	// transaction via AttachAndCommitNestedTransaction to update the
	// transaction bookkeeping, but the caller must manually invalidate the
	// state.
	// USE WITH EXTREME CAUTION.
	CommitNestedTransaction(
		expectedId NestedTransactionId,
	) (
		*ExecutionSnapshot,
		error,
	)

	// CommitParseRestrictedNestedTransaction commits the changes in the
	// current restricted nested transaction to the parent (nested)
	// transaction.  This returns error if the specified location does not
	// match the tracked location. This returns the committed execution
	// snapshot otherwise.
	//
	// Note: The returned committed execution snapshot may be reused by another
	// transaction via AttachAndCommitNestedTransaction to update the
	// transaction bookkeeping, but the caller must manually invalidate the
	// state.
	// USE WITH EXTREME CAUTION.
	CommitParseRestrictedNestedTransaction(
		location common.AddressLocation,
	) (
		*ExecutionSnapshot,
		error,
	)

	// PauseNestedTransaction detaches the current nested transaction from the
	// parent transaction, and returns the paused nested transaction state.
	// The paused nested transaction may be resume via Resume.
	//
	// WARNING: Pause and Resume are intended for implementing continuation
	// passing style behavior for the transaction executor, with the assumption
	// that the states accessed prior to pausing remain valid after resumption.
	// The paused nested transaction should not be reused across transactions.
	// IT IS NOT SAFE TO PAUSE A NESTED TRANSACTION IN GENERAL SINCE THAT
	// COULD LEAD TO PHANTOM READS.
	PauseNestedTransaction(
		expectedId NestedTransactionId,
	) (
		*ExecutionState,
		error,
	)

	// ResumeNestedTransaction attaches the paused nested transaction (state)
	// to the current transaction.
	ResumeNestedTransaction(pausedState *ExecutionState)

	// AttachAndCommitNestedTransaction commits the changes from the cached
	// nested transaction execution snapshot to the current (nested)
	// transaction.
	AttachAndCommitNestedTransaction(cachedSnapshot *ExecutionSnapshot) error

	// RestartNestedTransaction merges all changes that belongs to the nested
	// transaction about to be restart (for spock/meter bookkeeping), then
	// wipes its view changes.
	RestartNestedTransaction(
		id NestedTransactionId,
	) error

	Get(id flow.RegisterID) (flow.RegisterValue, error)

	Set(id flow.RegisterID, value flow.RegisterValue) error

	ViewForTestingOnly() View
}

NestedTransaction provides active transaction states and facilitates common state management operations.

func NewTransactionState added in v0.28.0

func NewTransactionState(
	startView View,
	params StateParameters,
) NestedTransaction

NewTransactionState constructs a new state transaction which manages nested transactions.

type NestedTransactionId added in v0.28.0

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

Opaque identifier used for Restarting nested transactions

func (NestedTransactionId) StateForTestingOnly added in v0.28.0

func (id NestedTransactionId) StateForTestingOnly() *ExecutionState

type Peeker added in v0.30.0

type Peeker interface {
	Peek(id flow.RegisterID) (flow.RegisterValue, error)
}

type ReadFuncStorageSnapshot added in v0.30.0

type ReadFuncStorageSnapshot struct {
	ReadFunc func(flow.RegisterID) (flow.RegisterValue, error)
}

func (ReadFuncStorageSnapshot) Get added in v0.30.0

type StateParameters added in v0.28.0

type StateParameters struct {
	meter.MeterParameters
	// contains filtered or unexported fields
}

func DefaultParameters added in v0.28.0

func DefaultParameters() StateParameters

func (StateParameters) WithMaxKeySizeAllowed added in v0.28.0

func (params StateParameters) WithMaxKeySizeAllowed(
	limit uint64,
) StateParameters

WithMaxKeySizeAllowed sets limit on max key size

func (StateParameters) WithMaxValueSizeAllowed added in v0.28.0

func (params StateParameters) WithMaxValueSizeAllowed(
	limit uint64,
) StateParameters

WithMaxValueSizeAllowed sets limit on max value size

func (StateParameters) WithMeterParameters added in v0.28.0

func (params StateParameters) WithMeterParameters(
	meterParams meter.MeterParameters,
) StateParameters

WithMeterParameters sets the state's meter parameters

type Storage added in v0.30.0

type Storage interface {
	// TODO(patrick): remove once fvm.VM.Run() is deprecated
	Peek(id flow.RegisterID) (flow.RegisterValue, error)

	Set(id flow.RegisterID, value flow.RegisterValue) error
	Get(id flow.RegisterID) (flow.RegisterValue, error)

	DropChanges() error
}

Storage is the storage interface used by the virtual machine to read and write register values.

type StorageSnapshot added in v0.30.0

type StorageSnapshot interface {
	// Get returns the register id's value, or an empty RegisterValue if the id
	// is not found.
	Get(id flow.RegisterID) (flow.RegisterValue, error)
}

func NewPeekerStorageSnapshot added in v0.30.0

func NewPeekerStorageSnapshot(peeker Peeker) StorageSnapshot

func NewReadFuncStorageSnapshot added in v0.30.0

func NewReadFuncStorageSnapshot(
	readFunc func(flow.RegisterID) (flow.RegisterValue, error),
) StorageSnapshot

type View added in v0.15.0

type View interface {
	NewChild() View

	Finalize() *ExecutionSnapshot
	Merge(child *ExecutionSnapshot) error

	Storage
}

Jump to

Keyboard shortcuts

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