abi

package
v0.0.0-...-b78b3a4 Latest Latest
Warning

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

Go to latest
Published: Mar 16, 2019 License: GPL-3.0 Imports: 14 Imported by: 0

Documentation

Overview

包ABI实现以太坊ABI(应用程序二进制 接口。

以太坊ABI是强类型的,在编译时已知 静态。此ABI将处理基本类型转换;无符号 签署,反之亦然。它不处理切片铸造这样 作为无符号切片到有符号切片。钻头尺寸类型铸造 处理。位大小为32的整数将正确转换为Int256, 等。

Index

Examples

Constants

View Source
const (
	IntTy byte = iota
	UintTy
	BoolTy
	StringTy
	SliceTy
	ArrayTy
	AddressTy
	FixedBytesTy
	BytesTy
	HashTy
	FixedPointTy
	FunctionTy
)

类型枚举器

Variables

This section is empty.

Functions

func U256

func U256(n *big.Int) []byte

u256将一个大整数转换为256bit evm数。

Types

type ABI

type ABI struct {
	Constructor Method
	Methods     map[string]Method
	Events      map[string]Event
}

ABI保存有关合同上下文的信息,并提供 可调用方法。它将允许您键入check函数调用和 相应地打包数据。

func JSON

func JSON(reader io.Reader) (ABI, error)

JSON返回已分析的ABI接口,如果失败则返回错误。

Example
const definition = `[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBar","outputs":[{"name":"","type":"bool"}],"type":"function"}]`

abi, err := JSON(strings.NewReader(definition))
if err != nil {
	log.Fatalln(err)
}
out, err := abi.Pack("isBar", common.HexToAddress("01"))
if err != nil {
	log.Fatalln(err)
}

fmt.Printf("%x\n", out)
// 输出:
// 1FBC40920000000000000000000000000000000000000000000000000000000000000000001
Output:

func (*ABI) MethodById

func (abi *ABI) MethodById(sigdata []byte) (*Method, error)

method by id按4字节的ID查找方法 如果未找到,则返回nil

func (ABI) Pack

func (abi ABI) Pack(name string, args ...interface{}) ([]byte, error)

打包给定的方法名以符合ABI。方法调用的数据 将由方法“id”、“args0”、“arg1…”组成。阿尔金方法ID由 其中4个字节和参数都是32个字节。 方法ID是从 方法字符串签名。(签名=baz(uint32,string32))

func (*ABI) UnmarshalJSON

func (abi *ABI) UnmarshalJSON(data []byte) error

unmashaljson实现json.unmasheler接口

func (ABI) Unpack

func (abi ABI) Unpack(v interface{}, name string, output []byte) (err error)

根据ABI规范以V为单位解包输出

type Argument

type Argument struct {
	Name    string
	Type    Type
	Indexed bool //索引仅由事件使用
}

参数包含参数的名称和相应的类型。 类型在打包和测试参数时使用。

func (*Argument) UnmarshalJSON

func (argument *Argument) UnmarshalJSON(data []byte) error

unmashaljson实现json.unmasheler接口

type Arguments

type Arguments []Argument

func (Arguments) LengthNonIndexed

func (arguments Arguments) LengthNonIndexed() int

lengthnonindexed返回不计算“indexed”参数时的参数数。只有事件 不能有“indexed”参数,方法输入/输出的参数应始终为false

func (Arguments) NonIndexed

func (arguments Arguments) NonIndexed() Arguments

无索引返回已筛选出索引参数的参数

func (Arguments) Pack

func (arguments Arguments) Pack(args ...interface{}) ([]byte, error)

pack执行操作go format->hexdata

func (Arguments) PackValues

func (arguments Arguments) PackValues(args []interface{}) ([]byte, error)

packvalues执行操作go format->hexdata 它在语义上与unpackvalues相反

func (Arguments) Unpack

func (arguments Arguments) Unpack(v interface{}, data []byte) error

unpack执行hexdata->go-format操作

func (Arguments) UnpackValues

func (arguments Arguments) UnpackValues(data []byte) ([]interface{}, error)

解包值可用于根据ABI规范解包ABI编码的十六进制数据。 不提供要解包的结构。相反,此方法返回一个包含 价值观。原子参数将是一个包含一个元素的列表。

type Event

type Event struct {
	Name      string
	Anonymous bool
	Inputs    Arguments
}

事件是可能由EVM的日志机制触发的事件。事件 保存有关生成的输出的类型信息(输入)。匿名事件 不要将签名规范表示作为第一个日志主题。

func (Event) Id

func (e Event) Id() common.Hash

ID返回由 用于标识事件名称和类型的ABI定义。

func (Event) String

func (e Event) String() string

type Method

type Method struct {
	Name    string
	Const   bool
	Inputs  Arguments
	Outputs Arguments
}

方法表示给定“name”的可调用项,以及该方法是否为常量。 如果方法为“const”,则不需要为此创建任何事务 特定方法调用。它可以很容易地使用本地虚拟机进行模拟。 例如,“balance()”方法只需要检索 从存储器中,因此不需要发送到 网络。像“transact”这样的方法需要一个tx,因此 标记为“真”。 输入指定此给定方法所需的输入参数。

func (Method) Id

func (method Method) Id() []byte

func (Method) Sig

func (method Method) Sig() string

SIG根据ABI规范返回方法字符串签名。

例子

函数foo(uint32 a,int b)=“foo(uint32,int256)”

请注意,“int”代替其规范表示“int256”

func (Method) String

func (method Method) String() string

type Type

type Type struct {
	Elem *Type

	Kind reflect.Kind
	Type reflect.Type
	Size int
	T    byte //我们自己的类型检查
	// contains filtered or unexported fields
}

类型是受支持的参数类型的反射

func NewType

func NewType(t string) (typ Type, err error)

new type创建在t中给定的abi类型的新反射类型。

func (Type) String

func (t Type) String() (out string)

字符串实现字符串

Directories

Path Synopsis
bind

Jump to

Keyboard shortcuts

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