ETH Price: $2,679.48 (-0.65%)
Gas: 0.72 Gwei

Contract

0xf04aF3f4E4929F7CD25A751E6149A3318373d4FE
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve218362202025-02-13 7:57:594 days ago1739433479IN
Seasonal Tokens: SPRING Token
0 ETH0.000061531.3273062
Safe Approve And...217912602025-02-07 1:10:5910 days ago1738890659IN
Seasonal Tokens: SPRING Token
0 ETH0.000079810.94858217
Approve215911132025-01-10 2:31:3538 days ago1736476295IN
Seasonal Tokens: SPRING Token
0 ETH0.000247845.35039146
Approve215910092025-01-10 2:10:2338 days ago1736475023IN
Seasonal Tokens: SPRING Token
0 ETH0.000298516.40926291
Mint215033612024-12-28 20:30:4750 days ago1735417847IN
Seasonal Tokens: SPRING Token
0 ETH0.000485538.59098302
Approve214787952024-12-25 10:08:5953 days ago1735121339IN
Seasonal Tokens: SPRING Token
0 ETH0.000354977.62349812
Approve214652412024-12-23 12:39:3555 days ago1734957575IN
Seasonal Tokens: SPRING Token
0 ETH0.000347277.49865962
Safe Approve And...214618262024-12-23 1:11:3556 days ago1734916295IN
Seasonal Tokens: SPRING Token
0 ETH0.000385014.54303873
Approve214513002024-12-21 13:52:1157 days ago1734789131IN
Seasonal Tokens: SPRING Token
0 ETH0.0005320311.48831076
Approve214492852024-12-21 7:06:5958 days ago1734764819IN
Seasonal Tokens: SPRING Token
0 ETH0.0004809110.31238997
Mint214331182024-12-19 0:53:2360 days ago1734569603IN
Seasonal Tokens: SPRING Token
0 ETH0.000824114.58159368
Safe Approve And...214188842024-12-17 1:11:2362 days ago1734397883IN
Seasonal Tokens: SPRING Token
0 ETH0.0008727310.29785566
Safe Approve And...214117112024-12-16 1:11:1163 days ago1734311471IN
Seasonal Tokens: SPRING Token
0 ETH0.0012214814.41297043
Safe Approve And...214045552024-12-15 1:11:4764 days ago1734225107IN
Seasonal Tokens: SPRING Token
0 ETH0.000575596.79171185
Safe Approve And...213973912024-12-14 1:12:3565 days ago1734138755IN
Seasonal Tokens: SPRING Token
0 ETH0.0009175310.82644148
Safe Approve And...213902302024-12-13 1:12:5966 days ago1734052379IN
Seasonal Tokens: SPRING Token
0 ETH0.0009944911.73456394
Safe Approve And...213830602024-12-12 1:11:4767 days ago1733965907IN
Seasonal Tokens: SPRING Token
0 ETH0.0012269214.4772126
Mint213805542024-12-11 16:47:4767 days ago1733935667IN
Seasonal Tokens: SPRING Token
0 ETH0.0016812429.74135723
Safe Approve And...213759052024-12-11 1:11:5968 days ago1733879519IN
Seasonal Tokens: SPRING Token
0 ETH0.0011279513.30937815
Safe Approve And...213687442024-12-10 1:11:3569 days ago1733793095IN
Seasonal Tokens: SPRING Token
0 ETH0.0018192221.46603711
Safe Approve And...213615712024-12-09 1:11:1170 days ago1733706671IN
Seasonal Tokens: SPRING Token
0 ETH0.0014492517.10053693
Safe Approve And...213544062024-12-08 1:12:1171 days ago1733620331IN
Seasonal Tokens: SPRING Token
0 ETH0.0008682710.24528547
Safe Approve And...213472512024-12-07 1:11:3572 days ago1733533895IN
Seasonal Tokens: SPRING Token
0 ETH0.001283215.1412311
Safe Approve And...213401412024-12-06 1:21:5973 days ago1733448119IN
Seasonal Tokens: SPRING Token
0 ETH0.0015626918.43909259
Safe Approve And...213330852024-12-05 1:42:3574 days ago1733362955IN
Seasonal Tokens: SPRING Token
0 ETH0.001408216.61623407
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
218624562025-02-17 0:12:477 hrs ago1739751167
0xf04aF3f4...18373d4FE
0 ETH
218614962025-02-16 20:59:2311 hrs ago1739739563
0xf04aF3f4...18373d4FE
0 ETH
218608932025-02-16 18:58:1113 hrs ago1739732291
0xf04aF3f4...18373d4FE
0 ETH
218604652025-02-16 17:31:2314 hrs ago1739727083
0xf04aF3f4...18373d4FE
0 ETH
218603932025-02-16 17:16:5914 hrs ago1739726219
0xf04aF3f4...18373d4FE
0 ETH
218586442025-02-16 11:24:5920 hrs ago1739705099
0xf04aF3f4...18373d4FE
0 ETH
218584582025-02-16 10:47:3521 hrs ago1739702855
0xf04aF3f4...18373d4FE
0 ETH
218474932025-02-14 21:52:472 days ago1739569967
0xf04aF3f4...18373d4FE
0 ETH
218411242025-02-14 0:27:353 days ago1739492855
0xf04aF3f4...18373d4FE
0 ETH
218362242025-02-13 7:58:474 days ago1739433527
0xf04aF3f4...18373d4FE
0 ETH
218362242025-02-13 7:58:474 days ago1739433527
0xf04aF3f4...18373d4FE
0 ETH
218362242025-02-13 7:58:474 days ago1739433527
0xf04aF3f4...18373d4FE
0 ETH
218348452025-02-13 3:21:234 days ago1739416883
0xf04aF3f4...18373d4FE
0 ETH
218339882025-02-13 0:28:354 days ago1739406515
0xf04aF3f4...18373d4FE
0 ETH
218331302025-02-12 21:36:234 days ago1739396183
0xf04aF3f4...18373d4FE
0 ETH
218328332025-02-12 20:36:594 days ago1739392619
0xf04aF3f4...18373d4FE
0 ETH
218320022025-02-12 17:49:474 days ago1739382587
0xf04aF3f4...18373d4FE
0 ETH
218309492025-02-12 14:17:594 days ago1739369879
0xf04aF3f4...18373d4FE
0 ETH
218254582025-02-11 19:46:115 days ago1739303171
0xf04aF3f4...18373d4FE
0 ETH
218250682025-02-11 18:27:595 days ago1739298479
0xf04aF3f4...18373d4FE
0 ETH
218218582025-02-11 7:41:596 days ago1739259719
0xf04aF3f4...18373d4FE
0 ETH
218218582025-02-11 7:41:596 days ago1739259719
0xf04aF3f4...18373d4FE
0 ETH
218218572025-02-11 7:41:476 days ago1739259707
0xf04aF3f4...18373d4FE
0 ETH
218218572025-02-11 7:41:476 days ago1739259707
0xf04aF3f4...18373d4FE
0 ETH
218217812025-02-11 7:26:356 days ago1739258795
0xf04aF3f4...18373d4FE
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SpringToken

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 5: SpringToken.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.5;


import "./ERC20.sol";
import "./ERC918.sol";
import "./Owned.sol";
import "./ApproveAndCallFallBack.sol";



// ----------------------------------------------------------------------------

// 'Spring Token' contract

// ERC20 & ERC918 Mineable Token using Proof Of Work

// Symbol      : SPRING

// Name        : Spring Token

// Total supply: 33,112,800.00

// Decimals    : 18

// Initial mining reward: 168

// Fraction of total supply released before first halving: 1/5

// ----------------------------------------------------------------------------





contract SpringToken is ERC20Interface, ERC918, Owned {

    string private constant SYMBOL = "SPRING";

    string private constant NAME = "Spring Token";

    uint256 public constant TOKEN_IDENTIFIER = 1;

    uint8 public constant DECIMALS = 18;

    uint256 public constant TOTAL_SUPPLY = 33112800 * 10**18;

    uint256 public constant INITIAL_REWARD = 168 * 10**18;

    uint256 public constant MAX_REWARDS_AVAILABLE = 72; // no more than 72 rewards per mint

    uint256 public constant REWARD_INTERVAL = 600; // rewards every ten minutes on average

    uint256 public constant DURATION_OF_FIRST_ERA = (365 * 24 * 60 * 60 * 3) / 4; // 9 months

    uint256 public constant DURATION_OF_ERA = 3 * 365 * 24 * 60 * 60; // three years

    uint256 public constant MINIMUM_TARGET = 2**16;

    uint256 public constant MAXIMUM_TARGET = 2**234;

    uint256 public immutable contractCreationTime;

    uint256 public lastRewardBlockTime;

    uint256 public maxNumberOfRewardsPerMint;

    bytes32 private challengeNumber;
        
    uint256 private miningTarget;

    uint256 public tokensMinted;

    mapping(address => uint256) internal balances;

    mapping(address => mapping(address => uint256)) internal allowed;


    constructor() {

        miningTarget = MAXIMUM_TARGET / 2**19;

        contractCreationTime = block.timestamp;
        lastRewardBlockTime = block.timestamp;

        maxNumberOfRewardsPerMint = 1;

        challengeNumber = _getNewChallengeNumber(0);

    }

    function name() public pure returns (string memory) {
        return NAME;
    }

    function symbol() public pure returns (string memory) {
        return SYMBOL;
    }

    function mint(uint256 nonce) override public returns (bool success) {

        uint256 _lastRewardBlockTime = lastRewardBlockTime;
        
        uint256 singleRewardAmount = _getMiningReward(_lastRewardBlockTime);

        // no more minting when reward reaches zero
        if (singleRewardAmount == 0) revert("Reward has reached zero");

        // the PoW must contain work that includes the challenge number and the msg.sender's address
        bytes32 digest =  keccak256(abi.encodePacked(challengeNumber, msg.sender, nonce));

        uint256 _miningTarget = miningTarget;
        // the digest must be smaller than the target
        if (uint256(digest) > _miningTarget) revert("Digest is larger than mining target");

        uint256 _previousMaxNumberOfRewards = maxNumberOfRewardsPerMint;
        uint256 numberOfRewardsToGive = _numberOfRewardsToGive(_miningTarget / uint256(digest), 
                                                               _lastRewardBlockTime,
                                                               _previousMaxNumberOfRewards,
                                                               block.timestamp);
        uint256 totalRewardAmount = singleRewardAmount * numberOfRewardsToGive;

        uint256 _tokensMinted = _giveRewards(totalRewardAmount);
        
        _setNextMaxNumberOfRewards(numberOfRewardsToGive, _previousMaxNumberOfRewards);

        miningTarget = _adjustDifficulty(_miningTarget, _lastRewardBlockTime,
                                         numberOfRewardsToGive, block.timestamp);

        bytes32 newChallengeNumber = _getNewChallengeNumber(_tokensMinted);
        challengeNumber = newChallengeNumber;

        lastRewardBlockTime = block.timestamp;

        emit Mint(msg.sender, totalRewardAmount, _scheduledNumberOfRewards(block.timestamp), 
                  newChallengeNumber);

        return true;
    }

    function _numberOfRewardsAvailable(uint256 _lastRewardBlockTime, 
                                       uint256 _previousMaxNumberOfRewards, 
                                       uint256 currentTime) internal pure returns (uint256) {

        uint256 numberAvailable = _previousMaxNumberOfRewards;
        uint256 intervalsSinceLastReward = (currentTime - _lastRewardBlockTime) / REWARD_INTERVAL;
        
        if (intervalsSinceLastReward > numberAvailable)
            numberAvailable = intervalsSinceLastReward;

        if (numberAvailable > MAX_REWARDS_AVAILABLE)
            numberAvailable = MAX_REWARDS_AVAILABLE;

        return numberAvailable;
    }

    function _numberOfRewardsToGive(uint256 numberEarned, uint256 _lastRewardBlockTime, 
                                    uint256 _previousMaxNumberOfRewards,
                                    uint256 currentTime) internal pure returns (uint256) {

        uint256 numberAvailable = _numberOfRewardsAvailable(_lastRewardBlockTime,
                                                         _previousMaxNumberOfRewards,
                                                         currentTime);
        if (numberEarned < numberAvailable)
            return numberEarned;

        return numberAvailable;
    }

    function _giveRewards(uint256 totalReward) internal returns (uint256) {

        balances[msg.sender] += totalReward;
        uint256 _tokensMinted = tokensMinted + totalReward;
        tokensMinted = _tokensMinted;
        return _tokensMinted;
    }

    function _setNextMaxNumberOfRewards(uint256 numberOfRewardsGivenNow, 
                                        uint256 _previousMaxNumberOfRewards) internal {

        // the value of the rewards given to this miner presumably exceed the gas costs
        // for processing the transaction. the next miner can submit a proof of enough work
        // to claim up to the same number of rewards immediately, or, if gas costs have increased,
        // wait until the maximum number of rewards claimable has increased enough to overcome
        // the costs.

        if (numberOfRewardsGivenNow != _previousMaxNumberOfRewards)
            maxNumberOfRewardsPerMint = numberOfRewardsGivenNow;
    }

    // backwards compatible mint function
    function mint(uint256 _nonce, bytes32 _challengeDigest) external returns (bool) {

        bytes32 digest = keccak256(abi.encodePacked(challengeNumber, msg.sender, _nonce));
        require(digest == _challengeDigest, "Challenge digest does not match expected digest on token contract");
        
        return mint(_nonce);
    }

    function _getNewChallengeNumber(uint256 _tokensMinted) internal view returns (bytes32) {
        
        // make the latest ethereum block hash a part of the next challenge

        // xor with a number unique to this token to avoid merged mining
        
        // xor with the number of tokens minted to ensure that the challenge changes
        // even if there are multiple mints in the same ethereum block
        
        return bytes32(uint256(blockhash(block.number - 1)) ^ _tokensMinted ^ TOKEN_IDENTIFIER);
    }


    function _scheduledNumberOfRewards(uint256 currentTime) internal view returns (uint256) {
        return (currentTime - contractCreationTime) / REWARD_INTERVAL;
    }

    function _adjustDifficulty(uint256 _miningTarget, 
                               uint256 _lastRewardBlockTime, 
                               uint256 rewardsGivenNow,
                               uint256 currentTime) internal pure returns (uint256){

        uint256 timeSinceLastReward = currentTime - _lastRewardBlockTime;

        // we target a median interval of 10 minutes multiplied by log(2) ~ 61/88 
        // this gives a mean interval of 10 minutes per reward

        if (timeSinceLastReward * 88 < rewardsGivenNow * REWARD_INTERVAL * 61)
            _miningTarget = (_miningTarget * 99) / 100;   // slow down
        else
            _miningTarget = (_miningTarget * 100) / 99;   // speed up

        if (_miningTarget < MINIMUM_TARGET)
            _miningTarget = MINIMUM_TARGET;
        
        if (_miningTarget > MAXIMUM_TARGET) 
            _miningTarget = MAXIMUM_TARGET;

        return _miningTarget;
    }


    function rewardEra(uint256 _time) public view returns (uint256) {

        uint256 timeSinceContractCreation = _time - contractCreationTime;

        if (timeSinceContractCreation < DURATION_OF_FIRST_ERA)
            return 0;
        else
            return 1 + (timeSinceContractCreation - DURATION_OF_FIRST_ERA) / DURATION_OF_ERA;
    }

    function getAdjustmentInterval() public view override returns (uint256) {
        return REWARD_INTERVAL * maxNumberOfRewardsPerMint;
    }

    function getChallengeNumber() public view override returns (bytes32) {
        return challengeNumber;
    }

    function getMiningDifficulty() public view override returns (uint256) {
        // 64 f's:         1234567890123456789012345678901234567890123456789012345678901234
        uint256 maxInt = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
        return maxInt / miningTarget;
    }

    function getMiningTarget() public view override returns (uint256) {
       return miningTarget;
   }

    function getMiningReward() public view override returns (uint256) {

        // use the timestamp of the ethereum block that gave the last reward
        // because ethereum miners can manipulate the value of block.timestamp
        return _getMiningReward(lastRewardBlockTime);
    }

    function _getMiningReward(uint256 _time) internal view returns (uint256) {
        return INITIAL_REWARD / 2**rewardEra(_time);
    }

    function getNumberOfRewardsAvailable(uint256 currentTime) external view returns (uint256) {
        return _numberOfRewardsAvailable(lastRewardBlockTime, 
                                         maxNumberOfRewardsPerMint, 
                                         currentTime);
    }

    function getRewardAmountForAchievingTarget(uint256 targetAchieved, uint256 currentTime) external view returns (uint256) {
        uint256 numberOfRewardsToGive = _numberOfRewardsToGive(miningTarget / targetAchieved, 
                                                               lastRewardBlockTime, 
                                                               maxNumberOfRewardsPerMint, 
                                                               currentTime);
        return _getMiningReward(currentTime) * numberOfRewardsToGive;
    }

    function decimals() public pure override returns (uint8) {
        return DECIMALS;
    }

    function totalSupply() public view override returns (uint256) {

        return tokensMinted;
    }


    // ------------------------------------------------------------------------

    // Get the token balance for account `tokenOwner`

    // ------------------------------------------------------------------------

    function balanceOf(address tokenOwner) public view override returns (uint256 balance) {

        return balances[tokenOwner];

    }



    // ------------------------------------------------------------------------

    // Transfer the balance from token owner's account to `to` account

    // - Owner's account must have sufficient balance to transfer

    // - 0 value transfers are allowed

    // ------------------------------------------------------------------------

    function transfer(address to, uint256 tokens) public override returns (bool success) {
        
        require(to != address(0) && to != address(this), "Invalid address");
        
        balances[msg.sender] = balances[msg.sender] - tokens;

        balances[to] = balances[to] + tokens;

        emit Transfer(msg.sender, to, tokens);

        return true;

    }



    // ------------------------------------------------------------------------

    // Token owner can approve for `spender` to transferFrom(...) `tokens`

    // from the token owner's account

    //

    // Warning: This function is vulnerable to double-spend attacks and is

    // included for backwards compatibility. Use safeApprove instead.

    // ------------------------------------------------------------------------

    function approve(address spender, uint256 tokens) public override returns (bool success) {
        
        require(spender != address(0) && spender != address(this), "Invalid address");

        allowed[msg.sender][spender] = tokens;

        emit Approval(msg.sender, spender, tokens);

        return true;

    }



    // ------------------------------------------------------------------------

    // Allow token owner to cancel the approval if the approved amount changes from its last

    // known value before this transaction is processed. This allows the owner to avoid 

    // unintentionally re-approving funds that have already been spent.

    // ------------------------------------------------------------------------

    function safeApprove(address spender, uint256 previousAllowance, uint256 newAllowance) external returns (bool success) {

        require(allowed[msg.sender][spender] == previousAllowance,
                "Current spender allowance does not match specified value");

        return approve(spender, newAllowance);
    }



    // ------------------------------------------------------------------------

    // Transfer `tokens` from the `from` account to the `to` account

    //

    // The calling account must already have sufficient tokens approve(...)-d

    // for spending from the `from` account and

    // - From account must have sufficient balance to transfer

    // - Spender must have sufficient allowance to transfer

    // - 0 value transfers are allowed

    // ------------------------------------------------------------------------

    function transferFrom(address from, address to, uint256 tokens) public override returns (bool success) {
        
        require(to != address(0) && to != address(this), "Invalid address");

        balances[from] = balances[from] - tokens;

        allowed[from][msg.sender] = allowed[from][msg.sender] - tokens;

        balances[to] = balances[to] + tokens;

        emit Transfer(from, to, tokens);

        return true;

    }



    // ------------------------------------------------------------------------

    // Returns the amount of tokens approved by the owner that can be

    // transferred to the spender's account

    // ------------------------------------------------------------------------

    function allowance(address tokenOwner, address spender) public view override returns (uint256 remaining){

        return allowed[tokenOwner][spender];

    }


    // ------------------------------------------------------------------------

    // Token owner can approve for `spender` to transferFrom(...) `tokens`

    // from the token owner's account. The `spender` contract function

    // `receiveApproval(...)` is then executed. This is vulnerable to double-spend attacks

    // when called directly, so it is declared internal and called by safeApproveAndCall

    // ------------------------------------------------------------------------

    function approveAndCall(address spender, uint256 tokens, bytes memory data) internal returns (bool success) {
        
        require(spender != address(0) && spender != address(this), "Invalid address");

        allowed[msg.sender][spender] = tokens;

        emit Approval(msg.sender, spender, tokens);

        ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data);

        return true;

    }


    // ------------------------------------------------------------------------

    // Allow safe approvals with calls to receiving contract

    // ------------------------------------------------------------------------

    function safeApproveAndCall(address spender, uint256 previousAllowance, 
                                uint256 newAllowance, bytes memory data) external returns (bool success) {

        require(allowed[msg.sender][spender] == previousAllowance,
                "Current spender allowance does not match specified value");

        return approveAndCall(spender, newAllowance, data);
    }


    // ------------------------------------------------------------------------

    // Owner can transfer out any accidentally sent ERC20 tokens

    // ------------------------------------------------------------------------

    function transferAnyERC20Token(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success) {

        return ERC20Interface(tokenAddress).transfer(owner, tokens);

    }

}

