ETH Price: $2,925.66 (-1.12%)
 

Overview

ETH Balance

0.01 ETH

Eth Value

$29.26 (@ $2,925.66/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Enter Queue237840672025-11-12 15:34:1173 days ago1762961651IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000272822.85090709
Enter Queue237352632025-11-05 19:44:4780 days ago1762371887IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000244122.55096046
Reveal Match Res...237344672025-11-05 17:04:4780 days ago1762362287IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.00039664.15223569
Match Players237344572025-11-05 17:02:4780 days ago1762362167IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000231852.63646002
Enter Queue237344532025-11-05 17:01:5980 days ago1762362119IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000394124.11842843
Enter Queue237344122025-11-05 16:53:4780 days ago1762361627IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.00034713.62709297
Reveal Match Res...237344032025-11-05 16:51:5980 days ago1762361519IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000158691.66685759
Match Players237343922025-11-05 16:49:4780 days ago1762361387IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000126641.44004516
Enter Queue237343882025-11-05 16:48:5980 days ago1762361339IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000132091.38051058
Enter Queue237343662025-11-05 16:44:3580 days ago1762361075IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000267322.79334232
Reveal Match Res...237343372025-11-05 16:38:3580 days ago1762360715IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000102553.26457016
Reveal Match Res...237343362025-11-05 16:38:2380 days ago1762360703IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000128061.34181965
Match Players237343302025-11-05 16:37:1180 days ago1762360631IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000101921.15896976
Enter Queue237343252025-11-05 16:36:1180 days ago1762360571IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000105851.10615281
Enter Queue237342932025-11-05 16:29:4780 days ago1762360187IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000264172.76046565
Reveal Match Res...237342832025-11-05 16:27:4780 days ago1762360067IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000271892.84553652
Match Players237342792025-11-05 16:26:5980 days ago1762360019IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000110671.25849503
Enter Queue237342742025-11-05 16:25:5980 days ago1762359959IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000315713.29908554
Enter Queue237342632025-11-05 16:23:4780 days ago1762359827IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000276342.88765917
Reveal Match Res...237342502025-11-05 16:21:1180 days ago1762359671IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000122621.25837544
Leave Queue237342482025-11-05 16:20:4780 days ago1762359647IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000117012.80366171
Match Players237342442025-11-05 16:19:5980 days ago1762359599IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000097311.10653687
Enter Queue237342412025-11-05 16:19:2380 days ago1762359563IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000263222.75054169
Enter Queue237342402025-11-05 16:19:1180 days ago1762359551IN
0x5f5fDF6a...1F9F9A79C
0.005 ETH0.000114691.19850716
Reveal Match Res...237342252025-11-05 16:16:1180 days ago1762359371IN
0x5f5fDF6a...1F9F9A79C
0 ETH0.000273182.80458047
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer237344672025-11-05 17:04:4780 days ago1762362287
0x5f5fDF6a...1F9F9A79C
0.0096 ETH
Transfer237344672025-11-05 17:04:4780 days ago1762362287
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237344672025-11-05 17:04:4780 days ago1762362287
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237344672025-11-05 17:04:4780 days ago1762362287
0x5f5fDF6a...1F9F9A79C
0.0002 ETH
Transfer237344032025-11-05 16:51:5980 days ago1762361519
0x5f5fDF6a...1F9F9A79C
0.0096 ETH
Transfer237344032025-11-05 16:51:5980 days ago1762361519
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237344032025-11-05 16:51:5980 days ago1762361519
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237344032025-11-05 16:51:5980 days ago1762361519
0x5f5fDF6a...1F9F9A79C
0.0002 ETH
Transfer237343362025-11-05 16:38:2380 days ago1762360703
0x5f5fDF6a...1F9F9A79C
0.0096 ETH
Transfer237343362025-11-05 16:38:2380 days ago1762360703
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237343362025-11-05 16:38:2380 days ago1762360703
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237343362025-11-05 16:38:2380 days ago1762360703
0x5f5fDF6a...1F9F9A79C
0.0002 ETH
Transfer237342832025-11-05 16:27:4780 days ago1762360067
0x5f5fDF6a...1F9F9A79C
0.0096 ETH
Transfer237342832025-11-05 16:27:4780 days ago1762360067
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237342832025-11-05 16:27:4780 days ago1762360067
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237342832025-11-05 16:27:4780 days ago1762360067
0x5f5fDF6a...1F9F9A79C
0.0002 ETH
Transfer237342502025-11-05 16:21:1180 days ago1762359671
0x5f5fDF6a...1F9F9A79C
0.0096 ETH
Transfer237342502025-11-05 16:21:1180 days ago1762359671
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237342502025-11-05 16:21:1180 days ago1762359671
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237342502025-11-05 16:21:1180 days ago1762359671
0x5f5fDF6a...1F9F9A79C
0.0002 ETH
Transfer237342482025-11-05 16:20:4780 days ago1762359647
0x5f5fDF6a...1F9F9A79C
0.005 ETH
Transfer237342252025-11-05 16:16:1180 days ago1762359371
0x5f5fDF6a...1F9F9A79C
0.0096 ETH
Transfer237342252025-11-05 16:16:1180 days ago1762359371
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237342252025-11-05 16:16:1180 days ago1762359371
0x5f5fDF6a...1F9F9A79C
0.0001 ETH
Transfer237342252025-11-05 16:16:1180 days ago1762359371
0x5f5fDF6a...1F9F9A79C
0.0002 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Arena

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
cancun EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

/// @title Arena
/// @notice Commit-reveal RPS wagering with authorized matching
contract Arena {
    enum WeaponType {
        Rock,
        Paper,
        Scissors
    }

    struct Entry {
        uint96 wager;
        bytes32 commitHash;
        uint64 commitBlock;
        address opponent;
        uint64 matchBlock;
        bool revealed; // AW-C-01: Track reveal status
    }

    mapping(address => Entry) public queue;
    mapping(address => uint256) public credits;
    mapping(address => uint256) public lastCreditedAt; // AW-L-01: Track credit timestamps

    address public owner;
    address public matcher;
    address public feeProtocol;
    address public feeSeasonCurrent;
    address public feeSeasonNext;

    uint64 public constant REVEAL_DEADLINE_BLOCKS = 1_800;
    uint256 public constant CREDIT_RECOVERY_DELAY = 365 days; // AW-L-01: Stale credit recovery delay
    uint256 private locked = 1;

    event Entered(address indexed player, uint96 wager, bytes32 commitHash);
    event Left(address indexed player);
    event Matched(address indexed a, address indexed b, uint64 matchBlock);
    event Resolved(address indexed a, address indexed b, address winner, bool gunA, bool gunB, bool tiebreak);
    event Forfeited(address indexed winner, address indexed loser);
    event Credited(address indexed to, uint256 amount);
    event CreditsRecovered(address indexed from, address indexed to, uint256 amount); // AW-L-01: Credit recovery event
    event IndividualReveal(address indexed player, address indexed opponent);
    event FeeRecipientsSet(address protocol, address seasonCurrent, address seasonNext);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MatcherSet(address indexed previousMatcher, address indexed newMatcher);

    error ActiveEntry();
    error InactiveEntry();
    error ValueMismatch();
    error TierInvalid();
    error OpponentRequired();
    error NotAfterCommit();
    error PastDeadline();
    error BadCommit();
    error NotMatched();
    error WagerMismatch();
    error NoCredits();
    error TransferFailed();
    error Unauthorized();
    error InvalidAddress();
    error ReentrancyGuard();
    error InvalidWeapon();
    error AlreadyMatched();
    error NotPastDeadline();
    error LoserAlreadyRevealed(); // AW-C-01: Prevent forfeit of revealed player
    error RecoveryTooEarly(); // AW-L-01: Recovery delay not met

    modifier onlyOwner() {
        if (msg.sender != owner) revert Unauthorized();
        _;
    }

    modifier onlyMatcher() {
        if (msg.sender != matcher) revert Unauthorized();
        _;
    }

    modifier nonReentrant() {
        if (locked != 1) revert ReentrancyGuard();
        locked = 2;
        _;
        locked = 1;
    }

    constructor() {
        owner = msg.sender;
        matcher = msg.sender;
        feeProtocol = msg.sender;
        feeSeasonCurrent = msg.sender;
        feeSeasonNext = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    function enterQueue(uint8 tier, bytes32 commitHash) external payable nonReentrant {
        if (tier > 3) revert TierInvalid();
        if (queue[msg.sender].wager != 0) revert ActiveEntry();

        uint96 requiredWager = wagerForTier(tier);
        if (msg.value != requiredWager) revert ValueMismatch();

        queue[msg.sender] = Entry({
            wager: requiredWager,
            commitHash: commitHash,
            commitBlock: uint64(block.number),
            opponent: address(0),
            matchBlock: 0,
            revealed: false
        });

        emit Entered(msg.sender, requiredWager, commitHash);
    }

    function leaveQueue() external nonReentrant {
        Entry storage entry = queue[msg.sender];
        if (entry.wager == 0) revert InactiveEntry();
        if (entry.opponent != address(0)) revert AlreadyMatched();

        uint96 refundAmount = entry.wager;
        delete queue[msg.sender];

        _safeSend(msg.sender, refundAmount);
        emit Left(msg.sender);
    }

    /// @notice Allow individual reveal to protect against griefing
    /// @dev AW-C-01: Players can independently reveal their commits onchain
    /// @param weapons The player's weapon choices
    /// @param salt The player's salt used in commitment
    function revealIndividual(WeaponType[3] calldata weapons, bytes32 salt) external nonReentrant {
        Entry storage entry = queue[msg.sender];
        if (entry.opponent == address(0)) revert NotMatched();
        if (entry.wager == 0) revert InactiveEntry();

        uint64 matchBlock = entry.matchBlock;
        if (block.number <= matchBlock + 1) revert NotAfterCommit();
        if (block.number > matchBlock + REVEAL_DEADLINE_BLOCKS) revert PastDeadline();

        // Validate the player's commitment
        _validateWeapons(weapons);
        _validateCommit(msg.sender, weapons, salt, entry.commitHash);

        // Mark as revealed
        entry.revealed = true;
        emit IndividualReveal(msg.sender, entry.opponent);
    }

    function matchPlayers(address a, address b) external onlyMatcher nonReentrant {
        if (a == b) revert OpponentRequired();

        Entry storage entryA = queue[a];
        Entry storage entryB = queue[b];

        if (entryA.wager == 0 || entryB.wager == 0) revert InactiveEntry();
        if (entryA.wager != entryB.wager) revert WagerMismatch();
        if (entryA.opponent != address(0) || entryB.opponent != address(0)) revert AlreadyMatched();

        uint64 currentBlock = uint64(block.number);
        entryA.opponent = b;
        entryA.matchBlock = currentBlock;
        entryB.opponent = a;
        entryB.matchBlock = currentBlock;

        emit Matched(a, b, currentBlock);
    }

    function revealMatchResult(
        address a,
        address b,
        WeaponType[3] calldata aW,
        bytes32 aSalt,
        WeaponType[3] calldata bW,
        bytes32 bSalt
    ) external nonReentrant {
        if (a == b) revert OpponentRequired();

        Entry storage entryA = queue[a];
        Entry storage entryB = queue[b];

        if (entryA.opponent != b || entryB.opponent != a) revert NotMatched();
        if (entryA.wager != entryB.wager) revert WagerMismatch();

        uint64 matchBlock = entryA.matchBlock;
        if (block.number <= matchBlock + 1) revert NotAfterCommit();
        if (block.number > matchBlock + REVEAL_DEADLINE_BLOCKS) revert PastDeadline();

        _validateWeapons(aW);
        _validateWeapons(bW);
        _validateCommit(a, aW, aSalt, entryA.commitHash);
        _validateCommit(b, bW, bSalt, entryB.commitHash);

        // AW-C-01: Mark both players as revealed
        entryA.revealed = true;
        entryB.revealed = true;

        bytes32 seedBlock = blockhash(matchBlock + 1);
        if (seedBlock == 0 && block.number > matchBlock + 257) {
            seedBlock = keccak256(abi.encodePacked(matchBlock));
        }

        address lo = a < b ? a : b;
        address hi = a < b ? b : a;
        bytes32 seed = keccak256(
            abi.encodePacked(
                lo,
                hi,
                lo == a ? entryA.commitHash : entryB.commitHash,
                lo == a ? entryB.commitHash : entryA.commitHash,
                lo == a ? aSalt : bSalt,
                lo == a ? bSalt : aSalt,
                seedBlock
            )
        );

        address winner = _determineWinner(a, b, aW, bW, seed);
        uint256 pot = uint256(entryA.wager) + uint256(entryB.wager);

        delete queue[a];
        delete queue[b];

        _distributePayout(winner, pot);

        bool gunA = uint256(keccak256(abi.encodePacked(seed, "A"))) % 100 == 0;
        bool gunB = uint256(keccak256(abi.encodePacked(seed, "B"))) % 100 == 0;
        bool tiebreak = !gunA && !gunB && _scoreBestOfThree(aW, bW) == 0;

        emit Resolved(a, b, winner, gunA, gunB, tiebreak);
    }

    function forfeitUnrevealed(address winner, address loser, WeaponType[3] calldata winnerWeapons, bytes32 winnerSalt)
        external
        nonReentrant
    {
        if (winner == loser) revert OpponentRequired();

        Entry storage entryW = queue[winner];
        Entry storage entryL = queue[loser];

        if (entryW.opponent != loser || entryL.opponent != winner) revert NotMatched();
        if (entryW.wager != entryL.wager) revert WagerMismatch();

        uint64 matchBlock = entryW.matchBlock;
        if (block.number <= matchBlock + REVEAL_DEADLINE_BLOCKS) revert NotPastDeadline();

        // AW-C-01: Prevent forfeit if loser has already revealed
        if (entryL.revealed) revert LoserAlreadyRevealed();

        _validateWeapons(winnerWeapons);
        _validateCommit(winner, winnerWeapons, winnerSalt, entryW.commitHash);

        uint256 pot = uint256(entryW.wager) + uint256(entryL.wager);

        delete queue[winner];
        delete queue[loser];

        _distributePayout(winner, pot);
        emit Forfeited(winner, loser);
    }

    function claim() external nonReentrant {
        uint256 amount = credits[msg.sender];
        if (amount == 0) revert NoCredits();

        credits[msg.sender] = 0;

        (bool success,) = msg.sender.call{ value: amount }("");
        if (!success) revert TransferFailed();
    }

    function setFeeRecipients(address protocol, address seasonCurr, address seasonNext) external onlyOwner {
        if (protocol == address(0) || seasonCurr == address(0) || seasonNext == address(0)) {
            revert InvalidAddress();
        }
        if (protocol == address(this) || seasonCurr == address(this) || seasonNext == address(this)) {
            revert InvalidAddress();
        }
        feeProtocol = protocol;
        feeSeasonCurrent = seasonCurr;
        feeSeasonNext = seasonNext;
        emit FeeRecipientsSet(protocol, seasonCurr, seasonNext);
    }

    function setMatcher(address newMatcher) external onlyOwner {
        if (newMatcher == address(0)) revert InvalidAddress();
        address oldMatcher = matcher;
        matcher = newMatcher;
        emit MatcherSet(oldMatcher, newMatcher);
    }

    function transferOwnership(address newOwner) external onlyOwner {
        if (newOwner == address(0)) revert InvalidAddress();
        address oldOwner = owner;
        owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    function wagerForTier(uint8 tier) public pure returns (uint96) {
        if (tier == 0) return 0.005 ether;
        if (tier == 1) return 0.05 ether;
        if (tier == 2) return 0.5 ether;
        if (tier == 3) return 2.5 ether;
        revert TierInvalid();
    }

    function _validateWeapons(WeaponType[3] calldata weapons) private pure {
        for (uint256 i = 0; i < 3; i++) {
            if (uint8(weapons[i]) > 2) revert InvalidWeapon();
        }
    }

    function _validateCommit(address player, WeaponType[3] calldata weapons, bytes32 salt, bytes32 expectedHash)
        private
        view
    {
        bytes32 actualHash = keccak256(
            abi.encodePacked(
                uint8(weapons[0]), uint8(weapons[1]), uint8(weapons[2]), salt, player, address(this), block.chainid
            )
        );
        if (actualHash != expectedHash) revert BadCommit();
    }

    function _determineWinner(address a, address b, WeaponType[3] calldata aW, WeaponType[3] calldata bW, bytes32 seed)
        private
        pure
        returns (address)
    {
        bool gunA = uint256(keccak256(abi.encodePacked(seed, "A"))) % 100 == 0;
        bool gunB = uint256(keccak256(abi.encodePacked(seed, "B"))) % 100 == 0;

        if (gunA && !gunB) return a;
        if (!gunA && gunB) return b;

        int8 score = _scoreBestOfThree(aW, bW);
        if (score > 0) return a;
        if (score < 0) return b;

        return (uint256(keccak256(abi.encodePacked(seed, "T"))) & 1) == 0 ? a : b;
    }

    function _scoreBestOfThree(WeaponType[3] calldata aW, WeaponType[3] calldata bW) private pure returns (int8) {
        int8 score = 0;
        for (uint256 i = 0; i < 3; i++) {
            score += _playRPS(aW[i], bW[i]);
        }
        return score;
    }

    function _playRPS(WeaponType a, WeaponType b) private pure returns (int8) {
        if (a == b) return 0;
        if (a == WeaponType.Rock && b == WeaponType.Scissors) return 1;
        if (a == WeaponType.Scissors && b == WeaponType.Paper) return 1;
        if (a == WeaponType.Paper && b == WeaponType.Rock) return 1;
        return -1;
    }

    function _distributePayout(address winner, uint256 pot) private {
        uint256 feeP = pot * 200 / 10_000;
        uint256 feeSC = pot * 100 / 10_000;
        uint256 feeSN = pot * 100 / 10_000;
        uint256 winnerAmount = pot - feeP - feeSC - feeSN;

        _safeSend(feeProtocol, feeP);
        _safeSend(feeSeasonCurrent, feeSC);
        _safeSend(feeSeasonNext, feeSN);
        _safeSend(winner, winnerAmount);
    }

    function _safeSend(address to, uint256 amount) private {
        if (amount == 0) return;

        (bool success,) = to.call{ value: amount, gas: 100000 }(""); // AW-L-02: Increased gas for smart wallets
        if (!success) {
            credits[to] += amount;
            lastCreditedAt[to] = block.timestamp; // AW-L-01: Track credit timestamp
            emit Credited(to, amount);
        }
    }

    /// @notice Recover stale credits that cannot be claimed
    /// @dev AW-L-01: Owner-only recovery after conservative delay
    /// @param from Address with unclaimed credits
    /// @param to Recovery recipient address
    function recoverStaleCredits(address from, address to) external onlyOwner nonReentrant {
        uint256 amount = credits[from];
        if (amount == 0) revert NoCredits();

        // Enforce recovery delay since last credit
        if (block.timestamp < lastCreditedAt[from] + CREDIT_RECOVERY_DELAY) {
            revert RecoveryTooEarly();
        }

        credits[from] = 0;
        emit CreditsRecovered(from, to, amount);

        (bool success,) = to.call{ value: amount }("");
        if (!success) revert TransferFailed();
    }

    receive() external payable { }
}

Settings
{
  "remappings": [
    "forge-std/=lib/forge-std/src/",
    "@openzeppelin/=lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": true
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ActiveEntry","type":"error"},{"inputs":[],"name":"AlreadyMatched","type":"error"},{"inputs":[],"name":"BadCommit","type":"error"},{"inputs":[],"name":"InactiveEntry","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidWeapon","type":"error"},{"inputs":[],"name":"LoserAlreadyRevealed","type":"error"},{"inputs":[],"name":"NoCredits","type":"error"},{"inputs":[],"name":"NotAfterCommit","type":"error"},{"inputs":[],"name":"NotMatched","type":"error"},{"inputs":[],"name":"NotPastDeadline","type":"error"},{"inputs":[],"name":"OpponentRequired","type":"error"},{"inputs":[],"name":"PastDeadline","type":"error"},{"inputs":[],"name":"RecoveryTooEarly","type":"error"},{"inputs":[],"name":"ReentrancyGuard","type":"error"},{"inputs":[],"name":"TierInvalid","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"ValueMismatch","type":"error"},{"inputs":[],"name":"WagerMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Credited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CreditsRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint96","name":"wager","type":"uint96"},{"indexed":false,"internalType":"bytes32","name":"commitHash","type":"bytes32"}],"name":"Entered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"protocol","type":"address"},{"indexed":false,"internalType":"address","name":"seasonCurrent","type":"address"},{"indexed":false,"internalType":"address","name":"seasonNext","type":"address"}],"name":"FeeRecipientsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"winner","type":"address"},{"indexed":true,"internalType":"address","name":"loser","type":"address"}],"name":"Forfeited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"address","name":"opponent","type":"address"}],"name":"IndividualReveal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"}],"name":"Left","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"a","type":"address"},{"indexed":true,"internalType":"address","name":"b","type":"address"},{"indexed":false,"internalType":"uint64","name":"matchBlock","type":"uint64"}],"name":"Matched","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousMatcher","type":"address"},{"indexed":true,"internalType":"address","name":"newMatcher","type":"address"}],"name":"MatcherSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"a","type":"address"},{"indexed":true,"internalType":"address","name":"b","type":"address"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"bool","name":"gunA","type":"bool"},{"indexed":false,"internalType":"bool","name":"gunB","type":"bool"},{"indexed":false,"internalType":"bool","name":"tiebreak","type":"bool"}],"name":"Resolved","type":"event"},{"inputs":[],"name":"CREDIT_RECOVERY_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEAL_DEADLINE_BLOCKS","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"credits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"tier","type":"uint8"},{"internalType":"bytes32","name":"commitHash","type":"bytes32"}],"name":"enterQueue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feeProtocol","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSeasonCurrent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSeasonNext","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"winner","type":"address"},{"internalType":"address","name":"loser","type":"address"},{"internalType":"enum Arena.WeaponType[3]","name":"winnerWeapons","type":"uint8[3]"},{"internalType":"bytes32","name":"winnerSalt","type":"bytes32"}],"name":"forfeitUnrevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastCreditedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leaveQueue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"address","name":"b","type":"address"}],"name":"matchPlayers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"matcher","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"queue","outputs":[{"internalType":"uint96","name":"wager","type":"uint96"},{"internalType":"bytes32","name":"commitHash","type":"bytes32"},{"internalType":"uint64","name":"commitBlock","type":"uint64"},{"internalType":"address","name":"opponent","type":"address"},{"internalType":"uint64","name":"matchBlock","type":"uint64"},{"internalType":"bool","name":"revealed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"recoverStaleCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Arena.WeaponType[3]","name":"weapons","type":"uint8[3]"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"revealIndividual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"address","name":"b","type":"address"},{"internalType":"enum Arena.WeaponType[3]","name":"aW","type":"uint8[3]"},{"internalType":"bytes32","name":"aSalt","type":"bytes32"},{"internalType":"enum Arena.WeaponType[3]","name":"bW","type":"uint8[3]"},{"internalType":"bytes32","name":"bSalt","type":"bytes32"}],"name":"revealMatchResult","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"protocol","type":"address"},{"internalType":"address","name":"seasonCurr","type":"address"},{"internalType":"address","name":"seasonNext","type":"address"}],"name":"setFeeRecipients","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMatcher","type":"address"}],"name":"setMatcher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tier","type":"uint8"}],"name":"wagerForTier","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080806040523461007b57600160085560018060a01b03193381600354161760035533816004541617600455338160055416176005553381600654161760065533906007541617600755335f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36118d190816100808239f35b5f80fdfe608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c908163038ee1cb146112d557508063087310d114610d935780630e2a5d7b14610d6b5780630ed4461314610d4d578063166bae0d14610b725780632e2a778c14610b3e5780633a214f8814610a4c5780634e71d92d146109cb578063527eb4bc146109a357806358af0f631461086d57806359c280f8146106d05780636d0331ef146106a85780637b27e2f2146104d95780637e7e66b2146104b15780638465de04146103d05780638da5cb5b146103a8578063963ddbe914610335578063cd96893914610319578063e40b8ddd1461021f578063f2fde38b1461018e578063f3234ff7146101565763fe5ff4681461011a575f61000f565b34610152576020366003190112610152576001600160a01b0361013b611358565b165f526001602052602060405f2054604051908152f35b5f80fd5b34610152576020366003190112610152576001600160a01b03610177611358565b165f526002602052602060405f2054604051908152f35b34610152576020366003190112610152576101a7611358565b600354906001600160a01b03808316913383900361020e57169182156101fc576001600160a01b03191682176003557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b60405163e6c4247b60e01b8152600490fd5b6040516282b42960e81b8152600490fd5b3461015257606036600319011261015257610238611358565b61024061136e565b906001600160a01b03906044358281169190829003610152578260035416330361020e578216908115801561030f575b8015610307575b6101fc5730821480156102fc575b80156102f3575b6101fc577f4beef1cd5b575cf3f1fa23efa219e13b8394ff2a91168c27aec27d3b0b8c292893816060946001600160601b0360a01b9285846005541617600555169182816006541617600655600754161760075560405192835260208301526040820152a1005b5030811461028c565b503083851614610285565b508015610277565b5082841615610270565b34610152575f3660031901126101525760206040516107088152f35b346101525760203660031901126101525761034e611358565b6003546001600160a01b0391908216330361020e5781169081156101fc57600454826001600160601b0360a01b821617600455167fb8318c9ddedc5598fedf2ac65b9976d47bff5df18e1be2a3966f0a44cfedfe395f80a3005b34610152575f366003190112610152576003546040516001600160a01b039091168152602090f35b34610152575f3660031901126101525760016008540361049f576002600855335f525f60205260405f206001600160601b0381541690811561048d576002015460401c6001600160a01b031661047b5761044f90335f525f60205261044960405f2060035f918281558260018201558260028201550155565b3361177c565b337fc97a8bf3a3af557fe56cca51d77eeb41b7c07ea6f2d28390ba9d1841a0bf466d5f80a26001600855005b60405163e4b2139b60e01b8152600490fd5b604051636b18643d60e01b8152600490fd5b6040516345f5ce8b60e11b8152600490fd5b34610152575f366003190112610152576004546040516001600160a01b039091168152602090f35b346101525760c0366003190112610152576104f2611358565b6104fa61136e565b903660a4116101525760016008540361049f5760026008556001600160a01b03918216918181169182841461069657825f525f60205260405f20845f5260405f2092848682600285015460401c161491821592610682575b5050610670576001600160601b039283825416938154169081850361065e576001600160401b03610588816003860154166113ac565b1643111561064c576003015460401c60ff1661063a5761060f936105be60016105c3946105b36114e7565b015460a4358661151a565b6113fb565b90835f525f6020526105e960405f2060035f918281558260018201558260028201550155565b845f5261060a60405f2060035f918281558260018201558260028201550155565b6116f4565b7f8ba67859d9dd6a0f3339ca0fe02b06fa4760f056b20b6bf1599923c3124c14355f80a36001600855005b60405163263ffc4560e11b8152600490fd5b604051630817fa1560e01b8152600490fd5b604051633d912f8960e11b8152600490fd5b604051630955091b60e21b8152600490fd5b600286015460401c16141590508487610552565b604051630bd3c62160e41b8152600490fd5b34610152575f366003190112610152576006546040516001600160a01b039091168152602090f35b6040366003190112610152576106e4611384565b60243560016008540361049f576002600855600360ff83161161085b57335f525f6020526001600160601b03918260405f205416610849576107268391611408565b169182340361083757604051906001600160401b0360c083018181118482101761082357604052848352600360208401938585526107c7604082018443168152606083015f815260808401975f895260a08501975f8952335f525f60205260405f209551166001600160601b031986541617855551600185015585600285019251166001600160401b031983541617825560018060a01b03905116906114b4565b0192511660ff60401b83549251151560401b169168ffffffffffffffffff19161717905560405191825260208201527fcbe4c827b72e4d8dbf711b27843f71faeeece06a131ba83a5f95681b2cb99e6160403392a26001600855005b634e487b7160e01b5f52604160045260245ffd5b60405163dd8e4af760e01b8152600490fd5b604051630a1f18e160e31b8152600490fd5b604051631812c34560e01b8152600490fd5b3461015257604036600319011261015257610886611358565b61088e61136e565b6004546001600160a01b0392908316330361020e5760016008540361049f576002600855828216928082169284841461069657835f525f60205260405f2092855f5260405f20926001600160601b03808654169081158015610998575b61048d578554160361065e57600285019080825460401c161590811591610985575b5061047b57600360209461096f827fe8da39d5ab9af3f2f988c17386b5626d4086d7baa1a92c89c6bfbcb110b884ac986109526001600160401b0343169889976114b4565b01946001600160401b0319958587825416179055600283016114b4565b0191825416179055604051908152a36001600855005b9050600285015460401c1615158861090d565b5080865416156108eb565b34610152575f366003190112610152576005546040516001600160a01b039091168152602090f35b34610152575f3660031901126101525760016008540361049f576002600855335f52600160205260405f20548015610a3a575f808080933382526001602052816040812055335af1610a1b61146b565b5015610a28576001600855005b6040516312171d8360e31b8152600490fd5b604051633eb2179560e01b8152600490fd5b3461015257604036600319011261015257610a65611358565b610a6d61136e565b6003546001600160a01b0392908316330361020e5760016008540361049f57829060026008551691825f52600160205260405f2054928315610a3a57805f52600260205260405f20546301e133808101809111610b2a574210610b18575f9384938493838594855260016020528460408120557fe36732d215d756dcc3917e7c8614b14dd4a8fd5f5a0f71f2959089b529bf285c602060405193868552851693a35af1610a1b61146b565b604051631bf8599f60e01b8152600490fd5b634e487b7160e01b5f52601160045260245ffd5b34610152576020366003190112610152576020610b61610b5c611384565b611408565b6001600160601b0360405191168152f35b346101525760803660031901126101525736606411610152576001806008540361049f576002906002600855335f525f60205260405f209160018060a01b03600284015460401c16928315610670576001600160601b038154161561048d57600390818101938454936001600160401b0380861681610bf082611394565b16431115610d3b57610c01906113ac565b164311610d29575f5b848110610cf65750505060010154906004359080821015610152576024358181101561015257604435918210156101525760405191602083019360ff60f81b9283809260f81b16865260f81b16602184015260f81b16602282015260643560238201526001600160601b03193360601b1660438201523060601b605782015246606b820152606b8152610c9c816113c5565b51902003610ce45768ff00000000000000001916600160401b179055337fc72ac7feacb06f1e8a6b6905a3e601f8469e398b4d459aab1a219c407e7b77a75f80a36001600855005b60405163016df56960e11b8152600490fd5b8060051b60040135858110156101525760ff83911611610d17578201610c0a565b604051632165e62d60e21b8152600490fd5b6040516381efbd8d60e01b8152600490fd5b60405163de6ab06f60e01b8152600490fd5b34610152575f3660031901126101525760206040516301e133808152f35b34610152575f366003190112610152576007546040516001600160a01b039091168152602090f35b346101525761014036600319011261015257610dad611358565b610db561136e565b3660a41161015257610124903682116101525760016008540361049f5760026008556001600160a01b0383811690821614610696576001600160a01b038381165f908152602081905260408082208484168084529282902060028201549196909490939190921c909116148015906112b7575b610670576001600160601b038454166001600160601b038354160361065e5760038401546001600160401b03610e5f818316611394565b16431115610d3b576001600160401b03610e7a8183166113ac565b164311610d2957610e896114e7565b5f5b600381106112935750610ea5600186015460a4358861151a565b600183015460c43560038110156101525760e435600381101561015257610104359060038210156101525760405191602083019360ff60f81b9283809260f81b16865260f81b16602184015260f81b166022820152843560238201526001600160601b03198760601b1660438201523060601b605782015246606b820152606b8152610f30816113c5565b51902003610ce457600160401b60ff60401b19908082841617600388015560038501918254161790556001600160401b03610f6c818316611394565b164090811580611267575b61121c575b506001600160a01b03848116908716109081156112155786915b1561120e5784925b6001600160a01b03838116908916148015611203576001880154915b81156111f8576001870154905b82156111f05760a435925b156111e65735925b6040519660208801966001600160601b03199060601b1687526001600160601b03199060601b16603488015260488701526068860152608885015260a884015260c883015260c882526101008201908282106001600160401b03831117610823576110c39261106a92604052519020926001600160601b038061105e86888b6115aa565b975416915416906113fb565b6001600160a01b0386165f9081526020819052604081208181556001810182905560028101829055600301556001600160a01b0384165f90815260408120818155600181018290556002810182905560030155846116f4565b6064806040516020810190848252604160f81b6040820152602181526110e8816113e0565b51902006159160405160208101918252602160f91b60408201526021815261110f816113e0565b5190200615811591826111dd575b8261117f575b604080516001600160a01b0396871681526020810192909252810191909152901515606082015290821692909116907f28c65b95915e62abf3e1d37d801dbf82a282cf3197e93212b28cf68d4033010e90608090a36001600855005b91505f805b6003811061119657505f0b1591611123565b908160051b80604401359060038210156101525760c401356003811015610152576111c0916117fa565b5f0b905f0b01607f198112607f821317610b2a5790600101611184565b8115925061111d565b5060a43592610fda565b803592610fd2565b600189015490610fc7565b600186015491610fba565b8692610f9e565b8491610f96565b9050604051906001600160401b0360c01b9060c01b166020820152600881528060408101106001600160401b0360408301111761082357604081016040526020815191012086610f7c565b506001600160401b036101018183160111610b2a576001600160401b0361010181831601164311610f77565b8060051b60c4013560038110156101525760ff6002911611610d1757600101610e8b565b50600282015460401c6001600160a01b039081169086161415610e28565b346101525760203660031901126101525760c09060ff6001600160a01b03806112fc611358565b165f525f60205260405f206001600160601b0381541691600182015460028301549060036001600160401b039401549487526020870152828116604087015260401c1660608501528116608084015260401c16151560a0820152f35b600435906001600160a01b038216820361015257565b602435906001600160a01b038216820361015257565b6004359060ff8216820361015257565b9060016001600160401b0380931601918211610b2a57565b906107086001600160401b0380931601918211610b2a57565b60a081019081106001600160401b0382111761082357604052565b606081019081106001600160401b0382111761082357604052565b91908201809211610b2a57565b60ff16801561145f576001811461145357600281146114465760031461143a57604051631812c34560e01b8152600490fd5b6722b1c8c1227a000090565b506706f05b59d3b2000090565b5066b1a2bc2ec5000090565b506611c37937e0800090565b3d156114af576001600160401b03903d8281116108235760405192601f8201601f19908116603f01168401908111848210176108235760405282523d5f602084013e565b606090565b805468010000000000000000600160e01b03191660409290921b68010000000000000000600160e01b0316919091179055565b5f5b600380821015611516578160051b60440135908110156101525760ff6002911611610d17576001016114e9565b5050565b9060443591600383101561015257606435916003831015610152576084359260038410156101525760405193602085019560ff60f81b9283809260f81b16885260f81b16602186015260f81b16602284015260238301526001600160601b03199060601b1660438201523060601b605782015246606b820152606b81526115a0816113c5565b51902003610ce457565b909192604091606483516020810190878252604160f81b86820152602181526115d2816113e0565b5190200615606484516020810190888252602160f91b87820152602181526115f9816113e0565b51902006159080806116df575b6116d5571590816116cd575b506116c6575f93845b60038087101561166c578660051b90816044013591818310156101525760c40135908110156101525761164d916117fa565b5f0b905f0b01607f198112607f821317610b2a5760019095019461161b565b5090939194509491945f0b5f81136116bf575f136116b8579081601560fa1b600193519160208301938452820152602181526116a7816113e0565b519020166116b3575090565b905090565b5050905090565b5050505090565b5092505090565b90505f611612565b5050925092505090565b508115611606565b91908203918211610b2a57565b60c882029082159183810460c814831715610b2a576127108091049260648502908582046064141715610b2a576117448461173f61177a976117759561173f950494859384926116e7565b6116e7565b60055490946001600160a01b039161175e9190831661177c565b61176c82826006541661177c565b6007541661177c565b61177c565b565b8115611516575f8080808585620186a0f161179561146b565b501561179f575050565b60207f9c9e0cdb1670e88302408e5b941dc636f63a3293204694bb68910fcf3d9305f39160018060a01b031692835f526001825260405f206117e28282546113fb565b9055835f52600282524260405f2055604051908152a2565b906003811015918261185b57600381101561185b5781811461189457801580611887575b61186f57600281148381611877575b5061186f57600114918261184c575b5050611847575f1990565b600190565b90915061185b57155f8061183c565b634e487b7160e01b5f52602160045260245ffd5b505050600190565b905061185b57600182148361182d565b505f92506002821461181e565b5050505f9056fea26469706673582212204ac93a439c070ec35494209b8180f0f4af0bd759309464f6448656b43501c67764736f6c63430008180033

