1. 如何生成smart contract对应的ABI(ApplicationBinary Interface)
函数的abi由以下元素组成
1) Type:有“function”,“constructor”, “fallback”三种
2) Name:函数名
3) Inputs:函数的参数类型,参数名,components(tuple类型才会有)
4) Output:函数的返回值,名字(可省略)
5) Payable:函数是否是payable的
6) StateMutability:pure/view/nonpayable/payable 这四种的一种
7) Constant:如果是pure或者view,则为true,否则为false
Event的abi由以下元素组成:
1) Type:“event”
2) Name:event的名字
3) Inputs:event的参数类型,参数名,components(tuple类型才会有),indexed(参数是否被indexed关键字修饰,indexed会给该参数一个编码,方便事件过滤)
4) Anonymous:是否声明为anonymous,如果声明为anonymous, 事件的签名不会被保存为topic,也就是说无法通过事件名称过滤该事件
从abi的生成规则来看,可以直接通过源码来获得abi,以下是个合约对应的abi
pragma solidity ^0.4.0;
contract Test {
function Test() public { b = 0x12345678901234567890123456789012; }
event Event(uint indexed a, bytes32 b);
event Event2(uint indexed a, bytes32 b);
function foo(uint a) public { Event(a, b); }
bytes32 b;
}