File 2 of 5: ApproveAndCallFallBack.sol
    //SPDX-License-Identifier: MIT
    pragma solidity 0.8.5;



    // ----------------------------------------------------------------------------

    // Contract function to receive approval and execute function in one call

    // Borrowed from MiniMeToken

    // ----------------------------------------------------------------------------

    abstract contract ApproveAndCallFallBack {

        function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public virtual ;

    }


File 3 of 5: ERC20.sol
    //SPDX-License-Identifier: MIT
    pragma solidity 0.8.5;


    // ----------------------------------------------------------------------------

    // ERC Token Standard #20 Interface

    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md

    // ----------------------------------------------------------------------------

    abstract contract ERC20Interface {

        function totalSupply() public view virtual returns (uint);

        function balanceOf(address tokenOwner) public view virtual returns (uint balance);

        function allowance(address tokenOwner, address spender) public view virtual returns (uint remaining);

        function transfer(address to, uint tokens) public virtual returns (bool success);

        function approve(address spender, uint tokens) public virtual returns (bool success);

        function transferFrom(address from, address to, uint tokens) public virtual returns (bool success);


        event Transfer(address indexed from, address indexed to, uint tokens);

        event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

    }



File 4 of 5: ERC918.sol
    //SPDX-License-Identifier: MIT
    pragma solidity 0.8.5;


    // ----------------------------------------------------------------------------

    // ERC Token Standard #918 Interface

    // https://eips.ethereum.org/EIPS/eip-918

    // ----------------------------------------------------------------------------

    interface ERC918  {

        function mint(uint256 nonce) external returns (bool success);

        function getAdjustmentInterval() external view returns (uint);

        function getChallengeNumber() external view returns (bytes32);

        function getMiningDifficulty() external view returns (uint);

        function getMiningTarget() external view returns (uint);

        function getMiningReward() external view returns (uint);
       
        function decimals() external view returns (uint8);


        event Mint(address indexed from, uint rewardAmount, uint epochCount, bytes32 newChallengeNumber);
    }

File 5 of 5: Owned.sol
    //SPDX-License-Identifier: MIT
    pragma solidity 0.8.5;



    // ----------------------------------------------------------------------------

    // Owned contract

    // ----------------------------------------------------------------------------

    abstract contract Owned {

        address public owner;

        address public newOwner;


        event OwnershipTransferred(address indexed _from, address indexed _to);


        constructor() {

            owner = msg.sender;

        }


        modifier onlyOwner {

            require(msg.sender == owner);

            _;

        }


        function transferOwnership(address _newOwner) public onlyOwner {

            require(_newOwner != address(0), "Invalid address");

            newOwner = _newOwner;

        }

        function acceptOwnership() external {

            require(msg.sender == newOwner);

            emit OwnershipTransferred(owner, newOwner);

            owner = newOwner;

            newOwner = address(0);

        }

    }


Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epochCount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"newChallengeNumber","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DURATION_OF_ERA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DURATION_OF_FIRST_ERA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_REWARDS_AVAILABLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_IDENTIFIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractCreationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getAdjustmentInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChallengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningDifficulty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"currentTime","type":"uint256"}],"name":"getNumberOfRewardsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"targetAchieved","type":"uint256"},{"internalType":"uint256","name":"currentTime","type":"uint256"}],"name":"getRewardAmountForAchievingTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNumberOfRewardsPerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes32","name":"_challengeDigest","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"rewardEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"previousAllowance","type":"uint256"},{"internalType":"uint256","name":"newAllowance","type":"uint256"}],"name":"safeApprove","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"previousAllowance","type":"uint256"},{"internalType":"uint256","name":"newAllowance","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeApproveAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b50600080546001600160a01b0319163317905561003462080000600160ea1b61006f565b600555426080819052600255600160035561004f6000610057565b6004556100b6565b60006001826100668243610091565b40181892915050565b60008261008c57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156100b157634e487b7160e01b600052601160045260246000fd5b500390565b6080516115b0620000e06000396000818161047e01528181610bff015261106c01526115b06000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806379ba50971161013b578063cea3e530116100b8578063ef08fc6e1161007c578063ef08fc6e14610507578063f2fde38b14610512578063f650366214610525578063f77e180e14610538578063f79875461461054257600080fd5b8063cea3e53014610479578063d390a1e4146104a0578063d4ee1d90146104a8578063dc39d06d146104bb578063dd62ed3e146104ce57600080fd5b80639fb68299116100ff5780639fb6829914610425578063a0712d6814610438578063a9059cbb1461044b578063aa3308bd1461045e578063c2d98c6e1461047157600080fd5b806379ba5097146103a95780638da5cb5b146103b35780638f759183146103de578063902d55a5146103f157806395d89b411461040357600080fd5b8063313ce567116101c95780634ef376281161018d5780634ef376281461035b57806357dd62fb146103635780635dbdda691461036e5780636de9f32b1461037757806370a082311461038057600080fd5b8063313ce5671461032b57806332e997081461033257806336bcf7d61461033a578063490203a71461034a5780634a1da80e1461035257600080fd5b806317da485f1161021057806317da485f146102db5780631801fbe5146102e357806318160ddd146102f657806323b872dd146102fe5780632e0f26251461031157600080fd5b8063031052f31461024d578063068a24951461026b57806306fdde031461028e578063095ea7b3146102bf5780630d97a2fb146102d2575b600080fd5b610258600160ea1b81565b6040519081526020015b60405180910390f35b61027e61027936600461119e565b61054a565b6040519015158152602001610262565b60408051808201909152600c81526b29b83934b733902a37b5b2b760a11b60208201525b604051610262919061135a565b61027e6102cd366004611141565b6105ab565b61025860035481565b610258610650565b61027e6102f13660046112ae565b61066a565b600654610258565b61027e61030c366004611105565b61073f565b610319601281565b60405160ff9091168152602001610262565b6012610319565b600554610258565b61025868091b77e5e5d9a0000081565b61025861087f565b61025860025481565b600454610258565b6102586305a39a8081565b61025861025881565b61025860065481565b61025861038e3660046110b7565b6001600160a01b031660009081526007602052604090205490565b6103b1610891565b005b6000546103c6906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b6102586103ec366004611295565b61090c565b6102586a1b63e87c1f629e3f80000081565b604080518082019091526006815265535052494e4760d01b60208201526102b2565b6102586104333660046112ae565b61091d565b61027e610446366004611295565b610953565b61027e610459366004611141565b610b1f565b61025861046c366004611295565b610bf7565b610258600181565b6102587f000000000000000000000000000000000000000000000000000000000000000081565b610258604881565b6001546103c6906001600160a01b031681565b61027e6104c9366004611141565b610c6a565b6102586104dc3660046110d2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b610258630168e6a081565b6103b16105203660046110b7565b610d08565b61027e61053336600461116b565b610d67565b6102586201000081565b610258610db3565b3360009081526008602090815260408083206001600160a01b038816845290915281205484146105955760405162461bcd60e51b815260040161058c90611396565b60405180910390fd5b6105a0858484610dc5565b90505b949350505050565b60006001600160a01b038316158015906105ce57506001600160a01b0383163014155b6105ea5760405162461bcd60e51b815260040161058c9061136d565b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b60055460009060001990610664908261140b565b91505090565b6004546040805160208101929092526bffffffffffffffffffffffff193360601b16908201526054810183905260009081906074016040516020818303038152906040528051906020012090508281146107365760405162461bcd60e51b815260206004820152604160248201527f4368616c6c656e67652064696765737420646f6573206e6f74206d617463682060448201527f657870656374656420646967657374206f6e20746f6b656e20636f6e747261636064820152601d60fa1b608482015260a40161058c565b6105a384610953565b60006001600160a01b0383161580159061076257506001600160a01b0383163014155b61077e5760405162461bcd60e51b815260040161058c9061136d565b6001600160a01b0384166000908152600760205260409020546107a2908390611537565b6001600160a01b03851660009081526007602090815260408083209390935560088152828220338352905220546107da908390611537565b6001600160a01b0380861660009081526008602090815260408083203384528252808320949094559186168152600790915220546108199083906113f3565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061086d9086815260200190565b60405180910390a35060019392505050565b600061088c600254610ecd565b905090565b6001546001600160a01b031633146108a857600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b600061064a60025460035484610ef6565b60008061093d84600554610931919061140b565b60025460035486610f36565b90508061094984610ecd565b6105a39190611518565b6002546000908161096382610ecd565b9050806109b25760405162461bcd60e51b815260206004820152601760248201527f526577617264206861732072656163686564207a65726f000000000000000000604482015260640161058c565b600454604080516020808201939093523360601b6bffffffffffffffffffffffff1916818301526054808201889052825180830390910181526074909101909152805191012060055480821115610a575760405162461bcd60e51b815260206004820152602360248201527f446967657374206973206c6172676572207468616e206d696e696e672074617260448201526219d95d60ea1b606482015260840161058c565b6003546000610a71610a69858561140b565b878442610f36565b90506000610a7f8287611518565b90506000610a8c82610f57565b9050610a988385610f9a565b610aa485898542610fab565b6005556000610ab28261104a565b600481905542600281905590915033907fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d908590610aef90611062565b604080519283526020830191909152810184905260600160405180910390a25060019a9950505050505050505050565b60006001600160a01b03831615801590610b4257506001600160a01b0383163014155b610b5e5760405162461bcd60e51b815260040161058c9061136d565b33600090815260076020526040902054610b79908390611537565b33600090815260076020526040808220929092556001600160a01b03851681522054610ba69083906113f3565b6001600160a01b0384166000818152600760205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061063e9086815260200190565b600080610c247f000000000000000000000000000000000000000000000000000000000000000084611537565b9050630168e6a0811015610c3b5750600092915050565b6305a39a80610c4e630168e6a083611537565b610c58919061140b565b610c639060016113f3565b9392505050565b600080546001600160a01b03163314610c8257600080fd5b60005460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb90604401602060405180830381600087803b158015610cd057600080fd5b505af1158015610ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190611273565b6000546001600160a01b03163314610d1f57600080fd5b6001600160a01b038116610d455760405162461bcd60e51b815260040161058c9061136d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526008602090815260408083206001600160a01b03871684529091528120548314610da95760405162461bcd60e51b815260040161058c90611396565b6105a384836105ab565b600060035461025861088c9190611518565b60006001600160a01b03841615801590610de857506001600160a01b0384163014155b610e045760405162461bcd60e51b815260040161058c9061136d565b3360008181526008602090815260408083206001600160a01b03891680855290835292819020879055518681529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3604051638f4ffcb160e01b81526001600160a01b03851690638f4ffcb190610e9190339087903090889060040161131d565b600060405180830381600087803b158015610eab57600080fd5b505af1158015610ebf573d6000803e3d6000fd5b506001979650505050505050565b6000610ed882610bf7565b610ee3906002611470565b61064a9068091b77e5e5d9a0000061140b565b60008281610258610f078786611537565b610f11919061140b565b905081811115610f1f578091505b6048821115610f2d57604891505b50949350505050565b600080610f44858585610ef6565b9050808610156105a057859150506105a3565b33600090815260076020526040812080548391908390610f789084906113f3565b9091555050600654600090610f8e9084906113f3565b60068190559392505050565b808214610fa75760038290555b5050565b600080610fb88584611537565b9050610fc661025885611518565b610fd190603d611518565b610fdc826058611518565b1015611000576064610fef876063611518565b610ff9919061140b565b955061101a565b606361100d876064611518565b611017919061140b565b95505b6201000086101561102c576201000095505b600160ea1b86111561104057600160ea1b95505b5093949350505050565b60006001826110598243611537565b40181892915050565b60006102586110917f000000000000000000000000000000000000000000000000000000000000000084611537565b61064a919061140b565b80356001600160a01b03811681146110b257600080fd5b919050565b6000602082840312156110c957600080fd5b610c638261109b565b600080604083850312156110e557600080fd5b6110ee8361109b565b91506110fc6020840161109b565b90509250929050565b60008060006060848603121561111a57600080fd5b6111238461109b565b92506111316020850161109b565b9150604084013590509250925092565b6000806040838503121561115457600080fd5b61115d8361109b565b946020939093013593505050565b60008060006060848603121561118057600080fd5b6111898461109b565b95602085013595506040909401359392505050565b600080600080608085870312156111b457600080fd5b6111bd8561109b565b93506020850135925060408501359150606085013567ffffffffffffffff808211156111e857600080fd5b818701915087601f8301126111fc57600080fd5b81358181111561120e5761120e611564565b604051601f8201601f19908116603f0116810190838211818310171561123657611236611564565b816040528281528a602084870101111561124f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60006020828403121561128557600080fd5b81518015158114610c6357600080fd5b6000602082840312156112a757600080fd5b5035919050565b600080604083850312156112c157600080fd5b50508035926020909101359150565b6000815180845260005b818110156112f6576020818501810151868301820152016112da565b81811115611308576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682526020820185905283166040820152608060608201819052600090611350908301846112d0565b9695505050505050565b602081526000610c6360208301846112d0565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b60208082526038908201527f43757272656e74207370656e64657220616c6c6f77616e636520646f6573206e60408201527f6f74206d61746368207370656369666965642076616c75650000000000000000606082015260800190565b600082198211156114065761140661154e565b500190565b60008261142857634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561146857816000190482111561144e5761144e61154e565b8085161561145b57918102915b93841c9390800290611432565b509250929050565b6000610c6383836000826114865750600161064a565b816114935750600061064a565b81600181146114a957600281146114b3576114cf565b600191505061064a565b60ff8411156114c4576114c461154e565b50506001821b61064a565b5060208310610133831016604e8410600b84101617156114f2575081810a61064a565b6114fc838361142d565b80600019048211156115105761151061154e565b029392505050565b60008160001904831182151516156115325761153261154e565b500290565b6000828210156115495761154961154e565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212205476e7e04aa724315c45e467f3ffc84b5d3ad82e2543f033e539b4d173b2226d64736f6c63430008050033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102485760003560e01c806379ba50971161013b578063cea3e530116100b8578063ef08fc6e1161007c578063ef08fc6e14610507578063f2fde38b14610512578063f650366214610525578063f77e180e14610538578063f79875461461054257600080fd5b8063cea3e53014610479578063d390a1e4146104a0578063d4ee1d90146104a8578063dc39d06d146104bb578063dd62ed3e146104ce57600080fd5b80639fb68299116100ff5780639fb6829914610425578063a0712d6814610438578063a9059cbb1461044b578063aa3308bd1461045e578063c2d98c6e1461047157600080fd5b806379ba5097146103a95780638da5cb5b146103b35780638f759183146103de578063902d55a5146103f157806395d89b411461040357600080fd5b8063313ce567116101c95780634ef376281161018d5780634ef376281461035b57806357dd62fb146103635780635dbdda691461036e5780636de9f32b1461037757806370a082311461038057600080fd5b8063313ce5671461032b57806332e997081461033257806336bcf7d61461033a578063490203a71461034a5780634a1da80e1461035257600080fd5b806317da485f1161021057806317da485f146102db5780631801fbe5146102e357806318160ddd146102f657806323b872dd146102fe5780632e0f26251461031157600080fd5b8063031052f31461024d578063068a24951461026b57806306fdde031461028e578063095ea7b3146102bf5780630d97a2fb146102d2575b600080fd5b610258600160ea1b81565b6040519081526020015b60405180910390f35b61027e61027936600461119e565b61054a565b6040519015158152602001610262565b60408051808201909152600c81526b29b83934b733902a37b5b2b760a11b60208201525b604051610262919061135a565b61027e6102cd366004611141565b6105ab565b61025860035481565b610258610650565b61027e6102f13660046112ae565b61066a565b600654610258565b61027e61030c366004611105565b61073f565b610319601281565b60405160ff9091168152602001610262565b6012610319565b600554610258565b61025868091b77e5e5d9a0000081565b61025861087f565b61025860025481565b600454610258565b6102586305a39a8081565b61025861025881565b61025860065481565b61025861038e3660046110b7565b6001600160a01b031660009081526007602052604090205490565b6103b1610891565b005b6000546103c6906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b6102586103ec366004611295565b61090c565b6102586a1b63e87c1f629e3f80000081565b604080518082019091526006815265535052494e4760d01b60208201526102b2565b6102586104333660046112ae565b61091d565b61027e610446366004611295565b610953565b61027e610459366004611141565b610b1f565b61025861046c366004611295565b610bf7565b610258600181565b6102587f0000000000000000000000000000000000000000000000000000000061349baa81565b610258604881565b6001546103c6906001600160a01b031681565b61027e6104c9366004611141565b610c6a565b6102586104dc3660046110d2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b610258630168e6a081565b6103b16105203660046110b7565b610d08565b61027e61053336600461116b565b610d67565b6102586201000081565b610258610db3565b3360009081526008602090815260408083206001600160a01b038816845290915281205484146105955760405162461bcd60e51b815260040161058c90611396565b60405180910390fd5b6105a0858484610dc5565b90505b949350505050565b60006001600160a01b038316158015906105ce57506001600160a01b0383163014155b6105ea5760405162461bcd60e51b815260040161058c9061136d565b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b60055460009060001990610664908261140b565b91505090565b6004546040805160208101929092526bffffffffffffffffffffffff193360601b16908201526054810183905260009081906074016040516020818303038152906040528051906020012090508281146107365760405162461bcd60e51b815260206004820152604160248201527f4368616c6c656e67652064696765737420646f6573206e6f74206d617463682060448201527f657870656374656420646967657374206f6e20746f6b656e20636f6e747261636064820152601d60fa1b608482015260a40161058c565b6105a384610953565b60006001600160a01b0383161580159061076257506001600160a01b0383163014155b61077e5760405162461bcd60e51b815260040161058c9061136d565b6001600160a01b0384166000908152600760205260409020546107a2908390611537565b6001600160a01b03851660009081526007602090815260408083209390935560088152828220338352905220546107da908390611537565b6001600160a01b0380861660009081526008602090815260408083203384528252808320949094559186168152600790915220546108199083906113f3565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061086d9086815260200190565b60405180910390a35060019392505050565b600061088c600254610ecd565b905090565b6001546001600160a01b031633146108a857600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b600061064a60025460035484610ef6565b60008061093d84600554610931919061140b565b60025460035486610f36565b90508061094984610ecd565b6105a39190611518565b6002546000908161096382610ecd565b9050806109b25760405162461bcd60e51b815260206004820152601760248201527f526577617264206861732072656163686564207a65726f000000000000000000604482015260640161058c565b600454604080516020808201939093523360601b6bffffffffffffffffffffffff1916818301526054808201889052825180830390910181526074909101909152805191012060055480821115610a575760405162461bcd60e51b815260206004820152602360248201527f446967657374206973206c6172676572207468616e206d696e696e672074617260448201526219d95d60ea1b606482015260840161058c565b6003546000610a71610a69858561140b565b878442610f36565b90506000610a7f8287611518565b90506000610a8c82610f57565b9050610a988385610f9a565b610aa485898542610fab565b6005556000610ab28261104a565b600481905542600281905590915033907fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d908590610aef90611062565b604080519283526020830191909152810184905260600160405180910390a25060019a9950505050505050505050565b60006001600160a01b03831615801590610b4257506001600160a01b0383163014155b610b5e5760405162461bcd60e51b815260040161058c9061136d565b33600090815260076020526040902054610b79908390611537565b33600090815260076020526040808220929092556001600160a01b03851681522054610ba69083906113f3565b6001600160a01b0384166000818152600760205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061063e9086815260200190565b600080610c247f0000000000000000000000000000000000000000000000000000000061349baa84611537565b9050630168e6a0811015610c3b5750600092915050565b6305a39a80610c4e630168e6a083611537565b610c58919061140b565b610c639060016113f3565b9392505050565b600080546001600160a01b03163314610c8257600080fd5b60005460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb90604401602060405180830381600087803b158015610cd057600080fd5b505af1158015610ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190611273565b6000546001600160a01b03163314610d1f57600080fd5b6001600160a01b038116610d455760405162461bcd60e51b815260040161058c9061136d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526008602090815260408083206001600160a01b03871684529091528120548314610da95760405162461bcd60e51b815260040161058c90611396565b6105a384836105ab565b600060035461025861088c9190611518565b60006001600160a01b03841615801590610de857506001600160a01b0384163014155b610e045760405162461bcd60e51b815260040161058c9061136d565b3360008181526008602090815260408083206001600160a01b03891680855290835292819020879055518681529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3604051638f4ffcb160e01b81526001600160a01b03851690638f4ffcb190610e9190339087903090889060040161131d565b600060405180830381600087803b158015610eab57600080fd5b505af1158015610ebf573d6000803e3d6000fd5b506001979650505050505050565b6000610ed882610bf7565b610ee3906002611470565b61064a9068091b77e5e5d9a0000061140b565b60008281610258610f078786611537565b610f11919061140b565b905081811115610f1f578091505b6048821115610f2d57604891505b50949350505050565b600080610f44858585610ef6565b9050808610156105a057859150506105a3565b33600090815260076020526040812080548391908390610f789084906113f3565b9091555050600654600090610f8e9084906113f3565b60068190559392505050565b808214610fa75760038290555b5050565b600080610fb88584611537565b9050610fc661025885611518565b610fd190603d611518565b610fdc826058611518565b1015611000576064610fef876063611518565b610ff9919061140b565b955061101a565b606361100d876064611518565b611017919061140b565b95505b6201000086101561102c576201000095505b600160ea1b86111561104057600160ea1b95505b5093949350505050565b60006001826110598243611537565b40181892915050565b60006102586110917f0000000000000000000000000000000000000000000000000000000061349baa84611537565b61064a919061140b565b80356001600160a01b03811681146110b257600080fd5b919050565b6000602082840312156110c957600080fd5b610c638261109b565b600080604083850312156110e557600080fd5b6110ee8361109b565b91506110fc6020840161109b565b90509250929050565b60008060006060848603121561111a57600080fd5b6111238461109b565b92506111316020850161109b565b9150604084013590509250925092565b6000806040838503121561115457600080fd5b61115d8361109b565b946020939093013593505050565b60008060006060848603121561118057600080fd5b6111898461109b565b95602085013595506040909401359392505050565b600080600080608085870312156111b457600080fd5b6111bd8561109b565b93506020850135925060408501359150606085013567ffffffffffffffff808211156111e857600080fd5b818701915087601f8301126111fc57600080fd5b81358181111561120e5761120e611564565b604051601f8201601f19908116603f0116810190838211818310171561123657611236611564565b816040528281528a602084870101111561124f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60006020828403121561128557600080fd5b81518015158114610c6357600080fd5b6000602082840312156112a757600080fd5b5035919050565b600080604083850312156112c157600080fd5b50508035926020909101359150565b6000815180845260005b818110156112f6576020818501810151868301820152016112da565b81811115611308576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682526020820185905283166040820152608060608201819052600090611350908301846112d0565b9695505050505050565b602081526000610c6360208301846112d0565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b60208082526038908201527f43757272656e74207370656e64657220616c6c6f77616e636520646f6573206e60408201527f6f74206d61746368207370656369666965642076616c75650000000000000000606082015260800190565b600082198211156114065761140661154e565b500190565b60008261142857634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561146857816000190482111561144e5761144e61154e565b8085161561145b57918102915b93841c9390800290611432565b509250929050565b6000610c6383836000826114865750600161064a565b816114935750600061064a565b81600181146114a957600281146114b3576114cf565b600191505061064a565b60ff8411156114c4576114c461154e565b50506001821b61064a565b5060208310610133831016604e8410600b84101617156114f2575081810a61064a565b6114fc838361142d565b80600019048211156115105761151061154e565b029392505050565b60008160001904831182151516156115325761153261154e565b500290565b6000828210156115495761154961154e565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212205476e7e04aa724315c45e467f3ffc84b5d3ad82e2543f033e539b4d173b2226d64736f6c63430008050033

Deployed Bytecode Sourcemap

617:16284:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1413:47;;-1:-1:-1;;;1413:47:4;;;;;5835:25:5;;;5823:2;5808:18;1413:47:4;;;;;;;;16083:391;;;;;;:::i;:::-;;:::i;:::-;;;5662:14:5;;5655:22;5637:41;;5625:2;5610:18;16083:391:4;5592:92:5;2112:80:4;2181:4;;;;;;;;;;;;-1:-1:-1;;;2181:4:4;;;;2112:80;;;;;;;:::i;12440:316::-;;;;;;:::i;:::-;;:::i;1560:40::-;;;;;;9052:300;;;:::i;6468:331::-;;;;;;:::i;:::-;;:::i;10829:99::-;10909:12;;10829:99;;14043:432;;;;;;:::i;:::-;;:::i;829:35::-;;862:2;829:35;;;;;8772:4:5;8760:17;;;8742:36;;8730:2;8715:18;829:35:4;8697:87:5;10734:89:4;862:2;10734:89;;9358:100;9440:12;;9358:100;;934:53;;975:12;934:53;;9464:284;;;:::i;1519:34::-;;;;;;8938:108;9024:15;;8938:108;;1274:64;;1316:22;1274:64;;1087:45;;1129:3;1087:45;;1688:27;;;;;;11152:132;;;;;;:::i;:::-;-1:-1:-1;;;;;11256:20:4;11221:15;11256:20;;;:8;:20;;;;;;;11152:132;802:218:3;;;:::i;:::-;;297:20;;;;;-1:-1:-1;;;;;297:20:3;;;;;;-1:-1:-1;;;;;4681:32:5;;;4663:51;;4651:2;4636:18;297:20:3;4618:102:5;9893:284:4;;;;;;:::i;:::-;;:::i;871:56::-;;910:17;871:56;;2198:84;2269:6;;;;;;;;;;;;-1:-1:-1;;;2269:6:4;;;;2198:84;;10183:545;;;;;;:::i;:::-;;:::i;2288:1893::-;;;;;;:::i;:::-;;:::i;11633:367::-;;;;;;:::i;:::-;;:::i;8448:339::-;;;;;;:::i;:::-;;:::i;778:44::-;;821:1;778:44;;1467:45;;;;;994:50;;1042:2;994:50;;328:23:3;;;;;-1:-1:-1;;;;;328:23:3;;;16709:189:4;;;;;;:::i;:::-;;:::i;14761:158::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14883:19:4;;;14847:17;14883:19;;;:7;:19;;;;;;;;:28;;;;;;;;;;;;;14761:158;1179:76;;1227:28;1179:76;;616:176:3;;;;;;:::i;:::-;;:::i;13183:319:4:-;;;;;;:::i;:::-;;:::i;1360:46::-;;1401:5;1360:46;;8793:139;;;:::i;16083:391::-;16288:10;16247:12;16280:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;16280:28:4;;;;;;;;;;:49;;16272:134;;;;-1:-1:-1;;;16272:134:4;;;;;;;:::i;:::-;;;;;;;;;16424:43;16439:7;16448:12;16462:4;16424:14;:43::i;:::-;16417:50;;16083:391;;;;;;;:::o;12440:316::-;12515:12;-1:-1:-1;;;;;12556:21:4;;;;;;:49;;-1:-1:-1;;;;;;12581:24:4;;12600:4;12581:24;;12556:49;12548:77;;;;-1:-1:-1;;;12548:77:4;;;;;;;:::i;:::-;12644:10;12636:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;12636:28:4;;;;;;;;;;;;:37;;;12689;5835:25:5;;;12636:28:4;;12644:10;12689:37;;5808:18:5;12689:37:4;;;;;;;;-1:-1:-1;12744:4:4;12440:316;;;;;:::o;9052:300::-;9333:12;;9113:7;;-1:-1:-1;;9241:66:4;9324:21;;9241:66;9324:21;:::i;:::-;9317:28;;;9052:300;:::o;6468:331::-;6603:15;;6586:53;;;;;;4338:19:5;;;;-1:-1:-1;;6620:10:4;4395:2:5;4391:15;4387:53;4373:12;;;4366:75;4457:12;;;4450:28;;;6542:4:4;;;;4494:12:5;;6586:53:4;;;;;;;;;;;;6576:64;;;;;;6559:81;;6668:16;6658:6;:26;6650:104;;;;-1:-1:-1;;;6650:104:4;;6993:2:5;6650:104:4;;;6975:21:5;7032:2;7012:18;;;7005:30;7071:34;7051:18;;;7044:62;7142:34;7122:18;;;7115:62;-1:-1:-1;;;7193:19:5;;;7186:32;7235:19;;6650:104:4;6965:295:5;6650:104:4;6780:12;6785:6;6780:4;:12::i;14043:432::-;14132:12;-1:-1:-1;;;;;14173:16:4;;;;;;:39;;-1:-1:-1;;;;;;14193:19:4;;14207:4;14193:19;;14173:39;14165:67;;;;-1:-1:-1;;;14165:67:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;14260:14:4;;;;;;:8;:14;;;;;;:23;;14277:6;;14260:23;:::i;:::-;-1:-1:-1;;;;;14243:14:4;;;;;;:8;:14;;;;;;;;:40;;;;14322:7;:13;;;;;14336:10;14322:25;;;;;;:34;;14350:6;;14322:34;:::i;:::-;-1:-1:-1;;;;;14294:13:4;;;;;;;:7;:13;;;;;;;;14308:10;14294:25;;;;;;;:62;;;;14382:12;;;;;:8;:12;;;;;:21;;14397:6;;14382:21;:::i;:::-;-1:-1:-1;;;;;14367:12:4;;;;;;;:8;:12;;;;;;;:36;;;;14419:26;;;;;;;;;;14438:6;5835:25:5;;5823:2;5808:18;;5790:76;14419:26:4;;;;;;;;-1:-1:-1;14463:4:4;14043:432;;;;;:::o;9464:284::-;9521:7;9704:37;9721:19;;9704:16;:37::i;:::-;9697:44;;9464:284;:::o;802:218:3:-;875:8;;-1:-1:-1;;;;;875:8:3;861:10;:22;853:31;;;;;;932:8;;;925:5;;904:37;;-1:-1:-1;;;;;932:8:3;;;;925:5;;;;904:37;;;964:8;;;;956:16;;-1:-1:-1;;;;;;956:16:3;;;-1:-1:-1;;;;;964:8:3;;956:16;;;;987:21;;;802:218::o;9893:284:4:-;9974:7;10000:170;10026:19;;10089:25;;10158:11;10000:25;:170::i;10183:545::-;10294:7;10313:29;10345:306;10383:14;10368:12;;:29;;;;:::i;:::-;10463:19;;10548:25;;10639:11;10345:22;:306::i;:::-;10313:338;;10700:21;10668:29;10685:11;10668:16;:29::i;:::-;:53;;;;:::i;2288:1893::-;2398:19;;2342:12;;;2465:38;2398:19;2465:16;:38::i;:::-;2436:67;-1:-1:-1;2570:23:4;2566:62;;2595:33;;-1:-1:-1;;;2595:33:4;;6641:2:5;2595:33:4;;;6623:21:5;6680:2;6660:18;;;6653:30;6719:25;6699:18;;;6692:53;6762:18;;2595:33:4;6613:173:5;2566:62:4;2785:15;;2768:52;;;;;;;4338:19:5;;;;2802:10:4;4395:2:5;4391:15;-1:-1:-1;;4387:53:5;4373:12;;;4366:75;4457:12;;;;4450:28;;;2768:52:4;;;;;;;;;;4494:12:5;;;;2768:52:4;;;2758:63;;;;;2856:12;;2936:31;;;2932:82;;;2969:45;;-1:-1:-1;;;2969:45:4;;7467:2:5;2969:45:4;;;7449:21:5;7506:2;7486:18;;;7479:30;7545:34;7525:18;;;7518:62;-1:-1:-1;;;7596:18:5;;;7589:33;7639:19;;2969:45:4;7439:225:5;2932:82:4;3063:25;;3025:35;3130:313;3153:31;3177:6;3153:13;:31;:::i;:::-;3250:20;3335:27;3427:15;3130:22;:313::i;:::-;3098:345;-1:-1:-1;3453:25:4;3481:42;3098:345;3481:18;:42;:::i;:::-;3453:70;;3534:21;3558:31;3571:17;3558:12;:31::i;:::-;3534:55;;3608:78;3635:21;3658:27;3608:26;:78::i;:::-;3712:135;3730:13;3745:20;3808:21;3831:15;3712:17;:135::i;:::-;3697:12;:150;3858:26;3887:37;3910:13;3887:22;:37::i;:::-;3934:15;:36;;;4003:15;3981:19;:37;;;3858:66;;-1:-1:-1;4039:10:4;;4034:118;;4051:17;;4070:42;;:25;:42::i;:::-;4034:118;;;8478:25:5;;;8534:2;8519:18;;8512:34;;;;8562:18;;8555:34;;;8466:2;8451:18;4034:118:4;;;;;;;-1:-1:-1;4170:4:4;;2288:1893;-1:-1:-1;;;;;;;;;;2288:1893:4:o;11633:367::-;11704:12;-1:-1:-1;;;;;11745:16:4;;;;;;:39;;-1:-1:-1;;;;;;11765:19:4;;11779:4;11765:19;;11745:39;11737:67;;;;-1:-1:-1;;;11737:67:4;;;;;;;:::i;:::-;11855:10;11846:20;;;;:8;:20;;;;;;:29;;11869:6;;11846:29;:::i;:::-;11832:10;11823:20;;;;:8;:20;;;;;;:52;;;;-1:-1:-1;;;;;11901:12:4;;;;;;:21;;11916:6;;11901:21;:::i;:::-;-1:-1:-1;;;;;11886:12:4;;;;;;:8;:12;;;;;;;:36;;;;11938:32;;11947:10;;11938:32;;;;11963:6;5835:25:5;;5823:2;5808:18;;5790:76;8448:339:4;8503:7;;8559:28;8567:20;8559:5;:28;:::i;:::-;8523:64;;1227:28;8602:25;:49;8598:182;;;-1:-1:-1;8672:1:4;;8448:339;-1:-1:-1;;8448:339:4:o;8598:182::-;1316:22;8712:49;1227:28;8712:25;:49;:::i;:::-;8711:69;;;;:::i;:::-;8707:73;;:1;:73;:::i;:::-;8700:80;8448:339;-1:-1:-1;;;8448:339:4:o;16709:189::-;16806:12;571:5:3;;-1:-1:-1;;;;;571:5:3;557:10;:19;549:28;;;;;;16876:5:4::1;::::0;16838:52:::1;::::0;-1:-1:-1;;;16838:52:4;;-1:-1:-1;;;;;16876:5:4;;::::1;16838:52;::::0;::::1;4899:51:5::0;4966:18;;;4959:34;;;16838:37:4;;::::1;::::0;::::1;::::0;4872:18:5;;16838:52:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;616:176:3:-:0;571:5;;-1:-1:-1;;;;;571:5:3;557:10;:19;549:28;;;;;;-1:-1:-1;;;;;702:23:3;::::1;694:51;;;;-1:-1:-1::0;;;694:51:3::1;;;;;;;:::i;:::-;760:8;:20:::0;;-1:-1:-1;;;;;;760:20:3::1;-1:-1:-1::0;;;;;760:20:3;;;::::1;::::0;;;::::1;::::0;;616:176::o;13183:319:4:-;13329:10;13288:12;13321:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;13321:28:4;;;;;;;;;;:49;;13313:134;;;;-1:-1:-1;;;13313:134:4;;;;;;;:::i;:::-;13465:30;13473:7;13482:12;13465:7;:30::i;8793:139::-;8856:7;8900:25;;1129:3;8882:43;;;;:::i;15418:434::-;15512:12;-1:-1:-1;;;;;15553:21:4;;;;;;:49;;-1:-1:-1;;;;;;15578:24:4;;15597:4;15578:24;;15553:49;15545:77;;;;-1:-1:-1;;;15545:77:4;;;;;;;:::i;:::-;15641:10;15633:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;15633:28:4;;;;;;;;;;;;:37;;;15686;5835:25:5;;;15633:28:4;;15641:10;15686:37;;5808:18:5;15686:37:4;;;;;;;15734:88;;-1:-1:-1;;;15734:88:4;;-1:-1:-1;;;;;15734:47:4;;;;;:88;;15782:10;;15794:6;;15810:4;;15817;;15734:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15840:4:4;;15418:434;-1:-1:-1;;;;;;;15418:434:4:o;9754:133::-;9818:7;9864:16;9874:5;9864:9;:16::i;:::-;9861:19;;:1;:19;:::i;:::-;9844:36;;975:12;9844:36;:::i;4187:666::-;4413:7;4459:27;4413:7;1129:3;4532:34;4546:20;4532:11;:34;:::i;:::-;4531:54;;;;:::i;:::-;4496:89;;4635:15;4608:24;:42;4604:102;;;4682:24;4664:42;;4604:102;1042:2;4721:15;:39;4717:96;;;1042:2;4774:39;;4717:96;-1:-1:-1;4831:15:4;4187:666;-1:-1:-1;;;;4187:666:4:o;4859:604::-;5097:7;5117:23;5143:203;5169:20;5248:27;5334:11;5143:25;:203::i;:::-;5117:229;;5375:15;5360:12;:30;5356:67;;;5411:12;5404:19;;;;;5469:251;5559:10;5530:7;5550:20;;;:8;:20;;;;;:35;;5574:11;;5550:20;5530:7;;5550:35;;5574:11;;5550:35;:::i;:::-;;;;-1:-1:-1;;5619:12:4;;5595:21;;5619:26;;5634:11;;5619:26;:::i;:::-;5655:12;:28;;;5595:50;5469:251;-1:-1:-1;;;5469:251:4:o;5726:694::-;6321:27;6294:23;:54;6290:123;;6362:25;:51;;;6290:123;5726:694;;:::o;7508:933::-;7752:7;;7801:34;7815:20;7801:11;:34;:::i;:::-;7771:64;-1:-1:-1;8024:33:4;1129:3;8024:15;:33;:::i;:::-;:38;;8060:2;8024:38;:::i;:::-;7997:24;:19;8019:2;7997:24;:::i;:::-;:65;7993:209;;;8115:3;8093:18;:13;8109:2;8093:18;:::i;:::-;8092:26;;;;:::i;:::-;8076:42;;7993:209;;;8200:2;8177:19;:13;8193:3;8177:19;:::i;:::-;8176:26;;;;:::i;:::-;8160:42;;7993:209;1401:5;8231:13;:30;8227:78;;;1401:5;8275:30;;8227:78;-1:-1:-1;;;8328:13:4;:30;8324:79;;;-1:-1:-1;;;8373:30:4;;8324:79;-1:-1:-1;8421:13:4;;7508:933;-1:-1:-1;;;;7508:933:4:o;6805:524::-;6883:7;821:1;7289:13;7268:16;821:1;7268:12;:16;:::i;:::-;7258:27;7250:52;:71;;6805:524;-1:-1:-1;;6805:524:4:o;7336:166::-;7415:7;1129:3;7442:34;7456:20;7442:11;:34;:::i;:::-;7441:54;;;;:::i;14:173:5:-;82:20;;-1:-1:-1;;;;;131:31:5;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;320:1;317;310:12;272:2;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:2;;;528:1;525;518:12;480:2;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;470:173;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:2;;;810:1;807;800:12;762:2;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;752:224;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:2;;;1126:1;1123;1116:12;1078:2;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;1068:167:5:o;1240:322::-;1317:6;1325;1333;1386:2;1374:9;1365:7;1361:23;1357:32;1354:2;;;1402:1;1399;1392:12;1354:2;1425:29;1444:9;1425:29;:::i;:::-;1415:39;1501:2;1486:18;;1473:32;;-1:-1:-1;1552:2:5;1537:18;;;1524:32;;1344:218;-1:-1:-1;;;1344:218:5:o;1567:1132::-;1662:6;1670;1678;1686;1739:3;1727:9;1718:7;1714:23;1710:33;1707:2;;;1756:1;1753;1746:12;1707:2;1779:29;1798:9;1779:29;:::i;:::-;1769:39;;1855:2;1844:9;1840:18;1827:32;1817:42;;1906:2;1895:9;1891:18;1878:32;1868:42;;1961:2;1950:9;1946:18;1933:32;1984:18;2025:2;2017:6;2014:14;2011:2;;;2041:1;2038;2031:12;2011:2;2079:6;2068:9;2064:22;2054:32;;2124:7;2117:4;2113:2;2109:13;2105:27;2095:2;;2146:1;2143;2136:12;2095:2;2182;2169:16;2204:2;2200;2197:10;2194:2;;;2210:18;;:::i;:::-;2285:2;2279:9;2253:2;2339:13;;-1:-1:-1;;2335:22:5;;;2359:2;2331:31;2327:40;2315:53;;;2383:18;;;2403:22;;;2380:46;2377:2;;;2429:18;;:::i;:::-;2469:10;2465:2;2458:22;2504:2;2496:6;2489:18;2544:7;2539:2;2534;2530;2526:11;2522:20;2519:33;2516:2;;;2565:1;2562;2555:12;2516:2;2621;2616;2612;2608:11;2603:2;2595:6;2591:15;2578:46;2666:1;2661:2;2656;2648:6;2644:15;2640:24;2633:35;2687:6;2677:16;;;;;;;1697:1002;;;;;;;:::o;2704:277::-;2771:6;2824:2;2812:9;2803:7;2799:23;2795:32;2792:2;;;2840:1;2837;2830:12;2792:2;2872:9;2866:16;2925:5;2918:13;2911:21;2904:5;2901:32;2891:2;;2947:1;2944;2937:12;2986:180;3045:6;3098:2;3086:9;3077:7;3073:23;3069:32;3066:2;;;3114:1;3111;3104:12;3066:2;-1:-1:-1;3137:23:5;;3056:110;-1:-1:-1;3056:110:5:o;3171:248::-;3239:6;3247;3300:2;3288:9;3279:7;3275:23;3271:32;3268:2;;;3316:1;3313;3306:12;3268:2;-1:-1:-1;;3339:23:5;;;3409:2;3394:18;;;3381:32;;-1:-1:-1;3258:161:5:o;3677:471::-;3718:3;3756:5;3750:12;3783:6;3778:3;3771:19;3808:1;3818:162;3832:6;3829:1;3826:13;3818:162;;;3894:4;3950:13;;;3946:22;;3940:29;3922:11;;;3918:20;;3911:59;3847:12;3818:162;;;3998:6;3995:1;3992:13;3989:2;;;4064:1;4057:4;4048:6;4043:3;4039:16;4035:27;4028:38;3989:2;-1:-1:-1;4130:2:5;4109:15;-1:-1:-1;;4105:29:5;4096:39;;;;4137:4;4092:50;;3726:422;-1:-1:-1;;3726:422:5:o;5004:488::-;-1:-1:-1;;;;;5273:15:5;;;5255:34;;5320:2;5305:18;;5298:34;;;5368:15;;5363:2;5348:18;;5341:43;5420:3;5415:2;5400:18;;5393:31;;;5198:4;;5441:45;;5466:19;;5458:6;5441:45;:::i;:::-;5433:53;5207:285;-1:-1:-1;;;;;;5207:285:5:o;5871:219::-;6020:2;6009:9;6002:21;5983:4;6040:44;6080:2;6069:9;6065:18;6057:6;6040:44;:::i;6095:339::-;6297:2;6279:21;;;6336:2;6316:18;;;6309:30;-1:-1:-1;;;6370:2:5;6355:18;;6348:45;6425:2;6410:18;;6269:165::o;7669:420::-;7871:2;7853:21;;;7910:2;7890:18;;;7883:30;7949:34;7944:2;7929:18;;7922:62;8020:26;8015:2;8000:18;;7993:54;8079:3;8064:19;;7843:246::o;8789:128::-;8829:3;8860:1;8856:6;8853:1;8850:13;8847:2;;;8866:18;;:::i;:::-;-1:-1:-1;8902:9:5;;8837:80::o;8922:217::-;8962:1;8988;8978:2;;9032:10;9027:3;9023:20;9020:1;9013:31;9067:4;9064:1;9057:15;9095:4;9092:1;9085:15;8978:2;-1:-1:-1;9124:9:5;;8968:171::o;9144:422::-;9233:1;9276:5;9233:1;9290:270;9311:7;9301:8;9298:21;9290:270;;;9370:4;9366:1;9362:6;9358:17;9352:4;9349:27;9346:2;;;9379:18;;:::i;:::-;9429:7;9419:8;9415:22;9412:2;;;9449:16;;;;9412:2;9528:22;;;;9488:15;;;;9290:270;;;9294:3;9208:358;;;;;:::o;9571:131::-;9631:5;9660:36;9687:8;9681:4;9756:5;9786:8;9776:2;;-1:-1:-1;9827:1:5;9841:5;;9776:2;9875:4;9865:2;;-1:-1:-1;9912:1:5;9926:5;;9865:2;9957:4;9975:1;9970:59;;;;10043:1;10038:130;;;;9950:218;;9970:59;10000:1;9991:10;;10014:5;;;10038:130;10075:3;10065:8;10062:17;10059:2;;;10082:18;;:::i;:::-;-1:-1:-1;;10138:1:5;10124:16;;10153:5;;9950:218;;10252:2;10242:8;10239:16;10233:3;10227:4;10224:13;10220:36;10214:2;10204:8;10201:16;10196:2;10190:4;10187:12;10183:35;10180:77;10177:2;;;-1:-1:-1;10289:19:5;;;10321:5;;10177:2;10368:34;10393:8;10387:4;10368:34;:::i;:::-;10438:6;10434:1;10430:6;10426:19;10417:7;10414:32;10411:2;;;10449:18;;:::i;:::-;10487:20;;9766:747;-1:-1:-1;;;9766:747:5:o;10518:168::-;10558:7;10624:1;10620;10616:6;10612:14;10609:1;10606:21;10601:1;10594:9;10587:17;10583:45;10580:2;;;10631:18;;:::i;:::-;-1:-1:-1;10671:9:5;;10570:116::o;10691:125::-;10731:4;10759:1;10756;10753:8;10750:2;;;10764:18;;:::i;:::-;-1:-1:-1;10801:9:5;;10740:76::o;10821:127::-;10882:10;10877:3;10873:20;10870:1;10863:31;10913:4;10910:1;10903:15;10937:4;10934:1;10927:15;10953:127;11014:10;11009:3;11005:20;11002:1;10995:31;11045:4;11042:1;11035:15;11069:4;11066:1;11059:15

Swarm Source

ipfs://5476e7e04aa724315c45e467f3ffc84b5d3ad82e2543f033e539b4d173b2226d

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.