Deployed Bytecode

0x608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c908163038ee1cb146112d557508063087310d114610d935780630e2a5d7b14610d6b5780630ed4461314610d4d578063166bae0d14610b725780632e2a778c14610b3e5780633a214f8814610a4c5780634e71d92d146109cb578063527eb4bc146109a357806358af0f631461086d57806359c280f8146106d05780636d0331ef146106a85780637b27e2f2146104d95780637e7e66b2146104b15780638465de04146103d05780638da5cb5b146103a8578063963ddbe914610335578063cd96893914610319578063e40b8ddd1461021f578063f2fde38b1461018e578063f3234ff7146101565763fe5ff4681461011a575f61000f565b34610152576020366003190112610152576001600160a01b0361013b611358565b165f526001602052602060405f2054604051908152f35b5f80fd5b34610152576020366003190112610152576001600160a01b03610177611358565b165f526002602052602060405f2054604051908152f35b34610152576020366003190112610152576101a7611358565b600354906001600160a01b03808316913383900361020e57169182156101fc576001600160a01b03191682176003557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b60405163e6c4247b60e01b8152600490fd5b6040516282b42960e81b8152600490fd5b3461015257606036600319011261015257610238611358565b61024061136e565b906001600160a01b03906044358281169190829003610152578260035416330361020e578216908115801561030f575b8015610307575b6101fc5730821480156102fc575b80156102f3575b6101fc577f4beef1cd5b575cf3f1fa23efa219e13b8394ff2a91168c27aec27d3b0b8c292893816060946001600160601b0360a01b9285846005541617600555169182816006541617600655600754161760075560405192835260208301526040820152a1005b5030811461028c565b503083851614610285565b508015610277565b5082841615610270565b34610152575f3660031901126101525760206040516107088152f35b346101525760203660031901126101525761034e611358565b6003546001600160a01b0391908216330361020e5781169081156101fc57600454826001600160601b0360a01b821617600455167fb8318c9ddedc5598fedf2ac65b9976d47bff5df18e1be2a3966f0a44cfedfe395f80a3005b34610152575f366003190112610152576003546040516001600160a01b039091168152602090f35b34610152575f3660031901126101525760016008540361049f576002600855335f525f60205260405f206001600160601b0381541690811561048d576002015460401c6001600160a01b031661047b5761044f90335f525f60205261044960405f2060035f918281558260018201558260028201550155565b3361177c565b337fc97a8bf3a3af557fe56cca51d77eeb41b7c07ea6f2d28390ba9d1841a0bf466d5f80a26001600855005b60405163e4b2139b60e01b8152600490fd5b604051636b18643d60e01b8152600490fd5b6040516345f5ce8b60e11b8152600490fd5b34610152575f366003190112610152576004546040516001600160a01b039091168152602090f35b346101525760c0366003190112610152576104f2611358565b6104fa61136e565b903660a4116101525760016008540361049f5760026008556001600160a01b03918216918181169182841461069657825f525f60205260405f20845f5260405f2092848682600285015460401c161491821592610682575b5050610670576001600160601b039283825416938154169081850361065e576001600160401b03610588816003860154166113ac565b1643111561064c576003015460401c60ff1661063a5761060f936105be60016105c3946105b36114e7565b015460a4358661151a565b6113fb565b90835f525f6020526105e960405f2060035f918281558260018201558260028201550155565b845f5261060a60405f2060035f918281558260018201558260028201550155565b6116f4565b7f8ba67859d9dd6a0f3339ca0fe02b06fa4760f056b20b6bf1599923c3124c14355f80a36001600855005b60405163263ffc4560e11b8152600490fd5b604051630817fa1560e01b8152600490fd5b604051633d912f8960e11b8152600490fd5b604051630955091b60e21b8152600490fd5b600286015460401c16141590508487610552565b604051630bd3c62160e41b8152600490fd5b34610152575f366003190112610152576006546040516001600160a01b039091168152602090f35b6040366003190112610152576106e4611384565b60243560016008540361049f576002600855600360ff83161161085b57335f525f6020526001600160601b03918260405f205416610849576107268391611408565b169182340361083757604051906001600160401b0360c083018181118482101761082357604052848352600360208401938585526107c7604082018443168152606083015f815260808401975f895260a08501975f8952335f525f60205260405f209551166001600160601b031986541617855551600185015585600285019251166001600160401b031983541617825560018060a01b03905116906114b4565b0192511660ff60401b83549251151560401b169168ffffffffffffffffff19161717905560405191825260208201527fcbe4c827b72e4d8dbf711b27843f71faeeece06a131ba83a5f95681b2cb99e6160403392a26001600855005b634e487b7160e01b5f52604160045260245ffd5b60405163dd8e4af760e01b8152600490fd5b604051630a1f18e160e31b8152600490fd5b604051631812c34560e01b8152600490fd5b3461015257604036600319011261015257610886611358565b61088e61136e565b6004546001600160a01b0392908316330361020e5760016008540361049f576002600855828216928082169284841461069657835f525f60205260405f2092855f5260405f20926001600160601b03808654169081158015610998575b61048d578554160361065e57600285019080825460401c161590811591610985575b5061047b57600360209461096f827fe8da39d5ab9af3f2f988c17386b5626d4086d7baa1a92c89c6bfbcb110b884ac986109526001600160401b0343169889976114b4565b01946001600160401b0319958587825416179055600283016114b4565b0191825416179055604051908152a36001600855005b9050600285015460401c1615158861090d565b5080865416156108eb565b34610152575f366003190112610152576005546040516001600160a01b039091168152602090f35b34610152575f3660031901126101525760016008540361049f576002600855335f52600160205260405f20548015610a3a575f808080933382526001602052816040812055335af1610a1b61146b565b5015610a28576001600855005b6040516312171d8360e31b8152600490fd5b604051633eb2179560e01b8152600490fd5b3461015257604036600319011261015257610a65611358565b610a6d61136e565b6003546001600160a01b0392908316330361020e5760016008540361049f57829060026008551691825f52600160205260405f2054928315610a3a57805f52600260205260405f20546301e133808101809111610b2a574210610b18575f9384938493838594855260016020528460408120557fe36732d215d756dcc3917e7c8614b14dd4a8fd5f5a0f71f2959089b529bf285c602060405193868552851693a35af1610a1b61146b565b604051631bf8599f60e01b8152600490fd5b634e487b7160e01b5f52601160045260245ffd5b34610152576020366003190112610152576020610b61610b5c611384565b611408565b6001600160601b0360405191168152f35b346101525760803660031901126101525736606411610152576001806008540361049f576002906002600855335f525f60205260405f209160018060a01b03600284015460401c16928315610670576001600160601b038154161561048d57600390818101938454936001600160401b0380861681610bf082611394565b16431115610d3b57610c01906113ac565b164311610d29575f5b848110610cf65750505060010154906004359080821015610152576024358181101561015257604435918210156101525760405191602083019360ff60f81b9283809260f81b16865260f81b16602184015260f81b16602282015260643560238201526001600160601b03193360601b1660438201523060601b605782015246606b820152606b8152610c9c816113c5565b51902003610ce45768ff00000000000000001916600160401b179055337fc72ac7feacb06f1e8a6b6905a3e601f8469e398b4d459aab1a219c407e7b77a75f80a36001600855005b60405163016df56960e11b8152600490fd5b8060051b60040135858110156101525760ff83911611610d17578201610c0a565b604051632165e62d60e21b8152600490fd5b6040516381efbd8d60e01b8152600490fd5b60405163de6ab06f60e01b8152600490fd5b34610152575f3660031901126101525760206040516301e133808152f35b34610152575f366003190112610152576007546040516001600160a01b039091168152602090f35b346101525761014036600319011261015257610dad611358565b610db561136e565b3660a41161015257610124903682116101525760016008540361049f5760026008556001600160a01b0383811690821614610696576001600160a01b038381165f908152602081905260408082208484168084529282902060028201549196909490939190921c909116148015906112b7575b610670576001600160601b038454166001600160601b038354160361065e5760038401546001600160401b03610e5f818316611394565b16431115610d3b576001600160401b03610e7a8183166113ac565b164311610d2957610e896114e7565b5f5b600381106112935750610ea5600186015460a4358861151a565b600183015460c43560038110156101525760e435600381101561015257610104359060038210156101525760405191602083019360ff60f81b9283809260f81b16865260f81b16602184015260f81b166022820152843560238201526001600160601b03198760601b1660438201523060601b605782015246606b820152606b8152610f30816113c5565b51902003610ce457600160401b60ff60401b19908082841617600388015560038501918254161790556001600160401b03610f6c818316611394565b164090811580611267575b61121c575b506001600160a01b03848116908716109081156112155786915b1561120e5784925b6001600160a01b03838116908916148015611203576001880154915b81156111f8576001870154905b82156111f05760a435925b156111e65735925b6040519660208801966001600160601b03199060601b1687526001600160601b03199060601b16603488015260488701526068860152608885015260a884015260c883015260c882526101008201908282106001600160401b03831117610823576110c39261106a92604052519020926001600160601b038061105e86888b6115aa565b975416915416906113fb565b6001600160a01b0386165f9081526020819052604081208181556001810182905560028101829055600301556001600160a01b0384165f90815260408120818155600181018290556002810182905560030155846116f4565b6064806040516020810190848252604160f81b6040820152602181526110e8816113e0565b51902006159160405160208101918252602160f91b60408201526021815261110f816113e0565b5190200615811591826111dd575b8261117f575b604080516001600160a01b0396871681526020810192909252810191909152901515606082015290821692909116907f28c65b95915e62abf3e1d37d801dbf82a282cf3197e93212b28cf68d4033010e90608090a36001600855005b91505f805b6003811061119657505f0b1591611123565b908160051b80604401359060038210156101525760c401356003811015610152576111c0916117fa565b5f0b905f0b01607f198112607f821317610b2a5790600101611184565b8115925061111d565b5060a43592610fda565b803592610fd2565b600189015490610fc7565b600186015491610fba565b8692610f9e565b8491610f96565b9050604051906001600160401b0360c01b9060c01b166020820152600881528060408101106001600160401b0360408301111761082357604081016040526020815191012086610f7c565b506001600160401b036101018183160111610b2a576001600160401b0361010181831601164311610f77565b8060051b60c4013560038110156101525760ff6002911611610d1757600101610e8b565b50600282015460401c6001600160a01b039081169086161415610e28565b346101525760203660031901126101525760c09060ff6001600160a01b03806112fc611358565b165f525f60205260405f206001600160601b0381541691600182015460028301549060036001600160401b039401549487526020870152828116604087015260401c1660608501528116608084015260401c16151560a0820152f35b600435906001600160a01b038216820361015257565b602435906001600160a01b038216820361015257565b6004359060ff8216820361015257565b9060016001600160401b0380931601918211610b2a57565b906107086001600160401b0380931601918211610b2a57565b60a081019081106001600160401b0382111761082357604052565b606081019081106001600160401b0382111761082357604052565b91908201809211610b2a57565b60ff16801561145f576001811461145357600281146114465760031461143a57604051631812c34560e01b8152600490fd5b6722b1c8c1227a000090565b506706f05b59d3b2000090565b5066b1a2bc2ec5000090565b506611c37937e0800090565b3d156114af576001600160401b03903d8281116108235760405192601f8201601f19908116603f01168401908111848210176108235760405282523d5f602084013e565b606090565b805468010000000000000000600160e01b03191660409290921b68010000000000000000600160e01b0316919091179055565b5f5b600380821015611516578160051b60440135908110156101525760ff6002911611610d17576001016114e9565b5050565b9060443591600383101561015257606435916003831015610152576084359260038410156101525760405193602085019560ff60f81b9283809260f81b16885260f81b16602186015260f81b16602284015260238301526001600160601b03199060601b1660438201523060601b605782015246606b820152606b81526115a0816113c5565b51902003610ce457565b909192604091606483516020810190878252604160f81b86820152602181526115d2816113e0565b5190200615606484516020810190888252602160f91b87820152602181526115f9816113e0565b51902006159080806116df575b6116d5571590816116cd575b506116c6575f93845b60038087101561166c578660051b90816044013591818310156101525760c40135908110156101525761164d916117fa565b5f0b905f0b01607f198112607f821317610b2a5760019095019461161b565b5090939194509491945f0b5f81136116bf575f136116b8579081601560fa1b600193519160208301938452820152602181526116a7816113e0565b519020166116b3575090565b905090565b5050905090565b5050505090565b5092505090565b90505f611612565b5050925092505090565b508115611606565b91908203918211610b2a57565b60c882029082159183810460c814831715610b2a576127108091049260648502908582046064141715610b2a576117448461173f61177a976117759561173f950494859384926116e7565b6116e7565b60055490946001600160a01b039161175e9190831661177c565b61176c82826006541661177c565b6007541661177c565b61177c565b565b8115611516575f8080808585620186a0f161179561146b565b501561179f575050565b60207f9c9e0cdb1670e88302408e5b941dc636f63a3293204694bb68910fcf3d9305f39160018060a01b031692835f526001825260405f206117e28282546113fb565b9055835f52600282524260405f2055604051908152a2565b906003811015918261185b57600381101561185b5781811461189457801580611887575b61186f57600281148381611877575b5061186f57600114918261184c575b5050611847575f1990565b600190565b90915061185b57155f8061183c565b634e487b7160e01b5f52602160045260245ffd5b505050600190565b905061185b57600182148361182d565b505f92506002821461181e565b5050505f9056fea26469706673582212204ac93a439c070ec35494209b8180f0f4af0bd759309464f6448656b43501c67764736f6c63430008180033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.