Documentation ¶
Index ¶
- Constants
- func ContractKey(contractName string) string
- func IsFVMStateKey(owner, controller, key string) bool
- func IsValidAccountKeyHashAlgo(algo hash.HashingAlgorithm) bool
- func IsValidAccountKeySignAlgo(algo crypto.SigningAlgorithm) bool
- func PrintableKey(key string) string
- func RegisterSize(address flow.Address, isController bool, 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
- type Accounts
- type Ledger
- type State
- func (s *State) Delete(owner, controller, key string, enforceLimit bool) error
- func (s *State) Get(owner, controller, key string, enforceLimit bool) (flow.RegisterValue, error)
- func (s *State) InteractionUsed() uint64
- func (s *State) MergeState(other *State, enforceLimit bool) error
- func (s *State) NewChild() *State
- func (s *State) Set(owner, controller, key string, value flow.RegisterValue, enforceLimit bool) error
- func (s *State) Touch(owner, controller, key string) error
- func (s *State) UpdatedAddresses() []flow.Address
- func (s *State) View() View
- type StateBoundAddressGenerator
- type StateHolder
- func (s *StateHolder) DisableLimitEnforcement()
- func (s *StateHolder) EnableLimitEnforcement()
- func (s *StateHolder) EnforceInteractionLimits() 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) 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 ( KeyExists = "exists" KeyCode = "code" KeyContractNames = "contract_names" KeyPublicKeyCount = "public_key_count" KeyStorageUsed = "storage_used" KeyAccountFrozen = "frozen" KeyStorageIndex = "storage_index" AccountFrozenValue = 1 AccountNotFrozenValue = 0 )
const ( DefaultMaxKeySize = 16_000 // ~16KB DefaultMaxValueSize = 256_000_000 // ~256MB DefaultMaxInteractionSize = 20_000_000 // ~20MB )
TODO we started with high numbers here and we might tune (reduce) them when we have more data
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 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 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) 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, controller, key string, value flow.RegisterValue) error Get(owner, controller, key string) (flow.RegisterValue, error) Touch(owner, controller, key string) error Delete(owner, controller, key string) error }
Rename this to Storage remove reference to flow.RegisterValue and use byte[] A Ledger is the storage interface used by the virtual machine to read and write register values.
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) InteractionUsed ¶ added in v0.14.0
InteractionUsed returns the amount of ledger interaction (total ledger byte read + total ledger byte written)
func (*State) MergeState ¶ added in v0.15.0
MergeState applies the changes from a the given view to this view.
func (*State) Set ¶ added in v0.14.0
func (s *State) Set(owner, controller, key string, value flow.RegisterValue, enforceLimit bool) error
Set updates state delta with a register update
func (*State) Touch ¶ added in v0.14.0
We don't need this later, it should be invisible to the cadence
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 {
// 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) DisableLimitEnforcement ¶ added in v0.23.1
func (s *StateHolder) DisableLimitEnforcement()
DisableLimitEnforcement sets that the interaction limit should not be enforced
func (*StateHolder) EnableLimitEnforcement ¶ added in v0.23.1
func (s *StateHolder) EnableLimitEnforcement()
EnableLimitEnforcement sets that the interaction limit should be enforced
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) 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()
SetActiveState sets active state
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) 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 }