Documentation
¶
Index ¶
- Constants
- Variables
- func CryptoToRuntimeHashingAlgorithm(h hash.HashingAlgorithm) runtime.HashAlgorithm
- func CryptoToRuntimeSigningAlgorithm(s crypto.SigningAlgorithm) runtime.SignatureAlgorithm
- func FlowFeesAddress(chain flow.Chain) flow.Address
- func FlowTokenAddress(chain flow.Chain) flow.Address
- func FungibleTokenAddress(chain flow.Chain) flow.Address
- func NewInterpreterRuntime() runtime.Runtime
- func RuntimeToCryptoHashingAlgorithm(s runtime.HashAlgorithm) hash.HashingAlgorithm
- func RuntimeToCryptoSigningAlgorithm(s runtime.SignatureAlgorithm) crypto.SigningAlgorithm
- func SystemChunkTransaction(serviceAddress flow.Address) *flow.TransactionBody
- type Blocks
- type BlocksFinder
- type BootstrapProcedure
- type BootstrapProcedureOption
- func WithAccountCreationFee(fee cadence.UFix64) BootstrapProcedureOption
- func WithInitialTokenSupply(supply cadence.UFix64) BootstrapProcedureOption
- func WithMinimumStorageReservation(reservation cadence.UFix64) BootstrapProcedureOption
- func WithStorageMBPerFLOW(ratio cadence.UFix64) BootstrapProcedureOption
- func WithTransactionFee(fee cadence.UFix64) BootstrapProcedureOption
- type Context
- type DefaultSignatureVerifier
- type MetricsCollector
- type Option
- func WithAccountFreezeAvailable(accountFreezeAvailable bool) Option
- func WithAccountStorageLimit(enabled bool) Option
- func WithBlockHeader(header *flow.Header) Option
- func WithBlocks(blocks Blocks) Option
- func WithCadenceLogging(enabled bool) Option
- func WithChain(chain flow.Chain) Option
- func WithEventCollectionSizeLimit(limit uint64) Option
- func WithExtensiveTracing() Option
- func WithGasLimit(limit uint64) Option
- func WithMaxStateInteractionSize(limit uint64) Option
- func WithMaxStateKeySize(limit uint64) Option
- func WithMaxStateValueSize(limit uint64) Option
- func WithMetricsCollector(mc *MetricsCollector) Option
- func WithRestrictedAccountCreation(enabled bool) Option
- func WithRestrictedDeployment(enabled bool) Option
- func WithServiceAccount(enabled bool) Option
- func WithSetValueHandler(handler SetValueHandler) Option
- func WithTracer(tr module.Tracer) Option
- func WithTransactionProcessors(processors ...TransactionProcessor) Option
- type Procedure
- type ScriptInvocator
- type ScriptProcedure
- type ScriptProcessor
- type SetValueHandler
- type SignatureVerifier
- type TransactionAccountFrozenChecker
- type TransactionAccountFrozenEnabler
- type TransactionFeeDeductor
- type TransactionInvocator
- type TransactionProcedure
- type TransactionProcessor
- type TransactionSequenceNumberChecker
- type TransactionSignatureVerifier
- type TransactionStorageLimiter
- type VirtualMachine
Constants ¶
const ( DefaultGasLimit = 100_000 // 100K DefaultEventCollectionByteSizeLimit = 256_000 // 256KB DefaultMaxNumOfTxRetries = 3 )
const AccountKeyWeightThreshold = 1000
Variables ¶
var DefaultAccountCreationFee = func() cadence.UFix64 { value, err := cadence.NewUFix64("0.00100000") if err != nil { panic(fmt.Errorf("invalid default account creation fee: %w", err)) } return value }()
var DefaultMinimumStorageReservation = func() cadence.UFix64 { value, err := cadence.NewUFix64("0.00100000") if err != nil { panic(fmt.Errorf("invalid default minimum storage reservation: %w", err)) } return value }()
var DefaultStorageMBPerFLOW = func() cadence.UFix64 { value, err := cadence.NewUFix64("10.00000000") if err != nil { panic(fmt.Errorf("invalid default minimum storage reservation: %w", err)) } return value }()
var DefaultTransactionFees = func() cadence.UFix64 { value, err := cadence.NewUFix64("0.0001") if err != nil { panic(fmt.Errorf("invalid default transaction fees: %w", err)) } return value }()
DefaultTransactionFees are the default transaction fees if transaction fees are on. If they are off (which is the default behaviour) that means the transaction fees are 0.0.
Functions ¶
func CryptoToRuntimeHashingAlgorithm ¶ added in v0.15.0
func CryptoToRuntimeHashingAlgorithm(h hash.HashingAlgorithm) runtime.HashAlgorithm
CryptoToRuntimeHashingAlgorithm converts a crypto hashing algorithm to a runtime hash algorithm.
func CryptoToRuntimeSigningAlgorithm ¶ added in v0.15.0
func CryptoToRuntimeSigningAlgorithm(s crypto.SigningAlgorithm) runtime.SignatureAlgorithm
CryptoToRuntimeSigningAlgorithm converts a crypto signature algorithm to a runtime signature algorithm.
func NewInterpreterRuntime ¶ added in v0.15.1
func RuntimeToCryptoHashingAlgorithm ¶ added in v0.15.0
func RuntimeToCryptoHashingAlgorithm(s runtime.HashAlgorithm) hash.HashingAlgorithm
RuntimeToCryptoHashingAlgorithm converts a runtime hash algorithm to a crypto hashing algorithm.
func RuntimeToCryptoSigningAlgorithm ¶ added in v0.15.0
func RuntimeToCryptoSigningAlgorithm(s runtime.SignatureAlgorithm) crypto.SigningAlgorithm
RuntimeToCryptoSigningAlgorithm converts a runtime signature algorithm to a crypto signature algorithm.
func SystemChunkTransaction ¶
func SystemChunkTransaction(serviceAddress flow.Address) *flow.TransactionBody
SystemChunkTransaction creates and returns the transaction corresponding to the system chunk at the specified service address.
Types ¶
type Blocks ¶
type Blocks interface {
// ByHeight returns the block at the given height in the chain ending in `header` (or finalized
// if `header` is nil). This enables querying un-finalized blocks by height with respect to the
// chain defined by the block we are executing.
ByHeightFrom(height uint64, header *flow.Header) (*flow.Header, error)
}
func NewBlockFinder ¶ added in v0.13.0
NewBlockFinder constructs a new block finder
type BlocksFinder ¶ added in v0.13.0
type BlocksFinder struct {
// contains filtered or unexported fields
}
BlocksFinder finds blocks and return block headers
func (*BlocksFinder) ByHeightFrom ¶ added in v0.13.0
ByHeightFrom returns the block header by height.
type BootstrapProcedure ¶
type BootstrapProcedure struct {
// contains filtered or unexported fields
}
A BootstrapProcedure is an invokable that can be used to bootstrap the ledger state with the default accounts and contracts required by the Flow virtual machine.
func Bootstrap ¶
func Bootstrap( serviceAccountPublicKey flow.AccountPublicKey, opts ...BootstrapProcedureOption, ) *BootstrapProcedure
Bootstrap returns a new BootstrapProcedure instance configured with the provided genesis parameters.
func (*BootstrapProcedure) Run ¶
func (b *BootstrapProcedure) Run(vm *VirtualMachine, ctx Context, sth *state.StateHolder, programs *programs.Programs) error
type BootstrapProcedureOption ¶ added in v0.14.0
type BootstrapProcedureOption func(*BootstrapProcedure) *BootstrapProcedure
func WithAccountCreationFee ¶ added in v0.14.0
func WithAccountCreationFee(fee cadence.UFix64) BootstrapProcedureOption
func WithInitialTokenSupply ¶ added in v0.14.0
func WithInitialTokenSupply(supply cadence.UFix64) BootstrapProcedureOption
func WithMinimumStorageReservation ¶ added in v0.14.0
func WithMinimumStorageReservation(reservation cadence.UFix64) BootstrapProcedureOption
func WithStorageMBPerFLOW ¶ added in v0.16.1
func WithStorageMBPerFLOW(ratio cadence.UFix64) BootstrapProcedureOption
func WithTransactionFee ¶ added in v0.14.0
func WithTransactionFee(fee cadence.UFix64) BootstrapProcedureOption
type Context ¶
type Context struct {
Chain flow.Chain
Blocks Blocks
Metrics *MetricsCollector
Tracer module.Tracer
GasLimit uint64
MaxStateKeySize uint64
MaxStateValueSize uint64
MaxStateInteractionSize uint64
EventCollectionByteSizeLimit uint64
MaxNumOfTxRetries uint8
BlockHeader *flow.Header
ServiceAccountEnabled bool
RestrictedAccountCreationEnabled bool
RestrictedDeploymentEnabled bool
LimitAccountStorage bool
CadenceLoggingEnabled bool
AccountFreezeAvailable bool
ExtensiveTracing bool
SetValueHandler SetValueHandler
SignatureVerifier SignatureVerifier
TransactionProcessors []TransactionProcessor
ScriptProcessors []ScriptProcessor
Logger zerolog.Logger
}
A Context defines a set of execution parameters used by the virtual machine.
func NewContext ¶
NewContext initializes a new execution context with the provided options.
func NewContextFromParent ¶
NewContextFromParent spawns a child execution context with the provided options.
type DefaultSignatureVerifier ¶
type DefaultSignatureVerifier struct{}
func NewDefaultSignatureVerifier ¶
func NewDefaultSignatureVerifier() DefaultSignatureVerifier
type MetricsCollector ¶
type MetricsCollector struct {
// contains filtered or unexported fields
}
A MetricsCollector accumulates performance metrics reported by the Cadence runtime.
A single collector instance will sum all reported values. For example, the "parsed" field will be incremented each time a program is parsed.
func NewMetricsCollector ¶
func NewMetricsCollector() *MetricsCollector
NewMetricsCollectors returns a new runtime metrics collector.
func (*MetricsCollector) Checked ¶
func (m *MetricsCollector) Checked() time.Duration
func (*MetricsCollector) Interpreted ¶
func (m *MetricsCollector) Interpreted() time.Duration
func (*MetricsCollector) Parsed ¶
func (m *MetricsCollector) Parsed() time.Duration
func (*MetricsCollector) ValueDecoded ¶ added in v0.14.0
func (m *MetricsCollector) ValueDecoded() time.Duration
func (*MetricsCollector) ValueEncoded ¶ added in v0.14.0
func (m *MetricsCollector) ValueEncoded() time.Duration
type Option ¶
An Option sets a configuration parameter for a virtual machine context.
func WithAccountFreezeAvailable ¶ added in v0.15.1
WithAccountFreezeAvailable sets availability of account freeze function for a virtual machine context.
With this option set to true, a setAccountFreeze function will be enabled for transactions processed by the VM
func WithAccountStorageLimit ¶ added in v0.14.0
WithAccountStorageLimit enables or disables checking if account storage used is over its storage capacity
func WithBlockHeader ¶
WithBlockHeader sets the block header for a virtual machine context.
The VM uses the header to provide current block information to the Cadence runtime, as well as to seed the pseudorandom number generator.
func WithBlocks ¶
WithBlocks sets the block storage provider for a virtual machine context.
The VM uses the block storage provider to provide historical block information to the Cadence runtime.
func WithCadenceLogging ¶ added in v0.13.1
WithCadenceLogging enables or disables Cadence logging for a virtual machine context.
func WithEventCollectionSizeLimit ¶ added in v0.13.1
WithEventCollectionSizeLimit sets the event collection byte size limit for a virtual machine context.
func WithExtensiveTracing ¶ added in v0.16.0
func WithExtensiveTracing() Option
WithExtensiveTracing sets the extensive tracing
func WithGasLimit ¶
WithGasLimit sets the gas limit for a virtual machine context.
func WithMaxStateInteractionSize ¶ added in v0.14.0
WithMaxStateInteractionSize sets the byte size limit for total interaction with ledger. this prevents attacks such as reading all large registers
func WithMaxStateKeySize ¶ added in v0.14.0
WithMaxStateKeySize sets the byte size limit for ledger keys
func WithMaxStateValueSize ¶ added in v0.14.0
WithMaxStateValueSize sets the byte size limit for ledger values
func WithMetricsCollector ¶
func WithMetricsCollector(mc *MetricsCollector) Option
WithMetricsCollector sets the metrics collector for a virtual machine context.
A metrics collector is used to gather metrics reported by the Cadence runtime.
func WithRestrictedAccountCreation ¶
WithRestrictedAccountCreation enables or disables restricted account creation for a virtual machine context
func WithRestrictedDeployment ¶
WithRestrictedDeployment enables or disables restricted contract deployment for a virtual machine context.
func WithServiceAccount ¶
WithServiceAccount enables or disables calls to the Flow service account.
func WithSetValueHandler ¶
func WithSetValueHandler(handler SetValueHandler) Option
WithSetValueHandler sets a handler that is called when a value is written by the Cadence runtime.
func WithTracer ¶ added in v0.14.5
WithTracer sets the tracer for a virtual machine context.
func WithTransactionProcessors ¶
func WithTransactionProcessors(processors ...TransactionProcessor) Option
WithTransactionProcessors sets the transaction processors for a virtual machine context.
type Procedure ¶
type Procedure interface {
Run(vm *VirtualMachine, ctx Context, sth *state.StateHolder, programs *programs.Programs) error
}
An Procedure is an operation (or set of operations) that reads or writes ledger state.
type ScriptInvocator ¶
type ScriptInvocator struct{}
func NewScriptInvocator ¶
func NewScriptInvocator() ScriptInvocator
func (ScriptInvocator) Process ¶
func (i ScriptInvocator) Process( vm *VirtualMachine, ctx Context, proc *ScriptProcedure, sth *state.StateHolder, programs *programs.Programs, ) error
type ScriptProcedure ¶
type ScriptProcedure struct {
ID flow.Identifier
Script []byte
Arguments [][]byte
Value cadence.Value
Logs []string
Events []flow.Event
GasUsed uint64
Err errors.Error
}
func Script ¶
func Script(code []byte) *ScriptProcedure
func (*ScriptProcedure) Run ¶
func (proc *ScriptProcedure) Run(vm *VirtualMachine, ctx Context, sth *state.StateHolder, programs *programs.Programs) error
func (*ScriptProcedure) WithArguments ¶
func (proc *ScriptProcedure) WithArguments(args ...[]byte) *ScriptProcedure
type ScriptProcessor ¶
type ScriptProcessor interface {
Process(*VirtualMachine, Context, *ScriptProcedure, *state.StateHolder, *programs.Programs) error
}
type SetValueHandler ¶
SetValueHandler receives a value written by the Cadence runtime.
type SignatureVerifier ¶
type TransactionAccountFrozenChecker ¶ added in v0.15.1
type TransactionAccountFrozenChecker struct{}
func NewTransactionAccountFrozenChecker ¶ added in v0.15.1
func NewTransactionAccountFrozenChecker() *TransactionAccountFrozenChecker
func (*TransactionAccountFrozenChecker) Process ¶ added in v0.15.1
func (c *TransactionAccountFrozenChecker) Process( _ *VirtualMachine, _ *Context, proc *TransactionProcedure, sth *state.StateHolder, _ *programs.Programs, ) error
type TransactionAccountFrozenEnabler ¶ added in v0.15.1
type TransactionAccountFrozenEnabler struct{}
func NewTransactionAccountFrozenEnabler ¶ added in v0.15.1
func NewTransactionAccountFrozenEnabler() *TransactionAccountFrozenEnabler
func (*TransactionAccountFrozenEnabler) Process ¶ added in v0.15.1
func (c *TransactionAccountFrozenEnabler) Process( _ *VirtualMachine, ctx *Context, proc *TransactionProcedure, _ *state.StateHolder, _ *programs.Programs, ) error
type TransactionFeeDeductor ¶
type TransactionFeeDeductor struct{}
func NewTransactionFeeDeductor ¶
func NewTransactionFeeDeductor() *TransactionFeeDeductor
func (*TransactionFeeDeductor) Process ¶
func (d *TransactionFeeDeductor) Process( vm *VirtualMachine, ctx *Context, proc *TransactionProcedure, sth *state.StateHolder, programs *programs.Programs, ) error
type TransactionInvocator ¶
type TransactionInvocator struct {
// contains filtered or unexported fields
}
func NewTransactionInvocator ¶
func NewTransactionInvocator(logger zerolog.Logger) *TransactionInvocator
func (*TransactionInvocator) Process ¶
func (i *TransactionInvocator) Process( vm *VirtualMachine, ctx *Context, proc *TransactionProcedure, sth *state.StateHolder, programs *programs.Programs, ) (processErr error)
type TransactionProcedure ¶
type TransactionProcedure struct {
ID flow.Identifier
Transaction *flow.TransactionBody
TxIndex uint32
Logs []string
Events []flow.Event
ServiceEvents []flow.Event
GasUsed uint64
Err errors.Error
Retried int
TraceSpan opentracing.Span
}
func Transaction ¶
func Transaction(tx *flow.TransactionBody, txIndex uint32) *TransactionProcedure
func (*TransactionProcedure) Run ¶
func (proc *TransactionProcedure) Run(vm *VirtualMachine, ctx Context, st *state.StateHolder, programs *programs.Programs) error
func (*TransactionProcedure) SetTraceSpan ¶ added in v0.14.5
func (proc *TransactionProcedure) SetTraceSpan(traceSpan opentracing.Span)
type TransactionProcessor ¶
type TransactionProcessor interface {
Process(*VirtualMachine, *Context, *TransactionProcedure, *state.StateHolder, *programs.Programs) error
}
type TransactionSequenceNumberChecker ¶
type TransactionSequenceNumberChecker struct{}
func NewTransactionSequenceNumberChecker ¶
func NewTransactionSequenceNumberChecker() *TransactionSequenceNumberChecker
func (*TransactionSequenceNumberChecker) Process ¶
func (c *TransactionSequenceNumberChecker) Process( _ *VirtualMachine, ctx *Context, proc *TransactionProcedure, sth *state.StateHolder, programs *programs.Programs, ) error
type TransactionSignatureVerifier ¶
type TransactionSignatureVerifier struct {
SignatureVerifier SignatureVerifier
KeyWeightThreshold int
}
func NewTransactionSignatureVerifier ¶
func NewTransactionSignatureVerifier(keyWeightThreshold int) *TransactionSignatureVerifier
func (*TransactionSignatureVerifier) Process ¶
func (v *TransactionSignatureVerifier) Process( _ *VirtualMachine, ctx *Context, proc *TransactionProcedure, sth *state.StateHolder, programs *programs.Programs, ) error
type TransactionStorageLimiter ¶ added in v0.14.0
type TransactionStorageLimiter struct {
// A function to create a function to get storage capacity from an address. This is to make this easily testable.
GetStorageCapacityFuncFactory func(
vm *VirtualMachine,
ctx Context,
tp *TransactionProcedure,
sth *state.StateHolder,
programs *programs.Programs,
) (func(address common.Address) (value uint64, err error), error)
}
func NewTransactionStorageLimiter ¶ added in v0.14.0
func NewTransactionStorageLimiter() *TransactionStorageLimiter
func (*TransactionStorageLimiter) Process ¶ added in v0.14.0
func (d *TransactionStorageLimiter) Process( vm *VirtualMachine, ctx *Context, tp *TransactionProcedure, sth *state.StateHolder, programs *programs.Programs, ) error
type VirtualMachine ¶
A VirtualMachine augments the Cadence runtime with Flow host functionality.
func NewVirtualMachine ¶ added in v0.15.1
func NewVirtualMachine(rt runtime.Runtime) *VirtualMachine
NewVirtualMachine creates a new virtual machine instance with the provided runtime.