Juego Ethernaut Nivel 8. El objetivo es obtener acceso a la variable de estado de la contraseña privada y desbloquear el contrato.
Sé que uno podría usar await contract.unlock(await web3.eth.getStorageAt(contract.address, 1)); , pero quiero encontrar la contraseña que decodifica los datos de entrada de la creación del contrato. Aquí está el contrato.
Intenté await contract.unlock("f94b476063b6379a3c8b6c836efb8b3e10ede188") pero eso no funcionó.
// 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; } } }Si se verifica el contrato, es posible ir a la sección de contrato , desplazarse hacia abajo hasta Código de creación de contrato y leer los últimos 32 bytes (64 caracteres del bytecode) que en este caso es 0x412076657279207374726f6e67207365637265742070617373776f7264203a29 .
son 32 bytes porque la variable de estado de la contraseña se declara así:
bytes32 private password;
Para resolver el tipo de desafío:
await contract.unlock("0x412076657279207374726f6e67207365637265742070617373776f7264203a29")