日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

以太坊 方法签名

發布時間:2024/7/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊 方法签名 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  最近在工作中使用web3j調用合約,發現一個比較頭疼的問題?復雜一點的合約參數多了,函數的方法簽名老是出錯。在這之前調用合約方法一直都是拼接合約的函數簽名以及參數。為了能快速的獲取每個合約的函數簽名,我在思考是否便捷可行解決方案?而不是使用老套的方法,在remix IDE中編寫函數,用其編譯獲取函數簽名。

  通常以太坊合約開發后,需要先進行編譯,部署時需要二進制字節編碼bytecode,或者是abi文件。其中abi文件是合約函數,變量,事件組成的一組輸入輸出的json串。而bytecode是根據abi文件生成的二進制字節碼。其中bytecode包含了合約中函數簽名。那bytecode的函數簽名是如何生成的呢?什么又是函數簽名?

?

一.以太坊函數簽名

  區塊鏈中合約代碼執行,需要指定某個合約地址的某個函數,其中這個執行的函數是使用Keccak-256(SHA-3)編碼后的散列,取散列的前四個字節作為函數簽名。官方定義:"簽名被定義為沒有數據位置說明符的基本原型規范表達式,即具有帶括號的參數類型列表的函數名稱"。通俗的說就是:將函數名,帶順序的變量類型以及參數括號進行Keccak-256編碼后,取前四個字節的二進制字符串,即以太坊的合約函數簽名。

?

二.函數簽名生成

  在java中可以使用bcpkix-jdk15on工具類的Keccak.Digest256將合約函數方法名及參數類型做hash計算,轉換成16進制后取前8位的四個字節。

代碼如下:

Keccak.Digest256 digest256 = new Keccak.Digest256();
System.out.println(Hex.toHexString(digest256.digest("setMap(bytes32,string,address[],bytes32)".getBytes())).substring(0, 8));

可以得到此函數簽名為:dc913337

還有一種特殊的簽名,叫event事件簽名:

Keccak.Digest256 digest256 = new Keccak.Digest256();?

System.out.println(Hex.toHexString(digest256.digest("LogCreate(address)".getBytes())));

得到的事件簽名值:

b8f132fb6526e0405f3ce4f3bab301f1d4409b1e7f2c01c2037d6cf845c831cb

關于合約函數簽名文檔生成,我在業余時間寫了個java小工具,目前已在github上開源,地址已經放在文末。那么為什么需要這個合約簽名文檔呢?

?

三.開發協調

  以太坊合約函數簽名文檔,可以理解成接口文檔,主要作用有:

第一:由于合約開發者和合約調用者,可能是不同的開發人員。調用合約者需要知道合約的函數簽名,同時也可以驗證自己拼接的函數簽名以及參數是否正確。

第二:調用者需要知道合約原始的方法名以及參數類型,尤其是明確需要知道參數的順序,否則無法生成正確的函數簽名。那么此時就需要合約方法的文檔來作為調用者參考媒介。出于此功能的需要,就自己動手豐衣足食做了個規范化的合約函數簽名文檔生成工具。

  在生成合約函數簽名文檔之前,需要使用truffle或者solc。truffle是以太坊合約開發的腳手架,使用truffle將完成開發的合約編譯成json文件。或者使用solc將合約編譯成abi文件。最后使用 ethSignUtil.jar 工具生成函數簽名文檔以及合約接口文檔。簡單看下效果圖

函數簽名:

?

合約接口:

?

?

關于合約函數簽名文檔生成的具體用法,請移步至github:

https://github.com/zhjgit/Ethereum-util

?

持續關注"刻意鏈習"公眾號,獲取更多區塊鏈技術知識。轉載請注明文章出處,原創技術貼,侵權必糾。

? ? ? ? ? ? ?

轉載于:https://www.cnblogs.com/sumingk/articles/10091305.html

總結

以上是生活随笔為你收集整理的以太坊 方法签名的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。