Documentation ¶
Overview ¶
- Copyright (C) 2018 The DNA Authors
- This file is part of The DNA library. *
- The DNA is free software: you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version. *
- The DNA is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details. *
- You should have received a copy of the GNU Lesser General Public License
- along with The DNA. If not, see <http://www.gnu.org/licenses/>.
Package exec provides functions for executing WebAssembly bytecode.
Index ¶
- Constants
- Variables
- type Args
- type EnvCall
- type ExecutionEngine
- func (e *ExecutionEngine) Call(caller common.Address, code []byte, actionName string, input []byte, ver byte) (returnbytes []byte, er error)
- func (e *ExecutionEngine) CallInf(caller common.Address, code []byte, input []interface{}, message []interface{}) ([]byte, error)
- func (e *ExecutionEngine) Create(caller common.Address, code []byte) ([]byte, error)
- func (e *ExecutionEngine) GetMemory() *memory.VMmemory
- func (e *ExecutionEngine) GetVM() *VM
- func (e *ExecutionEngine) InitCall(caller common.Address, code []byte, input []byte, ver byte) (returnbytes []byte, er error)
- func (e *ExecutionEngine) RestoreVM() error
- func (e *ExecutionEngine) SetNewVM(vm *VM) error
- type InteropService
- func (i *InteropService) Exists(name string) bool
- func (i *InteropService) GetServiceMap() map[string]func(*ExecutionEngine) (bool, error)
- func (i *InteropService) Invoke(methodName string, engine *ExecutionEngine) (bool, error)
- func (i *InteropService) MergeMap(mMap map[string]func(*ExecutionEngine) (bool, error)) bool
- func (i *InteropService) Register(name string, handler func(*ExecutionEngine) (bool, error)) bool
- type InteropServiceInterface
- type InvalidFunctionIndexError
- type InvalidReturnTypeError
- type Param
- type Result
- type VM
- func (vm *VM) CallContract(caller common.Address, contractAddress common.Address, module *wasm.Module, ...) (uint64, error)
- func (vm *VM) ExecCode(insideCall bool, fnIndex int64, args ...uint64) (interface{}, error)
- func (vm *VM) GetEnvCall() *EnvCall
- func (vm *VM) GetMemory() *memory.VMmemory
- func (vm *VM) GetMessageBytes() ([]byte, error)
- func (vm *VM) GetPointerMemSize(addr uint64) int
- func (vm *VM) GetPointerMemory(addr uint64) ([]byte, error)
- func (vm *VM) Malloc(size int) (int, error)
- func (vm *VM) MallocPointer(size int, ptype memory.PType) (int, error)
- func (vm *VM) Memory() []byte
- func (vm *VM) PushResult(res uint64)
- func (vm *VM) RestoreCtx() bool
- func (vm *VM) SetMemory(val interface{}) (int, error)
- func (vm *VM) SetMessage(message []interface{})
- func (vm *VM) SetPointerMemory(val interface{}) (int, error)
- func (vm *VM) SetStructMemory(val interface{}) (int, error)
Constants ¶
const ( CONTRACT_METHOD_NAME = "invoke" CONTRACT_INIT_METHOD = "init" VM_STACK_DEPTH = 10 )
Variables ¶
var ( // ErrSignatureMismatch is the error value used while trapping the VM when // a signature mismatch between the table entry and the type entry is found // in a call_indirect operation. ErrSignatureMismatch = errors.New("exec: signature mismatch in call_indirect") // ErrUndefinedElementIndex is the error value used while trapping the VM when // an invalid index to the module's table space is used as an operand to // call_indirect ErrUndefinedElementIndex = errors.New("exec: undefined element index") )
var ( // ErrMultipleLinearMemories is returned by (*VM).NewVM when the module // has more then one entries in the linear memory space. ErrMultipleLinearMemories = errors.New("exec: more than one linear memories in module") // ErrInvalidArgumentCount is returned by (*VM).ExecCode when an invalid // number of arguments to the WebAssembly function are passed to it. ErrInvalidArgumentCount = errors.New("exec: invalid number of arguments to function") )
ErrOutOfBoundsMemoryAccess is the error value used while trapping the VM when it detects an out of bounds access to the linear memory.
ErrUnreachable is the error value used while trapping the VM when an unreachable operator is reached during execution.
Functions ¶
This section is empty.
Types ¶
type EnvCall ¶
type EnvCall struct { Message []interface{} //the 'Message' field is for the EOS contract like parameters // contains filtered or unexported fields }
store env call message
type ExecutionEngine ¶
type ExecutionEngine struct { CodeContainer interfaces.CodeContainer // contains filtered or unexported fields }
func NewExecutionEngine ¶
func NewExecutionEngine(container interfaces.CodeContainer, crypto interfaces.Crypto, service InteropServiceInterface) *ExecutionEngine
todo add parameters
func (*ExecutionEngine) Call ¶
func (e *ExecutionEngine) Call(caller common.Address, code []byte, actionName string, input []byte, ver byte) (returnbytes []byte, er error)
Call Main interface of wasm vm excution engine caller common.Address :call address code []byte :wasm smart contract code actionName string :action name of the contract input []byte :arguments ver byte :contract version require > 0 for production
func (*ExecutionEngine) CallInf ¶
func (e *ExecutionEngine) CallInf(caller common.Address, code []byte, input []interface{}, message []interface{}) ([]byte, error)
use this method just for test
func (*ExecutionEngine) Create ¶
func (*ExecutionEngine) GetMemory ¶
func (e *ExecutionEngine) GetMemory() *memory.VMmemory
func (*ExecutionEngine) InitCall ¶
func (e *ExecutionEngine) InitCall(caller common.Address, code []byte, input []byte, ver byte) (returnbytes []byte, er error)
Call init method on deployment caller common.Address :call address code []byte :wasm smart contract code input []byte :arguments ver byte :contract version require > 0 for production TODO TBD whether we need to call init method after deploy automatically
func (*ExecutionEngine) RestoreVM ¶
func (e *ExecutionEngine) RestoreVM() error
for call other contract, 1.pop stored vm 2.reset vm
func (*ExecutionEngine) SetNewVM ¶
func (e *ExecutionEngine) SetNewVM(vm *VM) error
for call other contract, 1.store current vm 2.load new vm
type InteropService ¶
type InteropService struct {
// contains filtered or unexported fields
}
func NewInteropService ¶
func NewInteropService() *InteropService
func (*InteropService) Exists ¶
func (i *InteropService) Exists(name string) bool
func (*InteropService) GetServiceMap ¶
func (i *InteropService) GetServiceMap() map[string]func(*ExecutionEngine) (bool, error)
func (*InteropService) Invoke ¶
func (i *InteropService) Invoke(methodName string, engine *ExecutionEngine) (bool, error)
func (*InteropService) MergeMap ¶
func (i *InteropService) MergeMap(mMap map[string]func(*ExecutionEngine) (bool, error)) bool
func (*InteropService) Register ¶
func (i *InteropService) Register(name string, handler func(*ExecutionEngine) (bool, error)) bool
type InteropServiceInterface ¶
type InteropServiceInterface interface { Register(method string, handler func(*ExecutionEngine) (bool, error)) bool GetServiceMap() map[string]func(*ExecutionEngine) (bool, error) }
type InvalidFunctionIndexError ¶
type InvalidFunctionIndexError int64
InvalidFunctionIndexError is returned by (*VM).ExecCode when the function index provided is invalid.
func (InvalidFunctionIndexError) Error ¶
func (e InvalidFunctionIndexError) Error() string
type InvalidReturnTypeError ¶
type InvalidReturnTypeError int8
InvalidReturnTypeError is returned by (*VM).ExecCode when the module specifies an invalid return type value for the executed function.
func (InvalidReturnTypeError) Error ¶
func (e InvalidReturnTypeError) Error() string
type Result ¶
type VM ¶
type VM struct { Services map[string]func(engine *ExecutionEngine) (bool, error) //store a engine pointer ContractAddress common.Address Caller common.Address Engine *ExecutionEngine VMCode []byte // contains filtered or unexported fields }
VM is the execution context for executing WebAssembly bytecode.
func NewVM ¶
NewVM creates a new VM from a given module. If the module defines a start function, it will be executed.
func (*VM) CallContract ¶
func (vm *VM) CallContract(caller common.Address, contractAddress common.Address, module *wasm.Module, actionName []byte, arg []byte) (uint64, error)
CallContract start a new vm this method is replaced with wasm_service :callContract
func (*VM) ExecCode ¶
ExecCode calls the function with the given index and arguments. fnIndex should be a valid index into the function index space of the VM's module. insideCall :true (call contract)
func (*VM) GetMessageBytes ¶
GetMessageBytes for further extension
func (*VM) GetPointerMemory ¶
when wasm returns a pointer, call this function to get the pointed memory
func (*VM) Malloc ¶
alloc memory and return the first index
func (*VM) MallocPointer ¶
alloc memory for pointer and return the first index
func (*VM) Memory ¶
Memory returns the linear memory space for the VM.
func (*VM) SetMessage ¶
func (vm *VM) SetMessage(message []interface{})
SetMessage for further extension support EOS like message
func (*VM) SetPointerMemory ¶
alloc memory for any pointer type
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
compile
Package compile is used internally by wagon to convert standard structured WebAssembly bytecode into an unstructured form suitable for execution by it's VM.
|
Package compile is used internally by wagon to convert standard structured WebAssembly bytecode into an unstructured form suitable for execution by it's VM. |