最近要實現etherscan的合約認證的功能 類似這個這個頁面
大概實現思路是這樣
解決的問題1. bytecode尾部與鏈上的bytecode不同
bytecode尾部是乙個部署合約元資料的hash稱為 auxdata ,不同環境下編譯會產生不同的hash(即使使用相同版本編譯器),在校對時候需要移除尾部的32位元組hash值
2.bytecode首部與鏈上的bytecode不同
在編譯完成後bytecode首部的一段**稱為部署**,這一部分在部署完成後通過eth_getcode 是無法獲取到的,所以在比對時需要將它移除出去,那麼怎麼確定哪一部分是屬於部署**的呢?
經過觀察發現,部署**的最後乙個指令都會以stop結尾(不一定正確),在編譯合約時同時生成opcodes,編譯完成後將opcodes讀取進入,截取出opcodes第乙個stop指令前所有的指令,計算出這些指令對應的bytecode,然後將其移除出去,由此又衍生出關於opcodes轉bytecode的第三個問題
3.opcdoes轉bytecode的問題
參考文件
附所有opcodes
Remix Geth 實現智慧型合約部署和呼叫詳解
geth實現私有鏈部署合約和呼叫介面 記得在setting裡選擇對應版本 點選run,create,實現部署 在部署完之後會出現下面介面,包括合約名字 如何呼叫介面?只需要在對應的介面上輸入引數,呼叫的話,點選前面的介面名就能在下面看到輸出 經過以上兩步 我們應該已經除錯好合約,下面就是部署在私有鏈...
以太坊智慧型合約實現代幣空投
本文將介紹如何在以太坊智慧型合約中實現代幣的空投。區塊鏈世界中所謂空投 airdrop 就是免費給你的區塊鏈位址 公鑰 傳送代幣。代幣空投的方式層出不窮,有手工打幣空投的,也有向代幣合約轉賬進行空投的,還可以無需轉賬,只需要將代幣合約位址新增到imtoken錢包中去,就可以實現代幣空投。本文將介紹這...
自己實現printf
原理不是很難網上有很多,自己搜一下就明白了。void printlog const char fmt,看到上面 太簡單了,也許有人會說,這有什麼用?在我看來最大的用處在於寫日誌,如果我們把 稍稍改下就可以把螢幕上的輸出一起輸出到檔案乙份 在初始化處把全域性變數日誌檔案開啟就像這樣 plogfile ...