這台電梯會讓你到不了頂樓對吧?
這題的目標是要讓電梯到達頂樓,也就是讓第 9 行的 top
等於 true
可以在第 17 行看到 top
會透過 isLastFloor(floor)
去判斷是否到頂了,而 isLastFloor(floor)
在第 5 行寫下它的介面了,這個 function 會接收一個 uint256
並回傳 bool
。所以我們只要實作這個 function 就好了。
但是題目中呼叫 isLastFloor(floor)
的地方有兩處,15 行跟 17 行:
goTo(uint256 _floor)
的流程:
msg.sender
建立一個 Building
合約!isLastFloor(_floor)
做判斷,回傳要是 False
才會通過判斷isLastFloor(_floor)
,這次要是 True
我們才可以讓 top = true
並通關也就是說,這題的挑戰是如何讓 isLastFloor(_floor)
對兩次的呼叫給不同的回應。
其實作法很簡單,只需要多宣告一個狀態變數紀錄上次回傳的值就好;這樣就可以知道下次要換另一個值回傳,攻擊合約如下: