期待結(jié)果
默認情況下核蘸,etherscan只能查看合約上發(fā)生的tx谒拴,無法調(diào)用合約方法尝江。不過,etherscan提供verify contract功能英上,完成驗證之后茂装,可以讀取和寫入合約怠蹂,即下圖中Tab頁簽Read Contract和Write Contract。
實現(xiàn)步驟
- 合并合約:將所有import導(dǎo)入的合約和庫(library)都寫到一個文件中
- 驗證合約:進入verify contract頁面少态,指定已部署合約地址和名稱
- 編譯合約:選擇Compiler版本和優(yōu)化方案
第一步比較繁瑣城侧,如果你使用了open-zeppelin之類的通用庫,需要翻翻好多個目錄才能把依賴的合約湊齊并放置在一個文件當中彼妻,而且特別要注意加上版本宏定義pragma solidity ^0.5.0;
嫌佑。
第二步填入合約地址和名稱,注意名稱必須和源文件中的合約名稱一致侨歉。etherscan會掃描出代碼中所有的合約和庫名稱屋摇。可以說這里的名稱就是尋常程序的main函數(shù)幽邓。
第三步是有一定竅門的炮温,也是不好把握的地方。我的做法是先去查看truffle compile之后的json文件牵舵,比如此處的CacContract.json文件柒啤,搜索version關(guān)鍵字,定位到compiler處:
"compiler": {
"name": "solc",
"version": "0.5.0+commit.1d4f565a.Emscripten.clang"
}
這樣大概就知道了編譯器的版本畸颅。Optimization建議不要開啟担巩,否則編譯好的二進制和部署上鏈的二進制有差異,原因是solidity的編譯器會朝著最少gas消耗的方向進行指令優(yōu)化没炒,舉個例子涛癌,sstore指令用于給狀態(tài)變量賦值,首次在某處賦值寫入需要消耗20000 gas送火,但是再次寫入只需要花費5000 gas拳话,所以考慮到gas成本,優(yōu)化過程中指令就可能減少种吸,那么相應(yīng)的二進制也會發(fā)生改變弃衍。此時,源碼驗證就不能通過骨稿。
最終方法驗證
通過Read Contract掃描出來的方法笨鸡,通過證書編號查詢出證書內(nèi)容:
于 2019-04-02