Contract 0xdEe34Cd48D77183B3E70F4f9Ea2718c89bFeFeB4

 

Contract Overview

MCH: Prime
Balance:
0.1 Ether

EtherValue:
$339.39 (@ $3,393.91/ETH)

Token:
Txn Hash Method
Block
From
To
Value
0x0cc80f1533143872c35225536f1f0ff187cf113cdbc0290ce9458d44c1ed26e8Buy Prime Rights126237552021-06-13 3:36:2496 days 17 hrs ago0x0bdb6e7b9ee4bb19819ccfdc0ab02019af8e60a5 IN  MCH: Prime0.1 Ether0.0003623046
0xb9f3bcfc0a1350539733309a38c754a48498047f49220df5a9aac11bae1146d4Withdraw Ether105654552020-07-31 5:32:20413 days 15 hrs agoMCH: Owner IN  MCH: Prime0 Ether0.0018265860
0xf8f493c6497704cdfbc80cd2fecce7ff678439ac7741d900fb8fbe938bfaba8bBuy Prime Rights104599652020-07-14 21:11:02429 days 23 hrs ago0xfc9bb3f54e15b6ad5b4b52da9833191bbd14312d IN  MCH: Prime0.1 Ether0.00079076341613.978
0x2bd3c37eea62965e1209a35634a918e8a1ba21ed3dcfbe5fdbb30eb77a71fa26Buy Prime Rights104598662020-07-14 20:49:30429 days 23 hrs ago0xc2dfcc06d2298132d17a9f70251d5e102874e9e7 IN  MCH: Prime0.1 Ether0.00128873231
0x3be15d2ad55693947c3eba56fa12a036aff31beef9c447b8074f96554bdd29b6Buy Prime Rights104454292020-07-12 15:00:44432 days 5 hrs ago0x0cc992f6d9b26d94912246d578f67c104867b184 IN  MCH: Prime0.1 Ether0.00228057250440.327
0x2c52af7a8c94cb76a3e554d829f76b9e2c9e887fe0c454d2a223e2bde91afcdaBuy Prime Rights104429962020-07-12 6:11:41432 days 14 hrs ago0x834074e2bab509fe20f8a6f0145064edf5d79d9e IN  MCH: Prime0.1 Ether0.0011316820
0x188a59e5c52a3654e768a72879af7e8b7eeb7af6823f7e7821f12203dced8870Buy Prime Rights104317552020-07-10 12:26:35434 days 8 hrs ago0x5112347fcc7b252c2a73a03841835a8d2723f242 IN  MCH: Prime0.1 Ether0.00121662308829.257
0x5e231449f73691b243929c3a98fa6fca9cf609a8e3b88712f3956b621f3b22e0Buy Prime Rights104304072020-07-10 7:28:26434 days 13 hrs ago0x5622f7966f94f82be87687f8b1b899e3082c3b95 IN  MCH: Prime0.1 Ether0.0008310420
0x0346fdd89ba2838657bae9220f87d9425c38841c22a8c7c41486ee4a743244c6Buy Prime Rights104258012020-07-09 14:25:31435 days 6 hrs ago0x0563ce927f3b14690844e1c03abea12e4fc1ac71 IN  MCH: Prime0.1 Ether0.0018092832
0xa7c89c0eda9660315ed3dbd39f046daf5b2bafa13613db8d6b4fe7652a8f951aBuy Prime Rights104127172020-07-07 13:58:25437 days 6 hrs ago0x931b740c7326fb15b04ba3da0f5a6dd881fc8da2 IN  MCH: Prime0.1 Ether0.00248828844
0x3043b073d84415e22970f3ca502eda288e0d74e0ebf105daa2abc29b8e0dc880Buy Prime Rights104107392020-07-07 6:47:46437 days 13 hrs ago0x282b7a79464834a9e7270d0d54fe096fa4d06832 IN  MCH: Prime0.1 Ether0.00237652842
0xdfb3981bfd308439b59ceb9d453305b0202006042d4cab467256bce6e15292c4Buy Prime Rights104037102020-07-06 4:25:38438 days 16 hrs ago0xff869352f729d30eed41069fea00e758d6051514 IN  MCH: Prime0.1 Ether0.00158345608228.000001459
0x32e69e462f2dfd0966756c29e8450557f76d4d3bf25c84016e03cb4eafd27da5Buy Prime Rights103891212020-07-03 22:13:19440 days 22 hrs ago0x4c2357eb1e7454c45fd8a672a8755060d3ee736f IN  MCH: Prime0.1 Ether0.00095569623
0x0650e933f95cf37f0e820d30901942b56002a962c4a1b9ffe5ce2451cb9588faBuy Prime Rights103793102020-07-02 9:51:03442 days 10 hrs ago0x084b955378c0fef1afbb0e682d7f249cbbf59c21 IN  MCH: Prime0.1 Ether0.0012475230
0x78cca4216dc134d467af36ba9a772fb2a30aaa35ae445d503e010c1a2a67669fBuy Prime Rights103769422020-07-02 1:01:11442 days 19 hrs ago0xfbe0be72447b771ec7bb5e891b9e04a1a02a30e1 IN  MCH: Prime0.1 Ether0.0003395046
0x0aec91f718ec08d6b13ef7d4b89f356331aa3a8380838cd8d92fde8b34e707c6Buy Prime Rights103683972020-06-30 17:07:31444 days 3 hrs ago0x73233316d96c5f4a9d25f99aae97ef1e3afd713a IN  MCH: Prime0.1 Ether0.00174467984141.999996185
0x41b4322dbcd5289a027f7c2e25c9a4609b6e6892a5cafd93c89564405d21bb0fBuy Prime Rights103661782020-06-30 9:04:51444 days 11 hrs ago0xe153a7bf8a11ee716dbe8ce2418371cf694852df IN  MCH: Prime0.1 Ether0.0036758865
0x82a2b30ed0f316a217bfb82adfc88a7e35f774bacf5a6cc4c586a7f65ef40eb2Buy Prime Rights103630932020-06-29 21:27:08444 days 23 hrs ago0x0b98c377b62702748898c5c4c9ccc2e2f35f084d IN  MCH: Prime0.1 Ether0.001038825
0xbbccbb9ede89585a3faed5d3ce432e1c675032e2afaab3d222bff31121e5401dBuy Prime Rights103621622020-06-29 17:50:09445 days 2 hrs ago0x24e3265e9561541631ae6f7b9f15c0f5d0f507bf IN  MCH: Prime0.1 Ether0.00214973638
0xc5cd8d2d66004dedf0edac4a9f62014b7d1d8982b2de8ede5cdc47ecc97fceecBuy Prime Rights103545722020-06-28 13:37:36446 days 7 hrs ago0x692605ee92db0ab2d72b05902d63d3b79abba514 IN  MCH: Prime0.1 Ether0.00113881273727.385839209
0x94e2a2ec6da61b5f4c1ebddc09f21fc55106e1afe636856b589e770c6a0d68b6Buy Prime Rights103317272020-06-25 0:22:59449 days 20 hrs ago0xfc68ef61cedbaccdfc6b51413dbe8dc73ee5df7f IN  MCH: Prime0.1 Ether0.00098730837
0xb381a94ba93d0fa1f9b29b8b1460022efdfe2b9e22c81eec9fb9f1726892c92bBuy Prime Rights103317272020-06-25 0:22:59449 days 20 hrs ago0xfc68ef61cedbaccdfc6b51413dbe8dc73ee5df7f IN  MCH: Prime0.1 Ether0.000339366
0xcbcd8e69eec632e506a9857c0ab79b48c1b0ac3204eafef9605b372245df8a2aBuy Prime Rights103232932020-06-23 17:09:42451 days 3 hrs ago0x7a44e6e58f7104869a5d52008ff7b31e5da92689 IN  MCH: Prime0.1 Ether0.002077650
0xd3a2a05169631ed7f6e2d620542e79313340a8eb351a068eea11a607fc843f23Buy Prime Rights103216562020-06-23 11:12:53451 days 9 hrs ago0xaf85c5ba6f057bf61a3a38ac5904431bbd4afe19 IN  MCH: Prime0.1 Ether0.002827650
0x7cdb2a43df1d6222567905fbe86a5f1eb6da65e2b1424321d8a167b8dfcad9f0Buy Prime Rights103141982020-06-22 7:28:47452 days 13 hrs ago0x799e53b9ef8aab040a736475ae859ec74f0f556d IN  MCH: Prime0.1 Ether0.00175311231
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb9f3bcfc0a1350539733309a38c754a48498047f49220df5a9aac11bae1146d4105654552020-07-31 5:32:20413 days 15 hrs ago MCH: PrimeMCH: Owner15.2 Ether
0xa23fae38eaec2dfebd5fa87c1c7a60207ed0d6d6ea56ef5a07f85229dc6ed92999364932020-04-24 17:11:12511 days 3 hrs ago 0x5ec8f046780360d6eafc482de229759319d794b3 MCH: Prime0.1 Ether
0xbb8d3c6e66c32e0f79fbf35ea61d0552f94e5cb5ae83202d8851a8bc41c6638f97763262020-03-31 0:41:54535 days 19 hrs ago MCH: PrimeMCH: Owner15.7 Ether
0x46ceb4249c67791979b7a19724812ac8ec2b0bf5b1f78556cd9ccdc9d54a1d7497694032020-03-29 23:05:17536 days 21 hrs ago 0xb69c2c2bf4ce898e676fa048bb96d6355531f11a MCH: Prime0.1 Ether
0xf82e3a07090024049531b0f73286a4d307bb4fc684849580d886f037e5c7cbc097119372020-03-21 0:59:28545 days 19 hrs ago 0x44909d5f6f33d1ed9f7032621cc6ea7b041695e7 MCH: Prime0.1 Ether
0x4dfd473256ec94d2b530ff4c3bd4d73972e6337b197265002ed63ab12f26efff96489152020-03-11 7:40:01555 days 13 hrs ago 0xb69c2c2bf4ce898e676fa048bb96d6355531f11a MCH: Prime0.1 Ether
0x5f64ac8e72b45e940625804e2c4b788f0891254466a60b89cbd755efdc7c346c95525772020-02-25 12:21:59570 days 8 hrs ago 0xdae07987e4992c2188e710c95f98b71646073e51 MCH: Prime0.1 Ether
0x6735019b0dbd7833b8ee64a5f93fe002c7142a9e135dc48469fe24fa7cd3f5ce95489722020-02-24 22:54:48570 days 21 hrs ago 0x01b76052aeba3f388fe1bcbd525e8114b7f7dd58 MCH: Prime0.1 Ether
0x33f44611db011c4faa09418e3a887713fa3df83dce310f0802ac1dcd540eee5e94612532020-02-11 10:57:05584 days 9 hrs ago 0x03419ab51cd5509cc58cbab2b6368fd87f09e1dd MCH: Prime0.1 Ether
0xd54649aaa88cb925c05c86a9811b7f52c7138a0534b6da6a1885c56981cee64593781772020-01-29 16:30:41597 days 4 hrs ago MCH: PrimeMCH: Owner28 Ether
0x419546c2c670ba83d0f4656669bdbdd5409b5d8c4fa7189f605f955816f0681393016602020-01-17 23:14:36608 days 21 hrs ago 0x8102879edea81e448a2be7a9c31b7ee3c29efe69 MCH: Prime0.1 Ether
0xf6033aef97b8da5658f9dc0e8bcf02ca14f9587b431720a455d2f28b6c9fee4b92536952020-01-10 14:51:24616 days 5 hrs ago 0x2a8eb96b168226c1dca37614e05bcc1a96155f42 MCH: Prime0.1 Ether
0x175e7d8db7f6528c1c549dd553037473e22bf2eea14ecf8ba9fff772e6e7717a91573612019-12-24 20:13:00633 days 28 mins ago 0x8ac8561953016b6290b9ec0250c44969a06ad424 MCH: Prime0.1 Ether
0x3e7e25f4bd071723fe118a3b7aa86f7ca6ece68a4414dd089ed9de506c5c690f91203852019-12-17 11:32:32640 days 9 hrs ago 0x8102879edea81e448a2be7a9c31b7ee3c29efe69 MCH: Prime0.1 Ether
0x0503bd892887762fc9d37733ff47a2b91b9b0bc8574a9b96ccc372c13a4f887189972142019-11-25 7:24:13662 days 13 hrs ago MCH: PrimeMCH: Owner20.1 Ether
0x7308b04fc5b07cf79e1d0e89c8b7324f91211bc837c5ca722a034772ffe79e3388740422019-11-04 22:46:43682 days 21 hrs ago 0xa493e6a4e34406b97a744ad0f2de18051d4689bf MCH: Prime0.1 Ether
0x861ac9bd1942e16934435f2c2b77525aed41c603ec3c27df24dab2d219271c0588308742019-10-29 0:12:11689 days 20 hrs ago 0xacc9236be3d9c0ef286b6044685caf59624c51b4 MCH: Prime0.1 Ether
0xb42d8b3e14d02c1bb8ad3899553456b5906ef0752a48190556dccdbd2e27c6e888108712019-10-25 19:11:46693 days 1 hr ago 0x47fda0ed00e96ef8f0de8b214ef9214ab9675040 MCH: Prime0.1 Ether
0x3e05a9267d103cfb63542a26c4dc3061219a737be381fd61005579be5aa193ee87572622019-10-17 7:30:06701 days 13 hrs ago MCH: PrimeMCH: Owner65.9 Ether
0x87142cf5fba7a42baa0cd21cc401d7379161c44e8634f1a8cc6ca6a46fd964b787321502019-10-13 8:49:32705 days 11 hrs ago 0xaeaccbb1e2500f1c31f4b4ad81513f05b174f430 MCH: Prime0.1 Ether
0x986c4ec5a1b221309d9bdbbb2b8e933fc3ecb1c55b63b3f911be71dae8a6d39686968492019-10-07 19:35:16711 days 1 hr ago 0x329b6028e181540dcd4c1bc6c1079ee47117fcb2 MCH: Prime0.1 Ether
0x1cc4fdb36120ed303646ceab7099cf4675d9a2cf1d419ae7acc40941192d0f8b85945962019-09-21 19:49:32727 days 52 mins ago 0x0b4159ec5558e5301e47081799b318e3bd723e60 MCH: Prime0.1 Ether
0x278cc6855cc581e7ba4cfe54dbf22a5012d75ad8c407eef4a07100c7de2d491885943712019-09-21 19:01:43727 days 1 hr ago 0x3438030b5c07784beeee9bcd8003858d529f88fc MCH: Prime0.1 Ether
0x2e4aa7a799637ab1340a4d9b988f3721587f1027bf87926978202695721c0c7084437312019-08-29 7:27:01750 days 13 hrs ago 0x9cb93ae98ddb1979186957b15d38626e4a79cd19 MCH: Prime0.1 Ether
0x9876c7896a6aed04154a4c3e141aebfea4431112f26c780adf19df398e4e5eb782931092019-08-05 21:43:11773 days 22 hrs ago 0xa493e6a4e34406b97a744ad0f2de18051d4689bf MCH: Prime0.1 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MCHPrime

