电梯不会让你达到大楼顶部, 对吧?
根据Foundry 官方文档配置好运行环境后,于本项目下执行下列命令:
$ cd WTF-CTF
$ forge test -C src/Ethernaut/Elevator -vvvvv
只要两次调用isLastFloor
方法返回的bool值不同即可。
而题目定义的isLastFloor
接口并没有限制函数类型,所以每次调用我们可以通过isLastFloor
方法改变攻击合约中的值,来保证两次调用的返回值不同。
interface Building {
function isLastFloor(uint256) external returns (bool);
}
你可以在接口使用 view
函数修改器来防止状态被篡改. pure
修改器也可以防止状态被篡改. 认真阅读 Solidity's documentation 并学习注意事项.
完成这一关的另一个方法是构建一个 view 函数, 这个函数根据不同的输入数据返回不同的结果, 但是不更改状态, 比如 gasleft()
.我们将在后续的某道题中使用该方法。