ETH Price: $2,765.31 (+1.27%)
Gas: 0.77 Gwei

Contract

0x19E478098923557527C82a2f331F1b8F8f7819dD
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Game Mining114631932020-12-16 9:00:241527 days ago1608109224IN
0x19E47809...F8f7819dD
0 ETH0.0055626264
Transfer Ownersh...83334432019-08-12 3:55:362020 days ago1565582136IN
0x19E47809...F8f7819dD
0 ETH0.00124540
Game Mining83334352019-08-12 3:53:282020 days ago1565582008IN
0x19E47809...F8f7819dD
0 ETH0.0032755240
Create Token To ...83334092019-08-12 3:47:232020 days ago1565581643IN
0x19E47809...F8f7819dD
0 ETH0.0026049240
Create Token To ...48790762018-01-09 8:58:432599 days ago1515488323IN
0x19E47809...F8f7819dD
0 ETH0.0039044460
Authorized Creat...48101682017-12-28 3:20:142612 days ago1514431214IN
0x19E47809...F8f7819dD
0 ETH0.0031450840
Create Token To ...48101272017-12-28 3:12:312612 days ago1514430751IN
0x19E47809...F8f7819dD
0 ETH0.0025048840
Create Token To ...48101172017-12-28 3:09:572612 days ago1514430597IN
0x19E47809...F8f7819dD
0 ETH0.0030987640
Set Market Addre...48101162017-12-28 3:09:432612 days ago1514430583IN
0x19E47809...F8f7819dD
0 ETH0.0017727640
Set Operation Ad...48101152017-12-28 3:09:362612 days ago1514430576IN
0x19E47809...F8f7819dD
0 ETH0.0017701240
Set Team Address48101122017-12-28 3:07:562612 days ago1514430476IN
0x19E47809...F8f7819dD
0 ETH0.0017490840

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
48100552017-12-28 2:55:102612 days ago1514429710
0x19E47809...F8f7819dD
 Contract Creation0 ETH
48100552017-12-28 2:55:102612 days ago1514429710
0x19E47809...F8f7819dD
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TopChainCoinDistribution

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-12-28
*/

pragma solidity ^0.4.18;


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}


contract DateTime {
        /*
         *  Date and Time utilities for ethereum contracts
         *
         */
        struct _DateTime {
                uint16 year;
                uint8 month;
                uint8 day;
                uint8 hour;
                uint8 minute;
                uint8 second;
                uint8 weekday;
        }

        uint constant DAY_IN_SECONDS = 86400;
        uint constant YEAR_IN_SECONDS = 31536000;
        uint constant LEAP_YEAR_IN_SECONDS = 31622400;

        uint constant HOUR_IN_SECONDS = 3600;
        uint constant MINUTE_IN_SECONDS = 60;

        uint16 constant ORIGIN_YEAR = 1970;

        function isLeapYear(uint16 year) public pure returns (bool) {
                if (year % 4 != 0) {
                        return false;
                }
                if (year % 100 != 0) {
                        return true;
                }
                if (year % 400 != 0) {
                        return false;
                }
                return true;
        }

        function leapYearsBefore(uint year) public pure returns (uint) {
                year -= 1;
                return year / 4 - year / 100 + year / 400;
        }

        function getDaysInMonth(uint8 month, uint16 year) public pure returns (uint8) {
                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                    return 31;
                } else if (month == 4 || month == 6 || month == 9 || month == 11) {
                    return 30;
                } else if (isLeapYear(year)) {
                    return 29;
                } else {
                    return 28;
                }
        }

        function parseTimestamp(uint timestamp) internal pure returns (_DateTime dt) {
                uint secondsAccountedFor = 0;
                uint buf;
                uint8 i;

                // Year
                dt.year = getYear(timestamp);
                buf = leapYearsBefore(dt.year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf;
                secondsAccountedFor += YEAR_IN_SECONDS * (dt.year - ORIGIN_YEAR - buf);

                // Month
                uint secondsInMonth;
                for (i = 1; i <= 12; i++) {
                        secondsInMonth = DAY_IN_SECONDS * getDaysInMonth(i, dt.year);
                        if (secondsInMonth + secondsAccountedFor > timestamp) {
                                dt.month = i;
                                break;
                        }
                        secondsAccountedFor += secondsInMonth;
                }

                // Day
                for (i = 1; i <= getDaysInMonth(dt.month, dt.year); i++) {
                        if (DAY_IN_SECONDS + secondsAccountedFor > timestamp) {
                                dt.day = i;
                                break;
                        }
                        secondsAccountedFor += DAY_IN_SECONDS;
                }

                // Hour
                dt.hour = getHour(timestamp);

                // Minute
                dt.minute = getMinute(timestamp);

                // Second
                dt.second = getSecond(timestamp);

                // Day of week.
                dt.weekday = getWeekday(timestamp);
        }

        function getYear(uint timestamp) public pure returns (uint16) {
                uint secondsAccountedFor = 0;
                uint16 year;
                uint numLeapYears;

                // Year
                year = uint16(ORIGIN_YEAR + timestamp / YEAR_IN_SECONDS);
                numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears;
                secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears);

                while (secondsAccountedFor > timestamp) {
                        if (isLeapYear(uint16(year - 1))) {
                                secondsAccountedFor -= LEAP_YEAR_IN_SECONDS;
                        } else {
                                secondsAccountedFor -= YEAR_IN_SECONDS;
                        }
                        year -= 1;
                }
                return year;
        }

        function getMonth(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).month;
        }

        function getDay(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).day;
        }

        function getHour(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60 / 60) % 24);
        }

        function getMinute(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60) % 60);
        }

        function getSecond(uint timestamp) public pure returns (uint8) {
                return uint8(timestamp % 60);
        }

        function getWeekday(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / DAY_IN_SECONDS + 4) % 7);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, 0, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, minute, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute, uint8 second) public pure returns (uint timestamp) {
                uint16 i;

                // Year
                for (i = ORIGIN_YEAR; i < year; i++) {
                        if (isLeapYear(i)) {
                            timestamp += LEAP_YEAR_IN_SECONDS;
                        } else {
                            timestamp += YEAR_IN_SECONDS;
                        }
                }

                // Month
                uint8[12] memory monthDayCounts;
                monthDayCounts[0] = 31;
                if (isLeapYear(year)) {
                    monthDayCounts[1] = 29;
                } else {
                    monthDayCounts[1] = 28;
                }
                monthDayCounts[2] = 31;
                monthDayCounts[3] = 30;
                monthDayCounts[4] = 31;
                monthDayCounts[5] = 30;
                monthDayCounts[6] = 31;
                monthDayCounts[7] = 31;
                monthDayCounts[8] = 30;
                monthDayCounts[9] = 31;
                monthDayCounts[10] = 30;
                monthDayCounts[11] = 31;

                for (i = 1; i < month; i++) {
                        timestamp += DAY_IN_SECONDS * monthDayCounts[i - 1];
                }

                // Day
                timestamp += DAY_IN_SECONDS * (day - 1);

                // Hour
                timestamp += HOUR_IN_SECONDS * (hour);

                // Minute
                timestamp += MINUTE_IN_SECONDS * (minute);

                // Second
                timestamp += second;

                return timestamp;
        }
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}




/**
 * @title Authorizable
 * @dev Allows to authorize access to certain function calls
 *
 * ABI
 * [{"constant":true,"inputs":[{"name":"authorizerIndex","type":"uint256"}],"name":"getAuthorizer","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"addAuthorized","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isAuthorized","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}]
 */
contract Authorizable {

    address[] authorizers;
    mapping(address => uint) authorizerIndex;

    /**
     * @dev Throws if called by any account tat is not authorized.
     */
    modifier onlyAuthorized {
        require(isAuthorized(msg.sender));
        _;
    }

    /**
     * @dev Contructor that authorizes the msg.sender.
     */
    function Authorizable() public {
        authorizers.length = 2;
        authorizers[1] = msg.sender;
        authorizerIndex[msg.sender] = 1;
    }

    /**
     * @dev Function to get a specific authorizer
     * @param _authorizerIndex index of the authorizer to be retrieved.
     * @return The address of the authorizer.
     */
    function getAuthorizer(uint _authorizerIndex) external view returns(address) {
        return address(authorizers[_authorizerIndex + 1]);
    }

    /**
     * @dev Function to check if an address is authorized
     * @param _addr the address to check if it is authorized.
     * @return boolean flag if address is authorized.
     */
    function isAuthorized(address _addr) public view returns(bool) {
        return authorizerIndex[_addr] > 0;
    }

    /**
     * @dev Function to add a new authorizer
     * @param _addr the address to add as a new authorizer.
     */
    function addAuthorized(address _addr) external onlyAuthorized {
        authorizerIndex[_addr] = authorizers.length;
        authorizers.length++;
        authorizers[authorizers.length - 1] = _addr;
    }

}



/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}















/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }

}







/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

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


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}





/**
 * @title Mintable token
 * @dev Simple ERC20 Token example, with mintable token creation
 * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120
 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol
 */

contract MintableToken is StandardToken, Ownable {
  event Mint(address indexed to, uint256 amount);
  event MintFinished();

  bool public mintingFinished = false;


  modifier canMint() {
    require(!mintingFinished);
    _;
  }

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(address _to, uint256 _amount) public onlyOwner canMint  returns (bool) {
    totalSupply = totalSupply.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    Mint(_to, _amount);
    Transfer(address(0), _to, _amount);
    return true;
  }

  /**
   * @dev Function to stop minting new tokens.
   * @return True if the operation was successful.
   */
  function finishMinting() public onlyOwner canMint  returns (bool) {
    mintingFinished = true;
    MintFinished();
    return true;
  }
}


/**
 * @title TopChainCoin
 * @dev The main TOPC token contract
 *
 * ABI
 * [ { "constant": true, "inputs": [], "name": "mintingFinished", "outputs": [ { "name": "", "type": "bool", "value": false } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "name", "outputs": [ { "name": "", "type": "string", "value": "TopChainCoin" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_spender", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "approve", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "name": "", "type": "uint256", "value": "0" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_from", "type": "address" }, { "name": "_to", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "name": "", "type": "uint256", "value": "6" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_to", "type": "address" }, { "name": "_amount", "type": "uint256" } ], "name": "mint", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_spender", "type": "address" }, { "name": "_subtractedValue", "type": "uint256" } ], "name": "decreaseApproval", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "_owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "name": "balance", "type": "uint256", "value": "0" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "finishMinting", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "owner", "outputs": [ { "name": "", "type": "address", "value": "0x0acb56da5d13db292ab72b16aabde8c850bd2f29" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "name": "", "type": "string", "value": "TOPC" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_to", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_spender", "type": "address" }, { "name": "_addedValue", "type": "uint256" } ], "name": "increaseApproval", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "_owner", "type": "address" }, { "name": "_spender", "type": "address" } ], "name": "allowance", "outputs": [ { "name": "", "type": "uint256", "value": "0" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "to", "type": "address" }, { "indexed": false, "name": "amount", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MintFinished", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "previousOwner", "type": "address" }, { "indexed": true, "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "owner", "type": "address" }, { "indexed": true, "name": "spender", "type": "address" }, { "indexed": false, "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "from", "type": "address" }, { "indexed": true, "name": "to", "type": "address" }, { "indexed": false, "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" } ]
 */
contract TopChainCoin is MintableToken {

    string public name = "TopChainCoin";
    string public symbol = "TOPC";
    uint public decimals = 6;

    /**
     * @dev Allows anyone to transfer 
     * @param _to the recipient address of the tokens.
     * @param _value number of tokens to be transfered.
     */
    function transfer(address _to, uint256 _value) public returns (bool) {
        super.transfer(_to, _value);
    }

    /**
    * @dev Allows anyone to transfer 
    * @param _from address The address which you want to send tokens from
    * @param _to address The address which you want to transfer to
    * @param _value uint the amout of tokens to be transfered
    */
    function transferFrom(address _from, address _to, uint _value) public returns (bool) {
        super.transferFrom(_from, _to, _value);
    }

}


