CELO Price: $0.11 (-0.96%)
Gas: 25 GWei

Contract

0x570Bc1d827B2d05DF4a4f79Fc1be1Dde4E499Efb

Overview

CELO Balance

Celo Mainnet LogoCelo Mainnet LogoCelo Mainnet Logo0 CELO

CELO Value

$0.00

More Info

Private Name Tags

Multichain Info

Transaction Hash
Block
From
To
Start Game424910282025-08-05 11:03:06178 days ago1754391786IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424910252025-08-05 11:03:03178 days ago1754391783IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424910222025-08-05 11:03:00178 days ago1754391780IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424910192025-08-05 11:02:57178 days ago1754391777IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424910162025-08-05 11:02:54178 days ago1754391774IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424910122025-08-05 11:02:50178 days ago1754391770IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424910082025-08-05 11:02:46178 days ago1754391766IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424910052025-08-05 11:02:43178 days ago1754391763IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424910002025-08-05 11:02:38178 days ago1754391758IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424909962025-08-05 11:02:34178 days ago1754391754IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424907272025-08-05 10:58:05178 days ago1754391485IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424907242025-08-05 10:58:02178 days ago1754391482IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424907202025-08-05 10:57:58178 days ago1754391478IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424907172025-08-05 10:57:55178 days ago1754391475IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424907142025-08-05 10:57:52178 days ago1754391472IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424907112025-08-05 10:57:49178 days ago1754391469IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424907072025-08-05 10:57:45178 days ago1754391465IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424907032025-08-05 10:57:41178 days ago1754391461IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424906992025-08-05 10:57:37178 days ago1754391457IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424906952025-08-05 10:57:33178 days ago1754391453IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424904232025-08-05 10:53:01178 days ago1754391181IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424904202025-08-05 10:52:58178 days ago1754391178IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424904172025-08-05 10:52:55178 days ago1754391175IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424904132025-08-05 10:52:51178 days ago1754391171IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
Start Game424904092025-08-05 10:52:47178 days ago1754391167IN
0x570Bc1d8...e4E499Efb
0 CELO0.00133425.001
View all transactions

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xd23AEA7C...0d1c8dC09
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
MemoryGame

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
cancun EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract MemoryGame {
    struct Player {
        uint8 currentRound;
        uint8 livesRemaining;
        uint256 score;
        uint256 bestRound;
        uint256 totalGamesPlayed;
        bool isActive;
        uint256 roundStartTime;
    }

    struct GameSession {
        uint8[] currentPattern;
        bool isComplete;
        uint256 startTime;
    }

    mapping(address => Player) public players;
    mapping(address => GameSession) public gameSessions;

    // Leaderboard
    address[] public leaderboard;
    mapping(address => uint256) public leaderboardIndex;

    uint8 public constant MAX_ROUNDS = 99;
    uint8 public constant STARTING_LIVES = 3;
    uint8 public constant STARTING_PATTERN_LENGTH = 3;
    uint8 public constant NUM_COLORS = 4; // 0, 1, 2, 3 representing different colors
    uint256 public constant TIME_BONUS_THRESHOLD = 10; // seconds
    uint256 public constant POINTS_PER_ROUND = 100;
    uint256 public constant TIME_BONUS_MULTIPLIER = 2;

    event GameStarted(address indexed player, uint8[] pattern);
    event PatternGuessed(address indexed player, uint8[] guess, bool correct);
    event RoundCompleted(address indexed player, uint8 round, uint256 score);
    event GameCompleted(address indexed player, uint256 finalScore, bool won);
    event LifeLost(address indexed player, uint8 livesRemaining);
    event LeaderboardUpdated(address indexed player, uint256 bestRound);

    error GameNotActive();
    error GameAlreadyActive();
    error InvalidPatternLength();
    error InvalidColorValue();
    error NoLivesRemaining();
    error PatternLengthMismatch();

    function startGame() external {
        Player storage player = players[msg.sender];

        player.currentRound = 1;
        player.livesRemaining = STARTING_LIVES;
        player.score = 0;
        player.isActive = true;
        player.totalGamesPlayed++;

        _generatePattern();

        emit GameStarted(msg.sender, gameSessions[msg.sender].currentPattern);
    }

    function submitGuess(uint8[] calldata guess) external {
        Player storage player = players[msg.sender];
        GameSession storage session = gameSessions[msg.sender];

        uint8 expectedLength = STARTING_PATTERN_LENGTH + player.currentRound - 1;
        if (guess.length != expectedLength) revert PatternLengthMismatch();

        // Validate color values
        for (uint256 i = 0; i < guess.length; i++) {
            if (guess[i] >= NUM_COLORS) revert InvalidColorValue();
        }

        bool correct = _checkPattern(guess, session.currentPattern);
        emit PatternGuessed(msg.sender, guess, correct);

        if (correct) {
            _handleCorrectGuess();
        } else {
            _handleIncorrectGuess();
        }
    }

    function _generatePattern() internal {
        Player storage player = players[msg.sender];
        GameSession storage session = gameSessions[msg.sender];

        uint8 patternLength = STARTING_PATTERN_LENGTH + player.currentRound - 1;
        session.currentPattern = new uint8[](patternLength);

        // Generate pseudo-random pattern using block data and player address
        uint256 seed =
            uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, msg.sender, player.currentRound)));

        for (uint8 i = 0; i < patternLength; i++) {
            session.currentPattern[i] = uint8(uint256(keccak256(abi.encodePacked(seed, i))) % NUM_COLORS);
        }

        player.roundStartTime = block.timestamp;
    }

    function _checkPattern(uint8[] calldata guess, uint8[] memory pattern) internal pure returns (bool) {
        if (guess.length != pattern.length) return false;

        for (uint256 i = 0; i < guess.length; i++) {
            if (guess[i] != pattern[i]) return false;
        }
        return true;
    }

    function _handleCorrectGuess() internal {
        Player storage player = players[msg.sender];

        // Calculate score with time bonus
        uint256 roundScore = POINTS_PER_ROUND;
        uint256 timeTaken = block.timestamp - player.roundStartTime;

        if (timeTaken <= TIME_BONUS_THRESHOLD) {
            roundScore *= TIME_BONUS_MULTIPLIER;
        }

        player.score += roundScore;
        emit RoundCompleted(msg.sender, player.currentRound, roundScore);

        if (player.currentRound >= MAX_ROUNDS) {
            _completeGame(true);
        } else {
            player.currentRound++;
            _generatePattern();
            emit GameStarted(msg.sender, gameSessions[msg.sender].currentPattern);
        }
    }

    function _handleIncorrectGuess() internal {
        Player storage player = players[msg.sender];

        player.livesRemaining--;
        emit LifeLost(msg.sender, player.livesRemaining);

        if (player.livesRemaining == 0) {
            _completeGame(false);
        }
        // If lives remain, player can try the same pattern again
    }

    function _completeGame(bool won) internal {
        Player storage player = players[msg.sender];

        if (player.currentRound > player.bestRound) {
            player.bestRound = player.currentRound;
            _updateLeaderboard();
        }

        player.isActive = false;
        gameSessions[msg.sender].isComplete = true;

        emit GameCompleted(msg.sender, player.score, won);
    }

    function _updateLeaderboard() internal {
        address player = msg.sender;

        // If player not in leaderboard, add them
        if (leaderboardIndex[player] == 0 && (leaderboard.length == 0 || leaderboard[0] != player)) {
            leaderboard.push(player);
            leaderboardIndex[player] = leaderboard.length;
        }

        // Bubble sort to maintain leaderboard order (top scores first)
        uint256 currentIndex = leaderboardIndex[player] - 1;

        while (
            currentIndex > 0
                && players[leaderboard[currentIndex]].bestRound > players[leaderboard[currentIndex - 1]].bestRound
        ) {
            // Swap positions
            address temp = leaderboard[currentIndex];
            leaderboard[currentIndex] = leaderboard[currentIndex - 1];
            leaderboard[currentIndex - 1] = temp;

            // Update indices
            leaderboardIndex[leaderboard[currentIndex]] = currentIndex + 1;
            leaderboardIndex[leaderboard[currentIndex - 1]] = currentIndex;

            currentIndex--;
        }

        emit LeaderboardUpdated(player, players[player].bestRound);
    }

    // View functions
    function getCurrentPattern() external view returns (uint8[] memory) {
        return gameSessions[msg.sender].currentPattern;
    }

    function getPlayerStats(address playerAddr)
        external
        view
        returns (
            uint8 currentRound,
            uint8 livesRemaining,
            uint256 score,
            uint256 bestRound,
            uint256 totalGamesPlayed,
            bool isActive
        )
    {
        Player memory player = players[playerAddr];
        return (
            player.currentRound,
            player.livesRemaining,
            player.score,
            player.bestRound,
            player.totalGamesPlayed,
            player.isActive
        );
    }

    function getLeaderboard() external view returns (address[] memory, uint256[] memory) {
        uint256[] memory scores = new uint256[](leaderboard.length);
        for (uint256 i = 0; i < leaderboard.length; i++) {
            scores[i] = players[leaderboard[i]].bestRound;
        }
        return (leaderboard, scores);
    }

    function getTopPlayers(uint256 count) external view returns (address[] memory, uint256[] memory) {
        uint256 returnCount = count > leaderboard.length ? leaderboard.length : count;
        address[] memory topPlayers = new address[](returnCount);
        uint256[] memory topScores = new uint256[](returnCount);

        for (uint256 i = 0; i < returnCount; i++) {
            topPlayers[i] = leaderboard[i];
            topScores[i] = players[leaderboard[i]].bestRound;
        }

        return (topPlayers, topScores);
    }

    function forfeitGame() external {
        _completeGame(false);
    }
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts/=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,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"name":"GameAlreadyActive","type":"error"},{"inputs":[],"name":"GameNotActive","type":"error"},{"inputs":[],"name":"InvalidColorValue","type":"error"},{"inputs":[],"name":"InvalidPatternLength","type":"error"},{"inputs":[],"name":"NoLivesRemaining","type":"error"},{"inputs":[],"name":"PatternLengthMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"finalScore","type":"uint256"},{"indexed":false,"internalType":"bool","name":"won","type":"bool"}],"name":"GameCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8[]","name":"pattern","type":"uint8[]"}],"name":"GameStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"bestRound","type":"uint256"}],"name":"LeaderboardUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8","name":"livesRemaining","type":"uint8"}],"name":"LifeLost","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8[]","name":"guess","type":"uint8[]"},{"indexed":false,"internalType":"bool","name":"correct","type":"bool"}],"name":"PatternGuessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8","name":"round","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"score","type":"uint256"}],"name":"RoundCompleted","type":"event"},{"inputs":[],"name":"MAX_ROUNDS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NUM_COLORS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POINTS_PER_ROUND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTING_LIVES","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTING_PATTERN_LENGTH","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_BONUS_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forfeitGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gameSessions","outputs":[{"internalType":"bool","name":"isComplete","type":"bool"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPattern","outputs":[{"internalType":"uint8[]","name":"","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLeaderboard","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"playerAddr","type":"address"}],"name":"getPlayerStats","outputs":[{"internalType":"uint8","name":"currentRound","type":"uint8"},{"internalType":"uint8","name":"livesRemaining","type":"uint8"},{"internalType":"uint256","name":"score","type":"uint256"},{"internalType":"uint256","name":"bestRound","type":"uint256"},{"internalType":"uint256","name":"totalGamesPlayed","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getTopPlayers","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"leaderboard","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"leaderboardIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"players","outputs":[{"internalType":"uint8","name":"currentRound","type":"uint8"},{"internalType":"uint8","name":"livesRemaining","type":"uint8"},{"internalType":"uint256","name":"score","type":"uint256"},{"internalType":"uint256","name":"bestRound","type":"uint256"},{"internalType":"uint256","name":"totalGamesPlayed","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint256","name":"roundStartTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"guess","type":"uint8[]"}],"name":"submitGuess","outputs":[],"stateMutability":"nonpayable","type":"function"}]

0x6080806040523460155761187b908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816326a0308f14610bd65750806331c79f1114610bbb57806334bf52201461016b5780633b55555414610b7f57806341d3558214610b645780634fd66eae14610aa057806363f6f2d0146105395780636662a779146104ec578063693ccff9146104705780636d763a6e146103945780637249db4d146103795780637780ea1a1461035f578063951bd12914610344578063ba3c00671461026d578063bf3683991461022b578063d65ab5f214610170578063dc028bd01461016b5763e2eb41ff146100e2575f80fd5b34610167576020366003190112610167576004356001600160a01b03811690819003610167575f525f60205260e060405f208054906001810154906002810154600382015490600560ff6004850154169301549360ff60405196818116885260081c166020870152604086015260608501526080840152151560a083015260c0820152f35b5f80fd5b610bef565b34610167575f36600319011261016757335f908152602081905260408120805461ffff191661030117815560018082019290925560048101805460ff191690921790915560030180545f1981146102175760010190556101ce6115f4565b335f52600160205260405f207f77314433301d1b8c5eba4c09f7713f65f12b19a56e2e1d16ed26b288911e25a8604051602081528061021233946020830190610d46565b0390a2005b634e487b7160e01b5f52601160045260245ffd5b346101675760203660031901126101675760043560025481101561016757610254602091610c85565b905460405160039290921b1c6001600160a01b03168152f35b34610167576020366003190112610167576002546004358181111561033d57505b610297816112d7565b6102a46040519182610ce3565b818152601f196102b3836112d7565b013660208301376102c3826112ef565b915f5b8181106102e25750506102de60405192839283610c0a565b0390f35b806102ee600192610c85565b838060a01b0391549060031b1c166103068286611321565b5261031081610c85565b838060a01b0391549060031b1c165f525f602052600260405f2001546103368287611321565b52016102c6565b905061028e565b34610167575f36600319011261016757602060405160648152f35b34610167575f3660031901126101675761037761138d565b005b34610167575f36600319011261016757602060405160048152f35b34610167575f366003190112610167576002546103b0816112ef565b905f5b8181106104375750602090604051809281838593520160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace925f5b81811061041557505061040692500382610ce3565b6102de60405192839283610c0a565b84546001600160a01b03168352600194850194869450602090930192016103f1565b80610443600192610c85565b838060a01b0391549060031b1c165f525f602052600260405f2001546104698286611321565b52016103b3565b34610167575f36600319011261016757335f52600160205261049e6104a560405f2060405192838092610d46565b0382610ce3565b6040518091602082016020835281518091526020604084019201905f5b8181106104d0575050500390f35b825160ff168452859450602093840193909201916001016104c2565b34610167576020366003190112610167576004356001600160a01b03811690819003610167575f5260016020526040805f20600260ff600183015416910154825191151582526020820152f35b346101675760203660031901126101675760043567ffffffffffffffff811161016757366023820112156101675780600401359067ffffffffffffffff8211610167576024810190602436918460051b01011161016757335f525f60205260405f20335f52600160205260ff6105bd6105b88260405f20945416610d05565b610d16565b168303610a91575f5b838110610a5c575061049e6105e46105eb9260405192838092610d46565b8383611335565b9160405190806040830160408452526060820192905f905b808210610a37575050507f1012be3ef0102674ab9858a4ef5edaff92f163131ea9f0612dc101db7894f1e29083151560208201528033930390a2156109c457335f525f60205260405f2060646005820154420342811161021757600a10156109bc575b60018201805490828201809211610217575560ff825416906040519082825260208201527f169624da02c064c9ac6a7550c8c3dc17a752e1aa0901d973ce7376356ab7413560403392a26063811061099c575050335f525f60205260405f2060ff8154166002820180548211610736575b50508060046001920160ff198154169055335f52816020528160405f20018260ff198254161790550154604051908152600160208201527f77933355c8068f8af7dd0b53182eebd0e8c7610d373d4cb7590dd5f8819c67bc60403392a2005b55335f52600360205260405f2054158061096f575b610906575b335f52600360205260405f20545f198101908111610217575b80158015806108a8575b156108615761078182610c85565b90545f198401939160031b1c6001600160a01b0316818411610217576107f5906107ec6107ad86610c85565b905460039190911b1c6001600160a01b03166107c885610c85565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b6107c885610c85565b600181018082116102175761080982610c85565b60018060a01b0391549060031b1c165f52600360205260405f205561082d83610c85565b60018060a01b0391549060031b1c165f52600360205260405f20551561076957634e487b7160e01b5f52601160045260245ffd5b5050600190335f525f602052600260405f2001546040519081527f24e225604268d6416871b32db1be8e49f497caf8360393b31d71a34a4ce2669360203392a290826106d7565b506108b282610c85565b60018060a01b0391549060031b1c165f525f602052600260405f2001545f198301838111610217576108e390610c85565b60018060a01b0391549060031b1c165f525f602052600260405f20015410610773565b600254600160401b81101561095b576109288160016109469301600255610c85565b81546001600160a01b0360039290921b91821b19163390911b179055565b600254335f52600360205260405f2055610750565b634e487b7160e01b5f52604160045260245ffd5b50600254158061074b5750610982610cb1565b905460039190911b1c6001600160a01b031633141561074b565b60ff811461021757600160ff91011660ff198254161790556101ce6115f4565b5060c8610666565b335f525f60205260405f2060ff815460081c169081156102175760ff9161ff008254915f190160081b169061ff0019161781555460081c166040518181527fd948b7282d54ef44bf4fb0b1d38f0626adb9b838dd1bdc33c53a117a7f03b53060203392a215610a2f57005b61037761138d565b90919384359060ff821680920361016757602081600193829352019501920190610603565b600460ff610a73610a6e848888610d28565b610d38565b161015610a82576001016105c6565b6387796d3960e01b5f5260045ffd5b63f244a36d60e01b5f5260045ffd5b34610167576020366003190112610167576004356001600160a01b03811690819003610167575f525f60205260405f2060405160e081019181831067ffffffffffffffff84111761095b5760c09260405280549160ff8084169384835260081c16806020830152600183015480604084015260028401549182606085015260038501549384608082015287600560ff6004890154161515978860a08501520154910152604051958652602086015260408501526060840152608083015260a0820152f35b34610167575f36600319011261016757602060405160638152f35b34610167576020366003190112610167576004356001600160a01b03811690819003610167575f526003602052602060405f2054604051908152f35b34610167575f36600319011261016757602060405160028152f35b34610167575f3660031901126101675780600a60209252f35b34610167575f36600319011261016757602060405160038152f35b604081016040825282518091526020606083019301905f5b818110610c66575050506020818303910152602080835192838152019201905f5b818110610c505750505090565b8251845260209384019390920191600101610c43565b82516001600160a01b0316855260209485019490920191600101610c22565b600254811015610c9d5760025f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b60025415610c9d5760025f9081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace91565b90601f8019910116810190811067ffffffffffffffff82111761095b57604052565b60ff166003019060ff821161021757565b60ff5f199116019060ff821161021757565b9190811015610c9d5760051b0190565b3560ff811681036101675790565b80548083525f91825260208083209301925b81601f840110611135575491818110611121575b81811061110a575b8181106110f3575b8181106110dc575b8181106110c6575b8181106110af575b818110611098575b818110611081575b81811061106a575b818110611053575b81811061103c575b818110611025575b81811061100e575b818110610ff7575b818110610fe0575b818110610fc9575b818110610fb2575b818110610f9b575b818110610f84575b818110610f6d575b818110610f56575b818110610f3f575b818110610f28575b818110610f11575b818110610efa575b818110610ee3575b818110610ecc575b818110610eb5575b818110610e9e575b818110610e87575b818110610e70575b10610e65575090565b60f81c815260200190565b92602060019160ff8560f01c168152019301610e5c565b92602060019160ff8560e81c168152019301610e54565b92602060019160ff8560e01c168152019301610e4c565b92602060019160ff8560d81c168152019301610e44565b92602060019160ff8560d01c168152019301610e3c565b92602060019160ff8560c81c168152019301610e34565b92602060019160ff8560c01c168152019301610e2c565b92602060019160ff8560b81c168152019301610e24565b92602060019160ff8560b01c168152019301610e1c565b92602060019160ff8560a81c168152019301610e14565b92602060019160ff8560a01c168152019301610e0c565b92602060019160ff8560981c168152019301610e04565b92602060019160ff8560901c168152019301610dfc565b92602060019160ff8560881c168152019301610df4565b92602060019160ff8560801c168152019301610dec565b92602060019160ff8560781c168152019301610de4565b92602060019160ff8560701c168152019301610ddc565b92602060019160ff8560681c168152019301610dd4565b92602060019160ff8560601c168152019301610dcc565b92602060019160ff8560581c168152019301610dc4565b92602060019160ff8560501c168152019301610dbc565b92602060019160ff8560481c168152019301610db4565b92602060019160ff8560401c168152019301610dac565b92602060019160ff8560381c168152019301610da4565b92602060019160ff8560301c168152019301610d9c565b92602060019160ff8560281c168152019301610d94565b92602060019160ff85831c168152019301610d8c565b92602060019160ff8560181c168152019301610d84565b92602060019160ff8560101c168152019301610d7c565b92602060019160ff8560081c168152019301610d74565b92602060019160ff85168152019301610d6c565b926001610400602092865460ff8116825260ff8160081c168583015260ff8160101c16604083015260ff8160181c16606083015260ff81861c16608083015260ff8160281c1660a083015260ff8160301c1660c083015260ff8160381c1660e083015260ff8160401c1661010083015260ff8160481c1661012083015260ff8160501c1661014083015260ff8160581c1661016083015260ff8160601c1661018083015260ff8160681c166101a083015260ff8160701c166101c083015260ff8160781c166101e083015260ff8160801c1661020083015260ff8160881c1661022083015260ff8160901c1661024083015260ff8160981c1661026083015260ff8160a01c1661028083015260ff8160a81c166102a083015260ff8160b01c166102c083015260ff8160b81c166102e083015260ff8160c01c1661030083015260ff8160c81c1661032083015260ff8160d01c1661034083015260ff8160d81c1661036083015260ff8160e01c1661038083015260ff8160e81c166103a083015260ff8160f01c166103c083015260f81c6103e0820152019401920191610d58565b67ffffffffffffffff811161095b5760051b60200190565b906112f9826112d7565b6113066040519182610ce3565b8281528092611317601f19916112d7565b0190602036910137565b8051821015610c9d5760209160051b010190565b91909181518303611386575f5b8381106113525750505050600190565b611360610a6e828685610d28565b60ff8061136d8487611321565b511691160361137e57600101611342565b505050505f90565b5050505f90565b335f525f60205260405f2060ff8154166002820180548211611408575b50508060046001920160ff198154169055335f52816020528160405f20018260ff1982541617905501546040519081525f60208201527f77933355c8068f8af7dd0b53182eebd0e8c7610d373d4cb7590dd5f8819c67bc60403392a2565b55335f52600360205260405f205415806115c7575b611590575b335f52600360205260405f20545f198101908111610217575b8015801580611532575b156114eb5761145382610c85565b90545f198401939160031b1c6001600160a01b03168184116102175761147f906107ec6107ad86610c85565b600181018082116102175761149382610c85565b60018060a01b0391549060031b1c165f52600360205260405f20556114b783610c85565b60018060a01b0391549060031b1c165f52600360205260405f20551561143b57634e487b7160e01b5f52601160045260245ffd5b5050600190335f525f602052600260405f2001546040519081527f24e225604268d6416871b32db1be8e49f497caf8360393b31d71a34a4ce2669360203392a2905f6113aa565b5061153c82610c85565b60018060a01b0391549060031b1c165f525f602052600260405f2001545f1983018381116102175761156d90610c85565b60018060a01b0391549060031b1c165f525f602052600260405f20015410611445565b600254600160401b81101561095b576109288160016115b29301600255610c85565b600254335f52600360205260405f2055611422565b50600254158061141d57506115da610cb1565b905460039190911b1c6001600160a01b031633141561141d565b335f525f60205260405f20335f52600160205260405f2060ff61161c6105b882855416610d05565b1690611627826112d7565b6116346040519182610ce3565b828152611640836112d7565b602082019190601f1901368337519067ffffffffffffffff821161095b57600160401b821161095b5782548284558083106117ee575b5090825f5260205f208160051c915f5b8381106117af5750601f198116900380611765575b50505050825460405160208101914283524460408301523360601b606083015260ff60f81b9060f81b166074820152605581526116d9607582610ce3565b5190205f5b8360ff8216106116f45750505050600542910155565b6003604051602081019084825260ff60f81b8460f81b1660408201526021815261171f604182610ce3565b519020168354821015610c9d5760ff91600191855f5261175c60205f208360051c0191601f841683549060ff809160031b9316831b921b19161790565b905501166116de565b925f935f5b81811061177f5750505001555f80808061169b565b90919460206117a56001928460ff8a5116919060ff809160031b9316831b921b19161790565b960192910161176a565b5f805b602081106117c7575083820155600101611686565b865190969160019160209160ff60038b901b81811b199092169216901b17920196016117b2565b835f5260205f20601f80850160051c8201920160051c0190601f84168061182a575b505b81811061181f5750611676565b5f8155600101611812565b5f198201908154905f199060200360031b1c1690555f61181056fea2646970667358221220acf548bff531195086269c8e8a5b07002b4ebca7a1222eca52075fd4c917a89164736f6c634300081a0033

Deployed Bytecode

0x6080806040526004361015610012575f80fd5b5f3560e01c90816326a0308f14610bd65750806331c79f1114610bbb57806334bf52201461016b5780633b55555414610b7f57806341d3558214610b645780634fd66eae14610aa057806363f6f2d0146105395780636662a779146104ec578063693ccff9146104705780636d763a6e146103945780637249db4d146103795780637780ea1a1461035f578063951bd12914610344578063ba3c00671461026d578063bf3683991461022b578063d65ab5f214610170578063dc028bd01461016b5763e2eb41ff146100e2575f80fd5b34610167576020366003190112610167576004356001600160a01b03811690819003610167575f525f60205260e060405f208054906001810154906002810154600382015490600560ff6004850154169301549360ff60405196818116885260081c166020870152604086015260608501526080840152151560a083015260c0820152f35b5f80fd5b610bef565b34610167575f36600319011261016757335f908152602081905260408120805461ffff191661030117815560018082019290925560048101805460ff191690921790915560030180545f1981146102175760010190556101ce6115f4565b335f52600160205260405f207f77314433301d1b8c5eba4c09f7713f65f12b19a56e2e1d16ed26b288911e25a8604051602081528061021233946020830190610d46565b0390a2005b634e487b7160e01b5f52601160045260245ffd5b346101675760203660031901126101675760043560025481101561016757610254602091610c85565b905460405160039290921b1c6001600160a01b03168152f35b34610167576020366003190112610167576002546004358181111561033d57505b610297816112d7565b6102a46040519182610ce3565b818152601f196102b3836112d7565b013660208301376102c3826112ef565b915f5b8181106102e25750506102de60405192839283610c0a565b0390f35b806102ee600192610c85565b838060a01b0391549060031b1c166103068286611321565b5261031081610c85565b838060a01b0391549060031b1c165f525f602052600260405f2001546103368287611321565b52016102c6565b905061028e565b34610167575f36600319011261016757602060405160648152f35b34610167575f3660031901126101675761037761138d565b005b34610167575f36600319011261016757602060405160048152f35b34610167575f366003190112610167576002546103b0816112ef565b905f5b8181106104375750602090604051809281838593520160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace925f5b81811061041557505061040692500382610ce3565b6102de60405192839283610c0a565b84546001600160a01b03168352600194850194869450602090930192016103f1565b80610443600192610c85565b838060a01b0391549060031b1c165f525f602052600260405f2001546104698286611321565b52016103b3565b34610167575f36600319011261016757335f52600160205261049e6104a560405f2060405192838092610d46565b0382610ce3565b6040518091602082016020835281518091526020604084019201905f5b8181106104d0575050500390f35b825160ff168452859450602093840193909201916001016104c2565b34610167576020366003190112610167576004356001600160a01b03811690819003610167575f5260016020526040805f20600260ff600183015416910154825191151582526020820152f35b346101675760203660031901126101675760043567ffffffffffffffff811161016757366023820112156101675780600401359067ffffffffffffffff8211610167576024810190602436918460051b01011161016757335f525f60205260405f20335f52600160205260ff6105bd6105b88260405f20945416610d05565b610d16565b168303610a91575f5b838110610a5c575061049e6105e46105eb9260405192838092610d46565b8383611335565b9160405190806040830160408452526060820192905f905b808210610a37575050507f1012be3ef0102674ab9858a4ef5edaff92f163131ea9f0612dc101db7894f1e29083151560208201528033930390a2156109c457335f525f60205260405f2060646005820154420342811161021757600a10156109bc575b60018201805490828201809211610217575560ff825416906040519082825260208201527f169624da02c064c9ac6a7550c8c3dc17a752e1aa0901d973ce7376356ab7413560403392a26063811061099c575050335f525f60205260405f2060ff8154166002820180548211610736575b50508060046001920160ff198154169055335f52816020528160405f20018260ff198254161790550154604051908152600160208201527f77933355c8068f8af7dd0b53182eebd0e8c7610d373d4cb7590dd5f8819c67bc60403392a2005b55335f52600360205260405f2054158061096f575b610906575b335f52600360205260405f20545f198101908111610217575b80158015806108a8575b156108615761078182610c85565b90545f198401939160031b1c6001600160a01b0316818411610217576107f5906107ec6107ad86610c85565b905460039190911b1c6001600160a01b03166107c885610c85565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b6107c885610c85565b600181018082116102175761080982610c85565b60018060a01b0391549060031b1c165f52600360205260405f205561082d83610c85565b60018060a01b0391549060031b1c165f52600360205260405f20551561076957634e487b7160e01b5f52601160045260245ffd5b5050600190335f525f602052600260405f2001546040519081527f24e225604268d6416871b32db1be8e49f497caf8360393b31d71a34a4ce2669360203392a290826106d7565b506108b282610c85565b60018060a01b0391549060031b1c165f525f602052600260405f2001545f198301838111610217576108e390610c85565b60018060a01b0391549060031b1c165f525f602052600260405f20015410610773565b600254600160401b81101561095b576109288160016109469301600255610c85565b81546001600160a01b0360039290921b91821b19163390911b179055565b600254335f52600360205260405f2055610750565b634e487b7160e01b5f52604160045260245ffd5b50600254158061074b5750610982610cb1565b905460039190911b1c6001600160a01b031633141561074b565b60ff811461021757600160ff91011660ff198254161790556101ce6115f4565b5060c8610666565b335f525f60205260405f2060ff815460081c169081156102175760ff9161ff008254915f190160081b169061ff0019161781555460081c166040518181527fd948b7282d54ef44bf4fb0b1d38f0626adb9b838dd1bdc33c53a117a7f03b53060203392a215610a2f57005b61037761138d565b90919384359060ff821680920361016757602081600193829352019501920190610603565b600460ff610a73610a6e848888610d28565b610d38565b161015610a82576001016105c6565b6387796d3960e01b5f5260045ffd5b63f244a36d60e01b5f5260045ffd5b34610167576020366003190112610167576004356001600160a01b03811690819003610167575f525f60205260405f2060405160e081019181831067ffffffffffffffff84111761095b5760c09260405280549160ff8084169384835260081c16806020830152600183015480604084015260028401549182606085015260038501549384608082015287600560ff6004890154161515978860a08501520154910152604051958652602086015260408501526060840152608083015260a0820152f35b34610167575f36600319011261016757602060405160638152f35b34610167576020366003190112610167576004356001600160a01b03811690819003610167575f526003602052602060405f2054604051908152f35b34610167575f36600319011261016757602060405160028152f35b34610167575f3660031901126101675780600a60209252f35b34610167575f36600319011261016757602060405160038152f35b604081016040825282518091526020606083019301905f5b818110610c66575050506020818303910152602080835192838152019201905f5b818110610c505750505090565b8251845260209384019390920191600101610c43565b82516001600160a01b0316855260209485019490920191600101610c22565b600254811015610c9d5760025f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b60025415610c9d5760025f9081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace91565b90601f8019910116810190811067ffffffffffffffff82111761095b57604052565b60ff166003019060ff821161021757565b60ff5f199116019060ff821161021757565b9190811015610c9d5760051b0190565b3560ff811681036101675790565b80548083525f91825260208083209301925b81601f840110611135575491818110611121575b81811061110a575b8181106110f3575b8181106110dc575b8181106110c6575b8181106110af575b818110611098575b818110611081575b81811061106a575b818110611053575b81811061103c575b818110611025575b81811061100e575b818110610ff7575b818110610fe0575b818110610fc9575b818110610fb2575b818110610f9b575b818110610f84575b818110610f6d575b818110610f56575b818110610f3f575b818110610f28575b818110610f11575b818110610efa575b818110610ee3575b818110610ecc575b818110610eb5575b818110610e9e575b818110610e87575b818110610e70575b10610e65575090565b60f81c815260200190565b92602060019160ff8560f01c168152019301610e5c565b92602060019160ff8560e81c168152019301610e54565b92602060019160ff8560e01c168152019301610e4c565b92602060019160ff8560d81c168152019301610e44565b92602060019160ff8560d01c168152019301610e3c565b92602060019160ff8560c81c168152019301610e34565b92602060019160ff8560c01c168152019301610e2c565b92602060019160ff8560b81c168152019301610e24565b92602060019160ff8560b01c168152019301610e1c565b92602060019160ff8560a81c168152019301610e14565b92602060019160ff8560a01c168152019301610e0c565b92602060019160ff8560981c168152019301610e04565b92602060019160ff8560901c168152019301610dfc565b92602060019160ff8560881c168152019301610df4565b92602060019160ff8560801c168152019301610dec565b92602060019160ff8560781c168152019301610de4565b92602060019160ff8560701c168152019301610ddc565b92602060019160ff8560681c168152019301610dd4565b92602060019160ff8560601c168152019301610dcc565b92602060019160ff8560581c168152019301610dc4565b92602060019160ff8560501c168152019301610dbc565b92602060019160ff8560481c168152019301610db4565b92602060019160ff8560401c168152019301610dac565b92602060019160ff8560381c168152019301610da4565b92602060019160ff8560301c168152019301610d9c565b92602060019160ff8560281c168152019301610d94565b92602060019160ff85831c168152019301610d8c565b92602060019160ff8560181c168152019301610d84565b92602060019160ff8560101c168152019301610d7c565b92602060019160ff8560081c168152019301610d74565b92602060019160ff85168152019301610d6c565b926001610400602092865460ff8116825260ff8160081c168583015260ff8160101c16604083015260ff8160181c16606083015260ff81861c16608083015260ff8160281c1660a083015260ff8160301c1660c083015260ff8160381c1660e083015260ff8160401c1661010083015260ff8160481c1661012083015260ff8160501c1661014083015260ff8160581c1661016083015260ff8160601c1661018083015260ff8160681c166101a083015260ff8160701c166101c083015260ff8160781c166101e083015260ff8160801c1661020083015260ff8160881c1661022083015260ff8160901c1661024083015260ff8160981c1661026083015260ff8160a01c1661028083015260ff8160a81c166102a083015260ff8160b01c166102c083015260ff8160b81c166102e083015260ff8160c01c1661030083015260ff8160c81c1661032083015260ff8160d01c1661034083015260ff8160d81c1661036083015260ff8160e01c1661038083015260ff8160e81c166103a083015260ff8160f01c166103c083015260f81c6103e0820152019401920191610d58565b67ffffffffffffffff811161095b5760051b60200190565b906112f9826112d7565b6113066040519182610ce3565b8281528092611317601f19916112d7565b0190602036910137565b8051821015610c9d5760209160051b010190565b91909181518303611386575f5b8381106113525750505050600190565b611360610a6e828685610d28565b60ff8061136d8487611321565b511691160361137e57600101611342565b505050505f90565b5050505f90565b335f525f60205260405f2060ff8154166002820180548211611408575b50508060046001920160ff198154169055335f52816020528160405f20018260ff1982541617905501546040519081525f60208201527f77933355c8068f8af7dd0b53182eebd0e8c7610d373d4cb7590dd5f8819c67bc60403392a2565b55335f52600360205260405f205415806115c7575b611590575b335f52600360205260405f20545f198101908111610217575b8015801580611532575b156114eb5761145382610c85565b90545f198401939160031b1c6001600160a01b03168184116102175761147f906107ec6107ad86610c85565b600181018082116102175761149382610c85565b60018060a01b0391549060031b1c165f52600360205260405f20556114b783610c85565b60018060a01b0391549060031b1c165f52600360205260405f20551561143b57634e487b7160e01b5f52601160045260245ffd5b5050600190335f525f602052600260405f2001546040519081527f24e225604268d6416871b32db1be8e49f497caf8360393b31d71a34a4ce2669360203392a2905f6113aa565b5061153c82610c85565b60018060a01b0391549060031b1c165f525f602052600260405f2001545f1983018381116102175761156d90610c85565b60018060a01b0391549060031b1c165f525f602052600260405f20015410611445565b600254600160401b81101561095b576109288160016115b29301600255610c85565b600254335f52600360205260405f2055611422565b50600254158061141d57506115da610cb1565b905460039190911b1c6001600160a01b031633141561141d565b335f525f60205260405f20335f52600160205260405f2060ff61161c6105b882855416610d05565b1690611627826112d7565b6116346040519182610ce3565b828152611640836112d7565b602082019190601f1901368337519067ffffffffffffffff821161095b57600160401b821161095b5782548284558083106117ee575b5090825f5260205f208160051c915f5b8381106117af5750601f198116900380611765575b50505050825460405160208101914283524460408301523360601b606083015260ff60f81b9060f81b166074820152605581526116d9607582610ce3565b5190205f5b8360ff8216106116f45750505050600542910155565b6003604051602081019084825260ff60f81b8460f81b1660408201526021815261171f604182610ce3565b519020168354821015610c9d5760ff91600191855f5261175c60205f208360051c0191601f841683549060ff809160031b9316831b921b19161790565b905501166116de565b925f935f5b81811061177f5750505001555f80808061169b565b90919460206117a56001928460ff8a5116919060ff809160031b9316831b921b19161790565b960192910161176a565b5f805b602081106117c7575083820155600101611686565b865190969160019160209160ff60038b901b81811b199092169216901b17920196016117b2565b835f5260205f20601f80850160051c8201920160051c0190601f84168061182a575b505b81811061181f5750611676565b5f8155600101611812565b5f198201908154905f199060200360031b1c1690555f61181056fea2646970667358221220acf548bff531195086269c8e8a5b07002b4ebca7a1222eca52075fd4c917a89164736f6c634300081a0033

Block Transaction Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
0x570Bc1d827B2d05DF4a4f79Fc1be1Dde4E499Efb
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.