interop

package
v0.98.4-pre Latest Latest
Warning

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

Go to latest
Published: May 7, 2022 License: MIT Imports: 25 Imported by: 0

Documentation

Overview

Package interop contains implementations of Neo interop functions.

This is not the package you use from smart contracts, refer to pkg/interop for that.

Index

Constants

View Source
const (
	// DefaultBaseExecFee specifies default multiplier for opcode and syscall prices.
	DefaultBaseExecFee = 30
)

Variables

This section is empty.

Functions

func Sort added in v0.91.0

func Sort(fs []Function)

Sort sorts interop functions by id.

Types

type Context

type Context struct {
	Chain         Ledger
	Container     hash.Hashable
	Network       uint32
	Natives       []Contract
	Trigger       trigger.Type
	Block         *block.Block
	NonceData     [16]byte
	Tx            *transaction.Transaction
	DAO           *dao.Simple
	Notifications []state.NotificationEvent
	Log           *zap.Logger
	VM            *vm.VM
	Functions     []Function
	Invocations   map[util.Uint160]int
	// contains filtered or unexported fields
}

Context represents context in which interops are executed.

func NewContext

func NewContext(trigger trigger.Type, bc Ledger, d *dao.Simple,
	getContract func(*dao.Simple, util.Uint160) (*state.Contract, error), natives []Contract,
	block *block.Block, tx *transaction.Transaction, log *zap.Logger) *Context

NewContext returns new interop context.

func (*Context) BaseExecFee added in v0.92.0

func (ic *Context) BaseExecFee() int64

BaseExecFee represents factor to multiply syscall prices with.

func (*Context) Exec added in v0.98.0

func (ic *Context) Exec() error

Exec executes loaded VM script and calls registered finalizers to release the occupied resources.

func (*Context) Finalize added in v0.98.0

func (ic *Context) Finalize()

Finalize calls all registered cancel functions to release the occupied resources.

func (*Context) GetContract added in v0.92.0

func (ic *Context) GetContract(hash util.Uint160) (*state.Contract, error)

GetContract returns contract by its hash in current interop context.

func (*Context) GetFunction added in v0.91.0

func (ic *Context) GetFunction(id uint32) *Function

GetFunction returns metadata for interop with the specified id.

func (*Context) GetPrice added in v0.93.0

func (ic *Context) GetPrice(op opcode.Opcode, parameter []byte) int64

GetPrice returns a price for executing op with the provided parameter.

func (*Context) InitNonceData added in v0.96.0

func (ic *Context) InitNonceData()

InitNonceData initializes nonce to be used in `GetRandom` calculations.

func (*Context) RegisterCancelFunc added in v0.98.0

func (ic *Context) RegisterCancelFunc(f context.CancelFunc)

RegisterCancelFunc adds given function to the list of functions to be called after VM finishes script execution.

func (*Context) Signers added in v0.98.0

func (ic *Context) Signers() []transaction.Signer

Signers returns signers witnessing current execution context.

func (*Context) SpawnVM added in v0.91.0

func (ic *Context) SpawnVM() *vm.VM

SpawnVM spawns new VM with the specified gas limit and set context.VM field.

func (*Context) SyscallHandler added in v0.91.0

func (ic *Context) SyscallHandler(_ *vm.VM, id uint32) error

SyscallHandler handles syscall with id.

func (*Context) UseSigners added in v0.98.0

func (ic *Context) UseSigners(s []transaction.Signer)

UseSigners allows overriding signers used in this context.

type Contract

type Contract interface {
	Initialize(*Context) error
	Metadata() *ContractMD
	OnPersist(*Context) error
	PostPersist(*Context) error
}

Contract is an interface for all native contracts.

type ContractMD

type ContractMD struct {
	state.NativeContract
	Name    string
	Methods []MethodAndPrice
}

ContractMD represents native contract instance.

func NewContractMD

func NewContractMD(name string, id int32) *ContractMD

NewContractMD returns Contract with the specified list of methods.

func (*ContractMD) AddEvent

func (c *ContractMD) AddEvent(name string, ps ...manifest.Parameter)

AddEvent adds new event to a native contract.

func (*ContractMD) AddMethod

func (c *ContractMD) AddMethod(md *MethodAndPrice, desc *manifest.Method)

AddMethod adds new method to a native contract.

func (*ContractMD) GetMethod added in v0.93.0

func (c *ContractMD) GetMethod(name string, paramCount int) (MethodAndPrice, bool)

GetMethod returns method `name` with specified number of parameters.

func (*ContractMD) GetMethodByOffset added in v0.94.0

func (c *ContractMD) GetMethodByOffset(offset int) (MethodAndPrice, bool)

GetMethodByOffset returns with the provided offset. Offset is offset of `System.Contract.CallNative` syscall.

func (*ContractMD) IsActive added in v0.94.0

func (c *ContractMD) IsActive(height uint32) bool

IsActive returns true iff the contract was deployed by the specified height.

func (*ContractMD) UpdateHash added in v0.94.0

func (c *ContractMD) UpdateHash()

UpdateHash creates native contract script and updates hash.

type Function

type Function struct {
	ID   uint32
	Name string
	Func func(*Context) error
	// ParamCount is a number of function parameters.
	ParamCount int
	Price      int64
	// RequiredFlags is a set of flags which must be set during script invocations.
	// Default value is NoneFlag i.e. no flags are required.
	RequiredFlags callflag.CallFlag
}

Function binds function name, id with the function itself and price, it's supposed to be inited once for all interopContexts, so it doesn't use vm.InteropFuncPrice directly.

type Ledger added in v0.98.1

type Ledger interface {
	BlockHeight() uint32
	CurrentBlockHash() util.Uint256
	GetBaseExecFee() int64
	GetBlock(hash util.Uint256) (*block.Block, error)
	GetConfig() config.ProtocolConfiguration
	GetHeaderHash(int) util.Uint256
	GetStoragePrice() int64
}

Ledger is the interface to Blockchain required for Context functionality.

type Method

type Method = func(ic *Context, args []stackitem.Item) stackitem.Item

Method is a signature for a native method.

type MethodAndPrice

type MethodAndPrice struct {
	Func          Method
	MD            *manifest.Method
	CPUFee        int64
	StorageFee    int64
	SyscallOffset int
	RequiredFlags callflag.CallFlag
}

MethodAndPrice is a native-contract method descriptor.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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