• 以太坊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如下,是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会抛异常。

  • 相关阅读:
    python 2
    Python 1 practice
    python 1
    Python多线程_笔记
    背景自适应不会随浏览器界面放大速效而改变
    平行四边形定理
    动态规划3(区间+树形)
    素数快速生成
    设CPU共有16根地址线,8根数据线,,,
    贪心+huffman编码+模拟退火+分治
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/8515265.html
Copyright © 2020-2023  润新知