什么是abihtml
ABI是Application Binary Interface的缩写,字面意思 应用二进制接口,能够通俗的理解为合约的接口说明。当合约被编译后,那么它的abi也就肯定了。json
咱们来看看一个很简单的合约和它的abi数组
合约代码以下:ui
通过编译以后,它的字节码以下:htm
6060604052341561000c57fe5b5b60e18061001b6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630dbe671f146044578063efa3b144146067575bfe5b3415604b57fe5b60516098565b6040518082815260200191505060405180910390f35b3415606e57fe5b60826004808035906020019091905050609e565b6040518082815260200191505060405180910390f35b60005481565b60006005820260008190555060005490505b9190505600a165627a7a72305820e7910925075fb58319dd637b47520b821714dd11ad896cb6d8272151aff714690029
abi以下,是json格式的对象
[ { "constant": true, "inputs": [ ], "name": "a", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "type": "function" }, { "constant": false, "inputs": [ { "name": "val", "type": "uint256" } ], "name": "modify_a", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "type": "function" } ]
能够看到,这是一个json格式的数组,它包含两个对象,每一个对象都对应着一个合约方法,这里由于a是public类型的,编译的时候会自动为它生成get()方法,因此这个合约实际是包含两个方法的,咱们对方法的参数作一下整理。blog
>type 方法类型,包括function,constructor,fallback(缺省方法)能够缺省,默认为function接口
>name 方法名get
>inputs 方法参数,它是一个对应数组,数组里的每一个对象都是一个参数说明input
name 参数名
type 参数类型
>outputs 方法返回值,格式和inputs类型同样,若是没有返回值能够缺省
>constant 布尔值,若是为true说明方法不会修改合约的状态变量
>payable 布尔值,标明方法是否能够接受ether
构造方法和缺省方法不能有name和outputs,缺省方法也不能有inputs,向一个没有payable标注的方法发送ether会抛异常。