在 solidity 中解码构造函数参数
Decode constructor arguments in solidity
我在玩 Ethernaut Level 8。目标是获取私有密码状态变量并解锁合约。
我知道可以使用 await contract.unlock(await web3.eth.getStorageAt(contract.address, 1));
,但我想找到解码合约创建输入数据的密码。 Here是合同。
我试过 await contract.unlock("f94b476063b6379a3c8b6c836efb8b3e10ede188")
但没用。
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
contract Vault {
bool public locked;
bytes32 private password;
constructor(bytes32 _password) public {
locked = true;
password = _password;
}
function unlock(bytes32 _password) public {
if (password == _password) {
locked = false;
}
}
}
如果合同被验证,可以转到 contract section,向下滚动到 合同创建代码 并读取最后 32 个字节(64 个字符字节码)在这种情况下是 0x412076657279207374726f6e67207365637265742070617373776f7264203a29
.
it is 32 bytes because the password state variable is declared like this:
bytes32 private password;
解决挑战类型:
await contract.unlock("0x412076657279207374726f6e67207365637265742070617373776f7264203a29")
我在玩 Ethernaut Level 8。目标是获取私有密码状态变量并解锁合约。
我知道可以使用 await contract.unlock(await web3.eth.getStorageAt(contract.address, 1));
,但我想找到解码合约创建输入数据的密码。 Here是合同。
我试过 await contract.unlock("f94b476063b6379a3c8b6c836efb8b3e10ede188")
但没用。
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
contract Vault {
bool public locked;
bytes32 private password;
constructor(bytes32 _password) public {
locked = true;
password = _password;
}
function unlock(bytes32 _password) public {
if (password == _password) {
locked = false;
}
}
}
如果合同被验证,可以转到 contract section,向下滚动到 合同创建代码 并读取最后 32 个字节(64 个字符字节码)在这种情况下是 0x412076657279207374726f6e67207365637265742070617373776f7264203a29
.
it is 32 bytes because the password state variable is declared like this:
bytes32 private password;
解决挑战类型:
await contract.unlock("0x412076657279207374726f6e67207365637265742070617373776f7264203a29")