ETH Price: $3,288.33 (+1.35%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Rescue200637952024-06-10 20:23:59235 days ago1718051039IN
0x3d35818b...636A888a7
0 ETH0.0023439524.33706399
Rescue187129832023-12-04 12:24:47424 days ago1701692687IN
0x3d35818b...636A888a7
0 ETH0.0057981251.67482386
Rescue180957392023-09-09 2:03:47510 days ago1694225027IN
0x3d35818b...636A888a7
0 ETH0.005282119.30479735
Rescue180107952023-08-28 4:36:11522 days ago1693197371IN
0x3d35818b...636A888a7
0 ETH0.0045628313.01466654
Rescue179737572023-08-23 0:13:11527 days ago1692749591IN
0x3d35818b...636A888a7
0 ETH0.0017568315.65750619
Rescue177449102023-07-21 23:51:59559 days ago1689983519IN
0x3d35818b...636A888a7
0 ETH0.0031276419.5623179
Rescue174592822023-06-11 20:38:11600 days ago1686515891IN
0x3d35818b...636A888a7
0 ETH0.002178815.13174623
Rescue174303462023-06-07 18:43:35604 days ago1686163415IN
0x3d35818b...636A888a7
0 ETH0.0042248229.34132854
Rescue172938172023-05-19 13:25:47623 days ago1684502747IN
0x3d35818b...636A888a7
0 ETH0.0079927245.47162361
Rescue171357032023-04-27 6:21:11645 days ago1682576471IN
0x3d35818b...636A888a7
0 ETH0.0123706232.08339946
Rescue171181812023-04-24 19:19:47648 days ago1682363987IN
0x3d35818b...636A888a7
0 ETH0.0176512155.36646493
Rescue170611992023-04-16 18:25:47656 days ago1681669547IN
0x3d35818b...636A888a7
0 ETH0.0073108324.14361403
Rescue170375662023-04-13 8:49:47659 days ago1681375787IN
0x3d35818b...636A888a7
0 ETH0.0024930231
Rescue170364072023-04-13 4:27:23659 days ago1681360043IN
0x3d35818b...636A888a7
0 ETH0.0118320728.45535854
Rescue170323012023-04-12 13:44:35660 days ago1681307075IN
0x3d35818b...636A888a7
0 ETH0.0019998124.86715188
Rescue169976222023-04-07 15:54:23665 days ago1680882863IN
0x3d35818b...636A888a7
0 ETH0.0097399228.99529558
Rescue169782422023-04-04 21:43:47667 days ago1680644627IN
0x3d35818b...636A888a7
0 ETH0.0035436636.79362536
Rescue169563902023-04-01 19:31:23671 days ago1680377483IN
0x3d35818b...636A888a7
0 ETH0.0104977721.77871251
Rescue169510322023-04-01 1:26:47671 days ago1680312407IN
0x3d35818b...636A888a7
0 ETH0.0063785520.00757135
Rescue169491622023-03-31 19:08:47672 days ago1680289727IN
0x3d35818b...636A888a7
0 ETH0.0086398641.86973582
Rescue169404332023-03-30 13:43:47673 days ago1680183827IN
0x3d35818b...636A888a7
0 ETH0.0029454830.97119438
Rescue169305862023-03-29 4:30:11674 days ago1680064211IN
0x3d35818b...636A888a7
0 ETH0.0347607822.07489705
Rescue169292362023-03-28 23:57:47674 days ago1680047867IN
0x3d35818b...636A888a7
0 ETH0.0027319621.32734837
Rescue169266492023-03-28 15:13:23675 days ago1680016403IN
0x3d35818b...636A888a7
0 ETH0.0023229529.32585767
Rescue169219522023-03-27 23:22:11675 days ago1679959331IN
0x3d35818b...636A888a7
0 ETH0.0044083623.00167399
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Pytheas

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 2000 runs

Other Settings:
default evmVersion, MIT license
File 1 of 11 : Pytheas.sol
// SPDX-License-Identifier: MIT LICENSE

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/security/Pausable.sol";
import "./interfaces/IERC721TokenReciever.sol";
import "./interfaces/IPytheas.sol";
import "./interfaces/IOrbitalBlockade.sol";
import "./interfaces/IShatteredEON.sol";
import "./interfaces/IMasterStaker.sol";
import "./interfaces/IColonist.sol";
import "./interfaces/IRAW.sol";
import "./interfaces/IRandomizer.sol";

contract Pytheas is IPytheas, IERC721TokenReceiver, Pausable {
    // struct to store a stake's token, sOwner, and earning values
    struct Stake {
        uint16 tokenId;
        uint80 value;
        address sOwner;
    }

    event ColonistStaked(
        address indexed sOwner,
        uint256 indexed tokenId,
        uint256 value
    );
    event ColonistClaimed(
        uint256 indexed tokenId,
        bool indexed unstaked,
        uint256 earned
    );

    event Metamorphosis(address indexed addr, uint256 indexed tokenId);

    // reference to the Colonist NFT contract
    IColonist public colonistNFT;
    // reference to the game logic  contract
    IShatteredEON public shattered;
    // reference to the masterStaker contract
    IMasterStaker public masterStaker;
    // reference to orbital blockade to retrieve information on staked pirates
    IOrbitalBlockade public orbital;
    // reference to the $rEON contract for minting $rEON earnings
    IRAW public raw;
    // reference to Randomizer
    IRandomizer public randomizer;

    // maps tokenId to stake
    mapping(uint256 => Stake) private pytheas;

    // address => used in allowing system communication between contracts
    mapping(address => bool) private admins;

    // colonist earn 2700 $rEON per day
    uint256 public constant DAILY_rEON_RATE = 2700;
    // colonist must have 2 days worth of $rEON to unstake or else they're still down in the mines
    uint256 public constant MINIMUM_TO_EXIT = 2 days;
    // pirates take a 20% tax on all $rEON claimed
    uint256 public constant rEON_CLAIM_TAX_PERCENTAGE = 20;
    // there will only ever be (roughly) 3.125 billion (half of the total supply) rEON earned through staking;
    uint256 public constant MAXIMUM_GLOBAL_rEON = 3125000000;
    // colonistStaked
    uint256 public numColonistStaked;
    // amount of $rEON earned so far
    uint256 public totalRawEonEarned;
    // the last time $rEON was claimed
    uint256 private lastClaimTimestamp;
    //allowed to call owner functions
    address public auth;

    // emergency rescue to allow unstaking without any checks but without $rEON
    bool public rescueEnabled;

    constructor() {
        _pause();
        auth = msg.sender;
        admins[msg.sender] = true;
    }

    modifier noCheaters() {
        uint256 size = 0;
        address acc = msg.sender;
        assembly {
            size := extcodesize(acc)
        }

        require(
            admins[msg.sender] || (msg.sender == tx.origin && size == 0),
            "you're trying to cheat!"
        );
        _;
    }

    modifier onlyOwner() {
        require(msg.sender == auth);
        _;
    }

    /** CRITICAL TO SETUP */
    modifier requireContractsSet() {
        require(
            address(colonistNFT) != address(0) &&
                address(raw) != address(0) &&
                address(orbital) != address(0) &&
                address(shattered) != address(0) &&
                address(masterStaker) != address(0) &&
                address(randomizer) != address(0),
            "Contracts not set"
        );
        _;
    }

    function setContracts(
        address _colonistNFT,
        address _raw,
        address _orbital,
        address _shattered,
        address _masterStaker,
        address _rand
    ) external onlyOwner {
        colonistNFT = IColonist(_colonistNFT);
        raw = IRAW(_raw);
        orbital = IOrbitalBlockade(_orbital);
        shattered = IShatteredEON(_shattered);
        masterStaker = IMasterStaker(_masterStaker);
        randomizer = IRandomizer(_rand);
    }

    /** STAKING */

    /**
     * adds Colonists to pytheas and crew
     * @param account the address of the staker
     * @param tokenIds the IDs of the Colonists to stake
     */
    function addColonistToPytheas(address account, uint16[] calldata tokenIds)
        external
        override
        whenNotPaused
        noCheaters
    {
        require(account == tx.origin);
        for (uint256 i = 0; i < tokenIds.length; i++) {
            if (msg.sender == address(masterStaker)) {
                require(
                    colonistNFT.isOwner(tokenIds[i]) == account,
                    "Not Colonist Owner"
                );
                colonistNFT.transferFrom(account, address(this), tokenIds[i]);
            } else if (msg.sender != address(shattered)) {
                // dont do this step if its a mint + stake
                require(
                    colonistNFT.isOwner(tokenIds[i]) == msg.sender,
                    "Not Colonist Owner"
                );
                colonistNFT.transferFrom(
                    msg.sender,
                    address(this),
                    tokenIds[i]
                );
            } else if (tokenIds[i] == 0) {
                continue; // there may be gaps in the array for stolen tokens
            }
            _addColonistToPytheas(account, tokenIds[i]);
        }
    }

    /**
     * adds a single Colonist to pytheas
     * @param account the address of the staker
     * @param tokenId the ID of the Colonist to add to pytheas
     */
    function _addColonistToPytheas(address account, uint256 tokenId)
        internal
        _updateEarnings
    {
        pytheas[tokenId] = Stake({
            sOwner: account,
            tokenId: uint16(tokenId),
            value: uint80(block.timestamp)
        });
        numColonistStaked += 1;
        emit ColonistStaked(account, tokenId, block.timestamp);
    }

    /** CLAIMING / UNSTAKING */

    /**
     * realize $rEON earnings and optionally unstake tokens from Pytheas / Crew
     * to unstake a Colonist it will require it has 2 days worth of $rEON unclaimed
     * @param tokenIds the IDs of the tokens to claim earnings from
     * @param unstake whether or not to unstake ALL of the tokens listed in tokenIds
     */
    function claimColonistFromPytheas(
        address account,
        uint16[] calldata tokenIds,
        bool unstake
    ) external whenNotPaused _updateEarnings noCheaters {
        uint256 owed = 0;
        for (uint256 i = 0; i < tokenIds.length; i++) {
            owed += _claimColonistFromPytheas(account, tokenIds[i], unstake);
        }
        if (owed == 0) {
            return;
        }
        raw.mint(1, owed, account);
    }

    /** external function to see the amount of raw eon
  a colonist has mined
  */

    function calculateRewards(uint256 tokenId)
        external
        view
        returns (uint256 owed)
    {
        Stake memory stake = pytheas[tokenId];
        if (totalRawEonEarned < MAXIMUM_GLOBAL_rEON) {
            owed = ((block.timestamp - stake.value) * DAILY_rEON_RATE) / 1 days;
        } else if (stake.value > lastClaimTimestamp) {
            owed = 0; // $rEON production stopped already
        } else {
            owed =
                ((lastClaimTimestamp - stake.value) * DAILY_rEON_RATE) /
                1 days; // stop earning additional $rEON if it's all been earned
        }
    }

    /**
     * realize $rEON earnings for a single Colonist and optionally unstake it
     * if not unstaking, pay a 20% tax to the staked Pirates
     * if unstaking, there is a 50% chance all $rEON is stolen
     * @param tokenId the ID of the Colonist to claim earnings from
     * @param unstake whether or not to unstake the Colonist
     * @return owed - the amount of $rEON earned
     */
    function _claimColonistFromPytheas(
        address account,
        uint256 tokenId,
        bool unstake
    ) internal returns (uint256 owed) {
        Stake memory stake = pytheas[tokenId];
        require(stake.sOwner == account, "Not Owner");
        require(
            !(unstake && block.timestamp - stake.value < MINIMUM_TO_EXIT),
            "Your shift isn't over!"
        );
        if (totalRawEonEarned < MAXIMUM_GLOBAL_rEON) {
            owed = ((block.timestamp - stake.value) * DAILY_rEON_RATE) / 1 days;
        } else if (stake.value > lastClaimTimestamp) {
            owed = 0; // $rEON production stopped already
        } else {
            owed =
                ((lastClaimTimestamp - stake.value) * DAILY_rEON_RATE) /
                1 days; // stop earning additional $rEON if it's all been earned
        }
        if (unstake) {
            if (randomizer.random(tokenId) & 1 == 1) {
                // 50% chance of all $rEON stolen
                orbital.payPirateTax(owed);
                owed = 0;
            }
            delete pytheas[tokenId];
            numColonistStaked -= 1;
            // Always transfer last to guard against reentrance
            colonistNFT.safeTransferFrom(address(this), account, tokenId, ""); // send back colonist
        } else {
            orbital.payPirateTax((owed * rEON_CLAIM_TAX_PERCENTAGE) / 100); // percentage tax to staked pirates
            owed = (owed * (100 - rEON_CLAIM_TAX_PERCENTAGE)) / 100; // remainder goes to Colonist sOwner
            pytheas[tokenId] = Stake({
                sOwner: account,
                tokenId: uint16(tokenId),
                value: uint80(block.timestamp)
            }); // reset stake
        }
        emit ColonistClaimed(tokenId, unstake, owed);
    }

    // To be worthy of joining the pirates one must be
    // willing to risk it all, used to handle the colonist
    // token burn when making an attempt to join the pirates
    function handleJoinPirates(address addr, uint16 tokenId)
        external
        override
        noCheaters
    {
        require(admins[msg.sender]);
        Stake memory stake = pytheas[tokenId];
        require(stake.sOwner == addr, "Pytheas: Not Owner");
        delete pytheas[tokenId];
        colonistNFT.burn(tokenId);

        emit Metamorphosis(addr, tokenId);
    }

    function payUp(
        uint16 tokenId,
        uint256 amtMined,
        address addr
    ) external override _updateEarnings {
        require(admins[msg.sender]);
        uint256 minusTax = 0;
        minusTax += _piratesLife(tokenId, amtMined, addr);
        if (minusTax == 0) {
            return;
        }
        raw.mint(1, minusTax, addr);
    }

    /**
   * external admin only function to get the amount owed to a colonist
   * for use whem making a pirate attempt
   @param account the account that owns the colonist
   @param tokenId  the ID of the colonist who is mining
    */
    function getColonistMined(address account, uint16 tokenId)
        external
        view
        override
        returns (uint256 minedAmt)
    {
        require(admins[msg.sender]);
        uint256 mined = 0;
        mined += colonistDues(account, tokenId);
        return mined;
    }

    /**
 * internal function to calculate the amount a colonist
 * is owed for their mining attempts;
 * for use with making a pirate attempt;
 @param addr the owner of the colonist
 @param tokenId the ID of the colonist who is mining
  */
    function colonistDues(address addr, uint16 tokenId)
        internal
        view
        returns (uint256 mined)
    {
        Stake memory stake = pytheas[tokenId];
        require(stake.sOwner == addr, "Not Owner");
        if (totalRawEonEarned < MAXIMUM_GLOBAL_rEON) {
            mined =
                ((block.timestamp - stake.value) * DAILY_rEON_RATE) /
                1 days;
        } else if (stake.value > lastClaimTimestamp) {
            mined = 0; // $rEON production stopped already
        } else {
            mined =
                ((lastClaimTimestamp - stake.value) * DAILY_rEON_RATE) /
                1 days; // stop earning additional $rEON if it's all been earned
        }
    }

    /*
Realizes gained rEON on a failed pirate attempt and always pays pirate tax
*/
    function _piratesLife(
        uint16 tokenId,
        uint256 amtMined,
        address addr
    ) internal returns (uint256 owed) {
        Stake memory stake = pytheas[tokenId];
        require(stake.sOwner == addr, "Pytheas: Not Owner");
        // tax amount sent to pirates
        uint256 pirateTax = (amtMined * rEON_CLAIM_TAX_PERCENTAGE) / 100;
        orbital.payPirateTax(pirateTax);
        // remainder after pirate tax goes to Colonist
        //sOwner who made the pirate attempt
        owed = (amtMined - pirateTax);
        // reset stake
        pytheas[tokenId] = Stake({
            sOwner: addr,
            tokenId: uint16(tokenId),
            value: uint80(block.timestamp)
        });
        emit ColonistClaimed(tokenId, false, owed);
    }

    /**
     * emergency unstake tokens
     * @param tokenIds the IDs of the tokens to claim earnings from
     */
    function rescue(uint256[] calldata tokenIds) external noCheaters {
        require(rescueEnabled, "Rescue Not Enabled");
        uint256 tokenId;
        Stake memory stake;
        for (uint256 i = 0; i < tokenIds.length; i++) {
            tokenId = tokenIds[i];
            stake = pytheas[tokenId];
            require(stake.sOwner == msg.sender, "Not Owner");
            delete pytheas[tokenId];
            numColonistStaked -= 1;
            colonistNFT.safeTransferFrom(
                address(this),
                msg.sender,
                tokenId,
                ""
            ); // send back Colonist
            emit ColonistClaimed(tokenId, true, 0);
        }
    }

    /** ACCOUNTING */

    /**
     * tracks $rEON earnings to ensure it stops once 6.5 billion is eclipsed
     */
    modifier _updateEarnings() {
        if (totalRawEonEarned < MAXIMUM_GLOBAL_rEON) {
            totalRawEonEarned +=
                ((block.timestamp - lastClaimTimestamp) *
                    numColonistStaked *
                    DAILY_rEON_RATE) /
                1 days;
            lastClaimTimestamp = block.timestamp;
        }
        _;
    }

    //Admin
    /**
     * allows owner to enable "rescue mode"
     * simplifies accounting, prioritizes tokens out in emergency
     */
    function setRescueEnabled(bool _enabled) external onlyOwner {
        rescueEnabled = _enabled;
    }

    /**
     * enables owner to pause / unpause contract
     */
    function setPaused(bool _paused) external requireContractsSet onlyOwner {
        if (_paused) _pause();
        else _unpause();
    }

    /**
     * enables an address to mint / burn
     * @param addr the address to enable
     */
    function addAdmin(address addr) external onlyOwner {
        admins[addr] = true;
    }

    /**
     * disables an address from minting / burning
     * @param addr the address to disbale
     */
    function removeAdmin(address addr) external onlyOwner {
        admins[addr] = false;
    }

    function transferOwnership(address newOwner) external onlyOwner {
        auth = newOwner;
    }

    //READ ONLY

    function onERC721Received(
        address,
        address from,
        uint256,
        bytes calldata
    ) external pure override returns (bytes4) {
        require(from == address(0x0), "Only EOA");
        return IERC721TokenReceiver.onERC721Received.selector;
    }
}

File 2 of 11 : Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 3 of 11 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 11 : IColonist.sol
// SPDX-License-Identifier: MIT LICENSE
pragma solidity ^0.8.0;

interface IColonist {
    // struct to store each Colonist's traits
    struct Colonist {
        bool isColonist;
        uint8 background;
        uint8 body;
        uint8 shirt;
        uint8 jacket;
        uint8 jaw;
        uint8 eyes;
        uint8 hair;
        uint8 held;
        uint8 gen;
    }

    struct HColonist {
        uint8 Legendary;
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function isOwner(uint256 tokenId)
        external
        view
        returns (address);

    function minted() external returns (uint16);

    function totalCir() external returns (uint256);

    function _mintColonist(address recipient, uint256 seed) external;

    function _mintToHonors(address recipient, uint256 seed) external;

    function _mintHonors(address recipient, uint8 id) external;

    function burn(uint256 tokenId) external;

    function getMaxTokens() external view returns (uint256);

    function getPaidTokens() external view returns (uint256);

    function getTokenTraitsColonist(uint256 tokenId)
        external
        view
        returns (Colonist memory);

    function getTokenTraitsHonors(uint256 tokenId)
        external
        view
        returns (HColonist memory);

    function tokenNameByIndex(uint256 index)
        external
        view
        returns (string memory);

    function hasBeenNamed(uint256 tokenId) external view returns (bool);

    function nameColonist(uint256 tokenId, string memory newName) external;
}

File 5 of 11 : IERC721TokenReciever.sol
// SPDX-License-Identifier: MIT LICENSE
pragma solidity ^0.8.11;

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
interface IERC721TokenReceiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 id,
        bytes calldata data
    ) external returns (bytes4);
}

