Fragments

对一个ABI进行描述解释。

Formats

JSON String ABI (Solidity 输出 JSON)

JSON ABI FormatSolidity 编译器输出的格式.

JSON序列化的对象总是一个字符串,它表示一个对象数组,其中每个对象都有描述ABIFragment 的各种属性。

对JSON字符串(一个普通的JavaScript对象)进行反序列化也可以传递给任何接受JSON string ABI的函数。

Humanb-Readable ABI

Human-Readable ABI本文中由ethers引入的,并依据得到了广泛的采用。

ABI是通过使用字符串数组来描述的,其中每个字符串都是构造函数函数事件错误的solididity式签名。

当解析一个片段(fragment) 时,所有的填写的属性都将被注入(例如,一个payable的函数方法将其constant属性设置为false)。

元组可以通过使用tuple(...)语法或使用空括号(...)来指定。

Example Human-Readable ABI
const ABI = [ // Constructor "constructor(address ens)", // Constant functions (pure or view) "function balanceOf(address owner) view returns (uint)", // State-mutating functions (payable or non-payable) "function mint(uint amount) payable", "function transfer(address to, uint amount) returns (bool)", // Events "event Transfer(address indexed from, address indexed to, uint amount)", // Errors "error InsufficientFunds(address from, uint balance)", ]

Output Formats

每个FragmentParamType可以使用其format方法输出。

ethers.utils.FormatTypes.full string

这是一个完整的人类可读(human-readable)的字符串,包括所有的参数名,任何可选的修饰符(例如,indexedpublic等)和空格,以提高代码可读性。

ethers.utils.FormatTypes.minimal string

这类似于full,除了没有不必要的空白或参数名。这对于存储最小的字符串非常有用,该字符串仍然可以使用Fragment . from, 从完全重构原始的Fragment。

ethers.utils.FormatTypes.json string

这将返回一个JavaScript对象,安全地调用JSON.stringify创建一个JSON字符串。

ethers.utils.FormatTypes.sighash string

一个最小的输出格式,Solidity在计算签名哈希或事件主题topic的哈希时使用它。

注意

sighash 格式不足以重新创建原始的Fragment,因为它舍弃了indexed, anonymous, stateMutability等修饰符。

它只用于为Fragment去计算 选择器(selector),不能用于格式化接口。

Fragment

一个ABI是Fragments的集合,每个fragment指定:

Properties

fragment.name string

事件或函数的name。如果是ConstructorFragment时为null。

fragment.type string

这是一个表示Fragment类型的字符串。如:

  • constructor
  • event
  • function

fragment.inputs Array< ParamType >

构造函数、事件等输入参数的ParamType的数组。

Methods

fragment.format( [ format = sighash ] ) string

使用可用的输出格式创建Fragment的字符串描述。

ethers.utils.Fragment.from( objectOrString ) Fragment

从任何兼容的bject或String创建一个新的Fragment子类。

ethers.utils.Fragment.isFragment( object ) boolean

如果object 是一个Fragment返回true。

ConstructorFragment inherits Fragment

Properties

fragment.gas 大数(BigNumber)

表示部署期间应该使用的gas limit,它可以是null。

fragment.payable boolean

表示构造函数在部署期间是否可以接收ether(例如:msg.value != 0)。

fragment.stateMutability string

构造函数的state mutability。它可以是:

  • nonpayable
  • payable

Methods

ethers.utils.ConstructorFragment.from( objectOrString ) ConstructorFragment

从任何兼容的object或String创建一个新的ConstructorFragment

ethers.utils.ConstructorFragment.isConstructorFragment( object ) boolean

如果object 是一个 ConstructorFragment返回true。

ErrorFragment inherits Fragment

Methods

ethers.utils.ErrorFragment.from( objectOrString ) ErrorFragment

从任何兼容的object或String创建一个新的ErrorFragment

ethers.utils.ErrorFragment.isErrorFragment( object ) boolean

如果object 是一个 ErrorFragment返回true。

EventFragment inherits Fragment

Properties

fragment.anonymous boolean

表示事件(event)是否匿名。匿名事件在创建日志时不会将其topic哈希值注入到topic0中。

Methods

ethers.utils.EventFragment.from( objectOrString ) EventFragment

从任何兼容的object或String创建一个新的EventFragment

ethers.utils.EventFragment.isEventFragment( object ) boolean

如果object 是一个 EventFragment返回true。

FunctionFragment inherits ConstructorFragment

Properties

fragment.constant boolean

表示函数是否为常量(即不改变状态)。如果设为true表示状态可变性是pureview

fragment.stateMutability string

构造器的状态可变性。它可以是:

  • nonpayable
  • payable
  • pure
  • view

fragment.outputs Array< ParamType >

函数输出参数的列表。

Methods

ethers.utils.FunctionFragment.from( objectOrString ) FunctionFragment

从任何兼容的object或String创建一个新的FunctionFragment

ethers.utils.FunctionFragment.isFunctionFragment( object ) boolean

如果object 是一个 FunctionFragment 返回true。

ParamType

下面的例子将表示Solidity中的参数:

string foobar

Properties

paramType.name string

本地参数名。对于未命名的参数,这个值为null。例如,参数字符串string foobar会输出foobar

paramType.type string

参数的完整类型,包括元组和数组符号。对于未命名的参数,这个值可能为null。对于上面的例子,将输出foobar

paramType.baseType string

参数的基类型(base type)。对于原始类型(例如address, uint256等),这等同于type。 对于数组,它将是string array,对于元组,它将是string tuple

paramType.indexed boolean

参数是否被标记为索引。这适用于参数是EventFragment的部分。

paramType.arrayChildren ParamType

数组的children类型。对于任何非数组的参数,这将是null。

paramType.arrayLength number

数组的长度,或动态数组的长度-1。对于不是数组的参数,这个值为null。

paramType.components Array< ParamType >

元组的组成部分。这对于非元组参数是null。

Methods

paramType.format( [ outputType = sighash ] )

使用可用的output formats创建Fragment的字符串描述。

ethers.utils.ParamType.from( objectOrString ) ParamType

从任何兼容的object或String创建一个新的ParamType

ethers.utils.ParamType.isParamType( object ) boolean

如果object 是一个ParamType返回true。