Evm

為什麼字節碼與 Etherscan 上的操作碼不匹配?

  • November 15, 2017

我只是瀏覽了這份契約的前幾個操作碼:https ://etherscan.io/address/0xab7c74abc0c4d48d1bdad5dcb26153fc8780f83e#code 。

哪些是(根據操作碼視圖):

PUSH1 0x60
PUSH1 0x40
MSTORE
CALLDATASIZE
ISZERO
PUSH2 0x00f8

基於哪些 OPCODES 可用於乙太坊 EVM?,我希望字節碼是0x6060604052156100f8....

但是字節碼是:0x60606040526002610108...,我正在閱讀

0x60 0x60      ;; PUSH1 0x60 
0x60 0x40      ;; PUSH1 0x40
0x52           ;; MSTORE
0x60 0x02      ;; PUSH1 0x02???
0x61 0x01 x08  ;; PUSH2 0x01 0x08???

我究竟做錯了什麼?

“契約創建程式碼”(包括前面的建構子)和部署的字節碼之間存在差異。“字節碼視圖”向您展示了完整的合約創建程式碼,前面有建構子;“操作碼視圖”僅向您顯示實際部署的合約程式碼。建構子僅在合約部署時執行一次,以創建和設置部署的程式碼;它根本不會出現在部署的字節碼中。這在 Etherscan 使用者界面上並不明顯!據我所知,實際部署的程式碼從字節 0x01bf 開始(大建構子)。

您可以通過訪問實際部署的字節碼來驗證這一點web3.eth.getCode('0xab7c74abc0c4d48d1bdad5dcb26153fc8780f83e');,您會發現其輸出與 Etherscan 上的 Opcodes 視圖相匹配。

引用自:https://ethereum.stackexchange.com/questions/23092