Compiler Version
v0.5.2+commit.1df8f40c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-02-04
*/

pragma solidity ^0.5.2;

// File: contracts/lib/github.com/OpenZeppelin/openzeppelin-solidity-2.1.2/contracts/ownership/Ownable.sol

/**
 * @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 private _owner;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

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

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @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 {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/lib/github.com/OpenZeppelin/openzeppelin-solidity-2.1.2/contracts/token/ERC20/IERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: contracts/lib/github.com/contract-library/contract-library-0.0.4/contracts/ownership/Withdrawable.sol

contract Withdrawable is Ownable {
  function withdrawEther() external onlyOwner {
    msg.sender.transfer(address(this).balance);
  }

  function withdrawToken(IERC20 _token) external onlyOwner {
    require(_token.transfer(msg.sender, _token.balanceOf(address(this))));
  }
}

// File: contracts/lib/github.com/OpenZeppelin/openzeppelin-solidity-2.1.2/contracts/access/Roles.sol

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}

// File: contracts/lib/github.com/OpenZeppelin/openzeppelin-solidity-2.1.2/contracts/access/roles/PauserRole.sol

contract PauserRole {
    using Roles for Roles.Role;

    event PauserAdded(address indexed account);
    event PauserRemoved(address indexed account);

    Roles.Role private _pausers;

    constructor () internal {
        _addPauser(msg.sender);
    }

    modifier onlyPauser() {
        require(isPauser(msg.sender));
        _;
    }

    function isPauser(address account) public view returns (bool) {
        return _pausers.has(account);
    }

    function addPauser(address account) public onlyPauser {
        _addPauser(account);
    }

    function renouncePauser() public {
        _removePauser(msg.sender);
    }

    function _addPauser(address account) internal {
        _pausers.add(account);
        emit PauserAdded(account);
    }

    function _removePauser(address account) internal {
        _pausers.remove(account);
        emit PauserRemoved(account);
    }
}

// File: contracts/lib/github.com/OpenZeppelin/openzeppelin-solidity-2.1.2/contracts/lifecycle/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is PauserRole {
    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    constructor () internal {
        _paused = false;
    }

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

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!_paused);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(_paused);
        _;
    }

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() public onlyPauser whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() public onlyPauser whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}

// File: contracts/lib/github.com/OpenZeppelin/openzeppelin-solidity-2.1.2/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

// File: contracts/lib/github.com/OpenZeppelin/openzeppelin-solidity-2.1.2/contracts/utils/ReentrancyGuard.sol

/**
 * @title Helps contracts guard against reentrancy attacks.
 * @author Remco Bloemen <[email protected]π.com>, Eenae <[email protected]>
 * @dev If you mark a function `nonReentrant`, you should also
 * mark it `external`.
 */
