「The Ethernaut by Zeppelin Level 13. Gatekeeper One」を翻訳してみました(CryptoZombiesのように?)

原文はこちら

https://ethernaut.zeppelin.solutions
13. Gatekeeper Oneをクリック

13. Gatekeeper One

難易度 5/6
ゲートキーパー(ここではmodifier修飾子)を通過させ、参加者として登録する(enterメソッドからtrueを返す)ことが
このレベルのクリア条件だ。

回答の助けになるヒント
  • 過去に「4. Telephone」と「5. Token」のレベルから学んだことを思い出せ。
  • Solidityのドキュメント(ここここを参照)で特別な変数「msg.gas」及び推奨エイリアス「gasleft()」について詳しく知ることが出来るぞ。

ソースコード

pragma solidity ^0.4.18;

contract GatekeeperOne {

  address public entrant;

  modifier gateOne() {
    require(msg.sender != tx.origin);
    _;
  }

  modifier gateTwo() {
    require(msg.gas % 8191 == 0);
    _;
  }

  modifier gateThree(bytes8 _gateKey) {
    require(uint32(_gateKey) == uint16(_gateKey));
    require(uint32(_gateKey) != uint64(_gateKey));
    require(uint32(_gateKey) == uint16(tx.origin));
    _;
  }

  function enter(bytes8 _gateKey) public gateOne gateTwo gateThree(_gateKey) returns (bool) {
    entrant = tx.origin;
    return true;
  }
}
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.