File 6 of 11 : IMasterStaker.sol
// SPDX-License-Identifier: MIT LICENSE
pragma solidity ^0.8.0;

interface IMasterStaker {

 function masterStake(
        uint16[] calldata colonistTokenIds,
        uint16[] calldata pirateTokenIds
    ) external;

 function masterUnstake(
        uint16[] calldata colonistTokenIds,
        uint16[] calldata pirateTokenIds
    ) external;

 function masterClaim(
        uint16[] calldata colonistTokenIds,
        uint16[] calldata pirateTokenIds
    ) external;
}

File 7 of 11 : IOrbitalBlockade.sol
// SPDX-License-Identifier: MIT LICENSE

pragma solidity ^0.8.0;

interface IOrbitalBlockade {
    function addPiratesToCrew(address account, uint16[] calldata tokenIds)
        external;
    
    function claimPiratesFromCrew(address account, uint16[] calldata tokenIds, bool unstake)
        external;

    function payPirateTax(uint256 amount) external;

    function randomPirateOwner(uint256 seed) external view returns (address);
}

File 8 of 11 : IPytheas.sol
// SPDX-License-Identifier: MIT LICENSE

pragma solidity ^0.8.0;

interface IPytheas {
    function addColonistToPytheas(address account, uint16[] calldata tokenIds)
        external;

