Ethernaut 题库闯关 #11 — Elevator

Ethernaut题库闯关连载第11篇题解。

今天这篇是Ethernaut 题库闯关连载的第11篇,难度等级:中等。

Ethernaut 题库闯关我已经整理为一个专栏了, 欢迎大家订阅专栏。

挑战11:Elevator (电梯)

本挑战的目标是让电梯到达了顶层,即让 Elevator 的 top 置为 true

合约源代码如下:

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

interface Building {
    function isLastFloor(uint256) external returns (bool);
}

contract Elevator {
    bool public top;
    uint256 public floor;

    function goTo(uint256 _floor) public {
        Building building = Building(msg.sender);

        if (!building.isLastFloor(_floor)) {
            floor = _floor;
            top = building.isLastFloor(floor);
        }
    }
}

top 变量在building.isLastFloor(_floor)false时才会被赋值,因此在正常情况下,top 好像永远不会为 true.

在查看解题思路之前,可以自己先想一想, 本次挑战主要是让我们不要相信外部合约。

研究合约

挑战赛的关卡的Elevator代码非常简单,它有两个状态变量。

  • bool public top一个布尔变量,它将说明电梯是否已经到达了Building(大楼)的顶层。默认情况下,它被初始化为 false
  • uint256 public floor一个整数变量,将说明电梯到达了哪一层。默认情况下,它被初始化为0

然后我们有一个goTo函数,它接收一个uint256 _floor。这个函数预计会被实现Building接口的智能合约所调用。

在这个函数中,它检查Building.isLastFloor的结果,该结果应该表示一个楼层是否是大楼的顶层。

如果该楼层不是大楼的顶层,该函数就会更新`flo...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Ethernaut CTF
Ethernaut CTF
信奉 CODE IS LAW.