/**
 * @title TopChainCoinDistribution
 * @dev The main TOPC token sale contract
 *
 * ABI
 */
contract TopChainCoinDistribution is Ownable, Authorizable {
    using SafeMath for uint;

    event AuthorizedCreateToPrivate(address recipient, uint pay_amount);
    event GameMining(address recipient, uint pay_amount);
    event CreateTokenToTeam(address recipient, uint pay_amount);
    event CreateTokenToMarket(address recipient, uint pay_amount);
    event CreateTokenToOperation(address recipient, uint pay_amount);
    event TopChainCoinMintFinished();

    TopChainCoin public token = new TopChainCoin();
    DateTime internal dateTime = new DateTime();

    uint totalToken = 2100000000 * (10 ** 6); //21亿

    uint public privateTokenCap = 210000000 * (10 ** 6); //私募发行2.1亿(10%)

    uint public marketToken = 315000000 * (10 ** 6); //全球推广3.15亿(15%)

    uint public operationToken = 210000000 * (10 ** 6); //社区运营2.1亿(10%)

    uint public gameMiningTokenCap = 1155000000 * (10 ** 6); //游戏挖矿11.55亿(55%)

    uint public teamToken2018 = 105000000 * (10 ** 6); //团队预留2.1亿(10%),2018年发放1.05亿(5%)
    uint public teamToken2019 = 105000000 * (10 ** 6); //团队预留2.1亿(10%),2019年发放1.05亿(5%)

    uint public privateToken = 0; //私募已发行数量

    address public teamAddress;
    address public operationAddress;
    address public marketAddress;

    bool public team2018TokenCreated = false;
    bool public team2019TokenCreated = false;
    bool public operationTokenCreated = false;
    bool public marketTokenCreated = false;

    //year => token
    mapping(uint16 => uint) public gameMiningToken; //游戏挖矿已发行数量

    uint public firstYearGameMiningTokenCap = 577500000 * (10 ** 6); //2018年5.775亿(21亿*0.55*0.5),以后逐年减半 

    uint public gameMiningTokenStartTime = 1514736000; //new Date("Jan 01 2018 00:00:00 GMT+8").getTime() / 1000;

    function isContract(address _addr) internal view returns(bool) {
        uint size;
        if (_addr == 0) 
            return false;

        assembly {
        size := extcodesize(_addr)
        }
        return size > 0;
    }

    //2018年5.775亿(21亿*0.55*0.5),以后逐年减半,到2028年发放剩余的全部
    function getCurrentYearGameMiningTokenCap(uint _currentYear) public view returns(uint) {
        require(_currentYear <= 2028);

        if (_currentYear < 2028) {
            uint divTimes = 2 ** (_currentYear - 2018);
            uint currentYearGameMiningTokenCap = firstYearGameMiningTokenCap.div(divTimes).div(10 ** 6).mul(10 ** 6);
            return currentYearGameMiningTokenCap;
        } else if (_currentYear == 2028) {
            return 1127932 * (10 ** 6);
        } else {
            revert();
        }
    }

    function getCurrentYearGameMiningRemainToken(uint16 _currentYear) public view returns(uint) {
        uint currentYearGameMiningTokenCap = getCurrentYearGameMiningTokenCap(_currentYear);

         if (gameMiningToken[_currentYear] == 0) {
             return currentYearGameMiningTokenCap;
         } else {
             return currentYearGameMiningTokenCap.sub(gameMiningToken[_currentYear]);
         }
    }

    function setTeamAddress(address _address) public onlyAuthorized {
        teamAddress = _address;
    }

    function setMarketAddress(address _address) public onlyAuthorized {
        marketAddress = _address;
    }

    function setOperationAddress(address _address) public onlyAuthorized {
        operationAddress = _address;
    }

    function createTokenToMarket() public onlyAuthorized {
        require(marketAddress != address(0));
        require(marketTokenCreated == false);

        marketTokenCreated = true;
        token.mint(marketAddress, marketToken);
        CreateTokenToMarket(marketAddress, marketToken);
    }

    function createTokenToOperation() public onlyAuthorized {
        require(operationAddress != address(0));
        require(operationTokenCreated == false);

        operationTokenCreated = true;
        token.mint(operationAddress, operationToken);
        CreateTokenToOperation(operationAddress, operationToken);
    }

    function _createTokenToTeam(uint16 _currentYear) internal {
        if (_currentYear == 2018) {
            require(team2018TokenCreated == false);
            team2018TokenCreated = true;
            token.mint(teamAddress, teamToken2018);
            CreateTokenToTeam(teamAddress, teamToken2018);
        } else if (_currentYear == 2019) {
            require(team2019TokenCreated == false);
            team2019TokenCreated = true;
            token.mint(teamAddress, teamToken2019);
            CreateTokenToTeam(teamAddress, teamToken2019);
        } else {
            revert();
        }
    }

    function createTokenToTeam() public onlyAuthorized {
        require(teamAddress != address(0));
        uint16 currentYear = dateTime.getYear(now);
        require(currentYear == 2018 || currentYear == 2019);
        _createTokenToTeam(currentYear);
    }

    function gameMining(address recipient, uint _tokens) public onlyAuthorized {
        require(now > gameMiningTokenStartTime);
        uint16 currentYear = dateTime.getYear(now);
        uint currentYearRemainTokens = getCurrentYearGameMiningRemainToken(currentYear);
        require(_tokens <= currentYearRemainTokens);

        gameMiningToken[currentYear] += _tokens; 

        token.mint(recipient, _tokens);
        GameMining(recipient, _tokens); 
    }

    function authorizedCreateTokensToPrivate(address recipient, uint _tokens) public onlyAuthorized {
        require(privateToken + _tokens <= privateTokenCap);
        privateToken += _tokens;
        token.mint(recipient, _tokens);
        AuthorizedCreateToPrivate(recipient, _tokens);
    }

    function finishMinting() public onlyOwner {
        token.finishMinting();
        token.transferOwnership(owner);
        TopChainCoinMintFinished();
    }

    //不允许直接转账以太币购买
    function () external {
        revert();
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"operationTokenCreated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"teamAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"privateToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"_tokens","type":"uint256"}],"name":"gameMining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_authorizerIndex","type":"uint256"}],"name":"getAuthorizer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_currentYear","type":"uint256"}],"name":"getCurrentYearGameMiningTokenCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setTeamAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstYearGameMiningTokenCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"createTokenToTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"teamToken2019","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"teamToken2018","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameMiningTokenCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint16"}],"name":"gameMiningToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"team2018TokenCreated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameMiningTokenStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_currentYear","type":"uint16"}],"name":"getCurrentYearGameMiningRemainToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"marketAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"operationAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"privateTokenCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"createTokenToOperation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"marketToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"createTokenToMarket","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"_tokens","type":"uint256"}],"name":"authorizedCreateTokensToPrivate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"addAuthorized","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"team2019TokenCreated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setOperationAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"operationToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setMarketAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"marketTokenCreated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isAuthorized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"pay_amount","type":"uint256"}],"name":"AuthorizedCreateToPrivate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"pay_amount","type":"uint256"}],"name":"GameMining","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"pay_amount","type":"uint256"}],"name":"CreateTokenToTeam","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"pay_amount","type":"uint256"}],"name":"CreateTokenToMarket","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"pay_amount","type":"uint256"}],"name":"CreateTokenToOperation","type":"event"},{"anonymous":false,"inputs":[],"name":"TopChainCoinMintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60606040526200000e62000162565b604051809103906000f08015156200002557600080fd5b60038054600160a060020a031916600160a060020a03929092169190911790556200004f62000173565b604051809103906000f08015156200006657600080fd5b60048054600160a060020a0319908116600160a060020a0393841617909155660775f05a07400060055565befe6f672000600681905566011e7da71ab00060075560085566041a7764b73000600955655f7f37b39000600a819055600b556000600c819055600f805460a060020a63ffffffff021916905566020d3bb25b9800601155635a49098060125580549091163390921691909117905560026200010f60018262000184565b50336001808154811015156200012157fe5b60009182526020808320919091018054600160a060020a031916600160a060020a0394851617905533909216815260029091526040902060019055620001d4565b604051610d7c80620015a383390190565b60405161088f806200231f83390190565b815481835581811511620001ab57600083815260209020620001ab918101908301620001b0565b505050565b620001d191905b80821115620001cd5760008155600101620001b7565b5090565b90565b6113bf80620001e46000396000f3006060604052600436106101925763ffffffff60e060020a60003504166305e5353581146101a25780631c75f085146101c95780631df224c1146101f85780633138d3281461021d5780633a3e8e84146102415780635c4978e0146102575780636690864e1461026d57806369a758681461028c5780636e1f777d1461029f5780636e441752146102b2578063708260b4146102c55780637bdef3f8146102d85780637d64bcb4146102eb5780637e3d45ef146102fe5780637e6beae114610318578063862b525c1461032b5780638da5cb5b1461033e5780638edcf21d14610351578063956236411461036b578063a441c3021461037e578063a497d8c614610391578063a878ad27146103a4578063ad48d611146103b7578063be9d89c5146103ca578063c132dd4f146103dd578063cf1c316a146103ff578063d25483931461041e578063d53ce95614610431578063de8c85ea14610450578063f2fde38b14610463578063fae9261214610482578063fc0c546a146104a1578063fd6dd889146104b4578063fe9fbb80146104c7575b341561019d57600080fd5b600080fd5b34156101ad57600080fd5b6101b56104e6565b604051901515815260200160405180910390f35b34156101d457600080fd5b6101dc610509565b604051600160a060020a03909116815260200160405180910390f35b341561020357600080fd5b61020b610518565b60405190815260200160405180910390f35b341561022857600080fd5b61023f600160a060020a036004351660243561051e565b005b341561024c57600080fd5b6101dc6004356106a8565b341561026257600080fd5b61020b6004356106d7565b341561027857600080fd5b61023f600160a060020a036004351661075e565b341561029757600080fd5b61020b6107a1565b34156102aa57600080fd5b61023f6107a7565b34156102bd57600080fd5b61020b610871565b34156102d057600080fd5b61020b610877565b34156102e357600080fd5b61020b61087d565b34156102f657600080fd5b61023f610883565b341561030957600080fd5b61020b61ffff6004351661099a565b341561032357600080fd5b6101b56109ac565b341561033657600080fd5b61020b6109cd565b341561034957600080fd5b6101dc6109d3565b341561035c57600080fd5b61020b61ffff600435166109e2565b341561037657600080fd5b6101dc610a45565b341561038957600080fd5b6101dc610a54565b341561039c57600080fd5b61020b610a63565b34156103af57600080fd5b61023f610a69565b34156103c257600080fd5b61020b610bd0565b34156103d557600080fd5b61023f610bd6565b34156103e857600080fd5b61023f600160a060020a0360043516602435610d3f565b341561040a57600080fd5b61023f600160a060020a0360043516610e31565b341561042957600080fd5b6101b5610ec0565b341561043c57600080fd5b61023f600160a060020a0360043516610ee2565b341561045b57600080fd5b61020b610f25565b341561046e57600080fd5b61023f600160a060020a0360043516610f2b565b341561048d57600080fd5b61023f600160a060020a0360043516610fc6565b34156104ac57600080fd5b6101dc611009565b34156104bf57600080fd5b6101b5611018565b34156104d257600080fd5b6101b5600160a060020a036004351661103c565b600f54760100000000000000000000000000000000000000000000900460ff1681565b600d54600160a060020a031681565b600c5481565b60008061052a3361103c565b151561053557600080fd5b601254421161054357600080fd5b600454600160a060020a03166392d663134260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561059457600080fd5b6102c65a03f115156105a557600080fd5b5050506040518051905091506105ba826109e2565b9050808311156105c957600080fd5b61ffff8216600090815260106020526040808220805486019055600354600160a060020a0316916340c10f199187918791516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561064257600080fd5b6102c65a03f1151561065357600080fd5b50505060405180519050507f8c3ebe3d4f86c8b4ce8fefa8104891177a56fe3d3989a9f91d339298222733bb8484604051600160a060020a03909216825260208201526040908101905180910390a150505050565b60006001826001018154811015156106bc57fe5b600091825260209091200154600160a060020a031692915050565b600080806107ec8411156106ea57600080fd5b6107ec841015610743576107e2840360020a9150610739620f424061072d620f42406107218660115461105890919063ffffffff16565b9063ffffffff61105816565b9063ffffffff61107416565b9050809250610757565b836107ec141561019d576501069dfc770092505b5050919050565b6107673361103c565b151561077257600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60115481565b60006107b23361103c565b15156107bd57600080fd5b600d54600160a060020a031615156107d457600080fd5b600454600160a060020a03166392d663134260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561082557600080fd5b6102c65a03f1151561083657600080fd5b50505060405180519150506107e261ffff8216148061085a57508061ffff166107e3145b151561086557600080fd5b61086e816110a6565b50565b600b5481565b600a5481565b60095481565b60005433600160a060020a0390811691161461089e57600080fd5b600354600160a060020a0316637d64bcb46000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156108e657600080fd5b6102c65a03f115156108f757600080fd5b50505060405180515050600354600054600160a060020a039182169163f2fde38b911660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561095857600080fd5b6102c65a03f1151561096957600080fd5b5050507fad22980affe606a937a4726d122bb6352a19f03a60b83023d8614216ddecbacb60405160405180910390a1565b60106020526000908152604090205481565b600f5474010000000000000000000000000000000000000000900460ff1681565b60125481565b600054600160a060020a031681565b6000806109f28361ffff166106d7565b61ffff84166000908152601060205260409020549091501515610a1757809150610a3f565b61ffff8316600090815260106020526040902054610a3c90829063ffffffff61133716565b91505b50919050565b600f54600160a060020a031681565b600e54600160a060020a031681565b60065481565b610a723361103c565b1515610a7d57600080fd5b600e54600160a060020a03161515610a9457600080fd5b600f54760100000000000000000000000000000000000000000000900460ff1615610abe57600080fd5b600f805476ff000000000000000000000000000000000000000000001916760100000000000000000000000000000000000000000000179055600354600e54600854600160a060020a03928316926340c10f1992169060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610b6057600080fd5b6102c65a03f11515610b7157600080fd5b50505060405180515050600e546008547f44cef69b70599491643e54df2686e6e3e7a5ae17da27e742a9521c2cc9fc49e391600160a060020a031690604051600160a060020a03909216825260208201526040908101905180910390a1565b60075481565b610bdf3361103c565b1515610bea57600080fd5b600f54600160a060020a03161515610c0157600080fd5b600f5477010000000000000000000000000000000000000000000000900460ff1615610c2c57600080fd5b600f805477ff00000000000000000000000000000000000000000000001916770100000000000000000000000000000000000000000000001790819055600354600754600160a060020a03918216926340c10f1992169060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ccf57600080fd5b6102c65a03f11515610ce057600080fd5b50505060405180515050600f546007547f3ebb2a17d6fc64b01de6fb41491e1a1e27fcdcb4b008de413a7506fe7f5dd11a91600160a060020a031690604051600160a060020a03909216825260208201526040908101905180910390a1565b610d483361103c565b1515610d5357600080fd5b600654600c5482011115610d6657600080fd5b600c805482019055600354600160a060020a03166340c10f19838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610dcd57600080fd5b6102c65a03f11515610dde57600080fd5b50505060405180519050507f6680285a6081efdf842b835606577e1cca91a704dbb949e675c737b0019cafb08282604051600160a060020a03909216825260208201526040908101905180910390a15050565b610e3a3361103c565b1515610e4557600080fd5b60018054600160a060020a038316600090815260026020526040902081905590610e7190828101611349565b50600180548291906000198101908110610e8757fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905550565b600f547501000000000000000000000000000000000000000000900460ff1681565b610eeb3361103c565b1515610ef657600080fd5b600e805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60085481565b60005433600160a060020a03908116911614610f4657600080fd5b600160a060020a0381161515610f5b57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610fcf3361103c565b1515610fda57600080fd5b600f805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600160a060020a031681565b600f5477010000000000000000000000000000000000000000000000900460ff1681565b600160a060020a03166000908152600260205260408120541190565b600080828481151561106657fe5b0490508091505b5092915050565b600080831515611087576000915061106d565b5082820282848281151561109757fe5b041461109f57fe5b9392505050565b8061ffff166107e214156111ed57600f5474010000000000000000000000000000000000000000900460ff16156110dc57600080fd5b600f805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055600354600d54600a54600160a060020a03928316926340c10f1992169060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561117a57600080fd5b6102c65a03f1151561118b57600080fd5b50505060405180515050600d54600a547f0242c430d2faa288225cf9f2cfb4feaa0ed23ecbfac74580e2c3c68b8486b6fd91600160a060020a031690604051600160a060020a03909216825260208201526040908101905180910390a161086e565b8061ffff166107e3141561019d57600f547501000000000000000000000000000000000000000000900460ff161561122457600080fd5b600f805475ff00000000000000000000000000000000000000000019167501000000000000000000000000000000000000000000179055600354600d54600b54600160a060020a03928316926340c10f1992169060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112c457600080fd5b6102c65a03f115156112d557600080fd5b50505060405180515050600d54600b547f0242c430d2faa288225cf9f2cfb4feaa0ed23ecbfac74580e2c3c68b8486b6fd91600160a060020a031690604051600160a060020a03909216825260208201526040908101905180910390a161086e565b60008282111561134357fe5b50900390565b81548183558181151161136d5760008381526020902061136d918101908301611372565b505050565b61139091905b8082111561138c5760008155600101611378565b5090565b905600a165627a7a723058208a68335e16e7c2b4300d9fa63886d95900c9a009ace210bec99a0cf7945ce6b90029606060409081526003805460a060020a60ff02191690558051908101604052600c81527f546f70436861696e436f696e00000000000000000000000000000000000000006020820152600490805161005b9291602001906100c8565b5060408051908101604052600481527f544f504300000000000000000000000000000000000000000000000000000000602082015260059080516100a39291602001906100c8565b506006805560038054600160a060020a03191633600160a060020a0316179055610163565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061010957805160ff1916838001178555610136565b82800160010185558215610136579182015b8281111561013657825182559160200191906001019061011b565b50610142929150610146565b5090565b61016091905b80821115610142576000815560010161014c565b90565b610c0a806101726000396000f3006060604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305d2035b81146100ea57806306fdde0314610111578063095ea7b31461019b57806318160ddd146101bd57806323b872dd146101e2578063313ce5671461020a57806340c10f191461021d578063661884631461023f57806370a08231146102615780637d64bcb4146102805780638da5cb5b1461029357806395d89b41146102c2578063a9059cbb146102d5578063d73dd623146102f7578063dd62ed3e14610319578063f2fde38b1461033e575b600080fd5b34156100f557600080fd5b6100fd61035f565b604051901515815260200160405180910390f35b341561011c57600080fd5b61012461036f565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610160578082015183820152602001610148565b50505050905090810190601f16801561018d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101a657600080fd5b6100fd600160a060020a036004351660243561040d565b34156101c857600080fd5b6101d0610479565b60405190815260200160405180910390f35b34156101ed57600080fd5b6100fd600160a060020a036004358116906024351660443561047f565b341561021557600080fd5b6101d0610494565b341561022857600080fd5b6100fd600160a060020a036004351660243561049a565b341561024a57600080fd5b6100fd600160a060020a03600435166024356105a7565b341561026c57600080fd5b6101d0600160a060020a03600435166106a3565b341561028b57600080fd5b6100fd6106be565b341561029e57600080fd5b6102a6610749565b604051600160a060020a03909116815260200160405180910390f35b34156102cd57600080fd5b610124610758565b34156102e057600080fd5b6100fd600160a060020a03600435166024356107c3565b341561030257600080fd5b6100fd600160a060020a03600435166024356107cf565b341561032457600080fd5b6101d0600160a060020a0360043581169060243516610873565b341561034957600080fd5b61035d600160a060020a036004351661089e565b005b60035460a060020a900460ff1681565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104055780601f106103da57610100808354040283529160200191610405565b820191906000526020600020905b8154815290600101906020018083116103e857829003601f168201915b505050505081565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60005481565b600061048c848484610939565b509392505050565b60065481565b60035460009033600160a060020a039081169116146104b857600080fd5b60035460a060020a900460ff16156104cf57600080fd5b6000546104e2908363ffffffff610abb16565b6000908155600160a060020a03841681526001602052604090205461050d908363ffffffff610abb16565b600160a060020a0384166000818152600160205260409081902092909255907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859084905190815260200160405180910390a2600160a060020a03831660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561060457600160a060020a03338116600090815260026020908152604080832093881683529290529081205561063b565b610614818463ffffffff610ad116565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a3600191505b5092915050565b600160a060020a031660009081526001602052604090205490565b60035460009033600160a060020a039081169116146106dc57600080fd5b60035460a060020a900460ff16156106f357600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a1790557fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a150600190565b600354600160a060020a031681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104055780601f106103da57610100808354040283529160200191610405565b600061069c8383610ae3565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054610807908363ffffffff610abb16565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a039081169116146108b957600080fd5b600160a060020a03811615156108ce57600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000600160a060020a038316151561095057600080fd5b600160a060020a03841660009081526001602052604090205482111561097557600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156109a857600080fd5b600160a060020a0384166000908152600160205260409020546109d1908363ffffffff610ad116565b600160a060020a038086166000908152600160205260408082209390935590851681522054610a06908363ffffffff610abb16565b600160a060020a03808516600090815260016020908152604080832094909455878316825260028152838220339093168252919091522054610a4e908363ffffffff610ad116565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600082820183811015610aca57fe5b9392505050565b600082821115610add57fe5b50900390565b6000600160a060020a0383161515610afa57600080fd5b600160a060020a033316600090815260016020526040902054821115610b1f57600080fd5b600160a060020a033316600090815260016020526040902054610b48908363ffffffff610ad116565b600160a060020a033381166000908152600160205260408082209390935590851681522054610b7d908363ffffffff610abb16565b600160a060020a0380851660008181526001602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a3506001929150505600a165627a7a723058202c384853862565bfa7e82d49b400cee0d91702e0763244f823f1e4641c9c6a7600296060604052341561000f57600080fd5b6108718061001e6000396000f3006060604052600436106100cf5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633e239e1a81146100d45780634ac1ad781461010057806362ba96871461011657806365c728401461015a5780637f791833146101705780638aa001fc1461019c5780638c8d98a0146101b25780639054bdec146101d857806392d6631314610210578063a324ad241461023d578063a6f0e57714610253578063b199993714610281578063b238ad0e14610297578063fa93f883146102b7575b600080fd5b34156100df57600080fd5b6100ea6004356102cd565b60405160ff909116815260200160405180910390f35b341561010b57600080fd5b6100ea6004356102ea565b341561012157600080fd5b61014861ffff6004351660ff602435811690604435811690606435811690608435166102fc565b60405190815260200160405180910390f35b341561016557600080fd5b6100ea600435610317565b341561017b57600080fd5b61014861ffff6004351660ff6024358116906044358116906064351661032c565b34156101a757600080fd5b6100ea600435610346565b34156101bd57600080fd5b61014861ffff6004351660ff60243581169060443516610350565b34156101e357600080fd5b61014861ffff6004351660ff60243581169060443581169060643581169060843581169060a4351661036a565b341561021b57600080fd5b6102266004356104b0565b60405161ffff909116815260200160405180910390f35b341561024857600080fd5b6100ea600435610540565b341561025e57600080fd5b61026d61ffff60043516610555565b604051901515815260200160405180910390f35b341561028c57600080fd5b6101486004356105ab565b34156102a257600080fd5b6100ea60ff6004351661ffff602435166105c6565b34156102c257600080fd5b6100ea60043561068e565b60006018603c8084045b048115156102e157fe5b0690505b919050565b600060076004620151808404016102e1565b600061030d8686868686600061036a565b9695505050505050565b600061032282610699565b6040015192915050565b600061033d8585858560008061036a565b95945050505050565b6000603c826102e1565b6000610362848484600080600061036a565b949350505050565b6000806103756107e0565b6107b291505b8861ffff168261ffff1610156103bc5761039482610555565b156103a7576301e28500830192506103b1565b6301e13380830192505b60019091019061037b565b601f81526103c989610555565b156103da57601d60208201526103e2565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8760ff168261ffff161015610472578061ffff600019840116600c811061045457fe5b602002015160ff166201518002830192508180600101925050610431565b6001870360ff166201518002830192508560ff16610e1002830192508460ff16603c02830192508360ff168301925082925050509695505050505050565b6000806107b26301e13380840481019082906104cb906105ab565b6104d88361ffff166105ab565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b848311156105385761051060018303610555565b15610523576301e285008303925061052d565b6301e13380830392505b6001820391506104fc565b509392505050565b600061054b82610699565b6020015192915050565b6000600461ffff83160661ffff1615610570575060006102e5565b606461ffff83160661ffff1615610589575060016102e5565b61019061ffff83160661ffff16156105a3575060006102e5565b506001919050565b60001901600061019082046064830460048404030192915050565b60008260ff16600114806105dd57508260ff166003145b806105eb57508260ff166005145b806105f957508260ff166007145b8061060757508260ff166008145b8061061557508260ff16600a145b8061062357508260ff16600c145b156106305750601f610688565b8260ff166004148061064557508260ff166006145b8061065357508260ff166009145b8061066157508260ff16600b145b1561066e5750601e610688565b61067782610555565b156106845750601d610688565b50601c5b92915050565b6000603c80836102d7565b6106a1610809565b60008080806106af866104b0565b61ffff1685526106c06107b26105ab565b6106ce865161ffff166105ab565b039250826301e285000284019350826107b286600001510361ffff16036301e133800284019350600191505b600c60ff831611610741576107108286516105c6565b60ff16620151800290508584820111156107325760ff82166020860152610741565b928301926001909101906106fa565b600191505b610755856020015186516105c6565b60ff168260ff161115156107925785846201518001111561077e5760ff82166040860152610792565b620151809390930192600190910190610746565b61079b866102cd565b60ff1660608601526107ac8661068e565b60ff1660808601526107bd86610346565b60ff1660a08601526107ce866102ea565b60ff1660c08601525092949350505050565b610180604051908101604052600c815b6000815260001990910190602001816107f05790505090565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820152905600a165627a7a72305820e84ce9b4857f0951d80bf9472b1b999df93e8561c64aa519ebfaed1a6c6f13100029