    function claimColonistFromPytheas(address account, uint16[] calldata tokenIds, bool unstake)
        external;

    function getColonistMined(address account, uint16 tokenId)
        external
        returns (uint256);

    function handleJoinPirates(address addr, uint16 tokenId) external;

    function payUp(
        uint16 tokenId,
        uint256 amtMined,
        address addr
    ) external;
}

File 9 of 11 : IRAW.sol
// SPDX-License-Identifier: MIT LICENSE
pragma solidity ^0.8.0;

interface IRAW {

    function getBalance(
        address account,
        uint256 id
    ) external returns(uint256);

    function mint(
        uint256 typeId,
        uint256 qty,
        address recipient
    ) external;

    function burn(
        uint256 typeId,
        uint256 qty,
        address burnFrom
    ) external;

    function updateMintBurns(
        uint256 typeId,
        uint256 mintQty,
        uint256 burnQty
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) external;

}

File 10 of 11 : IRandomizer.sol
// SPDX-License-Identifier: MIT LICENSE

pragma solidity ^0.8.0;

interface IRandomizer {
    function random(uint256) external returns (uint256);
}

File 11 of 11 : IShatteredEON.sol
// SPDX-License-Identifier: MIT LICENSE

pragma solidity ^0.8.0;

interface IShatteredEON {}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "details": {
      "constantOptimizer": true,
      "cse": true,
      "deduplicate": true,
      "inliner": true,
      "jumpdestRemover": true,
      "orderLiterals": true,
      "peephole": true,
      "yul": true,
      "yulDetails": {
        "optimizerSteps": "dhfoDgvulfnTUtnIf",
        "stackAllocation": true
      }
    },
    "runs": 2000
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"bool","name":"unstaked","type":"bool"},{"indexed":false,"internalType":"uint256","name":"earned","type":"uint256"}],"name":"ColonistClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ColonistStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Metamorphosis","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DAILY_rEON_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_GLOBAL_rEON","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_TO_EXIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"addColonistToPytheas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"calculateRewards","outputs":[{"internalType":"uint256","name":"owed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"},{"internalType":"bool","name":"unstake","type":"bool"}],"name":"claimColonistFromPytheas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"colonistNFT","outputs":[{"internalType":"contract IColonist","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"getColonistMined","outputs":[{"internalType":"uint256","name":"minedAmt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"handleJoinPirates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterStaker","outputs":[{"internalType":"contract IMasterStaker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numColonistStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"orbital","outputs":[{"internalType":"contract IOrbitalBlockade","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"},{"internalType":"uint256","name":"amtMined","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"payUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rEON_CLAIM_TAX_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomizer","outputs":[{"internalType":"contract IRandomizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raw","outputs":[{"internalType":"contract IRAW","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_colonistNFT","type":"address"},{"internalType":"address","name":"_raw","type":"address"},{"internalType":"address","name":"_orbital","type":"address"},{"internalType":"address","name":"_shattered","type":"address"},{"internalType":"address","name":"_masterStaker","type":"address"},{"internalType":"address","name":"_rand","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setRescueEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shattered","outputs":[{"internalType":"contract IShatteredEON","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRawEonEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506000805460ff19169055620000266200005a565b600b80546001600160a01b031916339081179091556000908152600760205260409020805460ff1916600117905562000140565b60005460ff1615620000895760405162461bcd60e51b81526004016200008090620000d8565b60405180910390fd5b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620000bf3390565b604051620000ce919062000130565b60405180910390a1565b602080825281016200010781601081526f14185d5cd8589b194e881c185d5cd95960821b602082015260400190565b92915050565b60006001600160a01b03821662000107565b6200012a816200010d565b82525050565b602081016200010782846200011f565b61263780620001506000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637048027511610104578063af85f70f116100a2578063d3ea435011610071578063d3ea4350146103c3578063de9375f2146103d6578063f10fb584146103f6578063f2fde38b1461040957600080fd5b8063af85f70f1461037f578063c096a63214610392578063c7015321146103a5578063d3db0273146103b057600080fd5b806383d9df97116100de57806383d9df97146103475780638c2b4d8e146103505780639c58144614610363578063a33a7c5b1461036c57600080fd5b80637048027514610318578063765310081461032b57806383c495ee1461033e57600080fd5b806324b044c01161017157806339db714f1161014b57806339db714f146102b55780635c975abb146102e7578063651c82e9146102f25780636a3ef0571461030557600080fd5b806324b044c0146102905780633780f17a146102a357806337a386b9146102ab57600080fd5b80631785f53c116101ad5780631785f53c1461023257806321d0b7ae1461024557806322ba0432146102655780632463a55a1461027d57600080fd5b8063150b7a02146101d457806316527231146101fd57806316c38b3c1461021d575b600080fd5b6101e76101e2366004611d02565b61041c565b6040516101f49190611db0565b60405180910390f35b600354610210906001600160a01b031681565b6040516101f49190611e00565b61023061022b366004611e21565b610479565b005b610230610240366004611e42565b610546565b610258610253366004611e78565b61057e565b6040516101f49190611ebb565b6000546102109061010090046001600160a01b031681565b61023061028b366004611ec9565b6105ba565b600254610210906001600160a01b031681565b610258601481565b6102586202a30081565b600b546102da9074010000000000000000000000000000000000000000900460ff1681565b6040516101f49190611f5b565b60005460ff166102da565b600154610210906001600160a01b031681565b610230610313366004611fb4565b61067a565b610230610326366004611e42565b6108b6565b610230610339366004611e21565b6108f1565b61025860085481565b61025860095481565b61023061035e366004611e78565b610952565b610258610a8c81565b61023061037a366004611ffc565b610b01565b61023061038d36600461204c565b610c25565b600454610210906001600160a01b031681565b61025863ba43b74081565b6102306103be3660046120bc565b610de1565b6102586103d1366004612118565b61114d565b600b546103e9906001600160a01b031681565b6040516101f49190612142565b600554610210906001600160a01b031681565b610230610417366004611e42565b61124e565b60006001600160a01b0385161561044e5760405162461bcd60e51b815260040161044590612184565b60405180910390fd5b507f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60005461010090046001600160a01b0316158015906104a257506004546001600160a01b031615155b80156104b857506003546001600160a01b031615155b80156104ce57506001546001600160a01b031615155b80156104e457506002546001600160a01b031615155b80156104fa57506005546001600160a01b031615155b6105165760405162461bcd60e51b8152600401610445906121c6565b600b546001600160a01b0316331461052d57600080fd5b801561053e5761053b61129f565b50565b61053b61130e565b600b546001600160a01b0316331461055d57600080fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b3360009081526007602052604081205460ff1661059a57600080fd5b60006105a68484611361565b6105b090826121ec565b9150505b92915050565b600b546001600160a01b031633146105d157600080fd5b600080546001600160a01b03978816610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909116179055600480549587167fffffffffffffffffffffffff0000000000000000000000000000000000000000968716179055600380549487169486169490941790935560018054928616928516929092179091556002805491851691841691909117905560058054919093169116179055565b33600081815260076020526040902054813b919060ff16806106a4575033321480156106a4575081155b6106c05760405162461bcd60e51b815260040161044590612236565b600b5474010000000000000000000000000000000000000000900460ff166106fa5760405162461bcd60e51b815260040161044590612278565b6040805160608101825260008082526020820181905291810182905260005b858110156108ad5786868281811061073357610733612288565b602090810292909201356000818152600684526040908190208151606081018352905461ffff8116825262010000810469ffffffffffffffffffff1695820195909552600160601b9094046001600160a01b03169084018190529095509193505033146107b25760405162461bcd60e51b8152600401610445906122d0565b600083815260066020526040812081905560088054600192906107d69084906122e0565b90915550506000546040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b88d4fde9061082c903090339088906004016122f7565b600060405180830381600087803b15801561084657600080fd5b505af115801561085a573d6000803e3d6000fd5b5050505060011515837f1c2985fbd233f9b6141083d73ae8f22c8135bc2de7985e543828014469b08f126000604051610893919061234d565b60405180910390a3806108a58161235b565b915050610719565b50505050505050565b600b546001600160a01b031633146108cd57600080fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b600b546001600160a01b0316331461090857600080fd5b600b805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b33600081815260076020526040902054813b919060ff168061097c5750333214801561097c575081155b6109985760405162461bcd60e51b815260040161044590612236565b3360009081526007602052604090205460ff166109b457600080fd5b61ffff80841660009081526006602090815260409182902082516060810184529054938416815269ffffffffffffffffffff62010000850416918101919091526001600160a01b03600160601b909304831691810182905291861614610a2c5760405162461bcd60e51b8152600401610445906123a8565b61ffff8416600090815260066020526040808220829055905490517f42966c680000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316906342966c6890610a8e9087906004016123d1565b600060405180830381600087803b158015610aa857600080fd5b505af1158015610abc573d6000803e3d6000fd5b505060405161ffff871692506001600160a01b03881691507f23a4178dc186c4281ca53068d605699f78ec28f44189092fba852eebd2d5d76490600090a35050505050565b63ba43b7406009541015610b605762015180610a8c600854600a5442610b2791906122e0565b610b3191906123df565b610b3b91906123df565b610b459190612414565b60096000828254610b5691906121ec565b909155505042600a555b3360009081526007602052604090205460ff16610b7c57600080fd5b6000610b8984848461148b565b610b9390826121ec565b905080610ba05750505050565b600480546040517fe7d3fe6b0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163e7d3fe6b91610bed916001918691889101612428565b600060405180830381600087803b158015610c0757600080fd5b505af1158015610c1b573d6000803e3d6000fd5b5050505050505050565b60005460ff1615610c485760405162461bcd60e51b81526004016104459061248a565b63ba43b7406009541015610ca75762015180610a8c600854600a5442610c6e91906122e0565b610c7891906123df565b610c8291906123df565b610c8c9190612414565b60096000828254610c9d91906121ec565b909155505042600a555b33600081815260076020526040902054813b919060ff1680610cd157503332148015610cd1575081155b610ced5760405162461bcd60e51b815260040161044590612236565b6000805b85811015610d4c57610d2e88888884818110610d0f57610d0f612288565b9050602002016020810190610d24919061249a565b61ffff168761167c565b610d3890836121ec565b915080610d448161235b565b915050610cf1565b5080610d585750610dd9565b600480546040517fe7d3fe6b0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163e7d3fe6b91610da59160019186918d9101612428565b600060405180830381600087803b158015610dbf57600080fd5b505af1158015610dd3573d6000803e3d6000fd5b50505050505b505050505050565b60005460ff1615610e045760405162461bcd60e51b81526004016104459061248a565b33600081815260076020526040902054813b919060ff1680610e2e57503332148015610e2e575081155b610e4a5760405162461bcd60e51b815260040161044590612236565b6001600160a01b0385163214610e5f57600080fd5b60005b83811015610dd9576002546001600160a01b0316331415610fd5576000546001600160a01b03808816916101009004166339c7639c878785818110610ea957610ea9612288565b9050602002016020810190610ebe919061249a565b6040518263ffffffff1660e01b8152600401610eda91906123d1565b602060405180830381865afa158015610ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1b91906124c6565b6001600160a01b031614610f415760405162461bcd60e51b815260040161044590612519565b60005461010090046001600160a01b03166323b872dd8730888886818110610f6b57610f6b612288565b9050602002016020810190610f80919061249a565b6040518463ffffffff1660e01b8152600401610f9e93929190612529565b600060405180830381600087803b158015610fb857600080fd5b505af1158015610fcc573d6000803e3d6000fd5b50505050611107565b6001546001600160a01b031633146110d357600054339061010090046001600160a01b03166339c7639c87878581811061101157611011612288565b9050602002016020810190611026919061249a565b6040518263ffffffff1660e01b815260040161104291906123d1565b602060405180830381865afa15801561105f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108391906124c6565b6001600160a01b0316146110a95760405162461bcd60e51b815260040161044590612519565b60005461010090046001600160a01b03166323b872dd3330888886818110610f6b57610f6b612288565b8484828181106110e5576110e5612288565b90506020020160208101906110fa919061249a565b61ffff166111075761113b565b61113b8686868481811061111d5761111d612288565b9050602002016020810190611132919061249a565b61ffff16611b21565b806111458161235b565b915050610e62565b60008181526006602090815260408083208151606081018352905461ffff8116825262010000810469ffffffffffffffffffff1693820193909352600160601b9092046001600160a01b03169082015260095463ba43b74011156111e95762015180610a8c826020015169ffffffffffffffffffff16426111ce91906122e0565b6111d891906123df565b6111e29190612414565b9150611248565b600a54816020015169ffffffffffffffffffff16111561120c5760009150611248565b62015180610a8c826020015169ffffffffffffffffffff16600a5461123191906122e0565b61123b91906123df565b6112459190612414565b91505b50919050565b600b546001600160a01b0316331461126557600080fd5b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60005460ff16156112c25760405162461bcd60e51b81526004016104459061248a565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112f73390565b6040516113049190612142565b60405180910390a1565b60005460ff166113305760405162461bcd60e51b815260040161044590612583565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336112f7565b61ffff808216600090815260066020908152604080832081516060810183529054948516815269ffffffffffffffffffff62010000860416928101929092526001600160a01b03600160601b909404841690820181905291929091908516146113dc5760405162461bcd60e51b8152600401610445906122d0565b63ba43b74060095410156114285762015180610a8c826020015169ffffffffffffffffffff164261140d91906122e0565b61141791906123df565b6114219190612414565b9150611484565b600a54816020015169ffffffffffffffffffff16111561144b5760009150611484565b62015180610a8c826020015169ffffffffffffffffffff16600a5461147091906122e0565b61147a91906123df565b6105b09190612414565b5092915050565b61ffff808416600090815260066020908152604080832081516060810183529054948516815269ffffffffffffffffffff62010000860416928101929092526001600160a01b03600160601b909404841690820181905291929091908416146115065760405162461bcd60e51b8152600401610445906123a8565b600060646115156014876123df565b61151f9190612414565b6003546040517fa10595d10000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063a10595d190611569908490600401611ebb565b600060405180830381600087803b15801561158357600080fd5b505af1158015611597573d6000803e3d6000fd5b5050505080856115a791906122e0565b6040805160608101825261ffff808a1680835269ffffffffffffffffffff42811660208086019182526001600160a01b03808d16878901908152600086815260069093528883209751885494519151909216600160601b026bffffffffffffffffffffffff9190951662010000026bffffffffffffffffffffffff199094169190961617919091179390931617909255915192955090917f1c2985fbd233f9b6141083d73ae8f22c8135bc2de7985e543828014469b08f129061166b908790611ebb565b60405180910390a350509392505050565b60008281526006602090815260408083208151606081018352905461ffff8116825269ffffffffffffffffffff62010000820416938201939093526001600160a01b03600160601b9093048316918101829052918616146116ef5760405162461bcd60e51b8152600401610445906122d0565b82801561171957506202a300816020015169ffffffffffffffffffff164261171791906122e0565b105b156117365760405162461bcd60e51b8152600401610445906125c5565b63ba43b74060095410156117825762015180610a8c826020015169ffffffffffffffffffff164261176791906122e0565b61177191906123df565b61177b9190612414565b91506117e1565b600a54816020015169ffffffffffffffffffff1611156117a557600091506117e1565b62015180610a8c826020015169ffffffffffffffffffff16600a546117ca91906122e0565b6117d491906123df565b6117de9190612414565b91505b82156119af576005546040517fb863bd370000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b863bd3790611830908790600401611ebb565b6020604051808303816000875af115801561184f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187391906125e0565b600116600114156118fe576003546040517fa10595d10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a10595d1906118c7908590600401611ebb565b600060405180830381600087803b1580156118e157600080fd5b505af11580156118f5573d6000803e3d6000fd5b50505050600091505b600084815260066020526040812081905560088054600192906119229084906122e0565b90915550506000546040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b88d4fde90611978903090899089906004016122f7565b600060405180830381600087803b15801561199257600080fd5b505af11580156119a6573d6000803e3d6000fd5b50505050611ade565b6003546001600160a01b031663a10595d160646119cd6014866123df565b6119d79190612414565b6040518263ffffffff1660e01b81526004016119f39190611ebb565b600060405180830381600087803b158015611a0d57600080fd5b505af1158015611a21573d6000803e3d6000fd5b50505050606460146064611a3591906122e0565b611a3f90846123df565b611a499190612414565b6040805160608101825261ffff87811682524269ffffffffffffffffffff90811660208085019182526001600160a01b038c811686880190815260008d8152600690935296909120945185549251965194166bffffffffffffffffffffffff1990921691909117620100009590921694909402176bffffffffffffffffffffffff16600160601b919093160291909117905591505b821515847f1c2985fbd233f9b6141083d73ae8f22c8135bc2de7985e543828014469b08f1284604051611b119190611ebb565b60405180910390a3509392505050565b63ba43b7406009541015611b805762015180610a8c600854600a5442611b4791906122e0565b611b5191906123df565b611b5b91906123df565b611b659190612414565b60096000828254611b7691906121ec565b909155505042600a555b6040805160608101825261ffff808416825269ffffffffffffffffffff42811660208085019182526001600160a01b03808916868801908152600089815260069093529682209551865493519751909116600160601b026bffffffffffffffffffffffff9790941662010000026bffffffffffffffffffffffff1990931694169390931717939093169290921790556008805460019290611c229084906121ec565b9250508190555080826001600160a01b03167f2b0c57bc9ee0e1fb27b985c9453637992f5ed5b1b8f7b4e8d5f0b5d7d425280942604051611c639190611ebb565b60405180910390a35050565b60006001600160a01b0382166105b4565b611c8981611c6f565b811461053b57600080fd5b80356105b481611c80565b80611c89565b80356105b481611c9f565b60008083601f840112611cc557611cc5600080fd5b50813567ffffffffffffffff811115611ce057611ce0600080fd5b602083019150836001820283011115611cfb57611cfb600080fd5b9250929050565b600080600080600060808688031215611d1d57611d1d600080fd5b6000611d298888611c94565b9550506020611d3a88828901611c94565b9450506040611d4b88828901611ca5565b935050606086013567ffffffffffffffff811115611d6b57611d6b600080fd5b611d7788828901611cb0565b92509250509295509295909350565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b82525050565b602081016105b48284611d86565b60006105b46001600160a01b038316611dd5565b90565b6001600160a01b031690565b60006105b482611dbe565b60006105b482611de1565b611daa81611dec565b602081016105b48284611df7565b801515611c89565b80356105b481611e0e565b600060208284031215611e3657611e36600080fd5b60006105b08484611e16565b600060208284031215611e5757611e57600080fd5b60006105b08484611c94565b61ffff8116611c89565b80356105b481611e63565b60008060408385031215611e8e57611e8e600080fd5b6000611e9a8585611c94565b9250506020611eab85828601611e6d565b9150509250929050565b80611daa565b602081016105b48284611eb5565b60008060008060008060c08789031215611ee557611ee5600080fd5b6000611ef18989611c94565b9650506020611f0289828a01611c94565b9550506040611f1389828a01611c94565b9450506060611f2489828a01611c94565b9350506080611f3589828a01611c94565b92505060a0611f4689828a01611c94565b9150509295509295509295565b801515611daa565b602081016105b48284611f53565b60008083601f840112611f7e57611f7e600080fd5b50813567ffffffffffffffff811115611f9957611f99600080fd5b602083019150836020820283011115611cfb57611cfb600080fd5b60008060208385031215611fca57611fca600080fd5b823567ffffffffffffffff811115611fe457611fe4600080fd5b611ff085828601611f69565b92509250509250929050565b60008060006060848603121561201457612014600080fd5b60006120208686611e6d565b935050602061203186828701611ca5565b925050604061204286828701611c94565b9150509250925092565b6000806000806060858703121561206557612065600080fd5b60006120718787611c94565b945050602085013567ffffffffffffffff81111561209157612091600080fd5b61209d87828801611f69565b935093505060406120b087828801611e16565b91505092959194509250565b6000806000604084860312156120d4576120d4600080fd5b60006120e08686611c94565b935050602084013567ffffffffffffffff81111561210057612100600080fd5b61210c86828701611f69565b92509250509250925092565b60006020828403121561212d5761212d600080fd5b60006105b08484611ca5565b611daa81611c6f565b602081016105b48284612139565b60088152602081017f4f6e6c7920454f41000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016105b481612150565b60118152602081017f436f6e747261637473206e6f74207365740000000000000000000000000000008152905061217e565b602080825281016105b481612194565b634e487b7160e01b600052601160045260246000fd5b600082198211156121ff576121ff6121d6565b500190565b60178152602081017f796f7527726520747279696e6720746f206368656174210000000000000000008152905061217e565b602080825281016105b481612204565b60128152602081017f526573637565204e6f7420456e61626c656400000000000000000000000000008152905061217e565b602080825281016105b481612246565b634e487b7160e01b600052603260045260246000fd5b60098152602081017f4e6f74204f776e657200000000000000000000000000000000000000000000008152905061217e565b602080825281016105b48161229e565b6000828210156122f2576122f26121d6565b500390565b608081016123058286612139565b6123126020830185612139565b61231f6040830184611eb5565b8181036060830152600081526020810195945050505050565b60006105b4611dd28381565b611daa81612338565b602081016105b48284612344565b600060001982141561236f5761236f6121d6565b5060010190565b60128152602081017f507974686561733a204e6f74204f776e657200000000000000000000000000008152905061217e565b602080825281016105b481612376565b60006105b4611dd261ffff841681565b611daa816123b8565b602081016105b482846123c8565b60008160001904831182151516156123f9576123f96121d6565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612423576124236123fe565b500490565b606081016124368286612344565b6124436020830185611eb5565b6124506040830184612139565b949350505050565b60108152602081017f5061757361626c653a20706175736564000000000000000000000000000000008152905061217e565b602080825281016105b481612458565b6000602082840312156124af576124af600080fd5b60006105b08484611e6d565b80516105b481611c80565b6000602082840312156124db576124db600080fd5b60006105b084846124bb565b60128152602081017f4e6f7420436f6c6f6e697374204f776e657200000000000000000000000000008152905061217e565b602080825281016105b4816124e7565b606081016125378286612139565b6125446020830185612139565b61245060408301846123c8565b60148152602081017f5061757361626c653a206e6f74207061757365640000000000000000000000008152905061217e565b602080825281016105b481612551565b60168152602081017f596f75722073686966742069736e2774206f76657221000000000000000000008152905061217e565b602080825281016105b481612593565b80516105b481611c9f565b6000602082840312156125f5576125f5600080fd5b60006105b084846125d556fea2646970667358221220869583cb7b8bf5aa5793e83d59cfddd89da10430f22a296afb8d8fbc0c33591d64736f6c634300080b0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637048027511610104578063af85f70f116100a2578063d3ea435011610071578063d3ea4350146103c3578063de9375f2146103d6578063f10fb584146103f6578063f2fde38b1461040957600080fd5b8063af85f70f1461037f578063c096a63214610392578063c7015321146103a5578063d3db0273146103b057600080fd5b806383d9df97116100de57806383d9df97146103475780638c2b4d8e146103505780639c58144614610363578063a33a7c5b1461036c57600080fd5b80637048027514610318578063765310081461032b57806383c495ee1461033e57600080fd5b806324b044c01161017157806339db714f1161014b57806339db714f146102b55780635c975abb146102e7578063651c82e9146102f25780636a3ef0571461030557600080fd5b806324b044c0146102905780633780f17a146102a357806337a386b9146102ab57600080fd5b80631785f53c116101ad5780631785f53c1461023257806321d0b7ae1461024557806322ba0432146102655780632463a55a1461027d57600080fd5b8063150b7a02146101d457806316527231146101fd57806316c38b3c1461021d575b600080fd5b6101e76101e2366004611d02565b61041c565b6040516101f49190611db0565b60405180910390f35b600354610210906001600160a01b031681565b6040516101f49190611e00565b61023061022b366004611e21565b610479565b005b610230610240366004611e42565b610546565b610258610253366004611e78565b61057e565b6040516101f49190611ebb565b6000546102109061010090046001600160a01b031681565b61023061028b366004611ec9565b6105ba565b600254610210906001600160a01b031681565b610258601481565b6102586202a30081565b600b546102da9074010000000000000000000000000000000000000000900460ff1681565b6040516101f49190611f5b565b60005460ff166102da565b600154610210906001600160a01b031681565b610230610313366004611fb4565b61067a565b610230610326366004611e42565b6108b6565b610230610339366004611e21565b6108f1565b61025860085481565b61025860095481565b61023061035e366004611e78565b610952565b610258610a8c81565b61023061037a366004611ffc565b610b01565b61023061038d36600461204c565b610c25565b600454610210906001600160a01b031681565b61025863ba43b74081565b6102306103be3660046120bc565b610de1565b6102586103d1366004612118565b61114d565b600b546103e9906001600160a01b031681565b6040516101f49190612142565b600554610210906001600160a01b031681565b610230610417366004611e42565b61124e565b60006001600160a01b0385161561044e5760405162461bcd60e51b815260040161044590612184565b60405180910390fd5b507f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60005461010090046001600160a01b0316158015906104a257506004546001600160a01b031615155b80156104b857506003546001600160a01b031615155b80156104ce57506001546001600160a01b031615155b80156104e457506002546001600160a01b031615155b80156104fa57506005546001600160a01b031615155b6105165760405162461bcd60e51b8152600401610445906121c6565b600b546001600160a01b0316331461052d57600080fd5b801561053e5761053b61129f565b50565b61053b61130e565b600b546001600160a01b0316331461055d57600080fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b3360009081526007602052604081205460ff1661059a57600080fd5b60006105a68484611361565b6105b090826121ec565b9150505b92915050565b600b546001600160a01b031633146105d157600080fd5b600080546001600160a01b03978816610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909116179055600480549587167fffffffffffffffffffffffff0000000000000000000000000000000000000000968716179055600380549487169486169490941790935560018054928616928516929092179091556002805491851691841691909117905560058054919093169116179055565b33600081815260076020526040902054813b919060ff16806106a4575033321480156106a4575081155b6106c05760405162461bcd60e51b815260040161044590612236565b600b5474010000000000000000000000000000000000000000900460ff166106fa5760405162461bcd60e51b815260040161044590612278565b6040805160608101825260008082526020820181905291810182905260005b858110156108ad5786868281811061073357610733612288565b602090810292909201356000818152600684526040908190208151606081018352905461ffff8116825262010000810469ffffffffffffffffffff1695820195909552600160601b9094046001600160a01b03169084018190529095509193505033146107b25760405162461bcd60e51b8152600401610445906122d0565b600083815260066020526040812081905560088054600192906107d69084906122e0565b90915550506000546040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b88d4fde9061082c903090339088906004016122f7565b600060405180830381600087803b15801561084657600080fd5b505af115801561085a573d6000803e3d6000fd5b5050505060011515837f1c2985fbd233f9b6141083d73ae8f22c8135bc2de7985e543828014469b08f126000604051610893919061234d565b60405180910390a3806108a58161235b565b915050610719565b50505050505050565b600b546001600160a01b031633146108cd57600080fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b600b546001600160a01b0316331461090857600080fd5b600b805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b33600081815260076020526040902054813b919060ff168061097c5750333214801561097c575081155b6109985760405162461bcd60e51b815260040161044590612236565b3360009081526007602052604090205460ff166109b457600080fd5b61ffff80841660009081526006602090815260409182902082516060810184529054938416815269ffffffffffffffffffff62010000850416918101919091526001600160a01b03600160601b909304831691810182905291861614610a2c5760405162461bcd60e51b8152600401610445906123a8565b61ffff8416600090815260066020526040808220829055905490517f42966c680000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316906342966c6890610a8e9087906004016123d1565b600060405180830381600087803b158015610aa857600080fd5b505af1158015610abc573d6000803e3d6000fd5b505060405161ffff871692506001600160a01b03881691507f23a4178dc186c4281ca53068d605699f78ec28f44189092fba852eebd2d5d76490600090a35050505050565b63ba43b7406009541015610b605762015180610a8c600854600a5442610b2791906122e0565b610b3191906123df565b610b3b91906123df565b610b459190612414565b60096000828254610b5691906121ec565b909155505042600a555b3360009081526007602052604090205460ff16610b7c57600080fd5b6000610b8984848461148b565b610b9390826121ec565b905080610ba05750505050565b600480546040517fe7d3fe6b0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163e7d3fe6b91610bed916001918691889101612428565b600060405180830381600087803b158015610c0757600080fd5b505af1158015610c1b573d6000803e3d6000fd5b5050505050505050565b60005460ff1615610c485760405162461bcd60e51b81526004016104459061248a565b63ba43b7406009541015610ca75762015180610a8c600854600a5442610c6e91906122e0565b610c7891906123df565b610c8291906123df565b610c8c9190612414565b60096000828254610c9d91906121ec565b909155505042600a555b33600081815260076020526040902054813b919060ff1680610cd157503332148015610cd1575081155b610ced5760405162461bcd60e51b815260040161044590612236565b6000805b85811015610d4c57610d2e88888884818110610d0f57610d0f612288565b9050602002016020810190610d24919061249a565b61ffff168761167c565b610d3890836121ec565b915080610d448161235b565b915050610cf1565b5080610d585750610dd9565b600480546040517fe7d3fe6b0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163e7d3fe6b91610da59160019186918d9101612428565b600060405180830381600087803b158015610dbf57600080fd5b505af1158015610dd3573d6000803e3d6000fd5b50505050505b505050505050565b60005460ff1615610e045760405162461bcd60e51b81526004016104459061248a565b33600081815260076020526040902054813b919060ff1680610e2e57503332148015610e2e575081155b610e4a5760405162461bcd60e51b815260040161044590612236565b6001600160a01b0385163214610e5f57600080fd5b60005b83811015610dd9576002546001600160a01b0316331415610fd5576000546001600160a01b03808816916101009004166339c7639c878785818110610ea957610ea9612288565b9050602002016020810190610ebe919061249a565b6040518263ffffffff1660e01b8152600401610eda91906123d1565b602060405180830381865afa158015610ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1b91906124c6565b6001600160a01b031614610f415760405162461bcd60e51b815260040161044590612519565b60005461010090046001600160a01b03166323b872dd8730888886818110610f6b57610f6b612288565b9050602002016020810190610f80919061249a565b6040518463ffffffff1660e01b8152600401610f9e93929190612529565b600060405180830381600087803b158015610fb857600080fd5b505af1158015610fcc573d6000803e3d6000fd5b50505050611107565b6001546001600160a01b031633146110d357600054339061010090046001600160a01b03166339c7639c87878581811061101157611011612288565b9050602002016020810190611026919061249a565b6040518263ffffffff1660e01b815260040161104291906123d1565b602060405180830381865afa15801561105f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108391906124c6565b6001600160a01b0316146110a95760405162461bcd60e51b815260040161044590612519565b60005461010090046001600160a01b03166323b872dd3330888886818110610f6b57610f6b612288565b8484828181106110e5576110e5612288565b90506020020160208101906110fa919061249a565b61ffff166111075761113b565b61113b8686868481811061111d5761111d612288565b9050602002016020810190611132919061249a565b61ffff16611b21565b806111458161235b565b915050610e62565b60008181526006602090815260408083208151606081018352905461ffff8116825262010000810469ffffffffffffffffffff1693820193909352600160601b9092046001600160a01b03169082015260095463ba43b74011156111e95762015180610a8c826020015169ffffffffffffffffffff16426111ce91906122e0565b6111d891906123df565b6111e29190612414565b9150611248565b600a54816020015169ffffffffffffffffffff16111561120c5760009150611248565b62015180610a8c826020015169ffffffffffffffffffff16600a5461123191906122e0565b61123b91906123df565b6112459190612414565b91505b50919050565b600b546001600160a01b0316331461126557600080fd5b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60005460ff16156112c25760405162461bcd60e51b81526004016104459061248a565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112f73390565b6040516113049190612142565b60405180910390a1565b60005460ff166113305760405162461bcd60e51b815260040161044590612583565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336112f7565b61ffff808216600090815260066020908152604080832081516060810183529054948516815269ffffffffffffffffffff62010000860416928101929092526001600160a01b03600160601b909404841690820181905291929091908516146113dc5760405162461bcd60e51b8152600401610445906122d0565b63ba43b74060095410156114285762015180610a8c826020015169ffffffffffffffffffff164261140d91906122e0565b61141791906123df565b6114219190612414565b9150611484565b600a54816020015169ffffffffffffffffffff16111561144b5760009150611484565b62015180610a8c826020015169ffffffffffffffffffff16600a5461147091906122e0565b61147a91906123df565b6105b09190612414565b5092915050565b61ffff808416600090815260066020908152604080832081516060810183529054948516815269ffffffffffffffffffff62010000860416928101929092526001600160a01b03600160601b909404841690820181905291929091908416146115065760405162461bcd60e51b8152600401610445906123a8565b600060646115156014876123df565b61151f9190612414565b6003546040517fa10595d10000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063a10595d190611569908490600401611ebb565b600060405180830381600087803b15801561158357600080fd5b505af1158015611597573d6000803e3d6000fd5b5050505080856115a791906122e0565b6040805160608101825261ffff808a1680835269ffffffffffffffffffff42811660208086019182526001600160a01b03808d16878901908152600086815260069093528883209751885494519151909216600160601b026bffffffffffffffffffffffff9190951662010000026bffffffffffffffffffffffff199094169190961617919091179390931617909255915192955090917f1c2985fbd233f9b6141083d73ae8f22c8135bc2de7985e543828014469b08f129061166b908790611ebb565b60405180910390a350509392505050565b60008281526006602090815260408083208151606081018352905461ffff8116825269ffffffffffffffffffff62010000820416938201939093526001600160a01b03600160601b9093048316918101829052918616146116ef5760405162461bcd60e51b8152600401610445906122d0565b82801561171957506202a300816020015169ffffffffffffffffffff164261171791906122e0565b105b156117365760405162461bcd60e51b8152600401610445906125c5565b63ba43b74060095410156117825762015180610a8c826020015169ffffffffffffffffffff164261176791906122e0565b61177191906123df565b61177b9190612414565b91506117e1565b600a54816020015169ffffffffffffffffffff1611156117a557600091506117e1565b62015180610a8c826020015169ffffffffffffffffffff16600a546117ca91906122e0565b6117d491906123df565b6117de9190612414565b91505b82156119af576005546040517fb863bd370000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b863bd3790611830908790600401611ebb565b6020604051808303816000875af115801561184f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187391906125e0565b600116600114156118fe576003546040517fa10595d10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a10595d1906118c7908590600401611ebb565b600060405180830381600087803b1580156118e157600080fd5b505af11580156118f5573d6000803e3d6000fd5b50505050600091505b600084815260066020526040812081905560088054600192906119229084906122e0565b90915550506000546040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b88d4fde90611978903090899089906004016122f7565b600060405180830381600087803b15801561199257600080fd5b505af11580156119a6573d6000803e3d6000fd5b50505050611ade565b6003546001600160a01b031663a10595d160646119cd6014866123df565b6119d79190612414565b6040518263ffffffff1660e01b81526004016119f39190611ebb565b600060405180830381600087803b158015611a0d57600080fd5b505af1158015611a21573d6000803e3d6000fd5b50505050606460146064611a3591906122e0565b611a3f90846123df565b611a499190612414565b6040805160608101825261ffff87811682524269ffffffffffffffffffff90811660208085019182526001600160a01b038c811686880190815260008d8152600690935296909120945185549251965194166bffffffffffffffffffffffff1990921691909117620100009590921694909402176bffffffffffffffffffffffff16600160601b919093160291909117905591505b821515847f1c2985fbd233f9b6141083d73ae8f22c8135bc2de7985e543828014469b08f1284604051611b119190611ebb565b60405180910390a3509392505050565b63ba43b7406009541015611b805762015180610a8c600854600a5442611b4791906122e0565b611b5191906123df565b611b5b91906123df565b611b659190612414565b60096000828254611b7691906121ec565b909155505042600a555b6040805160608101825261ffff808416825269ffffffffffffffffffff42811660208085019182526001600160a01b03808916868801908152600089815260069093529682209551865493519751909116600160601b026bffffffffffffffffffffffff9790941662010000026bffffffffffffffffffffffff1990931694169390931717939093169290921790556008805460019290611c229084906121ec565b9250508190555080826001600160a01b03167f2b0c57bc9ee0e1fb27b985c9453637992f5ed5b1b8f7b4e8d5f0b5d7d425280942604051611c639190611ebb565b60405180910390a35050565b60006001600160a01b0382166105b4565b611c8981611c6f565b811461053b57600080fd5b80356105b481611c80565b80611c89565b80356105b481611c9f565b60008083601f840112611cc557611cc5600080fd5b50813567ffffffffffffffff811115611ce057611ce0600080fd5b602083019150836001820283011115611cfb57611cfb600080fd5b9250929050565b600080600080600060808688031215611d1d57611d1d600080fd5b6000611d298888611c94565b9550506020611d3a88828901611c94565b9450506040611d4b88828901611ca5565b935050606086013567ffffffffffffffff811115611d6b57611d6b600080fd5b611d7788828901611cb0565b92509250509295509295909350565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b82525050565b602081016105b48284611d86565b60006105b46001600160a01b038316611dd5565b90565b6001600160a01b031690565b60006105b482611dbe565b60006105b482611de1565b611daa81611dec565b602081016105b48284611df7565b801515611c89565b80356105b481611e0e565b600060208284031215611e3657611e36600080fd5b60006105b08484611e16565b600060208284031215611e5757611e57600080fd5b60006105b08484611c94565b61ffff8116611c89565b80356105b481611e63565b60008060408385031215611e8e57611e8e600080fd5b6000611e9a8585611c94565b9250506020611eab85828601611e6d565b9150509250929050565b80611daa565b602081016105b48284611eb5565b60008060008060008060c08789031215611ee557611ee5600080fd5b6000611ef18989611c94565b9650506020611f0289828a01611c94565b9550506040611f1389828a01611c94565b9450506060611f2489828a01611c94565b9350506080611f3589828a01611c94565b92505060a0611f4689828a01611c94565b9150509295509295509295565b801515611daa565b602081016105b48284611f53565b60008083601f840112611f7e57611f7e600080fd5b50813567ffffffffffffffff811115611f9957611f99600080fd5b602083019150836020820283011115611cfb57611cfb600080fd5b60008060208385031215611fca57611fca600080fd5b823567ffffffffffffffff811115611fe457611fe4600080fd5b611ff085828601611f69565b92509250509250929050565b60008060006060848603121561201457612014600080fd5b60006120208686611e6d565b935050602061203186828701611ca5565b925050604061204286828701611c94565b9150509250925092565b6000806000806060858703121561206557612065600080fd5b60006120718787611c94565b945050602085013567ffffffffffffffff81111561209157612091600080fd5b61209d87828801611f69565b935093505060406120b087828801611e16565b91505092959194509250565b6000806000604084860312156120d4576120d4600080fd5b60006120e08686611c94565b935050602084013567ffffffffffffffff81111561210057612100600080fd5b61210c86828701611f69565b92509250509250925092565b60006020828403121561212d5761212d600080fd5b60006105b08484611ca5565b611daa81611c6f565b602081016105b48284612139565b60088152602081017f4f6e6c7920454f41000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016105b481612150565b60118152602081017f436f6e747261637473206e6f74207365740000000000000000000000000000008152905061217e565b602080825281016105b481612194565b634e487b7160e01b600052601160045260246000fd5b600082198211156121ff576121ff6121d6565b500190565b60178152602081017f796f7527726520747279696e6720746f206368656174210000000000000000008152905061217e565b602080825281016105b481612204565b60128152602081017f526573637565204e6f7420456e61626c656400000000000000000000000000008152905061217e565b602080825281016105b481612246565b634e487b7160e01b600052603260045260246000fd5b60098152602081017f4e6f74204f776e657200000000000000000000000000000000000000000000008152905061217e565b602080825281016105b48161229e565b6000828210156122f2576122f26121d6565b500390565b608081016123058286612139565b6123126020830185612139565b61231f6040830184611eb5565b8181036060830152600081526020810195945050505050565b60006105b4611dd28381565b611daa81612338565b602081016105b48284612344565b600060001982141561236f5761236f6121d6565b5060010190565b60128152602081017f507974686561733a204e6f74204f776e657200000000000000000000000000008152905061217e565b602080825281016105b481612376565b60006105b4611dd261ffff841681565b611daa816123b8565b602081016105b482846123c8565b60008160001904831182151516156123f9576123f96121d6565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612423576124236123fe565b500490565b606081016124368286612344565b6124436020830185611eb5565b6124506040830184612139565b949350505050565b60108152602081017f5061757361626c653a20706175736564000000000000000000000000000000008152905061217e565b602080825281016105b481612458565b6000602082840312156124af576124af600080fd5b60006105b08484611e6d565b80516105b481611c80565b6000602082840312156124db576124db600080fd5b60006105b084846124bb565b60128152602081017f4e6f7420436f6c6f6e697374204f776e657200000000000000000000000000008152905061217e565b602080825281016105b4816124e7565b606081016125378286612139565b6125446020830185612139565b61245060408301846123c8565b60148152602081017f5061757361626c653a206e6f74207061757365640000000000000000000000008152905061217e565b602080825281016105b481612551565b60168152602081017f596f75722073686966742069736e2774206f76657221000000000000000000008152905061217e565b602080825281016105b481612593565b80516105b481611c9f565b6000602082840312156125f5576125f5600080fd5b60006105b084846125d556fea2646970667358221220869583cb7b8bf5aa5793e83d59cfddd89da10430f22a296afb8d8fbc0c33591d64736f6c634300080b0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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