「The Ethernaut by Zeppelin Level 9. King」を翻訳してみました(CryptoZombiesのように?)
原文はこちら
https://ethernaut.zeppelin.solutions
9. Kingをクリック
9. King
難易度 6/6
下記のコントラクトは非常にシンプルなゲームのコードである。
そのゲームとは、
現時点での最大価格よりも多額のETHを送った全てのゲーム参加者は新しい王になるぞ。
そして、先代の王は新しい王に賞金を払い、少しのETHを生成する。
まあ、ネズミ講みたいなものだな((ノ∀`笑))
さて、この楽しい(?)ゲームを破壊することがお主への依頼内容となる。
インスタンスレベルに話を戻すと、(依頼内容は)王様権限を自分自身(のアドレス)に取り戻すことになる。
そのような王様宣言を拒絶することがこのレベルのクリア条件だ。
(すなわち、誰も王にはなれないようにすることだ)
ソースコード
pragma solidity ^0.4.18;
import 'zeppelin-solidity/contracts/ownership/Ownable.sol';
contract King is Ownable {
address public king;
uint public prize;
function King() public payable {
king = msg.sender;
prize = msg.value;
}
function() external payable {
require(msg.value >= prize || msg.sender == owner);
king.transfer(msg.value);
king = msg.sender;
prize = msg.value;
}
}