美文网首页
ABI 简述

ABI 简述

作者: xinlei87 | 来源:发表于2018-04-03 13:54 被阅读0次

ABI 简述 链接

原文:

什么是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

[{"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"}]modify_a","outputs":[],"payable":false,"type":"function"}]

为了看起来更方便,把它格式化一下

[
  {
    "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"
  }
]

可以看到,解析之后是一个数组,它包含两个对象,每个对象都对应着一个合约方法,这里因为a是public类型的,编译的时候会自动为它生成get()方法,所以这个合约实际是包含两个方法的,解析之后的json应该不难看懂,下面对几个关键字做以解释

  • type 方法类型,包括function, constructor, fallback(缺省方法)可以缺省,默认为function
  • name 方法名
  • inputs 方法参数,它是一个对应数组,数组里的每个对象都是一个 参数说明
  • name 参数名
  • type 参数类型
  • outputs 方法返回值,格式和inputs类型,如果没有返回值可以缺省
  • constant 布尔值,如果为true指明方法不会修改合约的状态变量
  • payable 布尔值,标明方法是否可以接收ether

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

相关文章

  • ABI 简述

    ABI 简述 链接 原文: 什么是ABI ABI是Application Binary Interface的缩写...

  • Android CPU ABI

    ABI 简述 不同 Android 手机使用不同的 CPU,因此支持不同的指令集。CPU 与指令集的每种组合都有其...

  • Solidity的ABI编码函数详解:encode、encode

    编码函数: abi.encode abi.encodePacked abi.encodeWithSignature...

  • 合约开发(solidity)进阶2

    底层函数解析 1. abi.encode, abi.encodePacked, abi.encodeWithSel...

  • gradle的abi

    gradle 文件中对abi的配置 官方文档对abi的介绍 Android手机支持的abi: 各个abi的含义 通...

  • Android中的ABI

    Android中的ABI ABI是Application Binary Interface的缩写。 ABI常表示两...

  • Android之64位和32位区分

    .. ABI 是什么 在Android编码时候 ,我们经常会看到ABI 。ABI的意思是 Application ...

  • solidity10-ABI详解

    ABI(Application Binary Interface Specification) ABI是定义以太坊...

  • Android ABI

    什么是ABI? Android Binary Interface 简称ABI CPU 和架构 不同 Android...

  • Android ABI的浅析

    Android ABI的概念 ABI全称:Application binary interface(应用程序二进制...

网友评论

      本文标题:ABI 简述

      本文链接:https://www.haomeiwen.com/subject/ykuabttx.html