Web3js

web3.eth.getCode 不返回 etherscan 上顯示的數據

  • November 15, 2019

例如,我們以合約地址 0xdac17f958d2ee523a2206206994597c13d831ec7 為例。

有誰知道為什麼以下兩個完全不同:

  1. 從返回的字元串await web3.eth.getCode(0xdac17f958d2ee523a2206206994597c13d831ec7)
  2. https://etherscan.io/address/0xdac17f958d2ee523a2206206994597c13d831ec7#codeContract Creation Code下的 字元串

我正在使用 Web3.js v1.2.1。

謝謝!

那是因為它們不是一回事。

正如文件所說,當您執行該getCode(...)函式時,您將獲得特定地址的已部署字節碼。區塊鏈上的字節碼是合約編譯後的字節碼執行的結果,其中包括初始化程式碼。

關於您提供的經過驗證的契約:

  1. await web3.eth.getCode(0xdac17f958d2ee523a2206206994597c13d831ec7)

返回已部署合約的字節碼。

  1. 合約創建程式碼

這是input創建合約的交易,您可以在該欄位中看到。Input Data此字節碼包含初始化程式碼,並將生成部署在區塊鏈上的字節碼。


讓我們看一個關於未驗證合約的範例。

和:web3.eth.getCode("0x004c8981FdDA3219d4F1319a50b2EfC9F52D36B3")

你將得到的是區塊鏈上合約的字節碼:

https://rinkeby.etherscan.io/address/0x004c8981FdDA3219d4F1319a50b2EfC9F52D36B3#code

這與創建合約的交易的輸入不同,即contract creation code.

https://rinkeby.etherscan.io/tx/0xea40ca2f6be3f146b7a4f80c97319e6658f5cc1118330f4b4bf76a7df10c6f0f

可能這裡解釋得更好:

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