contract ReentrancyGuard {
    /// @dev counter to allow mutex lock with only one SSTORE operation
    uint256 private _guardCounter;

    constructor () internal {
        // The counter starts at one to prevent changing it from zero to a non-zero
        // value, which is a more expensive operation.
        _guardCounter = 1;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter);
    }
}

// File: contracts/lib/github.com/contract-library/contract-library-0.0.4/contracts/DJTBase.sol

contract DJTBase is Withdrawable, Pausable, ReentrancyGuard {
    using SafeMath for uint256;
}

// File: contracts/lib/github.com/contract-library/contract-library-0.0.4/contracts/access/roles/OperatorRole.sol

contract OperatorRole {
    using Roles for Roles.Role;

    event OperatorAdded(address indexed account);
    event OperatorRemoved(address indexed account);

    Roles.Role private operators;

    constructor() public {
        operators.add(msg.sender);
    }

    modifier onlyOperator() {
        require(isOperator(msg.sender));
        _;
    }
    
    function isOperator(address account) public view returns (bool) {
        return operators.has(account);
    }

    function addOperator(address account) public onlyOperator() {
        operators.add(account);
        emit OperatorAdded(account);
    }

    function removeOperator(address account) public onlyOperator() {
        operators.remove(account);
        emit OperatorRemoved(account);
    }

}

