Documentation ¶
Overview ¶
Package vmhost contains the top-level components and definitions of the VM
Index ¶
- Constants
- Variables
- func AddArgument(input *vmcommon.ContractCallInput, argument []byte)
- func AddFinishData(vmOutput *vmcommon.VMOutput, data []byte)
- func AddNewOutputAccount(vmOutput *vmcommon.VMOutput, address []byte, balanceDelta int64, data []byte) *vmcommon.OutputAccount
- func AddNewOutputAccountWithSender(vmOutput *vmcommon.VMOutput, address []byte, senderAddress []byte, ...) *vmcommon.OutputAccount
- func BooleanToInt(b bool) int
- func CopyTxHashes(input *vmcommon.ContractCallInput, sourceInput *vmcommon.ContractCallInput)
- func CustomStorageKey(keyType string, associatedKey []byte) []byte
- func DefaultTestContractCallInput() *vmcommon.ContractCallInput
- func DisableLoggingForTests()
- func GetSCCode(fileName string) []byte
- func GetTestSCCode(scName string, prefixToTestSCs string) []byte
- func GuardedGetBytesSlice(data []byte, offset int32, length int32) ([]byte, error)
- func IfNil(checker nilInterfaceChecker) bool
- func InverseBytes(data []byte) []byte
- func MakeContractCallInput(caller []byte, recipient []byte, function string, value int) *vmcommon.ContractCallInput
- func MakeEmptyContractCallInput() *vmcommon.ContractCallInput
- func MakeEmptyVMOutput() *vmcommon.VMOutput
- func MakeTestSCAddress(identifier string) []byte
- func PadBytesLeft(data []byte, size int) []byte
- func SetCallParties(input *vmcommon.ContractCallInput, caller []byte, recipient []byte)
- func SetLoggingForTests()
- func SetLoggingForTestsWithLogger(loggerName string)
- func U64ToLEB128(n uint64) (out []byte)
- type AsyncCall
- func (ac *AsyncCall) Clone() *AsyncCall
- func (ac *AsyncCall) GetCallbackName() string
- func (ac *AsyncCall) GetData() []byte
- func (ac *AsyncCall) GetDestination() []byte
- func (ac *AsyncCall) GetGasLimit() uint64
- func (ac *AsyncCall) GetGasLocked() uint64
- func (ac *AsyncCall) GetIdentifier() []byte
- func (ac *AsyncCall) GetTotalGas() uint64
- func (ac *AsyncCall) GetValue() []byte
- func (ac *AsyncCall) HasCallback() bool
- func (ac *AsyncCall) HasDefinedAnyCallback() bool
- func (ac *AsyncCall) IsInterfaceNil() bool
- func (ac *AsyncCall) IsLocal() bool
- func (ac *AsyncCall) IsRemote() bool
- func (ac *AsyncCall) Reject()
- func (ac *AsyncCall) UpdateStatus(returnCode vmcommon.ReturnCode)
- type AsyncCallExecutionMode
- type AsyncCallGroup
- func (acg *AsyncCallGroup) AddAsyncCall(call *AsyncCall)
- func (acg *AsyncCallGroup) Clone() *AsyncCallGroup
- func (acg *AsyncCallGroup) DeleteAsyncCall(index int)
- func (acg *AsyncCallGroup) DeleteCompletedAsyncCalls()
- func (acg *AsyncCallGroup) FindByDestination(destination []byte) (int, bool)
- func (acg *AsyncCallGroup) HasCallback() bool
- func (acg *AsyncCallGroup) HasPendingCalls() bool
- func (acg *AsyncCallGroup) IsComplete() bool
- func (acg *AsyncCallGroup) IsInterfaceNil() bool
- type AsyncCallInfo
- type AsyncCallInfoHandler
- type AsyncCallLocation
- type AsyncCallStatus
- type AsyncContext
- type AsyncGeneratedCall
- func (ac *AsyncGeneratedCall) GetData() []byte
- func (ac *AsyncGeneratedCall) GetDestination() []byte
- func (ac *AsyncGeneratedCall) GetGasLimit() uint64
- func (ac *AsyncGeneratedCall) GetGasLocked() uint64
- func (ac *AsyncGeneratedCall) GetValueBytes() []byte
- func (ac *AsyncGeneratedCall) IsInterfaceNil() bool
- type BlockchainContext
- type BreakpointValue
- type CallArgsParser
- type CodeDeployInput
- type ContractCallInputBuilder
- func (contractInput *ContractCallInputBuilder) Build() *vmcommon.ContractCallInput
- func (contractInput *ContractCallInputBuilder) WithArguments(arguments ...[]byte) *ContractCallInputBuilder
- func (contractInput *ContractCallInputBuilder) WithCallType(callType vm.CallType) *ContractCallInputBuilder
- func (contractInput *ContractCallInputBuilder) WithCallerAddr(address []byte) *ContractCallInputBuilder
- func (contractInput *ContractCallInputBuilder) WithCurrentTxHash(txHash []byte) *ContractCallInputBuilder
- func (contractInput *ContractCallInputBuilder) WithDCDTTokenName(dcdtTokenName []byte) *ContractCallInputBuilder
- func (contractInput *ContractCallInputBuilder) WithDCDTValue(dcdtValue *big.Int) *ContractCallInputBuilder
- func (contractInput *ContractCallInputBuilder) WithFunction(function string) *ContractCallInputBuilder
- func (contractInput *ContractCallInputBuilder) WithGasProvided(gas uint64) *ContractCallInputBuilder
- func (contractInput *ContractCallInputBuilder) WithRecipientAddr(address []byte) *ContractCallInputBuilder
- type ContractCreateInputBuilder
- func (contractInput *ContractCreateInputBuilder) Build() *vmcommon.ContractCreateInput
- func (contractInput *ContractCreateInputBuilder) WithArguments(arguments ...[]byte) *ContractCreateInputBuilder
- func (contractInput *ContractCreateInputBuilder) WithCallValue(callValue int64) *ContractCreateInputBuilder
- func (contractInput *ContractCreateInputBuilder) WithCallerAddr(address []byte) *ContractCreateInputBuilder
- func (contractInput *ContractCreateInputBuilder) WithContractCode(code []byte) *ContractCreateInputBuilder
- func (contractInput *ContractCreateInputBuilder) WithGasProvided(gas uint64) *ContractCreateInputBuilder
- type DCDTTransfersArgs
- type EnableEpochsHandler
- type GasTracing
- type HashComputer
- type InstanceTracker
- type ManagedTypesContext
- type MeteringContext
- type OldAsyncContext
- type OutputContext
- type RuntimeContext
- type SerializableAsyncCall
- func (*SerializableAsyncCall) Descriptor() ([]byte, []int)
- func (this *SerializableAsyncCall) Equal(that interface{}) bool
- func (m *SerializableAsyncCall) GetCallID() []byte
- func (m *SerializableAsyncCall) GetCallbackClosure() []byte
- func (m *SerializableAsyncCall) GetData() []byte
- func (m *SerializableAsyncCall) GetDestination() []byte
- func (m *SerializableAsyncCall) GetErrorCallback() string
- func (m *SerializableAsyncCall) GetExecutionMode() SerializableAsyncCallExecutionMode
- func (m *SerializableAsyncCall) GetGasLimit() uint64
- func (m *SerializableAsyncCall) GetGasLocked() uint64
- func (m *SerializableAsyncCall) GetStatus() SerializableAsyncCallStatus
- func (m *SerializableAsyncCall) GetSuccessCallback() string
- func (m *SerializableAsyncCall) GetValueBytes() []byte
- func (this *SerializableAsyncCall) GoString() string
- func (m *SerializableAsyncCall) Marshal() (dAtA []byte, err error)
- func (m *SerializableAsyncCall) MarshalTo(dAtA []byte) (int, error)
- func (m *SerializableAsyncCall) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*SerializableAsyncCall) ProtoMessage()
- func (m *SerializableAsyncCall) Reset()
- func (m *SerializableAsyncCall) Size() (n int)
- func (this *SerializableAsyncCall) String() string
- func (m *SerializableAsyncCall) Unmarshal(dAtA []byte) error
- func (m *SerializableAsyncCall) XXX_DiscardUnknown()
- func (m *SerializableAsyncCall) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *SerializableAsyncCall) XXX_Merge(src proto.Message)
- func (m *SerializableAsyncCall) XXX_Size() int
- func (m *SerializableAsyncCall) XXX_Unmarshal(b []byte) error
- type SerializableAsyncCallExecutionMode
- type SerializableAsyncCallGroup
- func (*SerializableAsyncCallGroup) Descriptor() ([]byte, []int)
- func (this *SerializableAsyncCallGroup) Equal(that interface{}) bool
- func (m *SerializableAsyncCallGroup) GetAsyncCalls() []*SerializableAsyncCall
- func (m *SerializableAsyncCallGroup) GetCallback() string
- func (m *SerializableAsyncCallGroup) GetCallbackData() []byte
- func (m *SerializableAsyncCallGroup) GetGasLocked() uint64
- func (m *SerializableAsyncCallGroup) GetIdentifier() string
- func (this *SerializableAsyncCallGroup) GoString() string
- func (m *SerializableAsyncCallGroup) Marshal() (dAtA []byte, err error)
- func (m *SerializableAsyncCallGroup) MarshalTo(dAtA []byte) (int, error)
- func (m *SerializableAsyncCallGroup) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*SerializableAsyncCallGroup) ProtoMessage()
- func (m *SerializableAsyncCallGroup) Reset()
- func (m *SerializableAsyncCallGroup) Size() (n int)
- func (this *SerializableAsyncCallGroup) String() string
- func (m *SerializableAsyncCallGroup) Unmarshal(dAtA []byte) error
- func (m *SerializableAsyncCallGroup) XXX_DiscardUnknown()
- func (m *SerializableAsyncCallGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *SerializableAsyncCallGroup) XXX_Merge(src proto.Message)
- func (m *SerializableAsyncCallGroup) XXX_Size() int
- func (m *SerializableAsyncCallGroup) XXX_Unmarshal(b []byte) error
- type SerializableAsyncCallStatus
- type StateStack
- type StorageContext
- type StorageStatus
- type VMHost
- type VMHostParameters
- type WrappableError
Constants ¶
const ( // BreakpointNoneString is the human-readable name of BreakpointNone BreakpointNoneString = "BreakpointNone" // BreakpointExecutionFailedString is the human-readable name of BreakpointExecutionFailed BreakpointExecutionFailedString = "BreakpointExecutionFailed" // BreakpointAsyncCallString is the human-readable name of BreakpointAsyncCall BreakpointAsyncCallString = "BreakpointAsyncCall" // BreakpointSignalErrorString is the human-readable name of BreakpointSignalError BreakpointSignalErrorString = "BreakpointSignalError" // BreakpointOutOfGasString is the human-readable name of BreakpointOutOfGas BreakpointOutOfGasString = "BreakpointOutOfGas" // UnknownBreakpointString is the human-readable label for an unknown breakpoint value UnknownBreakpointString = "unknown breakpoint" // BackTransferString is the human-readable label for execution type BackTransferString = "BackTransfer" // DirectCallString is the human-readable label for execution type DirectCallString = "DirectCall" // ExecuteOnDestContextString is the human-readable label for execution type ExecuteOnDestContextString = "ExecuteOnDestContext" // ExecuteOnSameContextString is the human-readable label for execution type ExecuteOnSameContextString = "ExecuteOnSameContext" // AsyncCallString is the human-readable label for execution type AsyncCallString = "AsyncCall" // AsyncCallbackString is the human-readable label for execution type AsyncCallbackString = "AsyncCallback" // TransferAndExecuteString is the human-readable label for execution type TransferAndExecuteString = "TransferAndExecute" // UpgradeFromSourceString is the human-readable label for execution type UpgradeFromSourceString = "UpgradeFromSource" // TransferValueOnlyString is the human-readable label for transfer type TransferValueOnlyString = "transferValueOnly" // DeploySmartContractString is the human-readable label for transfer type DeploySmartContractString = "DeploySmartContract" // DeployFromSourceString is the human-readable label for transfer type DeployFromSourceString = "DeployFromSource" )
const ( // AsyncCallPending is the status of an async call that awaits complete execution AsyncCallPending AsyncCallStatus = iota // AsyncCallResolved is the status of an async call that was executed completely and successfully AsyncCallResolved // AsyncCallRejected is the status of an async call that was executed completely but unsuccessfully AsyncCallRejected // AddressLen specifies the length of the address AddressLen = 32 // HashLen specifies the lenghth of a hash HashLen = 32 // BalanceLen specifies the number of bytes on which the balance is stored BalanceLen = 32 // CodeMetadataLen specifies the length of the code metadata CodeMetadataLen = 2 // InitFunctionName specifies the name for the init function InitFunctionName = "init" // UpgradeFunctionName specifies if the call is an upgradeContract call UpgradeFunctionName = "upgradeContract" // ContractsUpgradeFunctionName specifies the contract's function called at upgrade ContractsUpgradeFunctionName = "upgrade" // DeleteFunctionName specifies if the call is an deleteContract call DeleteFunctionName = "deleteContract" )
const ( // MultiDCDTTransferFixOnCallBackFlag defines the flag that activates the multi dcdt transfer fix on callback MultiDCDTTransferFixOnCallBackFlag core.EnableEpochFlag = "MultiDCDTTransferFixOnCallBackFlag" // RemoveNonUpdatedStorageFlag defines the flag that activates the remove non updated storage fix RemoveNonUpdatedStorageFlag core.EnableEpochFlag = "RemoveNonUpdatedStorageFlag" // CreateNFTThroughExecByCallerFlag defines the flag that activates the create nft through exec by caller fix CreateNFTThroughExecByCallerFlag core.EnableEpochFlag = "CreateNFTThroughExecByCallerFlag" // StorageAPICostOptimizationFlag defines the flag that activates the storage api cost optimization StorageAPICostOptimizationFlag core.EnableEpochFlag = "StorageAPICostOptimizationFlag" // CheckExecuteOnReadOnlyFlag defines the flag that activates the check execute on read only CheckExecuteOnReadOnlyFlag core.EnableEpochFlag = "CheckExecuteOnReadOnlyFlag" // FailExecutionOnEveryAPIErrorFlag defines the flag that activates the fail execution on every api error FailExecutionOnEveryAPIErrorFlag core.EnableEpochFlag = "FailExecutionOnEveryAPIErrorFlag" // ManagedCryptoAPIsFlag defines the flag that activates the manage crypto apis ManagedCryptoAPIsFlag core.EnableEpochFlag = "ManagedCryptoAPIsFlag" // DisableExecByCallerFlag defines the flag that activates disable exec by caller DisableExecByCallerFlag core.EnableEpochFlag = "DisableExecByCallerFlag" // RefactorContextFlag defines the flag that activates the refactor context RefactorContextFlag core.EnableEpochFlag = "RefactorContextFlag" // RuntimeMemStoreLimitFlag defines the flag that activates the runtime mem store limit RuntimeMemStoreLimitFlag core.EnableEpochFlag = "RuntimeMemStoreLimitFlag" // RuntimeCodeSizeFixFlag defines the flag that activates the runtime code size fix RuntimeCodeSizeFixFlag core.EnableEpochFlag = "RuntimeCodeSizeFixFlag" // FixOOGReturnCodeFlag defines the flag that activates the fix oog return code FixOOGReturnCodeFlag core.EnableEpochFlag = "FixOOGReturnCodeFlag" // DynamicGasCostForDataTrieStorageLoadFlag defines the flag that activates the dynamic gas cost for data trie storage load DynamicGasCostForDataTrieStorageLoadFlag core.EnableEpochFlag = "DynamicGasCostForDataTrieStorageLoadFlag" // UseGasBoundedShouldFailExecutionFlag defines the flag that activates failing of execution if gas bounded check fails UseGasBoundedShouldFailExecutionFlag core.EnableEpochFlag = "UseGasBoundedShouldFailExecutionFlag" )
const AddressSize = 32
AddressSize is the size of an account address, in bytes.
const AsyncDataPrefix = "ASYNC"
AsyncDataPrefix is the storage key prefix used for AsyncContext-related storage.
const CallbackFunctionName = "callBack"
CallbackFunctionName is the name of the default asynchronous callback function of a smart contract
const LegacyAsyncCallGroupID = "LegacyAsync"
LegacyAsyncCallGroupID is the AsyncCallGroup identifier reserved for the implementation of the legacy asyncCall() EEI function
const TimeLockKeyPrefix = "TIMELOCK"
TimeLockKeyPrefix is the storage key prefix used for timelock-related storage.
const VMVersion = "v1.5"
VMVersion returns the current vm version
const WASMPageSize = uint32(65536)
WASMPageSize is the size in bytes of a WASM linear memory page
Variables ¶
var ( ErrInvalidLengthAsyncCall = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowAsyncCall = fmt.Errorf("proto: integer overflow") ErrUnexpectedEndOfGroupAsyncCall = fmt.Errorf("proto: unexpected end of group") )
var DefaultVMType = []byte{0xF, 0xF}
DefaultVMType is an exposed value to use in tests
var ErrAccountNotFound = errors.New("account not found")
ErrAccountNotFound is an exposed value to use in tests
var ErrAccountNotPayable = errors.New("sending value to non payable contract")
ErrAccountNotPayable signals that the value transfer to a non payable contract is not possible
var ErrAllOperandsAreEqualToZero = errors.New("all operands are equal to 0")
ErrAllOperandsAreEqualToZero signals that all operands are equal to 0
var ErrArgIndexOutOfRange = errors.New("argument index out of range")
ErrArgIndexOutOfRange signals that the argument index is out of range
var ErrArgOutOfRange = errors.New("argument out of range")
ErrArgOutOfRange signals that the argument is out of range
var ErrAsyncCallGroupExistsAlready = errors.New("async call group exists already")
ErrAsyncCallGroupExistsAlready signals that an AsyncCallGroup with the same name already exists
var ErrAsyncCallNotFound = errors.New("async call not found")
ErrAsyncCallNotFound signals that the requested AsyncCall was not found
var ErrAsyncInit = errors.New("async context initialization error")
ErrAsyncInit signals an async context initialization error
var ErrAsyncNoCallbackForClosure = errors.New("no callback for closure, cannot call callback directly")
ErrAsyncNoCallbackForClosure signals that closure can't be obtained
var ErrAsyncNoMultiLevel = errors.New("multi-level async calls are not allowed yet")
ErrAsyncNoMultiLevel signals that no multi-level async calls are allowed
var ErrAsyncNoOutputFromCallback = errors.New("callback VMOutput should not be nil")
ErrAsyncNoOutputFromCallback signals that an error happen while producing the output of a callback
var ErrAsyncNotAllowed = errors.New("async call is not allowed at this location")
ErrAsyncNotAllowed signals that the requested AsyncCall is not allowed
var ErrBadBounds = errors.New("bad bounds")
ErrBadBounds signals that a certain variable is out of bounds
var ErrBadLowerBounds = fmt.Errorf("%w (lower)", ErrBadBounds)
ErrBadLowerBounds signals that a certain variable is lower than allowed
var ErrBadUpperBounds = fmt.Errorf("%w (upper)", ErrBadBounds)
ErrBadUpperBounds signals that a certain variable is higher than allowed
var ErrBigFloatWrongPrecision = errors.New("precision of the big float must be 53")
ErrBigFloatWrongPrecision signals that the precision has a wrong value
var ErrBigIntCannotBeRepresentedAsInt64 = errors.New("big int cannot be represented as int64")
ErrBigIntCannotBeRepresentedAsInt64 signals that an attempt to apply a bitwise operation on negative numbers has been made
var ErrBitwiseNegative = errors.New("bitwise operations only allowed on positive integers")
ErrBitwiseNegative signals that an attempt to apply a bitwise operation on negative numbers has been made
var ErrBuiltinCallOnSameContextDisallowed = errors.New("calling built-in function on the same context is disallowed")
ErrBuiltinCallOnSameContextDisallowed signals that calling a built-in function on the same context is not allowed
var ErrCallBackFuncCalledInRun = fmt.Errorf("%w (calling callBack() directly is forbidden)", executor.ErrInvalidFunction)
ErrCallBackFuncCalledInRun signals that a callback func was called directly, which is forbidden
var ErrCannotInterpretCallbackArgs = errors.New("cannot interpret callback args")
ErrCannotInterpretCallbackArgs signals that the cross-shard callback arguments are invalid
var ErrCannotUseBuiltinAsCallback = errors.New("cannot use built-in function as callback")
ErrCannotUseBuiltinAsCallback signals that the specified callback was set to a built-in function, which is forbidden
var ErrCannotWriteOnReadOnly = errors.New("cannot write on read only mode")
ErrCannotWriteOnReadOnly signals that write operation on read only is not allowed
var ErrCannotWriteProtectedKey = errors.New("cannot write to protected key")
ErrCannotWriteProtectedKey signals an attempt to write to a protected key, while storage protection is enforced
var ErrContextCallbackDisabled = errors.New("context callback disabled")
ErrContextCallbackDisabled signals that group callbacks cannot be set nor executed
var ErrContractInvalid = fmt.Errorf("invalid contract code")
ErrContractInvalid signals that the contract code is invalid
var ErrContractNotFound = fmt.Errorf("%w (not found)", ErrContractInvalid)
ErrContractNotFound signals that the contract was not found
var ErrDeploymentOverExistingAccount = errors.New("cannot deploy over existing account")
ErrDeploymentOverExistingAccount signals that an attempt to deploy a new SC over an already existing account has been made
var ErrDivZero = errors.New("division by 0")
ErrDivZero signals that an attempt to divide by 0 has been made
var ErrEmptyProtectedKeyPrefix = errors.New("protectedKeyPrefix is empty or nil")
ErrEmptyProtectedKeyPrefix signals that the protected key prefix is empty or nil
var ErrExecutionFailed = errors.New("execution failed")
ErrExecutionFailed signals that the execution failed
var ErrExecutionFailedWithTimeout = errors.New("execution failed with timeout")
ErrExecutionFailedWithTimeout signals that the execution failed with timeout
var ErrExecutionPanicked = errors.New("VM execution panicked")
ErrExecutionPanicked signals that the execution failed irrecoverably
var ErrExponentTooBigOrTooSmall = errors.New("exponent is either too small or too big")
ErrExponentTooBigOrTooSmall signals that the exponent is too big or too small
var ErrFailedTransfer = errors.New("failed transfer")
ErrFailedTransfer signals that the transfer operation has failed
var ErrInfinityFloatOperation = errors.New("infinity operations are not allowed")
ErrInfinityFloatOperation signals that operations with infinity are not allowed
var ErrInitFuncCalledInRun = fmt.Errorf("%w (calling init() directly is forbidden)", executor.ErrInvalidFunction)
ErrInitFuncCalledInRun signals that the init func was called directly, which is forbidden
var ErrInputAndOutputGasDoesNotMatch = errors.New("input and output gas does not match")
ErrInputAndOutputGasDoesNotMatch is raised when the output gas (gas used + gas locked + gas remaining) is not equal to the input gas
var ErrInvalidAccount = errors.New("account does not exist")
ErrInvalidAccount signals that a certain account does not exist
var ErrInvalidArgument = errors.New("invalid argument")
ErrInvalidArgument is given when argument is invalid
var ErrInvalidBuiltInFunctionCall = errors.New("invalid built in function call")
ErrInvalidBuiltInFunctionCall signals that built in function was used in the wrong context
var ErrInvalidCallOnReadOnlyMode = errors.New("operation not permitted in read only mode")
ErrInvalidCallOnReadOnlyMode signals that an operation is not permitted due to read only mode
var ErrInvalidFunctionName = fmt.Errorf("%w (invalid name)", executor.ErrInvalidFunction)
ErrInvalidFunctionName signals that the function name is invalid
var ErrInvalidGasProvided = errors.New("invalid gas provided")
ErrInvalidGasProvided signals that an unacceptable GasProvided value was specified
var ErrInvalidPublicKeySize = errors.New("invalid public key size")
ErrInvalidPublicKeySize signals that the public key size is invalid
var ErrInvalidTokenIndex = errors.New("invalid token index")
ErrInvalidTokenIndex is given when argument is invalid
var ErrInvalidUpgradeArguments = fmt.Errorf("%w (invalid arguments)", ErrUpgradeFailed)
ErrInvalidUpgradeArguments signals that the upgrade process failed due to invalid arguments
var ErrLegacyAsyncCallInvalid = errors.New("legacy async call invalid")
ErrLegacyAsyncCallInvalid signals that the legacy async call is invalid
var ErrLegacyAsyncCallNotFound = errors.New("legacy async call not found")
ErrLegacyAsyncCallNotFound signals that a legacy async call was expected, but is missing
var ErrLengthOfBufferNotCorrect = errors.New("length of buffer is not correct")
ErrLengthOfBufferNotCorrect signals that length of the buffer is not correct
var ErrMaxInstancesReached = fmt.Errorf("%w (max instances reached)", ErrExecutionFailed)
ErrMaxInstancesReached signals that the max number of Wasmer instances has been reached.
var ErrMemoryDeclarationMissing = fmt.Errorf("%w (missing memory declaration)", ErrContractInvalid)
ErrMemoryDeclarationMissing signals that a memory declaration is missing
var ErrMemoryLimit = errors.New("memory limit reached")
ErrMemoryLimit signals that too much memory was allocated by the contract
var ErrNegativeLength = errors.New("negative length")
ErrNegativeLength signals that the given length is less than 0
var ErrNilBlockChainHook = errors.New("nil blockchain hook")
ErrNilBlockChainHook signals that nil blockchain hook was provided
var ErrNilBuiltInFunctionsContainer = errors.New("nil built in functions container")
ErrNilBuiltInFunctionsContainer signals that nil built in functions container was provided
var ErrNilCallArgsParser = errors.New("nil call args parser")
ErrNilCallArgsParser signals that nil call arguments parser was provided
var ErrNilCallbackFunction = errors.New("nil callback function")
ErrNilCallbackFunction signals that a nil callback function has been provided
var ErrNilContract = errors.New("nil contract")
ErrNilContract signals that the contract is nil
var ErrNilDCDTData = errors.New("nil dcdt data")
ErrNilDCDTData is given when DCDT data is missing
var ErrNilDCDTTransferParser = errors.New("nil dcdt transfer parser")
ErrNilDCDTTransferParser signals that nil dcdt transfer parser was provided
var ErrNilDestinationCallVMOutput = errors.New("nil destination call VMOutput")
ErrNilDestinationCallVMOutput signals that the destination call execution returned a nil VMOutput
var ErrNilEnableEpochsHandler = errors.New("nil enable epochs handler")
ErrNilEnableEpochsHandler signals that enable epochs handler is nil
var ErrNilEpochNotifier = errors.New("nil epoch notifier")
ErrNilEpochNotifier signals that epoch notifier is nil
var ErrNilExecutor = errors.New("nil Executor")
ErrNilExecutor signals that the provided Executor is nil
var ErrNilHasher = errors.New("nil Hasher")
ErrNilHasher signals that the provided Hasher is nil
var ErrNilHostParameters = errors.New("nil host parameters")
ErrNilHostParameters signals that nil host parameters was provided
var ErrNilVMHost = errors.New("nil VMHost")
ErrNilVMHost signals that the provided VMHost is nil
var ErrNilVMType = errors.New("nil VMType")
ErrNilVMType signals that the provided VMType is nil
var ErrNoAsyncParentContext = errors.New("this should not be called for async calls (only callbacks and direct calls)")
ErrNoAsyncParentContext signals that load parent was called for an async call
var ErrNoBigFloatUnderThisHandle = errors.New("no bigFloat under the given handle")
ErrNoBigFloatUnderThisHandle signals that there is no bigInt for the given handle
var ErrNoBigIntUnderThisHandle = errors.New("no bigInt under the given handle")
ErrNoBigIntUnderThisHandle signals that there is no bigInt for the given handle
var ErrNoEllipticCurveUnderThisHandle = errors.New("no elliptic curve under the given handle")
ErrNoEllipticCurveUnderThisHandle singals that there is no elliptic curve for the given handle
var ErrNoManagedBufferUnderThisHandle = errors.New("no managed buffer under the given handle")
ErrNoManagedBufferUnderThisHandle signals that there is no buffer for the given handle
var ErrNoManagedMapUnderThisHandle = errors.New("no managed map under the given handle")
ErrNoManagedMapUnderThisHandle signals that there is no buffer for the given handle
var ErrNoStoredAsyncContextFound = errors.New("no async context found in storage")
ErrNoStoredAsyncContextFound signals that no persisted data was found for the AsyncContext to load
var ErrNonPayableFunctionDcdt = errors.New("function does not accept DCDT payment")
ErrNonPayableFunctionDcdt signals that a non-payable function received non-zero DCDT call value
var ErrNonPayableFunctionRewa = errors.New("function does not accept REWA payment")
ErrNonPayableFunctionRewa signals that a non-payable function received non-zero call value
var ErrNotEnoughGas = errors.New("not enough gas")
ErrNotEnoughGas signals that there is not enough gas for the operation
var ErrOnlyOneLegacyAsyncCallAllowed = errors.New("only one legacy async call allowed")
ErrOnlyOneLegacyAsyncCallAllowed signals that there was an attempt to create more than one legacy async calls, which is forbidden
var ErrPointNotOnCurve = errors.New("point is not on curve")
ErrPointNotOnCurve signals that the point to be used is not on curve
var ErrPositiveExponent = errors.New("exponent must be negative")
ErrPositiveExponent signals that the exponent is greater or equal to 0
var ErrReturnCodeNotOk = errors.New("return code is not ok")
ErrReturnCodeNotOk signals that the returned code is different than vmcommon.Ok
var ErrShiftNegative = errors.New("bitwise shift operations only allowed on positive integers and by a positive amount")
ErrShiftNegative signals that an attempt to apply a bitwise shift operation on negative numbers has been made
var ErrSignalError = errors.New("error signalled by smartcontract")
ErrSignalError is given when the smart contract signals an error
var ErrStorageValueOutOfRange = errors.New("storage value out of range")
ErrStorageValueOutOfRange signals that the storage value is out of range
var ErrStoreReservedKey = errors.New("cannot write to storage under reserved key")
ErrStoreReservedKey signals that an attempt to write under an reserved key has been made
var ErrSyncExecutionNotInSameShard = errors.New("sync execution request is not in the same shard")
ErrSyncExecutionNotInSameShard signals that the sync execution request is not in the same shard
var ErrTooManyDCDTTransfers = errors.New("too many DCDT transfers")
ErrTooManyDCDTTransfers signals that too many DCDT transfers are in sc call
var ErrTransferInsufficientFunds = fmt.Errorf("%w (insufficient funds)", ErrFailedTransfer)
ErrTransferInsufficientFunds signals that the transfer has failed due to insufficient funds
var ErrTransferNegativeValue = fmt.Errorf("%w (negative value)", ErrFailedTransfer)
ErrTransferNegativeValue signals that the transfer has failed due to the fact that the value is less than 0
var ErrTransferValueOnDCDTCall = errors.New("transfer value on dcdt call")
ErrTransferValueOnDCDTCall signals that balance transfer was given in dcdt call
var ErrUnhandledRuntimeBreakpoint = errors.New("unhandled runtime breakpoint")
ErrUnhandledRuntimeBreakpoint signals that the runtime breakpoint is unhandled
var ErrUnknownCallType = errors.New("unknown call type")
ErrUnknownCallType signals that the call type is not recognized
var ErrUpgradeFailed = errors.New("upgrade failed")
ErrUpgradeFailed signals that the upgrade encountered an error
var ErrUpgradeNotAllowed = errors.New("upgrade not allowed")
ErrUpgradeNotAllowed signals that an upgrade is not allowed
var ErrVMIsClosing = errors.New("vm is closing")
ErrVMIsClosing signals that vm is closing
var One = big.NewInt(1)
One is the big integer 1
var ParentAddress = MakeTestSCAddress("parentSC")
ParentAddress is an exposed value to use in tests
var SCAddressPrefix = []byte("\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x0f")
SCAddressPrefix is the prefix of any smart contract address used for testing.
var SerializableAsyncCallExecutionMode_name = map[int32]string{
0: "SerializableSyncExecution",
1: "SerializableAsyncBuiltinFuncIntraShard",
2: "SerializableAsyncBuiltinFuncCrossShard",
3: "SerializableAsyncUnknown",
}
var SerializableAsyncCallExecutionMode_value = map[string]int32{
"SerializableSyncExecution": 0,
"SerializableAsyncBuiltinFuncIntraShard": 1,
"SerializableAsyncBuiltinFuncCrossShard": 2,
"SerializableAsyncUnknown": 3,
}
var SerializableAsyncCallStatus_name = map[int32]string{
0: "SerializableAsyncCallPending",
1: "SerializableAsyncCallResolved",
2: "SerializableAsyncCallRejected",
}
var SerializableAsyncCallStatus_value = map[string]int32{
"SerializableAsyncCallPending": 0,
"SerializableAsyncCallResolved": 1,
"SerializableAsyncCallRejected": 2,
}
var UserAddress = []byte("userAccount.....................")
UserAddress is an exposed value to use in tests
var Zero = big.NewInt(0)
Zero is the big integer 0
Functions ¶
func AddArgument ¶
func AddArgument(input *vmcommon.ContractCallInput, argument []byte)
AddArgument adds the provided argument to the ContractCallInput
func AddFinishData ¶
AddFinishData appends the provided []byte to the ReturnData of the given vmOutput
func AddNewOutputAccount ¶
func AddNewOutputAccount(vmOutput *vmcommon.VMOutput, address []byte, balanceDelta int64, data []byte) *vmcommon.OutputAccount
AddNewOutputAccount creates a new vmcommon.OutputAccount from the provided arguments and adds it to OutputAccounts of the provided vmOutput
func AddNewOutputAccountWithSender ¶
func AddNewOutputAccountWithSender(vmOutput *vmcommon.VMOutput, address []byte, senderAddress []byte, balanceDelta int64, data []byte) *vmcommon.OutputAccount
AddNewOutputAccountWithSender creates a new vmcommon.OutputAccount from the provided arguments and adds it to OutputAccounts of the provided vmOutput
func BooleanToInt ¶
BooleanToInt returns 1 if the given bool is true, 0 otherwise
func CopyTxHashes ¶
func CopyTxHashes(input *vmcommon.ContractCallInput, sourceInput *vmcommon.ContractCallInput)
CopyTxHashes copies the tx hashes from a source ContractCallInput into another
func CustomStorageKey ¶
CustomStorageKey generates a storage key of a specific type.
func DefaultTestContractCallInput ¶
func DefaultTestContractCallInput() *vmcommon.ContractCallInput
DefaultTestContractCallInput creates a vmcommon.ContractCallInput struct with default values.
func DisableLoggingForTests ¶
func DisableLoggingForTests()
DisableLoggingForTests sets log level to *:NONE
func GetTestSCCode ¶
GetTestSCCode retrieves the bytecode of a WASM testing module.
func GuardedGetBytesSlice ¶
GuardedGetBytesSlice extracts a subslice from a given slice, guarding against overstepping the bounds.
func IfNil ¶
func IfNil(checker nilInterfaceChecker) bool
IfNil tests if the provided interface pointer or underlying object is nil
func InverseBytes ¶
InverseBytes reverses the order of a byte slice.
func MakeContractCallInput ¶
func MakeContractCallInput( caller []byte, recipient []byte, function string, value int, ) *vmcommon.ContractCallInput
MakeContractCallInput creates a ContractCallInput and sets the provided arguments
func MakeEmptyContractCallInput ¶
func MakeEmptyContractCallInput() *vmcommon.ContractCallInput
MakeEmptyContractCallInput instantiates an empty ContractCallInput
func MakeEmptyVMOutput ¶
MakeEmptyVMOutput creates a vmcommon.VMOutput struct with default values
func MakeTestSCAddress ¶
MakeTestSCAddress generates a new smart contract address to be used for testing based on the given identifier.
func PadBytesLeft ¶
PadBytesLeft adds a specified number of zeros to the left of a byte slice.
func SetCallParties ¶
func SetCallParties(input *vmcommon.ContractCallInput, caller []byte, recipient []byte)
SetCallParties sets the caller and recipient of the given ContractCallInput
func SetLoggingForTests ¶
func SetLoggingForTests()
SetLoggingForTests configures the logger package with *:TRACE and enabled logger names
func SetLoggingForTestsWithLogger ¶
func SetLoggingForTestsWithLogger(loggerName string)
SetLoggingForTestsWithLogger configures the logger package with a certain logger
func U64ToLEB128 ¶
U64ToLEB128 encodes an uint64 using LEB128 (Little Endian Base 128), used in WASM bytecode See https://en.wikipedia.org/wiki/LEB128 Copied from https://github.com/filecoin-project/go-leb128/blob/master/leb128.go
Types ¶
type AsyncCall ¶
type AsyncCall struct { CallID []byte Status AsyncCallStatus ExecutionMode AsyncCallExecutionMode Destination []byte Data []byte GasLimit uint64 GasLocked uint64 ValueBytes []byte SuccessCallback string ErrorCallback string CallbackClosure []byte IsBuiltinFunctionCall bool }
AsyncCall holds the information about an individual async call
func (*AsyncCall) GetCallbackName ¶
GetCallbackName returns the name of the callback to execute, depending on the status of the async call
func (*AsyncCall) GetDestination ¶
GetDestination returns the destination of an async call
func (*AsyncCall) GetGasLimit ¶
GetGasLimit returns the gas limit of the current async call
func (*AsyncCall) GetGasLocked ¶
GetGasLocked returns the gas locked for the async callback
func (*AsyncCall) GetIdentifier ¶
GetIdentifier returns the identifier of an async call
func (*AsyncCall) GetTotalGas ¶
GetTotalGas returns the sum of the gas limit and gas locked
func (*AsyncCall) GetValue ¶
GetValue returns the byte representation of the value of the async call
func (*AsyncCall) HasCallback ¶
HasCallback returns true if there is a callback to execute, depending on the status of the async call
func (*AsyncCall) HasDefinedAnyCallback ¶
HasDefinedAnyCallback returns true if this AsyncCall defines at least one non-empty callback name
func (*AsyncCall) IsInterfaceNil ¶
IsInterfaceNil returns true if there is no value under the interface
func (*AsyncCall) Reject ¶
func (ac *AsyncCall) Reject()
Reject sets the rejected status for this async call
func (*AsyncCall) UpdateStatus ¶
func (ac *AsyncCall) UpdateStatus(returnCode vmcommon.ReturnCode)
UpdateStatus sets the status of the async call depending on the provided ReturnCode
type AsyncCallExecutionMode ¶
type AsyncCallExecutionMode uint
AsyncCallExecutionMode encodes the execution modes of an AsyncCall
const ( // SyncExecution indicates that the async call can be executed synchronously, // with its corresponding callback SyncExecution AsyncCallExecutionMode = iota // AsyncBuiltinFuncIntraShard indicates that the async call is an intra-shard built in function call AsyncBuiltinFuncIntraShard // AsyncBuiltinFuncCrossShard indicates that the async call is a cross-shard call to a // built-in function, which is executed half in-shard, half cross-shard AsyncBuiltinFuncCrossShard // DCDTTransferOnCallBack indicated that the async call is actually a callback with DCDT transfer DCDTTransferOnCallBack // AsyncUnknown indicates that the async call cannot be executed locally, and // must be forwarded to the destination account AsyncUnknown )
type AsyncCallGroup ¶
type AsyncCallGroup struct { Callback string GasLocked uint64 CallbackData []byte Identifier string AsyncCalls []*AsyncCall }
AsyncCallGroup is a structure containing a group of async calls and a callback that should be called when all these async calls are resolved
func FromSerializableAsyncCallGroups ¶
func FromSerializableAsyncCallGroups(serializableAsyncCallGroups []*SerializableAsyncCallGroup) []*AsyncCallGroup
FromSerializableAsyncCallGroups - deserialize all call groups from protobuf
func NewAsyncCallGroup ¶
func NewAsyncCallGroup(identifier string) *AsyncCallGroup
NewAsyncCallGroup creates a new instance of AsyncCallGroup
func (*AsyncCallGroup) AddAsyncCall ¶
func (acg *AsyncCallGroup) AddAsyncCall(call *AsyncCall)
AddAsyncCall adds a given AsyncCall to the AsyncCallGroup
func (*AsyncCallGroup) Clone ¶
func (acg *AsyncCallGroup) Clone() *AsyncCallGroup
Clone creates a deep clone of the AsyncCallGroup
func (*AsyncCallGroup) DeleteAsyncCall ¶
func (acg *AsyncCallGroup) DeleteAsyncCall(index int)
DeleteAsyncCall removes an AsyncCall from this AsyncCallGroup, given its index
func (*AsyncCallGroup) DeleteCompletedAsyncCalls ¶
func (acg *AsyncCallGroup) DeleteCompletedAsyncCalls()
DeleteCompletedAsyncCalls removes all completed AsyncCalls, keeping only those with status AsyncCallPending
func (*AsyncCallGroup) FindByDestination ¶
func (acg *AsyncCallGroup) FindByDestination(destination []byte) (int, bool)
FindByDestination returns the index of an AsyncCall in this AsyncCallGroup that matches the provided destination
func (*AsyncCallGroup) HasCallback ¶
func (acg *AsyncCallGroup) HasCallback() bool
HasCallback verifies whether a callback function has been set for this AsyncCallGroup
func (*AsyncCallGroup) HasPendingCalls ¶
func (acg *AsyncCallGroup) HasPendingCalls() bool
HasPendingCalls verifies whether the AsyncCallGroup has any AsyncCalls left to return from the destination call
func (*AsyncCallGroup) IsComplete ¶
func (acg *AsyncCallGroup) IsComplete() bool
IsComplete verifies whether all AsyncCalls have been completed
func (*AsyncCallGroup) IsInterfaceNil ¶
func (acg *AsyncCallGroup) IsInterfaceNil() bool
IsInterfaceNil returns true if there is no value under the interface
type AsyncCallInfo ¶
type AsyncCallInfo struct { Destination []byte Data []byte GasLimit uint64 GasLocked uint64 ValueBytes []byte }
AsyncCallInfo contains the information required to handle the asynchronous call of another SmartContract
func (*AsyncCallInfo) GetData ¶
func (aci *AsyncCallInfo) GetData() []byte
GetData returns the transaction data of the async call
func (*AsyncCallInfo) GetDestination ¶
func (aci *AsyncCallInfo) GetDestination() []byte
GetDestination returns the destination of an async call
func (*AsyncCallInfo) GetGasLimit ¶
func (aci *AsyncCallInfo) GetGasLimit() uint64
GetGasLimit returns the gas limit of the current async call
func (*AsyncCallInfo) GetGasLocked ¶
func (aci *AsyncCallInfo) GetGasLocked() uint64
GetGasLocked returns the gas locked for the async callback
func (*AsyncCallInfo) GetValueBytes ¶
func (aci *AsyncCallInfo) GetValueBytes() []byte
GetValueBytes returns the byte representation of the value of the async call
type AsyncCallInfoHandler ¶
type AsyncCallInfoHandler interface { GetDestination() []byte GetData() []byte GetGasLimit() uint64 GetGasLocked() uint64 GetValueBytes() []byte }
AsyncCallInfoHandler defines the functionality for working with AsyncCallInfo
type AsyncCallLocation ¶
type AsyncCallLocation interface { GetAsyncCall() *AsyncCall GetGroupIndex() int GetCallIndex() int GetError() error }
AsyncCallLocation defines the functionality for async calls
type AsyncCallStatus ¶
type AsyncCallStatus uint8
AsyncCallStatus represents the different status an async call can have
type AsyncContext ¶
type AsyncContext interface { StateStack InitStateFromInput(input *vmcommon.ContractCallInput) error HasPendingCallGroups() bool IsComplete() bool GetCallGroup(groupID string) (*AsyncCallGroup, bool) SetContextCallback(callbackName string, data []byte, gas uint64) error HasCallback() bool GetCallerAddress() []byte GetParentAddress() []byte GetCallerCallID() []byte GetReturnData() []byte SetReturnData(data []byte) Execute() error RegisterAsyncCall(groupID string, call *AsyncCall) error RegisterLegacyAsyncCall(address []byte, data []byte, value []byte) error LoadParentContext() error Save() error DeleteFromCallID(address []byte) error GetCallID() []byte GetCallbackAsyncInitiatorCallID() []byte IsCrossShard() bool Clone() AsyncContext UpdateCurrentAsyncCallStatus( address []byte, callID []byte, vmInput *vmcommon.VMInput) (*AsyncCall, bool, error) CompleteChildConditional(isChildComplete bool, callID []byte, gasToAccumulate uint64) error NotifyChildIsComplete(callID []byte, gasToAccumulate uint64) error SetResults(vmOutput *vmcommon.VMOutput) GetGasAccumulated() uint64 SetAsyncArgumentsForCall(input *vmcommon.ContractCallInput) SetAsyncArgumentsForCallback( input *vmcommon.ContractCallInput, asyncCall *AsyncCall, gasAccumulated uint64) HasLegacyGroup() bool SetCallbackParentCall(asyncCall *AsyncCall) GetCallbackClosure() ([]byte, error) GetAsyncCallByCallID(callID []byte) AsyncCallLocation LoadParentContextFromStackOrStorage() (AsyncContext, error) ExecuteSyncCallbackAndFinishOutput( asyncCall *AsyncCall, vmOutput *vmcommon.VMOutput, destinationCallInput *vmcommon.ContractCallInput, gasAccumulated uint64, err error) (bool, *vmcommon.VMOutput) /* for tests / test framework usage */ SetCallID(callID []byte) SetCallIDForCallInGroup(groupIndex int, callIndex int, callID []byte) }
AsyncContext defines the functionality needed for interacting with the asynchronous execution context
type AsyncGeneratedCall ¶
type AsyncGeneratedCall struct { Status AsyncCallStatus Destination []byte Data []byte GasLimit uint64 ValueBytes []byte SuccessCallback string ErrorCallback string ProvidedGas uint64 }
AsyncGeneratedCall holds the information abount an async call
func (*AsyncGeneratedCall) GetData ¶
func (ac *AsyncGeneratedCall) GetData() []byte
GetData returns the transaction data of the async call
func (*AsyncGeneratedCall) GetDestination ¶
func (ac *AsyncGeneratedCall) GetDestination() []byte
GetDestination returns the destination of an async call
func (*AsyncGeneratedCall) GetGasLimit ¶
func (ac *AsyncGeneratedCall) GetGasLimit() uint64
GetGasLimit returns the gas limit of the current async call
func (*AsyncGeneratedCall) GetGasLocked ¶
func (ac *AsyncGeneratedCall) GetGasLocked() uint64
GetGasLocked returns the gas locked for the async callback
func (*AsyncGeneratedCall) GetValueBytes ¶
func (ac *AsyncGeneratedCall) GetValueBytes() []byte
GetValueBytes returns the byte representation of the value of the async call
func (*AsyncGeneratedCall) IsInterfaceNil ¶
func (ac *AsyncGeneratedCall) IsInterfaceNil() bool
IsInterfaceNil returns true if there is no value under the interface
type BlockchainContext ¶
type BlockchainContext interface { StateStack NewAddress(creatorAddress []byte) ([]byte, error) AccountExists(addr []byte) bool GetBalance(addr []byte) []byte GetBalanceBigInt(addr []byte) *big.Int GetNonce(addr []byte) (uint64, error) CurrentEpoch() uint32 GetStateRootHash() []byte LastTimeStamp() uint64 LastNonce() uint64 LastRound() uint64 LastEpoch() uint32 CurrentRound() uint64 CurrentNonce() uint64 CurrentTimeStamp() uint64 CurrentRandomSeed() []byte LastRandomSeed() []byte IncreaseNonce(addr []byte) GetCodeHash(addr []byte) []byte GetCode(addr []byte) ([]byte, error) GetCodeSize(addr []byte) (int32, error) BlockHash(number uint64) []byte GetOwnerAddress() ([]byte, error) GetShardOfAddress(addr []byte) uint32 IsSmartContract(addr []byte) bool IsPayable(sndAddress, rcvAddress []byte) (bool, error) SaveCompiledCode(codeHash []byte, code []byte) GetCompiledCode(codeHash []byte) (bool, []byte) GetDCDTToken(address []byte, tokenID []byte, nonce uint64) (*dcdt.DCDigitalToken, error) IsLimitedTransfer(tokenID []byte) bool IsPaused(tokenID []byte) bool GetUserAccount(address []byte) (vmcommon.UserAccountHandler, error) ProcessBuiltInFunction(input *vmcommon.ContractCallInput) (*vmcommon.VMOutput, error) GetSnapshot() int RevertToSnapshot(snapshot int) ClearCompiledCodes() ExecuteSmartContractCallOnOtherVM(input *vmcommon.ContractCallInput) (*vmcommon.VMOutput, error) }
BlockchainContext defines the functionality needed for interacting with the blockchain context
type BreakpointValue ¶
type BreakpointValue uint64
BreakpointValue encodes Wasmer runtime breakpoint types
const ( // BreakpointNone means the lack of a breakpoint BreakpointNone BreakpointValue = iota // BreakpointExecutionFailed means that Wasmer must stop immediately // due to failure indicated by VM BreakpointExecutionFailed // BreakpointAsyncCall means that Wasmer must stop immediately // so the VM can execute an AsyncCall BreakpointAsyncCall // BreakpointSignalError means that Wasmer must stop immediately // due to a contract-signalled error BreakpointSignalError // BreakpointOutOfGas means that Wasmer must stop immediately // due to gas being exhausted BreakpointOutOfGas // BreakpointMemoryLimit means that Wasmer must stop immediately // due to over-allocation of WASM memory BreakpointMemoryLimit )
func (BreakpointValue) String ¶
func (b BreakpointValue) String() string
String returns the human-readable name of a BreakpointValue
type CallArgsParser ¶
type CallArgsParser interface { ParseData(data string) (string, [][]byte, error) IsInterfaceNil() bool }
CallArgsParser defines the functionality to parse transaction data for a smart contract call
type CodeDeployInput ¶
type CodeDeployInput struct { ContractCode []byte ContractCodeMetadata []byte ContractAddress []byte CodeDeployerAddress []byte }
CodeDeployInput contains code deploy state, whether it comes from a ContractCreateInput or a ContractCallInput
type ContractCallInputBuilder ¶
type ContractCallInputBuilder struct {
vmcommon.ContractCallInput
}
ContractCallInputBuilder extends a ContractCallInput for extra building functionality during testing
func CreateTestContractCallInputBuilder ¶
func CreateTestContractCallInputBuilder() *ContractCallInputBuilder
CreateTestContractCallInputBuilder is a builder for ContractCallInputBuilder
func (*ContractCallInputBuilder) Build ¶
func (contractInput *ContractCallInputBuilder) Build() *vmcommon.ContractCallInput
Build completes the build of a ContractCallInput
func (*ContractCallInputBuilder) WithArguments ¶
func (contractInput *ContractCallInputBuilder) WithArguments(arguments ...[]byte) *ContractCallInputBuilder
WithArguments provides the arguments to be called for ContractCallInputBuilder
func (*ContractCallInputBuilder) WithCallType ¶
func (contractInput *ContractCallInputBuilder) WithCallType(callType vm.CallType) *ContractCallInputBuilder
WithCallType provides the arguments to be called for ContractCallInputBuilder
func (*ContractCallInputBuilder) WithCallerAddr ¶
func (contractInput *ContractCallInputBuilder) WithCallerAddr(address []byte) *ContractCallInputBuilder
WithCallerAddr provides the caller address of ContractCallInputBuilder
func (*ContractCallInputBuilder) WithCurrentTxHash ¶
func (contractInput *ContractCallInputBuilder) WithCurrentTxHash(txHash []byte) *ContractCallInputBuilder
WithCurrentTxHash provides the CurrentTxHash for ContractCallInputBuilder
func (*ContractCallInputBuilder) WithDCDTTokenName ¶
func (contractInput *ContractCallInputBuilder) WithDCDTTokenName(dcdtTokenName []byte) *ContractCallInputBuilder
WithDCDTTokenName provides the DCDTTokenName for ContractCallInputBuilder
func (*ContractCallInputBuilder) WithDCDTValue ¶
func (contractInput *ContractCallInputBuilder) WithDCDTValue(dcdtValue *big.Int) *ContractCallInputBuilder
WithDCDTValue provides the DCDTValue for ContractCallInputBuilder
func (*ContractCallInputBuilder) WithFunction ¶
func (contractInput *ContractCallInputBuilder) WithFunction(function string) *ContractCallInputBuilder
WithFunction provides the function to be called for ContractCallInputBuilder
func (*ContractCallInputBuilder) WithGasProvided ¶
func (contractInput *ContractCallInputBuilder) WithGasProvided(gas uint64) *ContractCallInputBuilder
WithGasProvided provides the gas of ContractCallInputBuilder
func (*ContractCallInputBuilder) WithRecipientAddr ¶
func (contractInput *ContractCallInputBuilder) WithRecipientAddr(address []byte) *ContractCallInputBuilder
WithRecipientAddr provides the recepient address of ContractCallInputBuilder
type ContractCreateInputBuilder ¶
type ContractCreateInputBuilder struct {
vmcommon.ContractCreateInput
}
ContractCreateInputBuilder extends a ContractCreateInput for extra building functionality during testing
func (*ContractCreateInputBuilder) Build ¶
func (contractInput *ContractCreateInputBuilder) Build() *vmcommon.ContractCreateInput
Build completes the build of a ContractCreateInput
func (*ContractCreateInputBuilder) WithArguments ¶
func (contractInput *ContractCreateInputBuilder) WithArguments(arguments ...[]byte) *ContractCreateInputBuilder
WithArguments provides the Arguments for a ContractCreateInputBuilder
func (*ContractCreateInputBuilder) WithCallValue ¶
func (contractInput *ContractCreateInputBuilder) WithCallValue(callValue int64) *ContractCreateInputBuilder
WithCallValue provides the CallValue for a ContractCreateInputBuilder
func (*ContractCreateInputBuilder) WithCallerAddr ¶
func (contractInput *ContractCreateInputBuilder) WithCallerAddr(address []byte) *ContractCreateInputBuilder
WithCallerAddr provides the CallerAddr for a ContractCreateInputBuilder
func (*ContractCreateInputBuilder) WithContractCode ¶
func (contractInput *ContractCreateInputBuilder) WithContractCode(code []byte) *ContractCreateInputBuilder
WithContractCode provides the ContractCode for a ContractCreateInputBuilder
func (*ContractCreateInputBuilder) WithGasProvided ¶
func (contractInput *ContractCreateInputBuilder) WithGasProvided(gas uint64) *ContractCreateInputBuilder
WithGasProvided provides the GasProvided for a ContractCreateInputBuilder
type DCDTTransfersArgs ¶
type DCDTTransfersArgs struct { Destination []byte OriginalCaller []byte Sender []byte Transfers []*vmcommon.DCDTTransfer Function string Arguments [][]byte }
DCDTTransfersArgs defines the structure for DCDTTransferArgs, used in TransferAndExecute
type EnableEpochsHandler ¶
type EnableEpochsHandler interface { IsFlagDefined(flag core.EnableEpochFlag) bool IsFlagEnabled(flag core.EnableEpochFlag) bool IsFlagEnabledInEpoch(flag core.EnableEpochFlag, epoch uint32) bool GetActivationEpoch(flag core.EnableEpochFlag) uint32 IsInterfaceNil() bool }
EnableEpochsHandler is used to verify which flags are set in a specific epoch based on EnableEpochs config
type GasTracing ¶
type GasTracing interface { BeginTrace(scAddress string, functionName string) AddToCurrentTrace(usedGas uint64) AddTracedGas(scAddress string, functionName string, usedGas uint64) GetGasTrace() map[string]map[string][]uint64 IsInterfaceNil() bool }
GasTracing defines the functionality needed for a gas tracing
type HashComputer ¶
HashComputer provides hash computation
type InstanceTracker ¶
type InstanceTracker interface { StateStack TrackedInstances() map[string]executor.Instance }
InstanceTracker defines the functionality needed for interacting with the instance tracker
type ManagedTypesContext ¶
type ManagedTypesContext interface { StateStack GetRandReader() io.Reader ConsumeGasForThisBigIntNumberOfBytes(byteLen *big.Int) error ConsumeGasForThisIntNumberOfBytes(byteLen int) error ConsumeGasForBytes(bytes []byte) error ConsumeGasForBigIntCopy(values ...*big.Int) error ConsumeGasForBigFloatCopy(values ...*big.Float) error NewBigInt(value *big.Int) int32 NewBigIntFromInt64(int64Value int64) int32 GetBigIntOrCreate(handle int32) *big.Int GetBigInt(id int32) (*big.Int, error) GetTwoBigInt(handle1 int32, handle2 int32) (*big.Int, *big.Int, error) PutBigFloat(value *big.Float) (int32, error) BigFloatPrecIsNotValid(precision uint) bool BigFloatExpIsNotValid(exponent int) bool EncodedBigFloatIsNotValid(encodedBigFloat []byte) bool GetBigFloatOrCreate(handle int32) (*big.Float, error) GetBigFloat(handle int32) (*big.Float, error) GetTwoBigFloats(handle1 int32, handle2 int32) (*big.Float, *big.Float, error) PutEllipticCurve(ec *elliptic.CurveParams) int32 GetEllipticCurve(handle int32) (*elliptic.CurveParams, error) GetEllipticCurveSizeOfField(ecHandle int32) int32 Get100xCurveGasCostMultiplier(ecHandle int32) int32 GetScalarMult100xCurveGasCostMultiplier(ecHandle int32) int32 GetUCompressed100xCurveGasCostMultiplier(ecHandle int32) int32 GetPrivateKeyByteLengthEC(ecHandle int32) int32 NewManagedBuffer() int32 NewManagedBufferFromBytes(bytes []byte) int32 SetBytes(mBufferHandle int32, bytes []byte) GetBytes(mBufferHandle int32) ([]byte, error) AppendBytes(mBufferHandle int32, bytes []byte) bool GetLength(mBufferHandle int32) int32 GetSlice(mBufferHandle int32, startPosition int32, lengthOfSlice int32) ([]byte, error) DeleteSlice(mBufferHandle int32, startPosition int32, lengthOfSlice int32) ([]byte, error) InsertSlice(mBufferHandle int32, startPosition int32, slice []byte) ([]byte, error) ReadManagedVecOfManagedBuffers(managedVecHandle int32) ([][]byte, uint64, error) WriteManagedVecOfManagedBuffers(data [][]byte, destinationHandle int32) error NewManagedMap() int32 ManagedMapPut(mMapHandle int32, keyHandle int32, valueHandle int32) error ManagedMapGet(mMapHandle int32, keyHandle int32, outValueHandle int32) error ManagedMapRemove(mMapHandle int32, keyHandle int32, outValueHandle int32) error ManagedMapContains(mMapHandle int32, keyHandle int32) (bool, error) GetBackTransfers() ([]*vmcommon.DCDTTransfer, *big.Int) AddValueOnlyBackTransfer(value *big.Int) AddBackTransfers(transfers []*vmcommon.DCDTTransfer) PopBackTransferIfAsyncCallBack(vmInput *vmcommon.ContractCallInput) }
ManagedTypesContext defines the functionality needed for interacting with the big int context
type MeteringContext ¶
type MeteringContext interface { StateStack PopMergeActiveState() InitStateFromContractCallInput(input *vmcommon.VMInput) SetGasSchedule(gasMap config.GasScheduleMap) GasSchedule() *config.GasCost UseGasBoundedAndAddTracedGas(functionName string, gas uint64) error FreeGas(gas uint64) RestoreGas(gas uint64) GasLeft() uint64 GasUsedForExecution() uint64 GasSpentByContract() uint64 GetGasForExecution() uint64 GetGasProvided() uint64 GetSCPrepareInitialCost() uint64 BoundGasLimit(value int64) uint64 BlockGasLimit() uint64 DeductInitialGasForExecution(contract []byte) error DeductInitialGasForDirectDeployment(input CodeDeployInput) error DeductInitialGasForIndirectDeployment(input CodeDeployInput) error ComputeExtraGasLockedForAsync() uint64 UseGasForAsyncStep() error UseGasBounded(gasToUse uint64) error UseGasForContractInit(gasToUse uint64) GetGasLocked() uint64 UpdateGasStateOnSuccess(vmOutput *vmcommon.VMOutput) error UpdateGasStateOnFailure(vmOutput *vmcommon.VMOutput) TrackGasUsedByOutOfVMFunction(builtinInput *vmcommon.ContractCallInput, builtinOutput *vmcommon.VMOutput, postBuiltinInput *vmcommon.ContractCallInput) DisableRestoreGas() EnableRestoreGas() StartGasTracing(functionName string) SetGasTracing(enableGasTracing bool) GetGasTrace() map[string]map[string][]uint64 }
MeteringContext defines the functionality needed for interacting with the metering context
type OldAsyncContext ¶
type OldAsyncContext struct { Callback string AsyncCalls []*AsyncGeneratedCall }
OldAsyncContext is a structure containing a group of async calls and a callback
that should be called when all these async calls are resolved
type OutputContext ¶
type OutputContext interface { StateStack PopMergeActiveState() CensorVMOutput() AddToActiveState(rightOutput *vmcommon.VMOutput) GetOutputAccount(address []byte) (*vmcommon.OutputAccount, bool) GetOutputAccounts() map[string]*vmcommon.OutputAccount DeleteOutputAccount(address []byte) WriteLog(address []byte, topics [][]byte, data [][]byte) WriteLogWithIdentifier(address []byte, topics [][]byte, data [][]byte, identifier []byte) TransferValueOnly(destination []byte, sender []byte, value *big.Int, checkPayable bool) error Transfer(destination []byte, sender []byte, gasLimit uint64, gasLocked uint64, value *big.Int, asyncData []byte, input []byte, callType vm.CallType) error TransferDCDT(transfersArgs *DCDTTransfersArgs, callInput *vmcommon.ContractCallInput) (uint64, error) GetRefund() uint64 SetRefund(refund uint64) ReturnCode() vmcommon.ReturnCode SetReturnCode(returnCode vmcommon.ReturnCode) ReturnMessage() string SetReturnMessage(message string) ReturnData() [][]byte ClearReturnData() RemoveReturnData(index uint32) Finish(data []byte) PrependFinish(data []byte) DeleteFirstReturnData() GetVMOutput() *vmcommon.VMOutput RemoveNonUpdatedStorage() AddTxValueToAccount(address []byte, value *big.Int) DeployCode(input CodeDeployInput) CreateVMOutputInCaseOfError(err error) *vmcommon.VMOutput NextOutputTransferIndex() uint32 GetCrtTransferIndex() uint32 SetCrtTransferIndex(index uint32) IsInterfaceNil() bool }
OutputContext defines the functionality needed for interacting with the output context
type RuntimeContext ¶
type RuntimeContext interface { StateStack GetVMExecutor() executor.Executor ReplaceVMExecutor(vmExecutor executor.Executor) InitStateFromContractCallInput(input *vmcommon.ContractCallInput) SetCustomCallFunction(callFunction string) GetVMInput() *vmcommon.ContractCallInput SetVMInput(vmInput *vmcommon.ContractCallInput) GetContextAddress() []byte GetOriginalCallerAddress() []byte SetCodeAddress(scAddress []byte) GetSCCode() ([]byte, error) GetSCCodeSize() uint64 GetVMType() []byte FunctionName() string Arguments() [][]byte GetCurrentTxHash() []byte GetOriginalTxHash() []byte ExtractCodeUpgradeFromArgs() ([]byte, []byte, error) SignalUserError(message string) FailExecution(err error) MustVerifyNextContractCode() SetRuntimeBreakpointValue(value BreakpointValue) GetRuntimeBreakpointValue() BreakpointValue GetInstanceStackSize() uint64 CountSameContractInstancesOnStack(address []byte) uint64 IsFunctionImported(name string) bool ReadOnly() bool SetReadOnly(readOnly bool) StartWasmerInstance(contract []byte, gasLimit uint64, newCode bool) error ClearWarmInstanceCache() SetMaxInstanceStackSize(uint64) VerifyContractCode() error GetInstance() executor.Instance GetInstanceTracker() InstanceTracker FunctionNameChecked() (string, error) CallSCFunction(functionName string) error GetPointsUsed() uint64 SetPointsUsed(gasPoints uint64) BaseOpsErrorShouldFailExecution() bool SyncExecAPIErrorShouldFailExecution() bool CryptoAPIErrorShouldFailExecution() bool BigIntAPIErrorShouldFailExecution() bool BigFloatAPIErrorShouldFailExecution() bool ManagedBufferAPIErrorShouldFailExecution() bool ManagedMapAPIErrorShouldFailExecution() bool UseGasBoundedShouldFailExecution() bool CleanInstance() AddError(err error, otherInfo ...string) GetAllErrors() error ValidateCallbackName(callbackName string) error HasFunction(functionName string) bool GetPrevTxHash() []byte EndExecution() ValidateInstances() error }
RuntimeContext defines the functionality needed for interacting with the runtime context
type SerializableAsyncCall ¶
type SerializableAsyncCall struct { CallID []byte `protobuf:"bytes,1,opt,name=CallID,proto3" json:"CallID,omitempty"` Status SerializableAsyncCallStatus `protobuf:"varint,2,opt,name=Status,proto3,enum=vmhost.SerializableAsyncCallStatus" json:"Status,omitempty"` ExecutionMode SerializableAsyncCallExecutionMode `` /* 127-byte string literal not displayed */ Destination []byte `protobuf:"bytes,5,opt,name=Destination,proto3" json:"Destination,omitempty"` Data []byte `protobuf:"bytes,6,opt,name=Data,proto3" json:"Data,omitempty"` GasLimit uint64 `protobuf:"varint,7,opt,name=GasLimit,proto3" json:"GasLimit,omitempty"` GasLocked uint64 `protobuf:"varint,8,opt,name=GasLocked,proto3" json:"GasLocked,omitempty"` ValueBytes []byte `protobuf:"bytes,9,opt,name=ValueBytes,proto3" json:"ValueBytes,omitempty"` SuccessCallback string `protobuf:"bytes,10,opt,name=SuccessCallback,proto3" json:"SuccessCallback,omitempty"` ErrorCallback string `protobuf:"bytes,11,opt,name=ErrorCallback,proto3" json:"ErrorCallback,omitempty"` CallbackClosure []byte `protobuf:"bytes,12,opt,name=CallbackClosure,proto3" json:"CallbackClosure,omitempty"` }
func (*SerializableAsyncCall) Descriptor ¶
func (*SerializableAsyncCall) Descriptor() ([]byte, []int)
func (*SerializableAsyncCall) Equal ¶
func (this *SerializableAsyncCall) Equal(that interface{}) bool
func (*SerializableAsyncCall) GetCallID ¶
func (m *SerializableAsyncCall) GetCallID() []byte
func (*SerializableAsyncCall) GetCallbackClosure ¶
func (m *SerializableAsyncCall) GetCallbackClosure() []byte
func (*SerializableAsyncCall) GetData ¶
func (m *SerializableAsyncCall) GetData() []byte
func (*SerializableAsyncCall) GetDestination ¶
func (m *SerializableAsyncCall) GetDestination() []byte
func (*SerializableAsyncCall) GetErrorCallback ¶
func (m *SerializableAsyncCall) GetErrorCallback() string
func (*SerializableAsyncCall) GetExecutionMode ¶
func (m *SerializableAsyncCall) GetExecutionMode() SerializableAsyncCallExecutionMode
func (*SerializableAsyncCall) GetGasLimit ¶
func (m *SerializableAsyncCall) GetGasLimit() uint64
func (*SerializableAsyncCall) GetGasLocked ¶
func (m *SerializableAsyncCall) GetGasLocked() uint64
func (*SerializableAsyncCall) GetStatus ¶
func (m *SerializableAsyncCall) GetStatus() SerializableAsyncCallStatus
func (*SerializableAsyncCall) GetSuccessCallback ¶
func (m *SerializableAsyncCall) GetSuccessCallback() string
func (*SerializableAsyncCall) GetValueBytes ¶
func (m *SerializableAsyncCall) GetValueBytes() []byte
func (*SerializableAsyncCall) GoString ¶
func (this *SerializableAsyncCall) GoString() string
func (*SerializableAsyncCall) Marshal ¶
func (m *SerializableAsyncCall) Marshal() (dAtA []byte, err error)
func (*SerializableAsyncCall) MarshalTo ¶
func (m *SerializableAsyncCall) MarshalTo(dAtA []byte) (int, error)
func (*SerializableAsyncCall) MarshalToSizedBuffer ¶
func (m *SerializableAsyncCall) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*SerializableAsyncCall) ProtoMessage ¶
func (*SerializableAsyncCall) ProtoMessage()
func (*SerializableAsyncCall) Reset ¶
func (m *SerializableAsyncCall) Reset()
func (*SerializableAsyncCall) Size ¶
func (m *SerializableAsyncCall) Size() (n int)
func (*SerializableAsyncCall) String ¶
func (this *SerializableAsyncCall) String() string
func (*SerializableAsyncCall) Unmarshal ¶
func (m *SerializableAsyncCall) Unmarshal(dAtA []byte) error
func (*SerializableAsyncCall) XXX_DiscardUnknown ¶
func (m *SerializableAsyncCall) XXX_DiscardUnknown()
func (*SerializableAsyncCall) XXX_Marshal ¶
func (m *SerializableAsyncCall) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*SerializableAsyncCall) XXX_Merge ¶
func (m *SerializableAsyncCall) XXX_Merge(src proto.Message)
func (*SerializableAsyncCall) XXX_Size ¶
func (m *SerializableAsyncCall) XXX_Size() int
func (*SerializableAsyncCall) XXX_Unmarshal ¶
func (m *SerializableAsyncCall) XXX_Unmarshal(b []byte) error
type SerializableAsyncCallExecutionMode ¶
type SerializableAsyncCallExecutionMode int32
const ( SerializableSyncExecution SerializableAsyncCallExecutionMode = 0 SerializableAsyncBuiltinFuncIntraShard SerializableAsyncCallExecutionMode = 1 SerializableAsyncBuiltinFuncCrossShard SerializableAsyncCallExecutionMode = 2 SerializableAsyncUnknown SerializableAsyncCallExecutionMode = 3 )
func (SerializableAsyncCallExecutionMode) EnumDescriptor ¶
func (SerializableAsyncCallExecutionMode) EnumDescriptor() ([]byte, []int)
func (SerializableAsyncCallExecutionMode) String ¶
func (x SerializableAsyncCallExecutionMode) String() string
type SerializableAsyncCallGroup ¶
type SerializableAsyncCallGroup struct { Callback string `protobuf:"bytes,1,opt,name=Callback,proto3" json:"Callback,omitempty"` GasLocked uint64 `protobuf:"varint,2,opt,name=GasLocked,proto3" json:"GasLocked,omitempty"` CallbackData []byte `protobuf:"bytes,3,opt,name=CallbackData,proto3" json:"CallbackData,omitempty"` Identifier string `protobuf:"bytes,4,opt,name=Identifier,proto3" json:"Identifier,omitempty"` AsyncCalls []*SerializableAsyncCall `protobuf:"bytes,5,rep,name=AsyncCalls,proto3" json:"AsyncCalls,omitempty"` }
func ToSerializableAsyncCallGroups ¶
func ToSerializableAsyncCallGroups(asyncCallGroups []*AsyncCallGroup) []*SerializableAsyncCallGroup
ToSerializableAsyncCallGroups serializes all call groups to protobuf
func (*SerializableAsyncCallGroup) Descriptor ¶
func (*SerializableAsyncCallGroup) Descriptor() ([]byte, []int)
func (*SerializableAsyncCallGroup) Equal ¶
func (this *SerializableAsyncCallGroup) Equal(that interface{}) bool
func (*SerializableAsyncCallGroup) GetAsyncCalls ¶
func (m *SerializableAsyncCallGroup) GetAsyncCalls() []*SerializableAsyncCall
func (*SerializableAsyncCallGroup) GetCallback ¶
func (m *SerializableAsyncCallGroup) GetCallback() string
func (*SerializableAsyncCallGroup) GetCallbackData ¶
func (m *SerializableAsyncCallGroup) GetCallbackData() []byte
func (*SerializableAsyncCallGroup) GetGasLocked ¶
func (m *SerializableAsyncCallGroup) GetGasLocked() uint64
func (*SerializableAsyncCallGroup) GetIdentifier ¶
func (m *SerializableAsyncCallGroup) GetIdentifier() string
func (*SerializableAsyncCallGroup) GoString ¶
func (this *SerializableAsyncCallGroup) GoString() string
func (*SerializableAsyncCallGroup) Marshal ¶
func (m *SerializableAsyncCallGroup) Marshal() (dAtA []byte, err error)
func (*SerializableAsyncCallGroup) MarshalTo ¶
func (m *SerializableAsyncCallGroup) MarshalTo(dAtA []byte) (int, error)
func (*SerializableAsyncCallGroup) MarshalToSizedBuffer ¶
func (m *SerializableAsyncCallGroup) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*SerializableAsyncCallGroup) ProtoMessage ¶
func (*SerializableAsyncCallGroup) ProtoMessage()
func (*SerializableAsyncCallGroup) Reset ¶
func (m *SerializableAsyncCallGroup) Reset()
func (*SerializableAsyncCallGroup) Size ¶
func (m *SerializableAsyncCallGroup) Size() (n int)
func (*SerializableAsyncCallGroup) String ¶
func (this *SerializableAsyncCallGroup) String() string
func (*SerializableAsyncCallGroup) Unmarshal ¶
func (m *SerializableAsyncCallGroup) Unmarshal(dAtA []byte) error
func (*SerializableAsyncCallGroup) XXX_DiscardUnknown ¶
func (m *SerializableAsyncCallGroup) XXX_DiscardUnknown()
func (*SerializableAsyncCallGroup) XXX_Marshal ¶
func (m *SerializableAsyncCallGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*SerializableAsyncCallGroup) XXX_Merge ¶
func (m *SerializableAsyncCallGroup) XXX_Merge(src proto.Message)
func (*SerializableAsyncCallGroup) XXX_Size ¶
func (m *SerializableAsyncCallGroup) XXX_Size() int
func (*SerializableAsyncCallGroup) XXX_Unmarshal ¶
func (m *SerializableAsyncCallGroup) XXX_Unmarshal(b []byte) error
type SerializableAsyncCallStatus ¶
type SerializableAsyncCallStatus int32
const ( SerializableAsyncCallPending SerializableAsyncCallStatus = 0 SerializableAsyncCallResolved SerializableAsyncCallStatus = 1 SerializableAsyncCallRejected SerializableAsyncCallStatus = 2 )
func (SerializableAsyncCallStatus) EnumDescriptor ¶
func (SerializableAsyncCallStatus) EnumDescriptor() ([]byte, []int)
func (SerializableAsyncCallStatus) String ¶
func (x SerializableAsyncCallStatus) String() string
type StateStack ¶
type StateStack interface { InitState() PushState() PopSetActiveState() PopDiscard() ClearStateStack() }
StateStack defines the functionality for working with a state stack
type StorageContext ¶
type StorageContext interface { StateStack SetAddress(address []byte) GetStorageUpdates(address []byte) map[string]*vmcommon.StorageUpdate GetStorageFromAddress(address []byte, key []byte) ([]byte, uint32, bool, error) GetStorageFromAddressNoChecks(address []byte, key []byte) ([]byte, uint32, bool, error) GetStorage(key []byte) ([]byte, uint32, bool, error) GetStorageUnmetered(key []byte) ([]byte, uint32, bool, error) SetStorage(key []byte, value []byte) (StorageStatus, error) SetProtectedStorage(key []byte, value []byte) (StorageStatus, error) SetProtectedStorageToAddress(address []byte, key []byte, value []byte) (StorageStatus, error) SetProtectedStorageToAddressUnmetered(address []byte, key []byte, value []byte) (StorageStatus, error) UseGasForStorageLoad(tracedFunctionName string, trieDepth int64, blockchainLoadCost uint64, usedCache bool) error IsUseDifferentGasCostFlagSet() bool GetVmProtectedPrefix(prefix string) []byte }
StorageContext defines the functionality needed for interacting with the storage context
type StorageStatus ¶
type StorageStatus int
StorageStatus defines the states the storage can be in
const ( // StorageUnchanged signals that the storage was not changed StorageUnchanged StorageStatus = iota // StorageModified signals that the storage has been modified StorageModified // StorageAdded signals that something was added to storage StorageAdded // StorageDeleted signals that something was removed from storage StorageDeleted )
type VMHost ¶
type VMHost interface { vmcommon.VMExecutionHandler Crypto() crypto.VMCrypto Blockchain() BlockchainContext Runtime() RuntimeContext Async() AsyncContext ManagedTypes() ManagedTypesContext Output() OutputContext Metering() MeteringContext Storage() StorageContext EnableEpochsHandler() EnableEpochsHandler ExecuteDCDTTransfer(transfersArgs *DCDTTransfersArgs, callType vm.CallType) (*vmcommon.VMOutput, uint64, error) CreateNewContract(input *vmcommon.ContractCreateInput, createContractCallType int) ([]byte, error) ExecuteOnSameContext(input *vmcommon.ContractCallInput) error ExecuteOnDestContext(input *vmcommon.ContractCallInput) (*vmcommon.VMOutput, bool, error) IsBuiltinFunctionName(functionName string) bool IsBuiltinFunctionCall(data []byte) bool AreInSameShard(leftAddress []byte, rightAddress []byte) bool GetGasScheduleMap() config.GasScheduleMap GetContexts() (ManagedTypesContext, BlockchainContext, MeteringContext, OutputContext, RuntimeContext, AsyncContext, StorageContext) SetRuntimeContext(runtime RuntimeContext) SetBuiltInFunctionsContainer(builtInFuncs vmcommon.BuiltInFunctionContainer) InitState() CompleteLogEntriesWithCallType(vmOutput *vmcommon.VMOutput, callType string) Reset() SetGasTracing(enableGasTracing bool) GetGasTrace() map[string]map[string][]uint64 }
VMHost defines the functionality for working with the VM
type VMHostParameters ¶
type VMHostParameters struct { VMType []byte OverrideVMExecutor executor.ExecutorAbstractFactory BlockGasLimit uint64 GasSchedule config.GasScheduleMap BuiltInFuncContainer vmcommon.BuiltInFunctionContainer DCDTTransferParser vmcommon.DCDTTransferParser ProtectedKeyPrefix []byte WasmerSIGSEGVPassthrough bool EpochNotifier vmcommon.EpochNotifier EnableEpochsHandler EnableEpochsHandler Hasher HashComputer TimeOutForSCExecutionInMilliseconds uint32 }
VMHostParameters represents the parameters to be passed to VMHost
type WrappableError ¶
type WrappableError interface { error WrapWithMessage(errMessage string) WrappableError WrapWithStackTrace() WrappableError WrapWithError(err error, otherInfo ...string) WrappableError GetBaseError() error GetLastError() error GetAllErrors() []error GetAllErrorsAndOtherInfo() ([]error, []string) Unwrap() error Is(target error) bool }
WrappableError - an interface that extends error and represents a multi-layer error
func WrapError ¶
func WrapError(err error, otherInfo ...string) WrappableError
WrapError constructs a WrappableError from an error