Documentation ¶
Index ¶
- Constants
- func ContractKey(contractName string) string
- func IsFVMStateKey(owner, key string) bool
- func IsValidAccountKeyHashAlgo(algo hash.HashingAlgorithm) bool
- func IsValidAccountKeySignAlgo(algo crypto.SigningAlgorithm) bool
- func KeyPublicKey(index uint64) string
- func PrintableKey(key string) string
- func RegisterSize(address flow.Address, key string, value flow.RegisterValue) int
- func WithMaxInteractionSizeAllowed(limit uint64) func(st *State) *State
- func WithMaxKeySizeAllowed(limit uint64) func(st *State) *State
- func WithMaxValueSizeAllowed(limit uint64) func(st *State) *State
- func WithMeter(m meter.Meter) func(st *State) *State
- type AccountStatus
- func (a *AccountStatus) IsAccountFrozen() bool
- func (a *AccountStatus) PublicKeyCount() uint64
- func (a *AccountStatus) SetFrozenFlag(frozen bool)
- func (a *AccountStatus) SetPublicKeyCount(count uint64)
- func (a *AccountStatus) SetStorageIndex(index atree.StorageIndex)
- func (a *AccountStatus) SetStorageUsed(used uint64)
- func (a *AccountStatus) StorageIndex() atree.StorageIndex
- func (a *AccountStatus) StorageUsed() uint64
- func (a *AccountStatus) ToBytes() []byte
- type Accounts
- type Ledger
- type State
- func (s *State) ComputationIntensities() meter.MeteredComputationIntensities
- func (s *State) Delete(owner, key string, enforceLimit bool) error
- func (s *State) Get(owner, key string, enforceLimit bool) (flow.RegisterValue, error)
- func (s *State) InteractionUsed() uint64
- func (s *State) MemoryIntensities() meter.MeteredMemoryIntensities
- func (s *State) MergeState(other *State, enforceLimit bool) error
- func (s *State) Meter() meter.Meter
- func (s *State) MeterComputation(kind common.ComputationKind, intensity uint) error
- func (s *State) MeterMemory(kind common.MemoryKind, intensity uint) error
- func (s *State) NewChild() *State
- func (s *State) Set(owner, key string, value flow.RegisterValue, enforceLimit bool) error
- func (s *State) TotalComputationLimit() uint
- func (s *State) TotalComputationUsed() uint
- func (s *State) TotalMemoryEstimate() uint
- func (s *State) TotalMemoryLimit() uint
- func (s *State) Touch(owner, key string) error
- func (s *State) UpdatedAddresses() []flow.Address
- func (s *State) View() View
- type StateBoundAddressGenerator
- type StateHolder
- func (s *StateHolder) DisableAllLimitEnforcements()
- func (s *StateHolder) EnableAllLimitEnforcements()
- func (s *StateHolder) EnforceInteractionLimits() bool
- func (s *StateHolder) EnforceMemoryLimits() bool
- func (s *StateHolder) NewChild() *State
- func (s *StateHolder) SetActiveState(st *State)
- func (s *StateHolder) SetPayerIsServiceAccount()
- func (s *StateHolder) State() *State
- type StateOption
- type StatefulAccounts
- func (a *StatefulAccounts) AllocateStorageIndex(address flow.Address) (atree.StorageIndex, error)
- func (a *StatefulAccounts) AppendPublicKey(address flow.Address, publicKey flow.AccountPublicKey) error
- func (a *StatefulAccounts) CheckAccountNotFrozen(address flow.Address) error
- func (a *StatefulAccounts) ContractExists(contractName string, address flow.Address) (bool, error)
- func (a *StatefulAccounts) Create(publicKeys []flow.AccountPublicKey, newAddress flow.Address) error
- func (a *StatefulAccounts) DeleteContract(contractName string, address flow.Address) error
- func (a *StatefulAccounts) Exists(address flow.Address) (bool, error)
- func (a *StatefulAccounts) Get(address flow.Address) (*flow.Account, error)
- func (a *StatefulAccounts) GetAccountFrozen(address flow.Address) (bool, error)
- func (a *StatefulAccounts) GetContract(contractName string, address flow.Address) ([]byte, error)
- func (a *StatefulAccounts) GetContractNames(address flow.Address) ([]string, error)
- func (a *StatefulAccounts) GetPublicKey(address flow.Address, keyIndex uint64) (flow.AccountPublicKey, error)
- func (a *StatefulAccounts) GetPublicKeyCount(address flow.Address) (uint64, error)
- func (a *StatefulAccounts) GetPublicKeys(address flow.Address) (publicKeys []flow.AccountPublicKey, err error)
- func (a *StatefulAccounts) GetStorageUsed(address flow.Address) (uint64, error)
- func (a *StatefulAccounts) GetValue(address flow.Address, key string) (flow.RegisterValue, error)
- func (a *StatefulAccounts) SetAccountFrozen(address flow.Address, frozen bool) error
- func (a *StatefulAccounts) SetAllPublicKeys(address flow.Address, publicKeys []flow.AccountPublicKey) error
- func (a *StatefulAccounts) SetContract(contractName string, address flow.Address, contract []byte) error
- func (a *StatefulAccounts) SetPublicKey(address flow.Address, keyIndex uint64, publicKey flow.AccountPublicKey) (encodedPublicKey []byte, err error)
- func (a *StatefulAccounts) SetValue(address flow.Address, key string, value flow.RegisterValue) error
- func (a *StatefulAccounts) TouchContract(contractName string, address flow.Address)
- type UUIDGenerator
- type View
Constants ¶
const ( AccountKeyPrefix = "a." KeyAccountStatus = AccountKeyPrefix + "s" KeyCode = "code" KeyContractNames = "contract_names" MaxPublicKeyCount = math.MaxUint64 )
const ( DefaultMaxKeySize = 16_000 // ~16KB DefaultMaxValueSize = 256_000_000 // ~256MB DefaultMaxInteractionSize = 20_000_000 // ~20MB )
Variables ¶
This section is empty.
Functions ¶
func ContractKey ¶ added in v0.15.0
func IsFVMStateKey ¶ added in v0.16.2
IsFVMStateKey returns true if the key is controlled by the fvm env and return false otherwise (key controlled by the cadence env)
func IsValidAccountKeyHashAlgo ¶ added in v0.15.0
func IsValidAccountKeyHashAlgo(algo hash.HashingAlgorithm) bool
func IsValidAccountKeySignAlgo ¶ added in v0.15.0
func IsValidAccountKeySignAlgo(algo crypto.SigningAlgorithm) bool
func KeyPublicKey ¶ added in v0.27.0
func PrintableKey ¶ added in v0.23.4
PrintableKey formats slabs properly and avoids invalid utf8s
func RegisterSize ¶ added in v0.13.0
func WithMaxInteractionSizeAllowed ¶ added in v0.14.0
WithMaxInteractionSizeAllowed sets limit on total byte interaction with ledger
func WithMaxKeySizeAllowed ¶ added in v0.14.0
WithMaxKeySizeAllowed sets limit on max key size
func WithMaxValueSizeAllowed ¶ added in v0.14.0
WithMaxValueSizeAllowed sets limit on max value size
Types ¶
type AccountStatus ¶ added in v0.27.0
type AccountStatus [accountStatusSize]byte
AccountStatus holds meta information about an account
currently modelled as a byte array with on-demand encoding/decoding of sub arrays the first byte captures flags (e.g. frozen) the next 8 bytes (big-endian) captures storage used by an account the next 8 bytes (big-endian) captures the storage index of an account and the last 8 bytes (big-endian) captures the number of public keys stored on this account
func AccountStatusFromBytes ¶ added in v0.27.0
func AccountStatusFromBytes(inp []byte) (*AccountStatus, error)
AccountStatusFromBytes constructs an AccountStatus from the given byte slice
func NewAccountStatus ¶ added in v0.27.0
func NewAccountStatus() *AccountStatus
NewAccountStatus returns a new AccountStatus sets the storage index to the init value
func (*AccountStatus) IsAccountFrozen ¶ added in v0.27.0
func (a *AccountStatus) IsAccountFrozen() bool
IsAccountFrozen returns true if account's frozen flag is set
func (*AccountStatus) PublicKeyCount ¶ added in v0.27.0
func (a *AccountStatus) PublicKeyCount() uint64
PublicKeyCount returns the public key count of the account
func (*AccountStatus) SetFrozenFlag ¶ added in v0.27.0
func (a *AccountStatus) SetFrozenFlag(frozen bool)
SetFrozenFlag sets the frozen flag
func (*AccountStatus) SetPublicKeyCount ¶ added in v0.27.0
func (a *AccountStatus) SetPublicKeyCount(count uint64)
SetPublicKeyCount updates the public key count of the account
func (*AccountStatus) SetStorageIndex ¶ added in v0.27.0
func (a *AccountStatus) SetStorageIndex(index atree.StorageIndex)
SetStorageIndex updates the storage index of the account
func (*AccountStatus) SetStorageUsed ¶ added in v0.27.0
func (a *AccountStatus) SetStorageUsed(used uint64)
SetStorageUsed updates the storage used by the account
func (*AccountStatus) StorageIndex ¶ added in v0.27.0
func (a *AccountStatus) StorageIndex() atree.StorageIndex
StorageIndex returns the storage index of the account
func (*AccountStatus) StorageUsed ¶ added in v0.27.0
func (a *AccountStatus) StorageUsed() uint64
StorageUsed returns the storage used by the account
func (*AccountStatus) ToBytes ¶ added in v0.27.0
func (a *AccountStatus) ToBytes() []byte
ToBytes converts AccountStatus to a byte slice
this has been kept this way in case one day we decided to move on to use an struct to represent account status.
type Accounts ¶
type Accounts interface { Exists(address flow.Address) (bool, error) Get(address flow.Address) (*flow.Account, error) GetPublicKeyCount(address flow.Address) (uint64, error) AppendPublicKey(address flow.Address, key flow.AccountPublicKey) error GetPublicKey(address flow.Address, keyIndex uint64) (flow.AccountPublicKey, error) SetPublicKey(address flow.Address, keyIndex uint64, publicKey flow.AccountPublicKey) ([]byte, error) GetContractNames(address flow.Address) ([]string, error) GetContract(contractName string, address flow.Address) ([]byte, error) ContractExists(contractName string, address flow.Address) (bool, error) SetContract(contractName string, address flow.Address, contract []byte) error DeleteContract(contractName string, address flow.Address) error Create(publicKeys []flow.AccountPublicKey, newAddress flow.Address) error GetValue(address flow.Address, key string) (flow.RegisterValue, error) CheckAccountNotFrozen(address flow.Address) error GetStorageUsed(address flow.Address) (uint64, error) SetValue(address flow.Address, key string, value flow.RegisterValue) error AllocateStorageIndex(address flow.Address) (atree.StorageIndex, error) SetAccountFrozen(address flow.Address, frozen bool) error }
type Ledger ¶
type Ledger interface { Set(owner, key string, value flow.RegisterValue) error Get(owner, key string) (flow.RegisterValue, error) Touch(owner, key string) error Delete(owner, key string) error }
Ledger is the storage interface used by the virtual machine to read and write register values.
TODO Rename this to Storage and remove reference to flow.RegisterValue and use byte[]
type State ¶ added in v0.14.0
type State struct { ReadCounter uint64 WriteCounter uint64 TotalBytesRead uint64 TotalBytesWritten uint64 // contains filtered or unexported fields }
State represents the execution state it holds draft of updates and captures all register touches
func NewState ¶ added in v0.14.0
func NewState(view View, opts ...StateOption) *State
NewState constructs a new state
func (*State) ComputationIntensities ¶ added in v0.25.2
func (s *State) ComputationIntensities() meter.MeteredComputationIntensities
ComputationIntensities returns computation intensities
func (*State) InteractionUsed ¶ added in v0.14.0
InteractionUsed returns the amount of ledger interaction (total ledger byte read + total ledger byte written)
func (*State) MemoryIntensities ¶ added in v0.25.2
func (s *State) MemoryIntensities() meter.MeteredMemoryIntensities
MemoryIntensities returns computation intensities
func (*State) MergeState ¶ added in v0.15.0
MergeState applies the changes from a the given view to this view.
func (*State) MeterComputation ¶ added in v0.25.2
func (s *State) MeterComputation(kind common.ComputationKind, intensity uint) error
MeterComputation meters computation usage
func (*State) MeterMemory ¶ added in v0.25.2
func (s *State) MeterMemory(kind common.MemoryKind, intensity uint) error
MeterMemory meters memory usage
func (*State) TotalComputationLimit ¶ added in v0.25.2
TotalComputationLimit returns total computation limit
func (*State) TotalComputationUsed ¶ added in v0.25.2
TotalComputationUsed returns total computation used
func (*State) TotalMemoryEstimate ¶ added in v0.27.0
TotalMemoryEstimate returns total memory used
func (*State) TotalMemoryLimit ¶ added in v0.25.2
TotalMemoryLimit returns total memory limit
func (*State) UpdatedAddresses ¶ added in v0.14.0
UpdatedAddresses returns a sorted list of addresses that were updated (at least 1 register update)
type StateBoundAddressGenerator ¶ added in v0.14.0
type StateBoundAddressGenerator struct {
// contains filtered or unexported fields
}
StateBoundAddressGenerator is a decorator for an address generator. It uses the underlying generator it gets from the chain. The only change is that when next address is called the state is updated as well.
func NewStateBoundAddressGenerator ¶ added in v0.14.0
func NewStateBoundAddressGenerator(stateHolder *StateHolder, chain flow.Chain) *StateBoundAddressGenerator
func (*StateBoundAddressGenerator) AddressCount ¶ added in v0.18.3
func (g *StateBoundAddressGenerator) AddressCount() uint64
func (*StateBoundAddressGenerator) Bytes ¶ added in v0.14.0
func (g *StateBoundAddressGenerator) Bytes() []byte
TODO return error instead of a panic this requires changes outside of fvm since the type is defined on flow model and emulator and others might be dependent on that
func (*StateBoundAddressGenerator) CurrentAddress ¶ added in v0.14.0
func (g *StateBoundAddressGenerator) CurrentAddress() flow.Address
func (*StateBoundAddressGenerator) NextAddress ¶ added in v0.14.0
func (g *StateBoundAddressGenerator) NextAddress() (flow.Address, error)
type StateHolder ¶ added in v0.15.0
type StateHolder struct { EnforceComputationLimits bool // contains filtered or unexported fields }
StateHolder provides active states and facilitates common state management operations in order to make services such as accounts not worry about the state it is recommended that such services wraps a state manager instead of a state itself.
func NewStateHolder ¶ added in v0.15.0
func NewStateHolder(startState *State) *StateHolder
NewStateHolder constructs a new state manager
func (*StateHolder) DisableAllLimitEnforcements ¶ added in v0.25.2
func (s *StateHolder) DisableAllLimitEnforcements()
DisableAllLimitEnforcements disables all the limits
func (*StateHolder) EnableAllLimitEnforcements ¶ added in v0.25.2
func (s *StateHolder) EnableAllLimitEnforcements()
EnableAllLimitEnforcements enables all the limits
func (*StateHolder) EnforceInteractionLimits ¶ added in v0.23.1
func (s *StateHolder) EnforceInteractionLimits() bool
EnforceInteractionLimits returns if the interaction limits should be enforced or not
func (*StateHolder) EnforceMemoryLimits ¶ added in v0.25.2
func (s *StateHolder) EnforceMemoryLimits() bool
EnforceMemoryLimits returns if the memory limits should be enforced or not
func (*StateHolder) NewChild ¶ added in v0.15.0
func (s *StateHolder) NewChild() *State
NewChild constructs a new child of active state and set it as active state and return it this is basically a utility function for common operations
func (*StateHolder) SetActiveState ¶ added in v0.15.0
func (s *StateHolder) SetActiveState(st *State)
SetActiveState sets active state
func (*StateHolder) SetPayerIsServiceAccount ¶ added in v0.23.4
func (s *StateHolder) SetPayerIsServiceAccount()
SetPayerIsServiceAccount sets if the payer is the service account
func (*StateHolder) State ¶ added in v0.15.0
func (s *StateHolder) State() *State
State returns the active state
type StateOption ¶ added in v0.14.0
type StatefulAccounts ¶ added in v0.21.8
type StatefulAccounts struct {
// contains filtered or unexported fields
}
func NewAccounts ¶
func NewAccounts(stateHolder *StateHolder) *StatefulAccounts
func (*StatefulAccounts) AllocateStorageIndex ¶ added in v0.21.8
func (a *StatefulAccounts) AllocateStorageIndex(address flow.Address) (atree.StorageIndex, error)
func (*StatefulAccounts) AppendPublicKey ¶ added in v0.21.8
func (a *StatefulAccounts) AppendPublicKey(address flow.Address, publicKey flow.AccountPublicKey) error
func (*StatefulAccounts) CheckAccountNotFrozen ¶ added in v0.21.8
func (a *StatefulAccounts) CheckAccountNotFrozen(address flow.Address) error
handy function to error out if account is frozen
func (*StatefulAccounts) ContractExists ¶ added in v0.26.0
func (*StatefulAccounts) Create ¶ added in v0.21.8
func (a *StatefulAccounts) Create(publicKeys []flow.AccountPublicKey, newAddress flow.Address) error
Create account sets all required registers on an address.
func (*StatefulAccounts) DeleteContract ¶ added in v0.21.8
func (a *StatefulAccounts) DeleteContract(contractName string, address flow.Address) error
func (*StatefulAccounts) Exists ¶ added in v0.21.8
func (a *StatefulAccounts) Exists(address flow.Address) (bool, error)
func (*StatefulAccounts) GetAccountFrozen ¶ added in v0.21.8
func (a *StatefulAccounts) GetAccountFrozen(address flow.Address) (bool, error)
func (*StatefulAccounts) GetContract ¶ added in v0.21.8
func (*StatefulAccounts) GetContractNames ¶ added in v0.21.8
func (a *StatefulAccounts) GetContractNames(address flow.Address) ([]string, error)
GetContractNames gets a sorted list of names of contracts deployed on an address
func (*StatefulAccounts) GetPublicKey ¶ added in v0.21.8
func (a *StatefulAccounts) GetPublicKey(address flow.Address, keyIndex uint64) (flow.AccountPublicKey, error)
func (*StatefulAccounts) GetPublicKeyCount ¶ added in v0.21.8
func (a *StatefulAccounts) GetPublicKeyCount(address flow.Address) (uint64, error)
func (*StatefulAccounts) GetPublicKeys ¶ added in v0.21.8
func (a *StatefulAccounts) GetPublicKeys(address flow.Address) (publicKeys []flow.AccountPublicKey, err error)
func (*StatefulAccounts) GetStorageUsed ¶ added in v0.21.8
func (a *StatefulAccounts) GetStorageUsed(address flow.Address) (uint64, error)
GetStorageUsed returns the amount of storage used in bytes by this account
func (*StatefulAccounts) GetValue ¶ added in v0.21.8
func (a *StatefulAccounts) GetValue(address flow.Address, key string) (flow.RegisterValue, error)
func (*StatefulAccounts) SetAccountFrozen ¶ added in v0.21.8
func (a *StatefulAccounts) SetAccountFrozen(address flow.Address, frozen bool) error
func (*StatefulAccounts) SetAllPublicKeys ¶ added in v0.21.8
func (a *StatefulAccounts) SetAllPublicKeys(address flow.Address, publicKeys []flow.AccountPublicKey) error
func (*StatefulAccounts) SetContract ¶ added in v0.21.8
func (*StatefulAccounts) SetPublicKey ¶ added in v0.21.8
func (a *StatefulAccounts) SetPublicKey( address flow.Address, keyIndex uint64, publicKey flow.AccountPublicKey, ) (encodedPublicKey []byte, err error)
func (*StatefulAccounts) SetValue ¶ added in v0.21.8
func (a *StatefulAccounts) SetValue(address flow.Address, key string, value flow.RegisterValue) error
SetValue sets a value in address' storage
func (*StatefulAccounts) TouchContract ¶ added in v0.21.8
func (a *StatefulAccounts) TouchContract(contractName string, address flow.Address)
type UUIDGenerator ¶ added in v0.15.0
type UUIDGenerator struct {
// contains filtered or unexported fields
}
func NewUUIDGenerator ¶ added in v0.15.0
func NewUUIDGenerator(stateHolder *StateHolder) *UUIDGenerator
func (*UUIDGenerator) GenerateUUID ¶ added in v0.15.0
func (u *UUIDGenerator) GenerateUUID() (uint64, error)
GenerateUUID generates a new uuid and persist the data changes into state
func (*UUIDGenerator) GetUUID ¶ added in v0.15.0
func (u *UUIDGenerator) GetUUID() (uint64, error)
GetUUID reads uint64 byte value for uuid from the state
func (*UUIDGenerator) SetUUID ¶ added in v0.15.0
func (u *UUIDGenerator) SetUUID(uuid uint64) error
SetUUID sets a new uint64 byte value
type View ¶ added in v0.15.0
type View interface { NewChild() View MergeView(child View) error DropDelta() // drops all the delta changes RegisterUpdates() ([]flow.RegisterID, []flow.RegisterValue) AllRegisters() []flow.RegisterID Ledger }