Web3js
web3.eth.getCode 不返回 etherscan 上顯示的數據
例如,我們以合約地址 0xdac17f958d2ee523a2206206994597c13d831ec7 為例。
有誰知道為什麼以下兩個完全不同:
- 從返回的字元串
await web3.eth.getCode(0xdac17f958d2ee523a2206206994597c13d831ec7)
- https://etherscan.io/address/0xdac17f958d2ee523a2206206994597c13d831ec7#code
Contract Creation Code
下的 字元串我正在使用 Web3.js v1.2.1。
謝謝!
那是因為它們不是一回事。
正如文件所說,當您執行該
getCode(...)
函式時,您將獲得特定地址的已部署字節碼。區塊鏈上的字節碼是合約編譯後的字節碼執行的結果,其中包括初始化程式碼。關於您提供的經過驗證的契約:
await web3.eth.getCode(0xdac17f958d2ee523a2206206994597c13d831ec7)
返回已部署合約的字節碼。
- 合約創建程式碼
這是
input
創建合約的交易,您可以在該欄位中看到。Input Data
此字節碼包含初始化程式碼,並將生成部署在區塊鏈上的字節碼。讓我們看一個關於未驗證合約的範例。
和:
web3.eth.getCode("0x004c8981FdDA3219d4F1319a50b2EfC9F52D36B3")
你將得到的是區塊鏈上合約的字節碼:
https://rinkeby.etherscan.io/address/0x004c8981FdDA3219d4F1319a50b2EfC9F52D36B3#code
這與創建合約的交易的輸入不同,即
contract creation code
.https://rinkeby.etherscan.io/tx/0xea40ca2f6be3f146b7a4f80c97319e6658f5cc1118330f4b4bf76a7df10c6f0f
可能這裡解釋得更好: