Contract 0x4c3bAe16c79c30eEB1004Fb03C878d89695e3a99

 
Txn Hash
Method
Block
From
To
Value
0x047df673d2fe6dda5291c421bcbc395da867dbda930439389c97133af092af03Mint153156192022-08-10 17:13:136 hrs 29 mins ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00372846 68.85307359
0x440aa59082d12f278bfc9e9bb7efbb2807057a67ec33f9c807f6e7958ad00ac7Mint153154372022-08-10 16:35:437 hrs 7 mins ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00415725 72.86017512
0x84b5c00e0cf3c7152378d8ab66d104d5c2d83f7e4ca95754bd0624a647cb03f6Mint153135692022-08-10 9:27:3814 hrs 15 mins ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00068456 9.22785366
0xd0b10c26bfd63dddf9d5dbce8c5d10c0e53d9df910c9d3973401ada4bb72f900Mint153124382022-08-10 5:11:0518 hrs 32 mins ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00136658 23.94375379
0x6baf593ea9bf3f92dfad4c2a66449f7de0e1af51764e71ec5faed4e596af977cMint153123912022-08-10 4:58:3618 hrs 44 mins ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.001278 22.38703307
0x28432c48f794e078c480d41ff5dc8dcd4f9f1074f0fea61ad1606747c6fc0da0Mint153123262022-08-10 4:41:4719 hrs 1 min ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00071484 12.52578329
0xb855f67f73aa952116148237d58c5687066ea34312ac2ca0068345ad71b882baApprove153120262022-08-10 3:35:5520 hrs 7 mins ago0x8594d8e9483473626908648a5539d9d65ca2fe8d IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00096101 20.60720546
0xc721b6df709404c90cf00a422fb0cf2764ef8f98801ac3881c43aa580ab4eac3Mint153108802022-08-09 23:20:391 day 22 mins ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00103462 19.10635323
0xebd28e6f3dcf6cfaa0b2f80dd7e4e6090d47498a6f46114a024d33b36fa968b4Mint153104502022-08-09 21:41:311 day 2 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00078848 14.56092829
0xdabd06645d505e18e66974d39d5903d9555d422b7a5c952924eb42cf3f73f115Mint153104182022-08-09 21:34:111 day 2 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00090558 16.72263295
0xaa3abce184371c3265bd390ac1d1ffd34d146cbcc3613e053100ab10c0ffc03cMint153101282022-08-09 20:28:371 day 3 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.0008994 16.61231573
0x61923fd9ebc54e6a4d310611fe350875af0d73a17f2ca5a69394cc869ed84efeMint153095132022-08-09 18:20:091 day 5 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00096521 16.91198266
0x9b7e6351d48ca9de11591c832dbec4706bdcd652eaa51d358e11f0b65b810405Mint153090542022-08-09 16:30:121 day 7 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00193954 33.98947658
0xf07e0b9505219d4bc1ff89c54f20f6272d6583d270cf061e800e1b1fb39fb239Mint153089662022-08-09 16:07:361 day 7 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00298281 55.0833126
0xe0e67ba3a1043c5e7ea39a3c50a2b73b559d9e5599ba8492a4c96d9296dd7fd6Mint153089212022-08-09 15:55:361 day 7 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00126955 23.43950552
0x001d05b8b751be355ab8ee97b2127077527395e48feaf813497eba98ce1f0c87Mint153087952022-08-09 15:26:391 day 8 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00121402 22.4143658
0xd4ed127832520897ac4b03b86c4d06b92370e13da9418847fc7f885e463226beMint153086682022-08-09 14:59:531 day 8 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00248796 43.61336129
0xd7311bee1911a1617fd0b15bbc48c2d4cb2ec6985e71270021bcd8a83a4621c4Transfer153084562022-08-09 14:12:571 day 9 hrs ago0x39ddd002ed086755065e78c629f7547fcfee6a83 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.0020654840
0xc0fae8747b5d0d407e366b33d768742e5cc9e161c26fcd55dda3e3b928ee7b57Mint153079082022-08-09 12:11:481 day 11 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00065898 12.17215345
0xfc7a44ef9656b378237615050dfc320d712a2d7964348a6902ceaddb9934c1ceMint153078692022-08-09 12:02:131 day 11 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00082153 14.39822147
0x6e826892df6d39ab612f0e8cfc455389257d4dd3f5f8b022f9efdcbdecae4f99Mint153075622022-08-09 10:48:061 day 12 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00156298 27.38476415
0x0bc49508d0558579f58d0bffa75958860fba3a0f64329b5f7097425c4ca83a76Mint153070212022-08-09 8:49:421 day 14 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00079919 14.00555348
0xa636cc2ca5b999f9ee05e5d8fede015158e082a39e4500ff5193b41738d52eb6Mint153067232022-08-09 7:40:231 day 16 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00080029 14.02189448
0xa9a07ab04e382effe361cef8049ad5a549de46aec936483b99bd49ccdc25af26Mint153065692022-08-09 7:03:241 day 16 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.00060212 10.54977468
0x1137d720abc4409ed7d9528429c4625b69721ddded6c6c3a7d0f86633d84ca58Mint153064762022-08-09 6:42:021 day 17 hrs ago0xf18d90929e3ec5d3bea4aa16b9451ad3216a7764 IN  0x4c3bae16c79c30eeb1004fb03c878d89695e3a990 Ether0.0005314 9.81561495
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AutumnToken

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 2 of 5: AutumnToken.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.5;


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


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

// 'Autumn Token' contract

// ERC20 & ERC918 Mineable Token using Proof Of Work

// Symbol      : AUTUMN

// Name        : Autumn Token

// Total supply: 33,112,800.00

// Decimals    : 18

// Initial mining reward: 120

// Fraction of total supply released before first halving: 3/7

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





contract AutumnToken is ERC20Interface, ERC918, Owned {

    string private constant SYMBOL = "AUTUMN";

    string private constant NAME = "Autumn Token";

    uint256 public constant TOKEN_IDENTIFIER = 3;

    uint8 public constant DECIMALS = 18;

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

    uint256 public constant INITIAL_REWARD = 120 * 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 * 9) / 4; // 27 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 1 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"}]

60a060405234801561001057600080fd5b50600080546001600160a01b0319163317905561003462080000600160ea1b610070565b600555426080819052600255600160035561004f6000610057565b6004556100b7565b6000600382610067600143610092565b40181892915050565b60008261008d57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156100b257634e487b7160e01b600052601160045260246000fd5b500390565b6080516115b1620000e16000396000818161047e01528181610bff015261106d01526115b16000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806379ba50971161013b578063cea3e530116100b8578063ef08fc6e1161007c578063ef08fc6e14610507578063f2fde38b14610512578063f650366214610525578063f77e180e14610538578063f79875461461054257600080fd5b8063cea3e53014610479578063d390a1e4146104a0578063d4ee1d90146104a8578063dc39d06d146104bb578063dd62ed3e146104ce57600080fd5b80639fb68299116100ff5780639fb6829914610425578063a0712d6814610438578063a9059cbb1461044b578063aa3308bd1461045e578063c2d98c6e1461047157600080fd5b806379ba5097146103a95780638da5cb5b146103b35780638f759183146103de578063902d55a5146103f157806395d89b411461040357600080fd5b8063313ce567116101c95780634ef376281161018d5780634ef376281461035b57806357dd62fb146103635780635dbdda691461036e5780636de9f32b1461037757806370a082311461038057600080fd5b8063313ce5671461032b57806332e997081461033257806336bcf7d61461033a578063490203a71461034a5780634a1da80e1461035257600080fd5b806317da485f1161021057806317da485f146102db5780631801fbe5146102e357806318160ddd146102f657806323b872dd146102fe5780632e0f26251461031157600080fd5b8063031052f31461024d578063068a24951461026b57806306fdde031461028e578063095ea7b3146102bf5780630d97a2fb146102d2575b600080fd5b610258600160ea1b81565b6040519081526020015b60405180910390f35b61027e61027936600461119f565b61054a565b6040519015158152602001610262565b60408051808201909152600c81526b20baba3ab6b7102a37b5b2b760a11b60208201525b604051610262919061135b565b61027e6102cd366004611142565b6105ab565b61025860035481565b610258610650565b61027e6102f13660046112af565b61066a565b600654610258565b61027e61030c366004611106565b61073f565b610319601281565b60405160ff9091168152602001610262565b6012610319565b600554610258565b61025868068155a43676e0000081565b61025861087f565b61025860025481565b600454610258565b6102586305a39a8081565b61025861025881565b61025860065481565b61025861038e3660046110b8565b6001600160a01b031660009081526007602052604090205490565b6103b1610891565b005b6000546103c6906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b6102586103ec366004611296565b61090c565b6102586a1b63e87c1f629e3f80000081565b60408051808201909152600681526520aaaa2aa6a760d11b60208201526102b2565b6102586104333660046112af565b61091d565b61027e610446366004611296565b610953565b61027e610459366004611142565b610b1f565b61025861046c366004611296565b610bf7565b610258600381565b6102587f000000000000000000000000000000000000000000000000000000000000000081565b610258604881565b6001546103c6906001600160a01b031681565b61027e6104c9366004611142565b610c6a565b6102586104dc3660046110d3565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b61025863043ab3e081565b6103b16105203660046110b8565b610d08565b61027e61053336600461116c565b610d67565b6102586201000081565b610258610db3565b3360009081526008602090815260408083206001600160a01b038816845290915281205484146105955760405162461bcd60e51b815260040161058c90611397565b60405180910390fd5b6105a0858484610dc5565b90505b949350505050565b60006001600160a01b038316158015906105ce57506001600160a01b0383163014155b6105ea5760405162461bcd60e51b815260040161058c9061136e565b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b60055460009060001990610664908261140c565b91505090565b6004546040805160208101929092526bffffffffffffffffffffffff193360601b16908201526054810183905260009081906074016040516020818303038152906040528051906020012090508281146107365760405162461bcd60e51b815260206004820152604160248201527f4368616c6c656e67652064696765737420646f6573206e6f74206d617463682060448201527f657870656374656420646967657374206f6e20746f6b656e20636f6e747261636064820152601d60fa1b608482015260a40161058c565b6105a384610953565b60006001600160a01b0383161580159061076257506001600160a01b0383163014155b61077e5760405162461bcd60e51b815260040161058c9061136e565b6001600160a01b0384166000908152600760205260409020546107a2908390611538565b6001600160a01b03851660009081526007602090815260408083209390935560088152828220338352905220546107da908390611538565b6001600160a01b0380861660009081526008602090815260408083203384528252808320949094559186168152600790915220546108199083906113f4565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061086d9086815260200190565b60405180910390a35060019392505050565b600061088c600254610ecd565b905090565b6001546001600160a01b031633146108a857600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b600061064a60025460035484610ef6565b60008061093d84600554610931919061140c565b60025460035486610f36565b90508061094984610ecd565b6105a39190611519565b6002546000908161096382610ecd565b9050806109b25760405162461bcd60e51b815260206004820152601760248201527f526577617264206861732072656163686564207a65726f000000000000000000604482015260640161058c565b600454604080516020808201939093523360601b6bffffffffffffffffffffffff1916818301526054808201889052825180830390910181526074909101909152805191012060055480821115610a575760405162461bcd60e51b815260206004820152602360248201527f446967657374206973206c6172676572207468616e206d696e696e672074617260448201526219d95d60ea1b606482015260840161058c565b6003546000610a71610a69858561140c565b878442610f36565b90506000610a7f8287611519565b90506000610a8c82610f57565b9050610a988385610f9a565b610aa485898542610fab565b6005556000610ab28261104a565b600481905542600281905590915033907fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d908590610aef90611063565b604080519283526020830191909152810184905260600160405180910390a25060019a9950505050505050505050565b60006001600160a01b03831615801590610b4257506001600160a01b0383163014155b610b5e5760405162461bcd60e51b815260040161058c9061136e565b33600090815260076020526040902054610b79908390611538565b33600090815260076020526040808220929092556001600160a01b03851681522054610ba69083906113f4565b6001600160a01b0384166000818152600760205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061063e9086815260200190565b600080610c247f000000000000000000000000000000000000000000000000000000000000000084611538565b905063043ab3e0811015610c3b5750600092915050565b6305a39a80610c4e63043ab3e083611538565b610c58919061140c565b610c639060016113f4565b9392505050565b600080546001600160a01b03163314610c8257600080fd5b60005460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb90604401602060405180830381600087803b158015610cd057600080fd5b505af1158015610ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190611274565b6000546001600160a01b03163314610d1f57600080fd5b6001600160a01b038116610d455760405162461bcd60e51b815260040161058c9061136e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526008602090815260408083206001600160a01b03871684529091528120548314610da95760405162461bcd60e51b815260040161058c90611397565b6105a384836105ab565b600060035461025861088c9190611519565b60006001600160a01b03841615801590610de857506001600160a01b0384163014155b610e045760405162461bcd60e51b815260040161058c9061136e565b3360008181526008602090815260408083206001600160a01b03891680855290835292819020879055518681529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3604051638f4ffcb160e01b81526001600160a01b03851690638f4ffcb190610e9190339087903090889060040161131e565b600060405180830381600087803b158015610eab57600080fd5b505af1158015610ebf573d6000803e3d6000fd5b506001979650505050505050565b6000610ed882610bf7565b610ee3906002611471565b61064a9068068155a43676e0000061140c565b60008281610258610f078786611538565b610f11919061140c565b905081811115610f1f578091505b6048821115610f2d57604891505b50949350505050565b600080610f44858585610ef6565b9050808610156105a057859150506105a3565b33600090815260076020526040812080548391908390610f789084906113f4565b9091555050600654600090610f8e9084906113f4565b60068190559392505050565b808214610fa75760038290555b5050565b600080610fb88584611538565b9050610fc661025885611519565b610fd190603d611519565b610fdc826058611519565b1015611000576064610fef876063611519565b610ff9919061140c565b955061101a565b606361100d876064611519565b611017919061140c565b95505b6201000086101561102c576201000095505b600160ea1b86111561104057600160ea1b95505b5093949350505050565b600060038261105a600143611538565b40181892915050565b60006102586110927f000000000000000000000000000000000000000000000000000000000000000084611538565b61064a919061140c565b80356001600160a01b03811681146110b357600080fd5b919050565b6000602082840312156110ca57600080fd5b610c638261109c565b600080604083850312156110e657600080fd5b6110ef8361109c565b91506110fd6020840161109c565b90509250929050565b60008060006060848603121561111b57600080fd5b6111248461109c565b92506111326020850161109c565b9150604084013590509250925092565b6000806040838503121561115557600080fd5b61115e8361109c565b946020939093013593505050565b60008060006060848603121561118157600080fd5b61118a8461109c565b95602085013595506040909401359392505050565b600080600080608085870312156111b557600080fd5b6111be8561109c565b93506020850135925060408501359150606085013567ffffffffffffffff808211156111e957600080fd5b818701915087601f8301126111fd57600080fd5b81358181111561120f5761120f611565565b604051601f8201601f19908116603f0116810190838211818310171561123757611237611565565b816040528281528a602084870101111561125057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60006020828403121561128657600080fd5b81518015158114610c6357600080fd5b6000602082840312156112a857600080fd5b5035919050565b600080604083850312156112c257600080fd5b50508035926020909101359150565b6000815180845260005b818110156112f7576020818501810151868301820152016112db565b81811115611309576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682526020820185905283166040820152608060608201819052600090611351908301846112d1565b9695505050505050565b602081526000610c6360208301846112d1565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b60208082526038908201527f43757272656e74207370656e64657220616c6c6f77616e636520646f6573206e60408201527f6f74206d61746368207370656369666965642076616c75650000000000000000606082015260800190565b600082198211156114075761140761154f565b500190565b60008261142957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561146957816000190482111561144f5761144f61154f565b8085161561145c57918102915b93841c9390800290611433565b509250929050565b6000610c6383836000826114875750600161064a565b816114945750600061064a565b81600181146114aa57600281146114b4576114d0565b600191505061064a565b60ff8411156114c5576114c561154f565b50506001821b61064a565b5060208310610133831016604e8410600b84101617156114f3575081810a61064a565b6114fd838361142e565b80600019048211156115115761151161154f565b029392505050565b60008160001904831182151516156115335761153361154f565b500290565b60008282101561154a5761154a61154f565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212205e2e86fb993e7058b2a46f49e8ed55b4ae049e277f086649721e0c9dc89f442e64736f6c63430008050033

Deployed ByteCode Sourcemap

616:16285:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1413:47;;-1:-1:-1;;;1413:47:1;;;;;5835:25:5;;;5823:2;5808:18;1413:47:1;;;;;;;;16083:391;;;;;;:::i;:::-;;:::i;:::-;;;5662:14:5;;5655:22;5637:41;;5625:2;5610:18;16083:391:1;5592:92:5;2112:80:1;2181:4;;;;;;;;;;;;-1:-1:-1;;;2181:4:1;;;;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;828:35::-;;861:2;828:35;;;;;8772:4:5;8760:17;;;8742:36;;8730:2;8715:18;828:35:1;8697:87:5;10734:89:1;861:2;10734:89;;9358:100;9440:12;;9358:100;;933:53;;974:12;933:53;;9464:284;;;:::i;1519:34::-;;;;;;8938:108;9024:15;;8938:108;;1274:64;;1316:22;1274:64;;1086:45;;1128:3;1086:45;;1688:27;;;;;;11152:132;;;;;;:::i;:::-;-1:-1:-1;;;;;11256:20:1;11221:15;11256:20;;;:8;:20;;;;;;;11152:132;802:218:4;;;:::i;:::-;;297:20;;;;;-1:-1:-1;;;;;297:20:4;;;;;;-1:-1:-1;;;;;4681:32:5;;;4663:51;;4651:2;4636:18;297:20:4;4618:102:5;9893:284:1;;;;;;:::i;:::-;;:::i;870:56::-;;909:17;870:56;;2198:84;2269:6;;;;;;;;;;;;-1:-1:-1;;;2269:6:1;;;;2198:84;;10183:545;;;;;;:::i;:::-;;:::i;2288:1893::-;;;;;;:::i;:::-;;:::i;11633:367::-;;;;;;:::i;:::-;;:::i;8448:339::-;;;;;;:::i;:::-;;:::i;777:44::-;;820:1;777:44;;1467:45;;;;;993:50;;1041:2;993:50;;328:23:4;;;;;-1:-1:-1;;;;;328:23:4;;;16709:189:1;;;;;;:::i;:::-;;:::i;14761:158::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14883:19:1;;;14847:17;14883:19;;;:7;:19;;;;;;;;:28;;;;;;;;;;;;;14761:158;1178:76;;1226:28;1178:76;;616:176:4;;;;;;:::i;:::-;;:::i;13183:319:1:-;;;;;;:::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:1;;;;;;;;;;:49;;16272:134;;;;-1:-1:-1;;;16272:134:1;;;;;;;:::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:1;;;;;;:49;;-1:-1:-1;;;;;;12581:24:1;;12600:4;12581:24;;12556:49;12548:77;;;;-1:-1:-1;;;12548:77:1;;;;;;;:::i;:::-;12644:10;12636:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;12636:28:1;;;;;;;;;;;;:37;;;12689;5835:25:5;;;12636:28:1;;12644:10;12689:37;;5808:18:5;12689:37:1;;;;;;;;-1:-1:-1;12744:4:1;12440:316;;;;;:::o;9052:300::-;9333:12;;9113:7;;-1:-1:-1;;9241:66:1;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:1;4395:2:5;4391:15;4387:53;4373:12;;;4366:75;4457:12;;;4450:28;;;6542:4:1;;;;4494:12:5;;6586:53:1;;;;;;;;;;;;6576:64;;;;;;6559:81;;6668:16;6658:6;:26;6650:104;;;;-1:-1:-1;;;6650:104:1;;6993:2:5;6650:104:1;;;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:1;6965:295:5;6650:104:1;6780:12;6785:6;6780:4;:12::i;14043:432::-;14132:12;-1:-1:-1;;;;;14173:16:1;;;;;;:39;;-1:-1:-1;;;;;;14193:19:1;;14207:4;14193:19;;14173:39;14165:67;;;;-1:-1:-1;;;14165:67:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;14260:14:1;;;;;;:8;:14;;;;;;:23;;14277:6;;14260:23;:::i;:::-;-1:-1:-1;;;;;14243:14:1;;;;;;:8;:14;;;;;;;;:40;;;;14322:7;:13;;;;;14336:10;14322:25;;;;;;:34;;14350:6;;14322:34;:::i;:::-;-1:-1:-1;;;;;14294:13:1;;;;;;;:7;:13;;;;;;;;14308:10;14294:25;;;;;;;:62;;;;14382:12;;;;;:8;:12;;;;;:21;;14397:6;;14382:21;:::i;:::-;-1:-1:-1;;;;;14367:12:1;;;;;;;:8;:12;;;;;;;:36;;;;14419:26;;;;;;;;;;14438:6;5835:25:5;;5823:2;5808:18;;5790:76;14419:26:1;;;;;;;;-1:-1:-1;14463:4:1;14043:432;;;;;:::o;9464:284::-;9521:7;9704:37;9721:19;;9704:16;:37::i;:::-;9697:44;;9464:284;:::o;802:218:4:-;875:8;;-1:-1:-1;;;;;875:8:4;861:10;:22;853:31;;;;;;932:8;;;925:5;;904:37;;-1:-1:-1;;;;;932:8:4;;;;925:5;;;;904:37;;;964:8;;;;956:16;;-1:-1:-1;;;;;;956:16:4;;;-1:-1:-1;;;;;964:8:4;;956:16;;;;987:21;;;802:218::o;9893:284:1:-;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:1;2566:62;;2595:33;;-1:-1:-1;;;2595:33:1;;6641:2:5;2595:33:1;;;6623:21:5;6680:2;6660:18;;;6653:30;6719:25;6699:18;;;6692:53;6762:18;;2595:33:1;6613:173:5;2566:62:1;2785:15;;2768:52;;;;;;;4338:19:5;;;;2802:10:1;4395:2:5;4391:15;-1:-1:-1;;4387:53:5;4373:12;;;4366:75;4457:12;;;;4450:28;;;2768:52:1;;;;;;;;;;4494:12:5;;;;2768:52:1;;;2758:63;;;;;2856:12;;2936:31;;;2932:82;;;2969:45;;-1:-1:-1;;;2969:45:1;;7467:2:5;2969:45:1;;;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:1;7439:225:5;2932:82:1;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:1;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:1;;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:1;;;;;;;-1:-1:-1;4170:4:1;;2288:1893;-1:-1:-1;;;;;;;;;;2288:1893:1:o;11633:367::-;11704:12;-1:-1:-1;;;;;11745:16:1;;;;;;:39;;-1:-1:-1;;;;;;11765:19:1;;11779:4;11765:19;;11745:39;11737:67;;;;-1:-1:-1;;;11737:67:1;;;;;;;:::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:1;;;;;;:21;;11916:6;;11901:21;:::i;:::-;-1:-1:-1;;;;;11886:12:1;;;;;;:8;:12;;;;;;;:36;;;;11938:32;;11947:10;;11938:32;;;;11963:6;5835:25:5;;5823:2;5808:18;;5790:76;8448:339:1;8503:7;;8559:28;8567:20;8559:5;:28;:::i;:::-;8523:64;;1226:28;8602:25;:49;8598:182;;;-1:-1:-1;8672:1:1;;8448:339;-1:-1:-1;;8448:339:1:o;8598:182::-;1316:22;8712:49;1226:28;8712:25;:49;:::i;:::-;8711:69;;;;:::i;:::-;8707:73;;:1;:73;:::i;:::-;8700:80;8448:339;-1:-1:-1;;;8448:339:1:o;16709:189::-;16806:12;571:5:4;;-1:-1:-1;;;;;571:5:4;557:10;:19;549:28;;;;;;16876:5:1::1;::::0;16838:52:::1;::::0;-1:-1:-1;;;16838:52:1;;-1:-1:-1;;;;;16876:5:1;;::::1;16838:52;::::0;::::1;4899:51:5::0;4966:18;;;4959:34;;;16838:37:1;;::::1;::::0;::::1;::::0;4872:18:5;;16838:52:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;616:176:4:-:0;571:5;;-1:-1:-1;;;;;571:5:4;557:10;:19;549:28;;;;;;-1:-1:-1;;;;;702:23:4;::::1;694:51;;;;-1:-1:-1::0;;;694:51:4::1;;;;;;;:::i;:::-;760:8;:20:::0;;-1:-1:-1;;;;;;760:20:4::1;-1:-1:-1::0;;;;;760:20:4;;;::::1;::::0;;;::::1;::::0;;616:176::o;13183:319:1:-;13329:10;13288:12;13321:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;13321:28:1;;;;;;;;;;:49;;13313:134;;;;-1:-1:-1;;;13313:134:1;;;;;;;:::i;:::-;13465:30;13473:7;13482:12;13465:7;:30::i;8793:139::-;8856:7;8900:25;;1128:3;8882:43;;;;:::i;15418:434::-;15512:12;-1:-1:-1;;;;;15553:21:1;;;;;;:49;;-1:-1:-1;;;;;;15578:24:1;;15597:4;15578:24;;15553:49;15545:77;;;;-1:-1:-1;;;15545:77:1;;;;;;;:::i;:::-;15641:10;15633:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;15633:28:1;;;;;;;;;;;;:37;;;15686;5835:25:5;;;15633:28:1;;15641:10;15686:37;;5808:18:5;15686:37:1;;;;;;;15734:88;;-1:-1:-1;;;15734:88:1;;-1:-1:-1;;;;;15734:47:1;;;;;:88;;15782:10;;15794:6;;15810:4;;15817;;15734:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15840:4:1;;15418:434;-1:-1:-1;;;;;;;15418:434:1:o;9754:133::-;9818:7;9864:16;9874:5;9864:9;:16::i;:::-;9861:19;;:1;:19;:::i;:::-;9844:36;;974:12;9844:36;:::i;4187:666::-;4413:7;4459:27;4413:7;1128: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;1041:2;4721:15;:39;4717:96;;;1041:2;4774:39;;4717:96;-1:-1:-1;4831:15:1;4187:666;-1:-1:-1;;;;4187:666:1: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:1;;5595:21;;5619:26;;5634:11;;5619:26;:::i;:::-;5655:12;:28;;;5595:50;5469:251;-1:-1:-1;;;5469:251:1: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:1;1128: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:1;:30;8324:79;;;-1:-1:-1;;;8373:30:1;;8324:79;-1:-1:-1;8421:13:1;;7508:933;-1:-1:-1;;;;7508:933:1:o;6805:524::-;6883:7;820:1;7289:13;7268:16;7283:1;7268:12;:16;:::i;:::-;7258:27;7250:52;:71;;6805:524;-1:-1:-1;;6805:524:1:o;7336:166::-;7415:7;1128: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://5e2e86fb993e7058b2a46f49e8ed55b4ae049e277f086649721e0c9dc89f442e
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.