博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
以太坊abi
阅读量:5757 次
发布时间:2019-06-18

本文共 1725 字,大约阅读时间需要 5 分钟。

什么是abi

ABI是Application Binary Interface的缩写,字面意思 应用二进制接口,可以通俗的理解为合约的接口说明。当合约被编译后,那么它的abi也就确定了。

我们来看看一个很简单的合约和它的abi

合约代码如下:

pragma solidity ^0.4.4;  contract test {       string public a;      function modify_a(string val) {          a = val;      }  }    

经过编译之后,它的字节码如下:

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()方法,所以这个合约实际是包含两个方法的,我们对方法的参数做一下整理。

>type  方法类型,包括function,constructor,fallback(缺省方法)可以缺省,默认为function

>name  方法名

>inputs  方法参数,它是一个对应数组,数组里的每个对象都是一个参数说明

     name 参数名

     type  参数类型

>outputs  方法返回值,格式和inputs类型一样,如果没有返回值可以缺省

>constant  布尔值,如果为true说明方法不会修改合约的状态变量

>payable  布尔值,标明方法是否可以接受ether

构造方法和缺省方法不能有name和outputs,缺省方法也不能有inputs,向一个没有payable标注的方法发送ether会抛异常。

转载地址:http://ofvkx.baihongyu.com/

你可能感兴趣的文章
创建美国地区的appleId
查看>>
例题10-2 UVa12169 Disgruntled Judge(拓展欧几里德)
查看>>
JS 原生ajax写法
查看>>
Composer管理PHP依赖关系
查看>>
React.js学习笔记之JSX解读
查看>>
我所了解的Libevent和SEDA架构
查看>>
Socket编程问题小记
查看>>
基于Flask-Angular的项目组网架构与部署
查看>>
一张图道尽程序员的出路
查看>>
redis 常用命令
查看>>
LVS+Keepalived高可用负载均衡集群架构
查看>>
烂泥:kvm安装windows系统蓝屏
查看>>
iPhone开发面试题--葵花宝典
查看>>
EdbMails Convert EDB to PST
查看>>
POJ 2184
查看>>
大话 程序猿 眼里的 接口
查看>>
struts2用了哪几种模式
查看>>
replace函数结合正则表达式实现转化成驼峰与转化成连接字符串的方法
查看>>
ubuntu 初学常用命令
查看>>
WCF客户端与服务端通信简单入门教程
查看>>