Skip to content
This repository has been archived by the owner on Mar 18, 2024. It is now read-only.

Latest commit

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..

GatekeeperOne


tl; dr




contract GatekeeperOne {

  address public entrant;

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

  modifier gateTwo() {
    require(gasleft() % 8191 == 0);
    _;
  }

  modifier gateThree(bytes8 _gateKey) {
      require(uint32(uint64(_gateKey)) == uint16(uint64(_gateKey)), "GatekeeperOne: invalid gateThree part one");
      require(uint32(uint64(_gateKey)) != uint64(_gateKey), "GatekeeperOne: invalid gateThree part two");
      require(uint32(uint64(_gateKey)) == uint16(uint160(tx.origin)), "GatekeeperOne: invalid gateThree part three");
    _;
  }

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


discussion




solution


  • check test/13/GatekeeperOne.t.sol:


  • run:

> forge test --match-contract GatekeeperOneTest -vvvv    


  • submit with script/13/GatekeeperOne.s.sol:


  • by running:

> forge script ./script/13/GatekeeperOne.s.sol --broadcast -vvvv --rpc-url sepolia




pwned...