以太坊abi

什麼是abihtml

ABI是Application Binary Interface的縮寫,字面意思 應用二進制接口,能夠通俗的理解爲合約的接口說明。當合約被編譯後,那麼它的abi也就肯定了。json

咱們來看看一個很簡單的合約和它的abi數組

合約代碼以下:ui

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

通過編譯以後,它的字節碼以下: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會拋異常。

相關文章
相關標籤/搜索