Contract-Development
查看合約創建參數
我正在嘗試在此找到契約創建參數:https ://rinkeby.etherscan.io/address/0xdbc4949a84cd92c482af74d8813c13588e466841#code
但是我在etherscan上找不到它,我在哪裡可以找到它?
例如,在 Ethernaut Level 8 中,傳入了一個密碼,https ://ethernaut.openzeppelin.com/level/0xf94b476063B6379A3c8b6C836efB8B3e10eDe188 。如果我能夠查看傳遞給建構子的參數,我會找到密碼。
固態變數儲存在儲存槽中,因此如果您知道它的槽,您甚至可以讀取私有變數。在您的上下文中,契約已經過驗證,因此很容易知道
password
第二個插槽。之後,您可以使用任何庫如:web3js、ethersjs 來讀取區塊鏈並解碼密碼。這是我閱讀password
您提供的契約的程式碼:const ethers = require("ethers"); const AlchemyApiKey = "Your Alchemy's API key" const provider = new ethers.providers.AlchemyProvider("rinkeby", AlchemyApiKey) //Contract address of you to read const contractAddress = "0xdbC4949a84cd92c482AF74D8813c13588E466841" const hexToAscii = (_hex) => { const hex = _hex.toString(); let str = '' for (let i = 0; i < hex.length; i += 2) { str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); } return str; } async function main() { //The storage slot you want to read const storageSlot = 1; const storage = await provider.getStorageAt(contractAddress, storageSlot) res = hexToAscii(storage) console.log(res); } main().catch((error) => { console.error(error); process.exitCode = 1; });
執行上面的程式碼後,我得到了
password
isA very strong secret password :)
。您可以自己嘗試並用您的Alchemy api 密鑰替換 API 密鑰。我參考了Medium上的這篇文章,你可以閱讀更多關於它的資訊。還可以在此處閱讀有關儲存槽的 Solidity 文件。