成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

以太坊ABI介紹(一)

Cruise_Chan / 1966人閱讀

摘要:但是對(duì)于調(diào)用者來(lái)說(shuō),就需要知道合約有哪些方法,方法的參數(shù)是什么,返回值是什么,而這些信息就記錄在智能合約的中。

ABI是什么

ABI全稱 Application Binary Interface,字面意思是應(yīng)用程序二進(jìn)制接口,可以通俗的理解為合約的接口說(shuō)明,當(dāng)合約被編譯后,它對(duì)應(yīng)的abi也就確定了。
abi有點(diǎn)類似于程序中的接口文檔,描述了字段名稱、字段類型、方法名稱、參數(shù)名稱、參數(shù)類型、方法返回值類型等

為什么需要ABI

我們編寫(xiě)智能合約的流程是:

編寫(xiě)合約代碼(一般使用solidity語(yǔ)言)

編譯合約,將solidity編寫(xiě)的代碼編譯成EVM可識(shí)別的bytecode,這一步生成abi

部署合約,將合約部署到區(qū)塊鏈上,生成合約地址,將合約內(nèi)容(即上一步生成的bytecode)作為input date輸入。部署合約是一個(gè)交易過(guò)程,所以也會(huì)生成一個(gè)交易Has

執(zhí)行合約,獲取合約地址,然后傳入?yún)?shù)調(diào)用合約中的方法,獲得執(zhí)行結(jié)果

從上面的步驟可以看出,abi對(duì)于EVM來(lái)說(shuō),其實(shí)是不需要的。但是對(duì)于調(diào)用者來(lái)說(shuō),就需要知道合約有哪些方法,方法的參數(shù)是什么,返回值是什么,而這些信息就記錄在智能合約的abi中。所以abi其實(shí)就相當(dāng)于開(kāi)發(fā)者的接口文檔,方便開(kāi)發(fā)者調(diào)用執(zhí)行合約

ABI有哪些內(nèi)容

我們來(lái)編寫(xiě)一個(gè)最簡(jiǎn)單的合約,然后編譯生成abi看下內(nèi)容

pragma solidity ^0.4.24;


contract Demo {

    uint private x;

    function set(uint _x) public {
        x = _x;
    }

}

執(zhí)行 truffle compile 編譯合約,就會(huì)生成對(duì)應(yīng)的文件Demo.json,內(nèi)容如下。由于json太長(zhǎng),刪除了一些不重要的內(nèi)容,完整內(nèi)容可以自己手動(dòng)執(zhí)行看看。

{
  "contractName": "Demo",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "name": "_x",
          "type": "uint256"
        }
      ],
      "name": "set",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052348015600f57600080fd5b5060a48061001e6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b1146044575b600080fd5b348015604f57600080fd5b50606c60048036038101908080359060200190929190505050606e565b005b80600081905550505600a165627a7a723058201dfe7c019fec67ccd87250c9ac8642c163cc5f43588715b33e8a8953df3715f60029",
  "deployedBytecode": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b1146044575b600080fd5b348015604f57600080fd5b50606c60048036038101908080359060200190929190505050606e565b005b80600081905550505600a165627a7a723058201dfe7c019fec67ccd87250c9ac8642c163cc5f43588715b33e8a8953df3715f60029",
  "sourceMap": "27:97:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27:97:1;;;;;;;",
  "deployedSourceMap": "27:97:1:-;;;;;;;;;;;;;;;;;;;;;;;;69:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;69:52:1;;;;;;;;;;;;;;;;;;;;;;;;;;;112:2;108:1;:6;;;;69:52;:::o",
  "source": "pragma solidity ^0.4.24;


contract Demo {

    uint private x;

    function set(uint _x) public {
        x = _x;
    }

}
",
  "sourcePath": "/Users/root/Workspace/DApp/demo/contracts/Demo.sol",
  "ast": {
    ...
  },
  "legacyAST": {
    ...
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-09-14T11:57:49.750Z"
}

大部分參數(shù)通過(guò)名稱就可以看出來(lái)含義,這里我們主要介紹abi中各參數(shù)的含義和調(diào)用函數(shù)時(shí)生成ABI編碼的過(guò)程

abi各參數(shù)的含義

name:函數(shù)名稱

type:方法類型,包括function, constructor, fallback(缺省方法)可以缺省,默認(rèn)為function

constant:布爾值,如果為true指明方法不會(huì)修改合約字段的狀態(tài)變量

payable:布爾值,標(biāo)明方法是否可以接收ether

stateMutability:狀態(tài)類型,包括pure (不讀取區(qū)塊鏈狀態(tài)),view (和constant類型,只能查看,不會(huì)修改合約字段),nonpayable(和payable含義一樣),payable(和payable含義一樣)。其實(shí)保留payableconstant是為了向后兼容

inputs:數(shù)組,描述參數(shù)的名稱和類型

name:參數(shù)名稱

type:參數(shù)類型

outputs:和inputs一樣,如果沒(méi)有返回值,缺省是一個(gè)空數(shù)組

這里要說(shuō)明一點(diǎn)的是,由于示例中的x字段類型為private,所以沒(méi)有生成一個(gè)和參數(shù)名稱一樣的函數(shù),如果x字段類型為public,生成的abi就如下,會(huì)多一個(gè)和參數(shù)名稱一樣的函數(shù)

"abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "x",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_x",
          "type": "uint256"
        }
      ],
      "name": "set",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }

未完待續(xù),以太坊ABI介紹(二)



歡迎訂閱「K叔區(qū)塊鏈」 - 專注于區(qū)塊鏈技術(shù)學(xué)習(xí)

博客地址:http://www.jouypub.com
簡(jiǎn)書(shū)主頁(yè):https://www.jianshu.com/u/756c9c8ae984
segmentfault主頁(yè):https://segmentfault.com/blog/jouypub
騰訊云主頁(yè):https://cloud.tencent.com/developer/column/72548

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24322.html

相關(guān)文章

  • python使用web3py與以太智能合約交互

    摘要:合約規(guī)定了公共職能部門(mén),以創(chuàng)造新的投資和撤資,這將成為對(duì)沖基金的主要職能。對(duì)沖基金的用戶通過(guò)其以太坊地址來(lái)識(shí)別,該地址相當(dāng)于公鑰。我發(fā)現(xiàn)與其他程序如程序的以太坊智能合約進(jìn)行交互的最簡(jiǎn)單方法是使用他們的。 在以太坊和其他區(qū)塊鏈中,仍有很多被證明的概念正在實(shí)施,開(kāi)發(fā)人員在嘗試如何應(yīng)對(duì)這些新概念。作為dInvest 系列文章一部分,我也在研究以太坊并嘗試在區(qū)塊鏈中實(shí)施對(duì)沖基金。在上一篇文章中...

    Joyven 評(píng)論0 收藏0
  • 以太ABI介紹(二)

    摘要:上一篇我們講了中的參數(shù)含義以太坊介紹一,但是只有函數(shù)定義也是不行的,我們還需要調(diào)用,當(dāng)調(diào)用一個(gè)函數(shù)時(shí)也需要對(duì)該函數(shù)進(jìn)行編碼,這樣才能執(zhí)行,那么以太坊是如何生成可供調(diào)用的字節(jié)碼的。 上一篇我們講了ABI中的參數(shù)含義 以太坊ABI介紹(一),但是只有函數(shù)定義也是不行的,我們還需要調(diào)用,當(dāng)調(diào)用一個(gè)函數(shù)時(shí)也需要對(duì)該函數(shù)進(jìn)行編碼,這樣EVM才能執(zhí)行,那么以太坊是如何生成可供EVM調(diào)用的字節(jié)碼的。...

    xiaoxiaozi 評(píng)論0 收藏0
  • 以太錢(qián)包開(kāi)發(fā)系列4 - 發(fā)送Token(代幣)

    摘要:一系列的類似的對(duì)象,如果無(wú)返回值時(shí),可以省略。表示函數(shù)聲明自己不會(huì)改變狀態(tài)變量的值。表示函數(shù)可以接收,否則表示不能。哈哈,恭喜大家,到這里這里就完整的實(shí)現(xiàn)了一個(gè)基于以太坊去中心化網(wǎng)頁(yè)錢(qián)包。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:[使用 ethers.js 開(kāi)發(fā)以太坊Web錢(qián)包4 - 發(fā)送Token (代幣)](https://learnblockchain.cn/20...,請(qǐng)讀者前往...

    Honwhy 評(píng)論0 收藏0
  • 以太錢(qián)包開(kāi)發(fā)系列4 - 發(fā)送Token(代幣)

    摘要:一系列的類似的對(duì)象,如果無(wú)返回值時(shí),可以省略。表示函數(shù)聲明自己不會(huì)改變狀態(tài)變量的值。表示函數(shù)可以接收,否則表示不能。哈哈,恭喜大家,到這里這里就完整的實(shí)現(xiàn)了一個(gè)基于以太坊去中心化網(wǎng)頁(yè)錢(qián)包。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:[使用 ethers.js 開(kāi)發(fā)以太坊Web錢(qián)包4 - 發(fā)送Token (代幣)](https://learnblockchain.cn/20...,請(qǐng)讀者前往...

    HmyBmny 評(píng)論0 收藏0
  • python和flask框架開(kāi)發(fā)以太智能合約

    摘要:是以太坊開(kāi)發(fā)的個(gè)人區(qū)塊鏈,可用于部署合約,開(kāi)發(fā)應(yīng)用程序和運(yùn)行測(cè)試。安裝是一個(gè)用于與以太坊交互的庫(kù)。啟動(dòng)以太坊測(cè)試區(qū)塊鏈服務(wù)器要部署智能合約,我們應(yīng)該啟動(dòng)測(cè)試以太坊服務(wù)器。最后,你將在以太坊合約中設(shè)置調(diào)用用戶對(duì)象時(shí)獲得的值。 將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中是任何軟件應(yīng)用程序不可或缺的一部分。無(wú)論如何控制該數(shù)據(jù)庫(kù)都有一個(gè)該數(shù)據(jù)的主控。區(qū)塊鏈技術(shù)將數(shù)據(jù)存儲(chǔ)到區(qū)塊鏈網(wǎng)絡(luò)內(nèi)的區(qū)塊中。因此,只要某個(gè)節(jié)點(diǎn)與網(wǎng)...

    enrecul101 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<