0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Level 14. Gatekeeper Two(The Ethernaut)

Posted at

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

原文はこちら

https://ethernaut.zeppelin.solutions
14. Gatekeeper Twoをクリック

14. Gatekeeper Two

難易度 5/6
このゲートキーパーにはいくつかの新しい課題があるぞ。 このレベルのクリア条件は、(13. Gatekeeper Oneと同様)参加者として登録することだ。

回答の助けになるヒント
  • 最初のゲートキーパー(13. Gatekeeper One)をクリアして学んだことを思い出せ。最初のゲートは「13. Gatekeeper」と同じだ。
  • 第2ゲートのassemblyキーワードは、バニラsolidityであるコントラクトに対し、ネイティブでない機能にアクセスすることを可能にする。 詳細はこちら
    このゲートの「extcodesize」コールは、指定されたアドレスのコントラクトコードのサイズを取得するぞ。これは、yellow paper の「7. Contract Creation」を確認すれば設定された方法と時期について詳しく知ることが出来るぞ。
  • 3番目のゲートの「^」はビット演算子(XOR)で、ここでは、他の一般的なビット演算子(ここを参照)を適用するために使用されている。「3. Coin Flip」は、この問題に挑戦する際に確認するのにも適しているぞ。

ソースコード

pragma solidity ^0.4.18;

contract GatekeeperTwo {

  address public entrant;

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

  modifier gateTwo() {
    uint x;
    assembly { x := extcodesize(caller) }
    require(x == 0);
    _;
  }

  modifier gateThree(bytes8 _gateKey) {
    require(uint64(keccak256(msg.sender)) ^ uint64(_gateKey) == uint64(0) - 1);
    _;
  }

  function enter(bytes8 _gateKey) public gateOne gateTwo gateThree(_gateKey) returns (bool) {
    entrant = tx.origin;
    return true;
  }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?