// File: contracts/lib/github.com/OpenZeppelin/openzeppelin-solidity-2.1.2/contracts/cryptography/ECDSA.sol

/**
 * @title Elliptic curve signature operations
 * @dev Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d
 * TODO Remove this library once solidity supports passing a signature to ecrecover.
 * See https://github.com/ethereum/solidity/issues/864
 */

library ECDSA {
    /**
     * @dev Recover signer address from a message by using their signature
     * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
     * @param signature bytes signature, the signature is generated using web3.eth.sign()
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        bytes32 r;
        bytes32 s;
        uint8 v;

        // Check the signature length
        if (signature.length != 65) {
            return (address(0));
        }

        // Divide the signature in r, s and v variables
        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
        if (v < 27) {
            v += 27;
        }

        // If the version is correct return the signer address
        if (v != 27 && v != 28) {
            return (address(0));
        } else {
            return ecrecover(hash, v, r, s);
        }
    }

    /**
     * toEthSignedMessageHash
     * @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
     * and hash the result
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }
}

// File: contracts/MCHPrime.sol

contract MCHPrime is OperatorRole, DJTBase {


	uint128 public primeFee;
	uint256 public primeTerm;
	uint256 public allowedUpdateBuffer;
	mapping(address => uint256) public addressToExpiredAt;

	address public validater;
  
	event PrimeFeeUpdated(
		uint128 PrimeFeeUpdated
	);

	event PrimeTermAdded(
		address user,
		uint256 expiredAt,
		uint256 at
	);

	event PrimeTermUpdated(
		uint256 primeTerm
	);

	event AllowedUpdateBufferUpdated(
		uint256 allowedUpdateBuffer
	);

	event ExpiredAtUpdated(
		address user,
		uint256 expiredAt,
		uint256 at
	);

	constructor() public {
		primeFee = 0.1 ether;
		primeTerm = 30 days;
		allowedUpdateBuffer = 5 days;
	}

	function setValidater(address _varidater) external onlyOwner() {
		validater = _varidater;
	}

	function updatePrimeFee(uint128 _newPrimeFee) external onlyOwner() {
		primeFee = _newPrimeFee;
		emit PrimeFeeUpdated(
			primeFee
		);
	}

	function updatePrimeTerm(uint256 _newPrimeTerm) external onlyOwner() {
		primeTerm = _newPrimeTerm;
		emit PrimeTermUpdated(
			primeTerm
		);
	}

	function updateAllowedUpdateBuffer(uint256 _newAllowedUpdateBuffer) external onlyOwner() {
		allowedUpdateBuffer = _newAllowedUpdateBuffer;
		emit AllowedUpdateBufferUpdated(
			allowedUpdateBuffer
		);
	}

	function updateExpiredAt(address _user, uint256 _expiredAt) external onlyOperator() {
		addressToExpiredAt[_user] = _expiredAt;
		emit ExpiredAtUpdated(
			_user,
			_expiredAt,
			block.timestamp
		);
	}

	function buyPrimeRights(bytes calldata _signature) external whenNotPaused() payable {
		require(msg.value == primeFee, "not enough eth");
		require(canUpdateNow(msg.sender), "unable to update");
		require(validateSig(_signature, bytes32(uint256(msg.sender))), "invalid signature");

		uint256 _now = block.timestamp;
		uint256 expiredAt = addressToExpiredAt[msg.sender];
		if (expiredAt <= _now) {
			addressToExpiredAt[msg.sender] = _now.add(primeTerm);
		} else if(expiredAt <= _now.add(allowedUpdateBuffer)) {
			addressToExpiredAt[msg.sender] = expiredAt.add(primeTerm);
		}

		emit PrimeTermAdded(
			msg.sender,
			addressToExpiredAt[msg.sender],
			_now
		);
	}

	function canUpdateNow(address _user) public view returns (bool) {
		uint256 _now = block.timestamp;
		uint256 expiredAt = addressToExpiredAt[_user];
		// expired user or new user
		if (expiredAt <= _now) {
			return true;
		}
		// user who are able to extend their PrimeTerm
		if (expiredAt <= _now.add(allowedUpdateBuffer)) {
			return true;
		}
		return false;
	}

	function validateSig(bytes memory _signature, bytes32 _message) private view returns (bool) {
		require(validater != address(0));
		address signer = ECDSA.recover(ECDSA.toEthSignedMessageHash(_message), _signature);
		return (signer == validater);
	}

}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_newPrimeFee","type":"uint128"}],"name":"updatePrimeFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"}],"name":"buyPrimeRights","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newPrimeTerm","type":"uint256"}],"name":"updatePrimeTerm","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"addressToExpiredAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allowedUpdateBuffer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAllowedUpdateBuffer","type":"uint256"}],"name":"updateAllowedUpdateBuffer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isOperator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_expiredAt","type":"uint256"}],"name":"updateExpiredAt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"canUpdateNow","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"primeFee","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_varidater","type":"address"}],"name":"setValidater","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"primeTerm","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"validater","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"PrimeFeeUpdated","type":"uint128"}],"name":"PrimeFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"expiredAt","type":"uint256"},{"indexed":false,"name":"at","type":"uint256"}],"name":"PrimeTermAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"primeTerm","type":"uint256"}],"name":"PrimeTermUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"allowedUpdateBuffer","type":"uint256"}],"name":"AllowedUpdateBufferUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"expiredAt","type":"uint256"},{"indexed":false,"name":"at","type":"uint256"}],"name":"ExpiredAtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","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":"account","type":"address"}],"name":"OperatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"OperatorRemoved","type":"event"}]

60806040523480156200001157600080fd5b50620000363360006200018c6401000000000262001939179091906401000000009004565b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36200010e336200024f640100000000026401000000009004565b6000600360006101000a81548160ff021916908315150217905550600160048190555067016345785d8a0000600560006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555062278d00600681905550620697806007819055506200034e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620001c957600080fd5b620001e48282620002b9640100000000026401000000009004565b151515620001f157600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620002738160026200018c6401000000000262001939179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620002f757600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cfc806200035e6000396000f3fe6080604052600436106101b9576000357c01000000000000000000000000000000000000000000000000000000009004806382dc1ec411610109578063ac8a584a116100a7578063c14e50ce11610081578063c14e50ce146107db578063c512d5d01461082c578063d95b18eb14610857578063f2fde38b146108ae576101b9565b8063ac8a584a146106d2578063adfc982114610723578063af823d411461078c576101b9565b806389ad3220116100e357806389ad3220146105a05780638da5cb5b146105fb5780638f32d59b146106525780639870d7fe14610681576101b9565b806382dc1ec4146104e75780638456cb5914610538578063894760691461054f576101b9565b80635c975abb116101765780636d70f7ae116101505780636d70f7ae146104395780636ef8d66d146104a2578063715018a6146104b95780637362377b146104d0576101b9565b80635c975abb146103a457806360c7f35a146103d35780636a334655146103fe576101b9565b80632a695c14146101be5780632a916b431461020b5780633f4ba83a146102845780633f5b009a1461029b57806346fbf68e146102d657806348bc2bb31461033f575b600080fd5b3480156101ca57600080fd5b50610209600480360360208110156101e157600080fd5b8101908080356fffffffffffffffffffffffffffffffff1690602001909291905050506108ff565b005b6102826004803603602081101561022157600080fd5b810190808035906020019064010000000081111561023e57600080fd5b82018360208201111561025057600080fd5b8035906020019184600183028401116401000000008311171561027257600080fd5b90919293919293905050506109c7565b005b34801561029057600080fd5b50610299610dc0565b005b3480156102a757600080fd5b506102d4600480360360208110156102be57600080fd5b8101908080359060200190929190505050610e6f565b005b3480156102e257600080fd5b50610325600480360360208110156102f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ec5565b604051808215151515815260200191505060405180910390f35b34801561034b57600080fd5b5061038e6004803603602081101561036257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ee2565b6040518082815260200191505060405180910390f35b3480156103b057600080fd5b506103b9610efa565b604051808215151515815260200191505060405180910390f35b3480156103df57600080fd5b506103e8610f11565b6040518082815260200191505060405180910390f35b34801561040a57600080fd5b506104376004803603602081101561042157600080fd5b8101908080359060200190929190505050610f17565b005b34801561044557600080fd5b506104886004803603602081101561045c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f6d565b604051808215151515815260200191505060405180910390f35b3480156104ae57600080fd5b506104b7610f8a565b005b3480156104c557600080fd5b506104ce610f95565b005b3480156104dc57600080fd5b506104e5611069565b005b3480156104f357600080fd5b506105366004803603602081101561050a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110dc565b005b34801561054457600080fd5b5061054d6110fc565b005b34801561055b57600080fd5b5061059e6004803603602081101561057257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111ac565b005b3480156105ac57600080fd5b506105f9600480360360408110156105c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061137e565b005b34801561060757600080fd5b5061061061144d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561065e57600080fd5b50610667611477565b604051808215151515815260200191505060405180910390f35b34801561068d57600080fd5b506106d0600480360360208110156106a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114cf565b005b3480156106de57600080fd5b50610721600480360360208110156106f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061153d565b005b34801561072f57600080fd5b506107726004803603602081101561074657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115ab565b604051808215151515815260200191505060405180910390f35b34801561079857600080fd5b506107a161163d565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107e757600080fd5b5061082a600480360360208110156107fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165f565b005b34801561083857600080fd5b506108416116b6565b6040518082815260200191505060405180910390f35b34801561086357600080fd5b5061086c6116bc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108ba57600080fd5b506108fd600480360360208110156108d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116e2565b005b610907611477565b151561091257600080fd5b80600560006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507ffed96b0c64f9aaf4e519749bad60634447e9796f423a5e659d0a282eaf6117bb600560009054906101000a90046fffffffffffffffffffffffffffffffff1660405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600360009054906101000a900460ff161515156109e357600080fd5b600560009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1634141515610a8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420656e6f7567682065746800000000000000000000000000000000000081525060200191505060405180910390fd5b610a93336115ab565b1515610b07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f756e61626c6520746f207570646174650000000000000000000000000000000081525060200191505060405180910390fd5b610b6e82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050503373ffffffffffffffffffffffffffffffffffffffff16600102611701565b1515610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f696e76616c6964207369676e617475726500000000000000000000000000000081525060200191505060405180910390fd5b60004290506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181111515610c9157610c49600654836117d090919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d08565b610ca6600754836117d090919063ffffffff16565b81111515610d0757610cc3600654826117d090919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b7f8665b217237a31c64ca6468b4e32bfbe2318e2ce52042d61a30c934525f9ab3a33600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a150505050565b610dc933610ec5565b1515610dd457600080fd5b600360009054906101000a900460ff161515610def57600080fd5b6000600360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b610e77611477565b1515610e8257600080fd5b806006819055507f9cbafb3744c21c389553d4ec97ef9c963c7c54b5d5fa92ecc561b1f242e5947a6006546040518082815260200191505060405180910390a150565b6000610edb8260026117f190919063ffffffff16565b9050919050565b60086020528060005260406000206000915090505481565b6000600360009054906101000a900460ff16905090565b60075481565b610f1f611477565b1515610f2a57600080fd5b806007819055507faaf2d702b0a9bc78edc2b61ca7f54ad67bf95dee4c1adaa42afa22431aeb69656007546040518082815260200191505060405180910390a150565b6000610f838260006117f190919063ffffffff16565b9050919050565b610f9333611885565b565b610f9d611477565b1515610fa857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611071611477565b151561107c57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156110d9573d6000803e3d6000fd5b50565b6110e533610ec5565b15156110f057600080fd5b6110f9816118df565b50565b61110533610ec5565b151561111057600080fd5b600360009054906101000a900460ff1615151561112c57600080fd5b6001600360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6111b4611477565b15156111bf57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561127557600080fd5b505afa158015611289573d6000803e3d6000fd5b505050506040513d602081101561129f57600080fd5b81019080805190602001909291905050506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561133557600080fd5b505af1158015611349573d6000803e3d6000fd5b505050506040513d602081101561135f57600080fd5b8101908080519060200190929190505050151561137b57600080fd5b50565b61138733610f6d565b151561139257600080fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fd61dba7e9e175f676fff24c4ab21e5c385319adce64fb7217c2fdf2a4c915c93828242604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6114d833610f6d565b15156114e357600080fd5b6114f781600061193990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d60405160405180910390a250565b61154633610f6d565b151561155157600080fd5b6115658160006119e990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d60405160405180910390a250565b6000804290506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818111151561160957600192505050611638565b61161e600754836117d090919063ffffffff16565b8111151561163157600192505050611638565b6000925050505b919050565b600560009054906101000a90046fffffffffffffffffffffffffffffffff1681565b611667611477565b151561167257600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60065481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ea611477565b15156116f557600080fd5b6116fe81611a98565b50565b60008073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561176057600080fd5b600061177461176e84611b94565b85611bec565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161491505092915050565b60008082840190508381101515156117e757600080fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561182e57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118998160026119e990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b6118f381600261193990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561197557600080fd5b61197f82826117f1565b15151561198b57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a2557600080fd5b611a2f82826117f1565b1515611a3a57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611ad457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b60008060008060418551141515611c095760009350505050611cca565b6020850151925060408501519150606085015160001a9050601b8160ff161015611c3457601b810190505b601b8160ff1614158015611c4c5750601c8160ff1614155b15611c5d5760009350505050611cca565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611cba573d6000803e3d6000fd5b5050506020604051035193505050505b9291505056fea165627a7a72305820bcbe19ddd94a6ec1bcf5b6e7116877d401252e10c2ab69b8544f94ffbb28194e0029

Swarm Source

bzzr://bcbe19ddd94a6ec1bcf5b6e7116877d401252e10c2ab69b8544f94ffbb28194e
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.