state

package
v0.23.4-rest-events Latest Latest
Warning

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

Go to latest
Published: Jan 11, 2022 License: AGPL-3.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	KeyExists         = "exists"
	KeyCode           = "code"
	KeyContractNames  = "contract_names"
	KeyPublicKeyCount = "public_key_count"
	KeyStorageUsed    = "storage_used"
	KeyAccountFrozen  = "frozen"
	KeyStorageIndex   = "storage_index"

	AccountFrozenValue    = 1
	AccountNotFrozenValue = 0
)
View Source
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 ContractKey(contractName string) string

func IsFVMStateKey added in v0.16.2

func IsFVMStateKey(owner, controller, key string) bool

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

func PrintableKey(key string) string

PrintableKey formats slabs properly and avoids invalid utf8s

func RegisterSize added in v0.13.0

func RegisterSize(address flow.Address, isController bool, key string, value flow.RegisterValue) int

func WithMaxInteractionSizeAllowed added in v0.14.0

func WithMaxInteractionSizeAllowed(limit uint64) func(st *State) *State

WithMaxInteractionSizeAllowed sets limit on total byte interaction with ledger

func WithMaxKeySizeAllowed added in v0.14.0

func WithMaxKeySizeAllowed(limit uint64) func(st *State) *State

WithMaxKeySizeAllowed sets limit on max key size

func WithMaxValueSizeAllowed added in v0.14.0

func WithMaxValueSizeAllowed(limit uint64) func(st *State) *State

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) Delete added in v0.14.0

func (s *State) Delete(owner, controller, key string, enforceLimit bool) error

func (*State) Get added in v0.14.0

func (s *State) Get(owner, controller, key string, enforceLimit bool) (flow.RegisterValue, error)

Get returns a register value given owner, controller and key

func (*State) InteractionUsed added in v0.14.0

func (s *State) InteractionUsed() uint64

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

func (*State) MergeState added in v0.15.0

func (s *State) MergeState(other *State, enforceLimit bool) error

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

func (*State) NewChild added in v0.15.0

func (s *State) NewChild() *State

NewChild generates a new child state

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

func (s *State) Touch(owner, controller, key string) error

We don't need this later, it should be invisible to the cadence

func (*State) UpdatedAddresses added in v0.14.0

func (s *State) UpdatedAddresses() []flow.Address

UpdatedAddresses returns a sorted list of addresses that were updated (at least 1 register update)

func (*State) View added in v0.15.0

func (s *State) View() View

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 StateOption func(st *State) *State

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) Get added in v0.21.8

func (a *StatefulAccounts) Get(address flow.Address) (*flow.Account, 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 (a *StatefulAccounts) GetContract(contractName string, address flow.Address) ([]byte, error)

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 (a *StatefulAccounts) SetContract(contractName string, address flow.Address, contract []byte) error

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
}

Jump to

Keyboard shortcuts

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