Deployed Bytecode

0x6060604052600436106101925763ffffffff60e060020a60003504166305e5353581146101a25780631c75f085146101c95780631df224c1146101f85780633138d3281461021d5780633a3e8e84146102415780635c4978e0146102575780636690864e1461026d57806369a758681461028c5780636e1f777d1461029f5780636e441752146102b2578063708260b4146102c55780637bdef3f8146102d85780637d64bcb4146102eb5780637e3d45ef146102fe5780637e6beae114610318578063862b525c1461032b5780638da5cb5b1461033e5780638edcf21d14610351578063956236411461036b578063a441c3021461037e578063a497d8c614610391578063a878ad27146103a4578063ad48d611146103b7578063be9d89c5146103ca578063c132dd4f146103dd578063cf1c316a146103ff578063d25483931461041e578063d53ce95614610431578063de8c85ea14610450578063f2fde38b14610463578063fae9261214610482578063fc0c546a146104a1578063fd6dd889146104b4578063fe9fbb80146104c7575b341561019d57600080fd5b600080fd5b34156101ad57600080fd5b6101b56104e6565b604051901515815260200160405180910390f35b34156101d457600080fd5b6101dc610509565b604051600160a060020a03909116815260200160405180910390f35b341561020357600080fd5b61020b610518565b60405190815260200160405180910390f35b341561022857600080fd5b61023f600160a060020a036004351660243561051e565b005b341561024c57600080fd5b6101dc6004356106a8565b341561026257600080fd5b61020b6004356106d7565b341561027857600080fd5b61023f600160a060020a036004351661075e565b341561029757600080fd5b61020b6107a1565b34156102aa57600080fd5b61023f6107a7565b34156102bd57600080fd5b61020b610871565b34156102d057600080fd5b61020b610877565b34156102e357600080fd5b61020b61087d565b34156102f657600080fd5b61023f610883565b341561030957600080fd5b61020b61ffff6004351661099a565b341561032357600080fd5b6101b56109ac565b341561033657600080fd5b61020b6109cd565b341561034957600080fd5b6101dc6109d3565b341561035c57600080fd5b61020b61ffff600435166109e2565b341561037657600080fd5b6101dc610a45565b341561038957600080fd5b6101dc610a54565b341561039c57600080fd5b61020b610a63565b34156103af57600080fd5b61023f610a69565b34156103c257600080fd5b61020b610bd0565b34156103d557600080fd5b61023f610bd6565b34156103e857600080fd5b61023f600160a060020a0360043516602435610d3f565b341561040a57600080fd5b61023f600160a060020a0360043516610e31565b341561042957600080fd5b6101b5610ec0565b341561043c57600080fd5b61023f600160a060020a0360043516610ee2565b341561045b57600080fd5b61020b610f25565b341561046e57600080fd5b61023f600160a060020a0360043516610f2b565b341561048d57600080fd5b61023f600160a060020a0360043516610fc6565b34156104ac57600080fd5b6101dc611009565b34156104bf57600080fd5b6101b5611018565b34156104d257600080fd5b6101b5600160a060020a036004351661103c565b600f54760100000000000000000000000000000000000000000000900460ff1681565b600d54600160a060020a031681565b600c5481565b60008061052a3361103c565b151561053557600080fd5b601254421161054357600080fd5b600454600160a060020a03166392d663134260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561059457600080fd5b6102c65a03f115156105a557600080fd5b5050506040518051905091506105ba826109e2565b9050808311156105c957600080fd5b61ffff8216600090815260106020526040808220805486019055600354600160a060020a0316916340c10f199187918791516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561064257600080fd5b6102c65a03f1151561065357600080fd5b50505060405180519050507f8c3ebe3d4f86c8b4ce8fefa8104891177a56fe3d3989a9f91d339298222733bb8484604051600160a060020a03909216825260208201526040908101905180910390a150505050565b60006001826001018154811015156106bc57fe5b600091825260209091200154600160a060020a031692915050565b600080806107ec8411156106ea57600080fd5b6107ec841015610743576107e2840360020a9150610739620f424061072d620f42406107218660115461105890919063ffffffff16565b9063ffffffff61105816565b9063ffffffff61107416565b9050809250610757565b836107ec141561019d576501069dfc770092505b5050919050565b6107673361103c565b151561077257600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60115481565b60006107b23361103c565b15156107bd57600080fd5b600d54600160a060020a031615156107d457600080fd5b600454600160a060020a03166392d663134260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561082557600080fd5b6102c65a03f1151561083657600080fd5b50505060405180519150506107e261ffff8216148061085a57508061ffff166107e3145b151561086557600080fd5b61086e816110a6565b50565b600b5481565b600a5481565b60095481565b60005433600160a060020a0390811691161461089e57600080fd5b600354600160a060020a0316637d64bcb46000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156108e657600080fd5b6102c65a03f115156108f757600080fd5b50505060405180515050600354600054600160a060020a039182169163f2fde38b911660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561095857600080fd5b6102c65a03f1151561096957600080fd5b5050507fad22980affe606a937a4726d122bb6352a19f03a60b83023d8614216ddecbacb60405160405180910390a1565b60106020526000908152604090205481565b600f5474010000000000000000000000000000000000000000900460ff1681565b60125481565b600054600160a060020a031681565b6000806109f28361ffff166106d7565b61ffff84166000908152601060205260409020549091501515610a1757809150610a3f565b61ffff8316600090815260106020526040902054610a3c90829063ffffffff61133716565b91505b50919050565b600f54600160a060020a031681565b600e54600160a060020a031681565b60065481565b610a723361103c565b1515610a7d57600080fd5b600e54600160a060020a03161515610a9457600080fd5b600f54760100000000000000000000000000000000000000000000900460ff1615610abe57600080fd5b600f805476ff000000000000000000000000000000000000000000001916760100000000000000000000000000000000000000000000179055600354600e54600854600160a060020a03928316926340c10f1992169060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610b6057600080fd5b6102c65a03f11515610b7157600080fd5b50505060405180515050600e546008547f44cef69b70599491643e54df2686e6e3e7a5ae17da27e742a9521c2cc9fc49e391600160a060020a031690604051600160a060020a03909216825260208201526040908101905180910390a1565b60075481565b610bdf3361103c565b1515610bea57600080fd5b600f54600160a060020a03161515610c0157600080fd5b600f5477010000000000000000000000000000000000000000000000900460ff1615610c2c57600080fd5b600f805477ff00000000000000000000000000000000000000000000001916770100000000000000000000000000000000000000000000001790819055600354600754600160a060020a03918216926340c10f1992169060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ccf57600080fd5b6102c65a03f11515610ce057600080fd5b50505060405180515050600f546007547f3ebb2a17d6fc64b01de6fb41491e1a1e27fcdcb4b008de413a7506fe7f5dd11a91600160a060020a031690604051600160a060020a03909216825260208201526040908101905180910390a1565b610d483361103c565b1515610d5357600080fd5b600654600c5482011115610d6657600080fd5b600c805482019055600354600160a060020a03166340c10f19838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610dcd57600080fd5b6102c65a03f11515610dde57600080fd5b50505060405180519050507f6680285a6081efdf842b835606577e1cca91a704dbb949e675c737b0019cafb08282604051600160a060020a03909216825260208201526040908101905180910390a15050565b610e3a3361103c565b1515610e4557600080fd5b60018054600160a060020a038316600090815260026020526040902081905590610e7190828101611349565b50600180548291906000198101908110610e8757fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905550565b600f547501000000000000000000000000000000000000000000900460ff1681565b610eeb3361103c565b1515610ef657600080fd5b600e805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60085481565b60005433600160a060020a03908116911614610f4657600080fd5b600160a060020a0381161515610f5b57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610fcf3361103c565b1515610fda57600080fd5b600f805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600160a060020a031681565b600f5477010000000000000000000000000000000000000000000000900460ff1681565b600160a060020a03166000908152600260205260408120541190565b600080828481151561106657fe5b0490508091505b5092915050565b600080831515611087576000915061106d565b5082820282848281151561109757fe5b041461109f57fe5b9392505050565b8061ffff166107e214156111ed57600f5474010000000000000000000000000000000000000000900460ff16156110dc57600080fd5b600f805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055600354600d54600a54600160a060020a03928316926340c10f1992169060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561117a57600080fd5b6102c65a03f1151561118b57600080fd5b50505060405180515050600d54600a547f0242c430d2faa288225cf9f2cfb4feaa0ed23ecbfac74580e2c3c68b8486b6fd91600160a060020a031690604051600160a060020a03909216825260208201526040908101905180910390a161086e565b8061ffff166107e3141561019d57600f547501000000000000000000000000000000000000000000900460ff161561122457600080fd5b600f805475ff00000000000000000000000000000000000000000019167501000000000000000000000000000000000000000000179055600354600d54600b54600160a060020a03928316926340c10f1992169060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112c457600080fd5b6102c65a03f115156112d557600080fd5b50505060405180515050600d54600b547f0242c430d2faa288225cf9f2cfb4feaa0ed23ecbfac74580e2c3c68b8486b6fd91600160a060020a031690604051600160a060020a03909216825260208201526040908101905180910390a161086e565b60008282111561134357fe5b50900390565b81548183558181151161136d5760008381526020902061136d918101908301611372565b505050565b61139091905b8082111561138c5760008155600101611378565b5090565b905600a165627a7a723058208a68335e16e7c2b4300d9fa63886d95900c9a009ace210bec99a0cf7945ce6b90029

Swarm Source

bzzr://e84ce9b4857f0951d80bf9472b1b999df93e8561c64aa519ebfaed1a6c6f1310

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  ]
[ 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.