对一个ABI进行描述解释。
JSON ABI Format 是Solidity 编译器输出的格式.
JSON序列化的对象总是一个字符串,它表示一个对象数组,其中每个对象都有描述ABIFragment 的各种属性。
对JSON字符串(一个普通的JavaScript对象)进行反序列化也可以传递给任何接受JSON string ABI的函数。
Human-Readable ABI 是本文中由ethers引入的,并依据得到了广泛的采用。
ABI是通过使用字符串数组来描述的,其中每个字符串都是构造函数、函数、事件或错误的solididity式签名。
当解析一个片段(fragment) 时,所有的填写的属性都将被注入(例如,一个payable的函数方法将其constant
属性设置为false)。
元组可以通过使用tuple(...)
语法或使用空括号(...)
来指定。
Output Formats
每个Fragment和ParamType可以使用其format
方法输出。
这是一个完整的人类可读(human-readable)的字符串,包括所有的参数名,任何可选的修饰符(例如,indexed
,public
等)和空格,以提高代码可读性。
这类似于full
,除了没有不必要的空白或参数名。这对于存储最小的字符串非常有用,该字符串仍然可以使用Fragment . from, 从完全重构原始的Fragment。
这将返回一个JavaScript对象,安全地调用JSON.stringify
创建一个JSON字符串。
一个最小的输出格式,Solidity在计算签名哈希或事件主题topic的哈希时使用它。
sighash
格式不足以重新创建原始的Fragment,因为它舍弃了indexed, anonymous, stateMutability等修饰符。
它只用于为Fragment去计算 选择器(selector),不能用于格式化接口。
Fragment
一个ABI是Fragments的集合,每个fragment指定:
事件或函数的name。如果是ConstructorFragment时为null。
这是一个表示Fragment类型的字符串。如:
constructor
event
function
如果object 是一个Fragment返回true。
表示部署期间应该使用的gas limit,它可以是null。
表示构造函数在部署期间是否可以接收ether(例如:msg.value != 0)。
构造函数的state mutability。它可以是:
nonpayable
payable
从任何兼容的object或String创建一个新的ConstructorFragment。
如果object 是一个 ConstructorFragment返回true。
从任何兼容的object或String创建一个新的ErrorFragment。
如果object 是一个 ErrorFragment返回true。
表示事件(event)是否匿名。匿名事件在创建日志时不会将其topic哈希值注入到topic0中。
从任何兼容的object或String创建一个新的EventFragment。
如果object 是一个 EventFragment返回true。
FunctionFragment inherits ConstructorFragment
表示函数是否为常量(即不改变状态)。如果设为true表示状态可变性是pure
或 view
。
构造器的状态可变性。它可以是:
nonpayable
payable
pure
view
函数输出参数的列表。
从任何兼容的object或String创建一个新的FunctionFragment。
如果object 是一个 FunctionFragment 返回true。
ParamType
下面的例子将表示Solidity中的参数:
string foobar
参数的基类型(base type)。对于原始类型(例如address
, uint256
等),这等同于type。 对于数组,它将是string array
,对于元组,它将是string tuple
。
参数是否被标记为索引。这只适用于参数是EventFragment的部分。
数组的children类型。对于任何非数组的参数,这将是null。
元组的组成部分。这对于非元组参数是null。
使用可用的output formats创建Fragment的字符串描述。
如果object 是一个ParamType返回true。