Contract Overview
Balance: 485.846561720887235855 Ether
Ether Value: $46,709.29 (@ $96.14/ETH)
Transactions: 2061 txns
Token Tracker: FairExchange (Fair)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xbc817a495f0114755da5305c5aa84fc5ca7ebabdat txn 0x9925d3eff586cec6c914e1704b2b148ccac4d91e3e97516d4c60870ff70dcc97
 Latest 25 transactions from a total of 2061 transactions
(+1 PendingTxn)

TxHash Age From To Value [TxFee]
0x5d837781cbe14bf19297692f00e069d447c06417ffbaef66c319a5f123dda7bd(pending)0xb797b2b551f6c80a5936d595205b08d96fb61be4  IN  0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether(Pending)
0xffd099cf87130672f9c471ce4cbedc77e5a55e820c6d44798eec6184165292b19 days 14 hrs ago0x02fdb95743d05c524828b6c545416182a31dc495  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000130707
0x4a32a3643d1ac9beb39ef7b1119d28cb880c3c8c807261ba8dc117562f6dc6b311 days 7 hrs ago0x48f2d8ac87fd4c42991daf53eea9893dcd947bb7  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.00048011
0x961ebf9c5a5af69c6254a4ab49a1ee18198449923f94d251ccdea782ff9bbc4c11 days 13 hrs ago0x48f2d8ac87fd4c42991daf53eea9893dcd947bb7  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.00046876
0x89d5f32153b3061d59c3226516c1a50a0e3af70b436ef430a5e455d4ac9e575a11 days 13 hrs ago0x48f2d8ac87fd4c42991daf53eea9893dcd947bb7  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.00043569
0x34ef92838ab4a37a59a8c0d174be9d28e5b3e37320efccd21ab44e758a31d90611 days 13 hrs ago0x48f2d8ac87fd4c42991daf53eea9893dcd947bb7  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000552732922
0x81e2462edbfd2b2c0c05a8120d4aee40376af892a5bf3e8ff74f11ab42f89c5711 days 13 hrs ago0x9143c6ee78609c19b6aa338882bcc78dddd67af7  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.00046272
0x84a1e9ee06cc64460d230be9c50f228ed198cf43c7cc96ae8b7786711e9d091811 days 13 hrs ago0x9143c6ee78609c19b6aa338882bcc78dddd67af7  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000555264
0x9f28a6477c26f4607dcafb8bbf831d72200f08a6021a69c0483ebf417096047512 days 7 hrs ago0x0de20f3cc859eba7339b37a860e98696ad748103  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.00014505755
0x434a52619fcb20d7746d5edf988bf986af976751a5bcfc9714e52571c115ad6d12 days 7 hrs ago0x0de20f3cc859eba7339b37a860e98696ad748103  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000261414
0x27bc0e96a09eb677ed0c9833940218f2497b1c9df342c2a843ec6a0163ce9a6612 days 7 hrs ago0x0de20f3cc859eba7339b37a860e98696ad748103  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.00019845
0x1e322490cd6e7d91def85275e02387ecbfc394392bbba7fc663dcb93faa07cdc13 days 7 hrs ago0x57b328e48b1eecfb81c21e3a7cc72655cb4722c4  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000392121
0x0c86d99f82859cbb0f627414323a71e593f861f6f0a56129056533118b28ce2413 days 7 hrs ago0x57b328e48b1eecfb81c21e3a7cc72655cb4722c4  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.00048075
0x0bbffbd1a4996e6004c402a870fe9b7226a60aed23ec164878c9eeaed7762e3514 days 13 hrs ago0x3f67dfeee1d3326d6f8bc086dade8915ecf4c92c  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.00043569
0x4bd0efef908b71a415ef348fd0efdddfed81aa07df9c041b8e60d28586a7cbac14 days 13 hrs ago0xcb0c3b15505f8048849c1d4f32835bb98807a055  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000540862
0xd86220f12915d515d30515510692c287449bc6681bc0f0ed75d75d64cf7c122d14 days 22 hrs ago0xb74d5f0a81ce99ac1857133e489bc2b4954935ff  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000383803
0x98c712af100840d33e2789a83da45f05b7045a6d20400c2ad9eeb5cc6752e5c715 days 1 hr ago0x4b814f257eb4f2e9ce1e1cf3ba921d4c6d24b385  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000695394
0xf7f410a9d7ca3a7c1fb9464cbb8475c8fed3898625ccac0b8b9bd88e6ed5c68f15 days 1 hr ago0x6ed450e062c20f929cb7ee72fcc53e9697980a18  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000653535
0x2870b17fe58f97f1e1d3bfded0effedf37072dad9c31ccaa1e5221a4aee2db6615 days 1 hr ago0x6ed450e062c20f929cb7ee72fcc53e9697980a18  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000721125
0x5ee240c618597d8728ea5e5b96ebe75c86016c527f7a272b20a0e200406d560715 days 10 hrs ago0xbf392638f196a086190d89d9bdcb32435f943ac0  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000304983
0x5d0d8625b9551cfbfbb01c16b16d8463e4fc404c8d8f9dfd3488668b10fc3bb815 days 10 hrs ago0xbf392638f196a086190d89d9bdcb32435f943ac0  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.00028845
0x6b1bf0de685d7fb04892380339b495e786c10887786aee8daf9826546f8005ce15 days 10 hrs ago0xbf392638f196a086190d89d9bdcb32435f943ac0  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000261414
0xa7c6eeb4ee4cc50f50476ed68ecc6750fc89cabdf8c15a1884c7274f018c0bae17 days 4 hrs ago0xd29776dcf48716382d90bf44972f4333d019ccdd  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.00045050346
0x4331350c104fd780f2ddaa6674fefeb3d27072390372731b3fc1ccb92c277d5e17 days 4 hrs ago0xed0622c3f54c44677bd993790a2a893fdd327fb7  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000392121
0x69c4129590d61d6f2c303c20ad4751e4472a567f8d2af0d3bd90509342539c8319 days 20 mins ago0xa4cf69add1e97e25c54ac42e24e2a5a6bd41e3f7  IN   0xde2b11b71ad892ac3e47ce99d107788d65fe764e0 Ether0.000188016
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0xffd099cf87130672f9c471ce4cbedc77e5a55e820c6d44798eec6184165292b168520969 days 14 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x02fdb95743d05c524828b6c545416182a31dc4950.188115443234143568 Ether
0x89d5f32153b3061d59c3226516c1a50a0e3af70b436ef430a5e455d4ac9e575a684036411 days 13 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x48f2d8ac87fd4c42991daf53eea9893dcd947bb72.161822659895052244 Ether
0x434a52619fcb20d7746d5edf988bf986af976751a5bcfc9714e52571c115ad6d683579012 days 7 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x0de20f3cc859eba7339b37a860e98696ad7481031.556754913718201644 Ether
0x1e322490cd6e7d91def85275e02387ecbfc394392bbba7fc663dcb93faa07cdc682984013 days 7 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x57b328e48b1eecfb81c21e3a7cc72655cb4722c40.454224239907565228 Ether
0x0bbffbd1a4996e6004c402a870fe9b7226a60aed23ec164878c9eeaed7762e35682223314 days 13 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x3f67dfeee1d3326d6f8bc086dade8915ecf4c92c0.16324891716183434 Ether
0xd86220f12915d515d30515510692c287449bc6681bc0f0ed75d75d64cf7c122d682006114 days 22 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xb74d5f0a81ce99ac1857133e489bc2b4954935ff0.003927505031765717 Ether
0xf7f410a9d7ca3a7c1fb9464cbb8475c8fed3898625ccac0b8b9bd88e6ed5c68f681917815 days 1 hr ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x6ed450e062c20f929cb7ee72fcc53e9697980a181.011902694189977454 Ether
0x5ee240c618597d8728ea5e5b96ebe75c86016c527f7a272b20a0e200406d5607681694115 days 10 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xbf392638f196a086190d89d9bdcb32435f943ac00.832253491371570694 Ether
0x6b1bf0de685d7fb04892380339b495e786c10887786aee8daf9826546f8005ce681693615 days 10 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xbf392638f196a086190d89d9bdcb32435f943ac00.024524960411251782 Ether
0xa7c6eeb4ee4cc50f50476ed68ecc6750fc89cabdf8c15a1884c7274f018c0bae680644017 days 4 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xd29776dcf48716382d90bf44972f4333d019ccdd0.231160758923323886 Ether
0x4331350c104fd780f2ddaa6674fefeb3d27072390372731b3fc1ccb92c277d5e680643217 days 4 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xed0622c3f54c44677bd993790a2a893fdd327fb70.030817983817665299 Ether
0x5bb40b14e65f916a59b838e14aad0a9a90b6a6a6fb36a8aaca1a299efd23a698679525619 days 39 mins ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xa4cf69add1e97e25c54ac42e24e2a5a6bd41e3f70.000000114695695402 Ether
0xfd85db372543f02bf621838106cb5ddf1cdd4d09787164acd4dc489f19c39079678636520 days 11 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x03abc272a09b9614b57a309c6307d4de32b466bd0.495480894974359607 Ether
0x2738b7cbf71a008c258adcce64f4ed2e33785bd577736014481746379c9e23ba678201321 days 5 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x6ed450e062c20f929cb7ee72fcc53e9697980a180.100824145364593602 Ether
0x16f1a5f27a9ec2c1da21f1db17ee833c6ed8963ecf29ed4b869acfdb26f52b4c677888021 days 17 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xecbf5a8947e63d8e6760f3fd5e413983ef595b7128.405722245983501785 Ether
0x502a8bb489481cc014a07214e98359cd7f8d39a9bef7815e5deaad94f020806c677886521 days 17 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x0c9d732967c472f5de12aa82fa2641b0e9fb073422.993057661839363629 Ether
0xa9ac9ee1d3f0253afeef53f790f6ef84c1bcdf6497d258edff5a27b62c47df12677876721 days 18 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x8bcdaeeb1dd2f7b8fa6f0939051c70cc2a4a75532.903736405304387078 Ether
0xb4ecba95388797b895e8ddc78d4b1f561b23ef8085b504f3003d73e103066fda677633322 days 3 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x0de20f3cc859eba7339b37a860e98696ad7481030.143410725124465685 Ether
0x9bc0f8251284c9d70785815dcdf9d5a04e078c96daaaff26b6edfe6424d77a26677455122 days 11 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xdf7a8e57f4a999625d1b6e58d83d84defe6117970.080649059941998526 Ether
0xa62c943e4c8fa6103050c84435bf8c0d8e98383e9f5d3d9465204449f7938cb3677415922 days 12 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x290d4b3311668723cea1dee796943d8a45159a9f0.702909387020360638 Ether
0x1be210eccb11a10b653c852910448dd9daeb15bf9a8dbec874d72d935882f8ba677173822 days 21 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0x718ffdc2b4e813e7d200c6086b5425fd6a219cff127.801216442843035003 Ether
0x0f762e9f5ae92be326a82f29865599a0c8e19f9734d5c4b88fca9012cf48e61b676980223 days 5 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xcb818551c47c8bf43950578034ba1b0e3a4c8a285.545821910578245804 Ether
0x74278babe4914edfffc17c7073be7932046f1b1be1f7892b4a2e41890111181b675343825 days 21 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xc29a36e3fdd7a2e7484f8142a1ae8baf86068b760.706551312698496148 Ether
0x8625979e100ba4fd2be91cbf8af5802cdbc63a4f916f187f913775938087b78f675299825 days 23 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xf34f075ba59c238e0ece76773f68a43b1289de580.22227839775 Ether
0x66f0e591481399bfcba11c2e7c944f7f03db20f48bded86086a17fc66c21ef53675298225 days 23 hrs ago0xde2b11b71ad892ac3e47ce99d107788d65fe764e0xf34f075ba59c238e0ece76773f68a43b1289de580.033130532812259208 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact Match)
Contract Name: FairExchange
Compiler Text: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.25;

/*
*
*  https://fairdapp.com/exchange/  https://fairdapp.com/exchange/   https://fairdapp.com/exchange/
*
*                _______     _       ______  _______ ______ ______  
*               (_______)   (_)     (______)(_______|_____ (_____ \ 
*                _____ _____ _  ____ _     _ _______ _____) )____) )
*               |  ___|____ | |/ ___) |   | |  ___  |  ____/  ____/ 
*               | |   / ___ | | |   | |__/ /| |   | | |    | |      
*               |_|   \_____|_|_|   |_____/ |_|   |_|_|    |_|      
*                                                                   
*                _______            _                               
*               (_______)          | |                              
*                _____   _   _ ____| |__  _____ ____   ____ _____   
*               |  ___) ( \ / ) ___)  _ \(____ |  _ \ / _  | ___ |  
*               | |_____ ) X ( (___| | | / ___ | | | ( (_| | ____|  
*               |_______|_/ \_)____)_| |_\_____|_| |_|\___ |_____)  
*                                                    (_____| 
*  Warning:
*     
*  This contract is intended to link DAPPs on the FairDAPP platform. 
*  All could be lost by sending anything to this contract address. 
*  All users are prohibited to interact with this contract if this 
*  contract is in conflict with user’s local regulations or laws.
*  
*  Original code by TEAM JUST
*  Original concept by Dr. Jochen Hoenicke
*  Modified by the FairDAPP community with more scalable and fairer settings. 
* 
*/

contract FairExchange {
    
    using NameFilter for string;
    /*=================================
    =            MODIFIERS            =
    =================================*/
    // only people with tokens
    modifier onlyBagholders() {
        require(myTokens() > 0);
        _;
    }
    
    // only people with profits
    modifier onlyStronghands() {
        require(myDividends(true) > 0);
        _;
    }
    
    // administrators can:
    // -> change the name of the contract
    // -> change the name of the token
    // -> Allow contracts to use transfer functions
    // they CANNOT:
    // -> take funds
    // -> disable withdrawals
    // -> kill the contract
    // -> change the price of tokens
    modifier onlyAdministrator(){
        address _customerAddress = msg.sender;
        require(administrators[keccak256(abi.encodePacked(_customerAddress))]);
        _;
    }
    
    modifier buyVerify(uint256 _amountOfEthereum){
        
        if((totalEthereumBalance() - _amountOfEthereum) < whaleBalanceLimit)
            require(tx.gasprice <= gaspriceMax);
        
        address _customerAddress = msg.sender;
        if(onlyAmbassadors && now <= startTime)
            require(ambassadors_[_customerAddress]);
        else{
            
            if(onlyAmbassadors)
                onlyAmbassadors = false;
                
            if((totalEthereumBalance() - _amountOfEthereum) < whaleBalanceLimit)
                require(_amountOfEthereum <= maxEarlyStake);
        }
        _;
    }
    
    
    /*==============================
    =            EVENTS            =
    ==============================*/
    event onTokenPurchase(
        address indexed customerAddress,
        uint256 incomingEthereum,
        uint256 tokensMinted,
        address indexed referredBy
    );
    
    event onTokenSell(
        address indexed customerAddress,
        uint256 tokensBurned,
        uint256 ethereumEarned
    );
    
    event onReinvestment(
        address indexed customerAddress,
        uint256 ethereumReinvested,
        uint256 tokensMinted
    );
    
    event onWithdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
    );
    
    // ERC223
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 tokens,
        bytes data
    );
    
    
    /*=====================================
    =            CONFIGURABLES            =
    =====================================*/
    string public name = "FairExchange";
    string public symbol = "Fair";
    uint8 constant public decimals = 18;
    uint8 constant internal dividendFee_ = 10;
    uint256 constant internal tokenPriceInitial_ = 0.0001 ether;
    uint256 constant internal tokenPriceIncremental_ = 0.000000005 ether;
    uint256 constant internal magnitude = 2**64;
    
    uint256 public gaspriceMax = 20000000000;
    uint256 public startTime = 1539478800;
    
    /// @dev anti-early-whale
    uint256 public maxEarlyStake = 2.5 ether;
    uint256 public whaleBalanceLimit = 250 ether;


    // private offering program
    mapping(address => bool) internal ambassadors_;
    
    
   /*================================
    =            DATASETS            =
    ================================*/
    // amount of shares for each address (scaled number)
    mapping(address => uint256) internal tokenBalanceLedger_;
    mapping(address => uint256) internal referralBalance_;
    mapping(address => int256) internal payoutsTo_;
    
    uint256 internal tokenSupply_ = 0;
    uint256 internal profitPerShare_;
    
    // administrator list (see above on what they can do)
    mapping(bytes32 => bool) public administrators;
    
    // when this is set to true, only ambassadors can purchase tokens (this prevents a whale premine, it ensures a fairly distributed upper pyramid)
    bool public onlyAmbassadors = true;
    
    mapping (address => bytes32) public register;
    mapping (bytes32 => address) public userName;
    mapping (address => bool) public user;
    


    /*=======================================
    =            PUBLIC FUNCTIONS            =
    =======================================*/
    /*
    * -- APPLICATION ENTRY POINTS --  
    */
    constructor()
        public
    {
        // add administrators here
        administrators[0x851d084c805eabf5ec90588a0f5cade287038d80d52c510eefe81f320e97cdcc] = true;
        
        // add the ambassadors here.
		// max 113 ETH, 40% to developer, 60% to limited quota private sales
        ambassadors_[0xbC817A495f0114755Da5305c5AA84fc5ca7ebaBd] = true;

    }
    
    function registered(string _userName)
        public
    {
        address _customerAddress = msg.sender;
        bytes32 _name = _userName.nameFilter();
        
        require (_customerAddress == tx.origin, "sender does not meet the rules");
        require(_name != bytes32(0), "name cannot be empty");
        require(userName[_name] == address(0), "this name has already been registered");
        require(register[_customerAddress] == bytes32(0), "please do not repeat registration");
        
        userName[_name] = _customerAddress;
        register[_customerAddress] = _name;
        
        if(!user[_customerAddress])
            user[_customerAddress] = true;
    }
     
    /**
     * Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any)
     */
    function buy(address _referredBy)
        buyVerify(msg.value)
        public
        payable
        returns(uint256)
    {
        purchaseTokens(msg.value, _referredBy);
    }
    
    /**
     * Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any)
     */
    function buyXname(string _referredName)
        buyVerify(msg.value)
        public
        payable
        returns(uint256)
    {
        purchaseTokens(msg.value, userName[_referredName.nameFilter()]);
    }
    
    /**
     * Fallback function to handle ethereum that was send straight to the contract
     * Unfortunately we cannot use a referral address this way.
     */
    function()
        buyVerify(msg.value)
        payable
        public
    {
        purchaseTokens(msg.value, 0x0);
    }
    
    /**
     * Converts all of caller's dividends to tokens.
     */
    function reinvest()
        onlyStronghands()
        public
    {
        // fetch dividends
        uint256 _dividends = myDividends(false); // retrieve ref. bonus later in the code
        
        // pay out the dividends virtually
        address _customerAddress = msg.sender;
        payoutsTo_[_customerAddress] +=  (int256) (_dividends * magnitude);
        
        // retrieve ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;
        
        // dispatch a buy order with the virtualized "withdrawn dividends"
        uint256 _tokens = purchaseTokens(_dividends, 0x0);
        
        // fire event
        emit onReinvestment(_customerAddress, _dividends, _tokens);
    }
    
    /**
     * Alias of sell() and withdraw().
     */
    function exit()
        public
    {
        // get token count for caller & sell them all
        address _customerAddress = msg.sender;
        uint256 _tokens = tokenBalanceLedger_[_customerAddress];
        if(_tokens > 0) sell(_tokens);
        
        // lambo delivery service
        withdraw();
    }

    /**
     * Withdraws all of the callers earnings.
     */
    function withdraw()
        onlyStronghands()
        public
    {
        // setup data
        address _customerAddress = msg.sender;
        uint256 _dividends = myDividends(false); // get ref. bonus later in the code
        
        // update dividend tracker
        payoutsTo_[_customerAddress] +=  (int256) (_dividends * magnitude);
        
        // add ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;
        
        // lambo delivery service
        _customerAddress.transfer(_dividends);
        
        // fire event
        emit onWithdraw(_customerAddress, _dividends);
    }
    
    /**
     * Liquifies tokens to ethereum.
     */
    function sell(uint256 _amountOfTokens)
        onlyBagholders()
        public
    {
        // setup data
        address _customerAddress = msg.sender;
        // russian hackers BTFO
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens);
        uint256 _dividends = SafeMath.div(_ethereum, dividendFee_);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        
        // burn the sold tokens
        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens);
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens);
        
        // update dividends tracker
        int256 _updatedPayouts = (int256) (profitPerShare_ * _tokens + (_taxedEthereum * magnitude));
        payoutsTo_[_customerAddress] -= _updatedPayouts;       
        
        // dividing by zero is a bad idea
        if (tokenSupply_ > 0) {
            // update the amount of dividends per token
            profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_);
        }
        
        // fire event
        emit onTokenSell(_customerAddress, _tokens, _taxedEthereum);
    }
    
    
    /**
     * ERC20 Transfer
     * Contract address is blocked from using the transfer function
     * Contact us to approve contracts for transfer
     * Contracts will not be a registered user by default
     * All contracts will be approved unless the contract is malicious
     */
    function transfer(address _toAddress, uint256 _amountOfTokens)
        onlyBagholders()
        public
        returns(bool)
    {
        // setup
        address _customerAddress = msg.sender;
        
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        require(user[_customerAddress]);
        
        // withdraw all outstanding dividends first
        if(myDividends(true) > 0) withdraw();

        // exchange tokens
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _amountOfTokens);
        
        // update dividend trackers
        payoutsTo_[_customerAddress] -= (int256) (profitPerShare_ * _amountOfTokens);
        payoutsTo_[_toAddress] += (int256) (profitPerShare_ * _amountOfTokens);
        
        bytes memory _empty;
        uint256 codeLength;
        assembly {
            codeLength := extcodesize(_toAddress)
        }
        if(codeLength > 0){
            ERC223ReceivingContract receiver = ERC223ReceivingContract(_toAddress);
            receiver.tokenFallback(_customerAddress, _amountOfTokens, _empty);
        }
        
        // fire event
        emit Transfer(_customerAddress, _toAddress, _amountOfTokens, _empty);
        
        // ERC20
        return true;
    }
    
    /**
     * ERC223 Transfer
     * Contract address is blocked from using the transfer function
     * Contact us to approve contracts for transfer 
     * Contracts will not be a registered user by default
     * All contracts will be approved unless the contract is malicious
     */
    function transfer(address _toAddress, uint256 _amountOfTokens, bytes _data)
        onlyBagholders()
        public
        returns(bool)
    {
        // setup
        address _customerAddress = msg.sender;
        
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        require(user[_customerAddress]);
        
        // withdraw all outstanding dividends first
        if(myDividends(true) > 0) withdraw();
        
        // exchange tokens
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _amountOfTokens);
        
        // update dividend trackers
        payoutsTo_[_customerAddress] -= (int256) (profitPerShare_ * _amountOfTokens);
        payoutsTo_[_toAddress] += (int256) (profitPerShare_ * _amountOfTokens);
        
        uint256 codeLength;
        assembly {
            codeLength := extcodesize(_toAddress)
        }
        if(codeLength > 0){
            ERC223ReceivingContract receiver = ERC223ReceivingContract(_toAddress);
            receiver.tokenFallback(_customerAddress, _amountOfTokens, _data);
        }
        
        // fire event
        emit Transfer(_customerAddress, _toAddress, _amountOfTokens, _data);
        
        // ERC223
        return true;  
    }
    
    /*----------  ADMINISTRATOR ONLY FUNCTIONS  ----------*/
    
    /**
     * In case one of us dies, we need to replace ourselves.
     */
    function setAdministrator(bytes32 _identifier, bool _status)
        onlyAdministrator()
        public
    {
        administrators[_identifier] = _status;
    }
    
    /**
     * If we want to rebrand, we can.
     */
    function setName(string _name)
        onlyAdministrator()
        public
    {
        name = _name;
    }
    
    /**
     * If we want to rebrand, we can.
     */
    function setSymbol(string _symbol)
        onlyAdministrator()
        public
    {
        symbol = _symbol;
    }
    
    /**
     * Change start time.
     */
    function setTimestamp(uint256 _timestamp)
        onlyAdministrator()
        public
    {
        require(now < 1541001600);
        startTime = _timestamp;
    }
    
    /**
     * Manually add a user to contract for transfer.
     */
    function setUser(address[] _userAddress)
        onlyAdministrator()
        public
    {
        uint256 _length = _userAddress.length;
        require(_length > 0);
        
        for(uint256 i = 0; i < _length; i++){
            
            if(!user[_userAddress[i]])
                user[_userAddress[i]] = true;
        }
    }

    
    /*----------  HELPERS AND CALCULATORS  ----------*/
    /**
     * Method to view the current Ethereum stored in the contract
     * Example: totalEthereumBalance()
     */
    function totalEthereumBalance()
        public
        view
        returns(uint)
    {
        return address(this).balance;
    }
    
    /**
     * Retrieve the total token supply.
     */
    function totalSupply()
        public
        view
        returns(uint256)
    {
        return tokenSupply_;
    }
    
    /**
     * Retrieve the tokens owned by the caller.
     */
    function myTokens()
        public
        view
        returns(uint256)
    {
        address _customerAddress = msg.sender;
        return balanceOf(_customerAddress);
    }
    
    /**
     * Retrieve the dividends owned by the caller.
     * If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations.
     * The reason for this, is that in the frontend, we will want to get the total divs (global + ref)
     * But in the internal calculations, we want them separate. 
     */ 
    function myDividends(bool _includeReferralBonus) 
        public 
        view 
        returns(uint256)
    {
        address _customerAddress = msg.sender;
        return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ;
    }
    
    /**
     * Retrieve the token balance of any single address.
     */
    function balanceOf(address _customerAddress)
        view
        public
        returns(uint256)
    {
        return tokenBalanceLedger_[_customerAddress];
    }
    
    /**
     * Retrieve the dividend balance of any single address.
     */
    function dividendsOf(address _customerAddress)
        view
        public
        returns(uint256)
    {
        return (uint256) ((int256)(profitPerShare_ * tokenBalanceLedger_[_customerAddress]) - payoutsTo_[_customerAddress]) / magnitude;
    }
    
    /**
     * Return the buy price of 1 individual token.
     */
    function sellPrice() 
        public 
        view 
        returns(uint256)
    {
        // our calculation relies on the token supply, so we need supply. Doh.
        if(tokenSupply_ == 0){
            return tokenPriceInitial_ - tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            uint256 _dividends = SafeMath.div(_ethereum, dividendFee_  );
            uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
            return _taxedEthereum;
        }
    }
    
    /**
     * Return the sell price of 1 individual token.
     */
    function buyPrice() 
        public 
        view 
        returns(uint256)
    {
        // our calculation relies on the token supply, so we need supply. Doh.
        if(tokenSupply_ == 0){
            return tokenPriceInitial_ + tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            uint256 _dividends = SafeMath.div(_ethereum, dividendFee_  );
            uint256 _taxedEthereum = SafeMath.add(_ethereum, _dividends);
            return _taxedEthereum;
        }
    }
    
    /**
     * Function for the frontend to dynamically retrieve the price scaling of buy orders.
     */
    function calculateTokensReceived(uint256 _ethereumToSpend) 
        public 
        view 
        returns(uint256)
    {
        uint256 _dividends = SafeMath.div(_ethereumToSpend, dividendFee_);
        uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);
        
        return _amountOfTokens;
    }
    
    /**
     * Function for the frontend to dynamically retrieve the price scaling of sell orders.
     */
    function calculateEthereumReceived(uint256 _tokensToSell) 
        public 
        view 
        returns(uint256)
    {
        require(_tokensToSell <= tokenSupply_);
        uint256 _ethereum = tokensToEthereum_(_tokensToSell);
        uint256 _dividends = SafeMath.div(_ethereum, dividendFee_);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        return _taxedEthereum;
    }
    
    
    /*==========================================
    =            INTERNAL FUNCTIONS            =
    ==========================================*/
    function purchaseTokens(uint256 _incomingEthereum, address _referredBy)
        internal
        returns(uint256)
    {
        // data setup
        address _customerAddress = msg.sender;
        uint256 _undividedDividends = SafeMath.div(_incomingEthereum, dividendFee_);
        uint256 _referralBonus = SafeMath.div(_undividedDividends, 3);
        uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus);
        uint256 _taxedEthereum = SafeMath.sub(_incomingEthereum, _undividedDividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);
        uint256 _fee = _dividends * magnitude;
 
        require(_amountOfTokens > 0 && (SafeMath.add(_amountOfTokens,tokenSupply_) > tokenSupply_));
        
        // is the user referred by a masternode?
        if(
            _referredBy != 0x0000000000000000000000000000000000000000 &&

            _referredBy != _customerAddress &&
        
            register[_referredBy] != bytes32(0)
        ){
            // wealth redistribution
            referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus);
        } else {
            // no ref purchase
            // add the referral bonus back to the global dividends cake
            _dividends = SafeMath.add(_dividends, _referralBonus);
            _fee = _dividends * magnitude;
        }
        
        // we can't give people infinite ethereum
        if(tokenSupply_ > 0){
            
            // add tokens to the pool
            tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens);
 
            // take the amount of dividends gained through this transaction, and allocates them evenly to each shareholder
            profitPerShare_ += (_dividends * magnitude / (tokenSupply_));
            
            // calculate the amount of tokens the customer receives over his purchase 
            _fee = _fee - (_fee-(_amountOfTokens * (_dividends * magnitude / (tokenSupply_))));
        
        } else {
            // add tokens to the pool
            tokenSupply_ = _amountOfTokens;
        }
        
        // update circulating supply & the ledger address for the customer
        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        
        // Tells the contract that the buyer doesn't deserve dividends for the tokens before they owned them;
        //really i know you think you do but you don't
        int256 _updatedPayouts = (int256) ((profitPerShare_ * _amountOfTokens) - _fee);
        payoutsTo_[_customerAddress] += _updatedPayouts;
        
        if(_customerAddress == tx.origin && !user[_customerAddress])
            user[_customerAddress] = true;
    
        // fire event
        emit onTokenPurchase(_customerAddress, _incomingEthereum, _amountOfTokens, _referredBy);
        
        return _amountOfTokens;
    }

    /**
     * Calculate Token price based on an amount of incoming ethereum
     * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function ethereumToTokens_(uint256 _ethereum)
        public
        view
        returns(uint256)
    {
        uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18;
        uint256 _tokensReceived = 
         (
            (
                // underflow attempts BTFO
                SafeMath.sub(
                    (sqrt
                        (
                            (_tokenPriceInitial**2)
                            +
                            (2*(tokenPriceIncremental_ * 1e18)*(_ethereum * 1e18))
                            +
                            (((tokenPriceIncremental_)**2)*(tokenSupply_**2))
                            +
                            (2*(tokenPriceIncremental_)*_tokenPriceInitial*tokenSupply_)
                        )
                    ), _tokenPriceInitial
                )
            )/(tokenPriceIncremental_)
        )-(tokenSupply_)
        ;
  
        return _tokensReceived;
    }
    
    /**
     * Calculate token sell value.
     * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
     function tokensToEthereum_(uint256 _tokens)
        internal
        view
        returns(uint256)
    {

        uint256 tokens_ = (_tokens + 1e18);
        uint256 _tokenSupply = (tokenSupply_ + 1e18);
        uint256 _etherReceived =
        (
            // underflow attempts BTFO
            SafeMath.sub(
                (
                    (
                        (
                            tokenPriceInitial_ +(tokenPriceIncremental_ * (_tokenSupply/1e18))
                        )-tokenPriceIncremental_
                    )*(tokens_ - 1e18)
                ),(tokenPriceIncremental_*((tokens_**2-tokens_)/1e18))/2
            )
        /1e18);
        return _etherReceived;
    }
    
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = (x + 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }
}

contract ERC223ReceivingContract {
  function tokenFallback(address _from, uint256 _amountOfTokens, bytes _data) public returns (bool);
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    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;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    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;
    }

    /**
    * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

library NameFilter {
    
    function nameFilter(string _input)
        internal
        pure
        returns(bytes32)
    {
        bytes memory _temp = bytes(_input);
        uint256 _length = _temp.length;
        
        //sorry limited to 32 characters
        require (_length <= 32 && _length > 3, "string must be between 4 and 32 characters");
        // make sure first two characters are not 0x
        if (_temp[0] == 0x30)
        {
            require(_temp[1] != 0x78, "string cannot start with 0x");
            require(_temp[1] != 0x58, "string cannot start with 0X");
        }
        
        for (uint256 i = 0; i < _length; i++)
        {
            require
            (
                // OR uppercase A-Z
                (_temp[i] > 0x40 && _temp[i] < 0x5b) ||
                // OR lowercase a-z
                (_temp[i] > 0x60 && _temp[i] < 0x7b) ||
                // or 0-9
                (_temp[i] > 0x2f && _temp[i] < 0x3a),
                "string contains invalid characters"
            );
        }
        
        bytes32 _ret;
        assembly {
            _ret := mload(add(_temp, 32))
        }
        return (_ret);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ethereumToSpend","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gaspriceMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokensToSell","type":"uint256"}],"name":"calculateEthereumReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"onlyAmbassadors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ethereum","type":"uint256"}],"name":"ethereumToTokens_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"administrators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"register","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxEarlyStake","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_userName","type":"string"}],"name":"registered","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_referredName","type":"string"}],"name":"buyXname","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"user","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_identifier","type":"bytes32"},{"name":"_status","type":"bool"}],"name":"setAdministrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whaleBalanceLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"myTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_timestamp","type":"uint256"}],"name":"setTimestamp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_userAddress","type":"address[]"}],"name":"setUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"userName","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"}],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"incomingEthereum","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"},{"indexed":true,"name":"referredBy","type":"address"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"tokensBurned","type":"uint256"},{"indexed":false,"name":"ethereumEarned","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumReinvested","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"}],"name":"onReinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"Transfer","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60c0604052600c60808190527f4661697245786368616e6765000000000000000000000000000000000000000060a090815262000040916000919062000150565b506040805180820190915260048082527f46616972000000000000000000000000000000000000000000000000000000006020909201918252620000879160019162000150565b506404a817c800600255635bc295106003556722b1c8c1227a0000600455680d8d726b7177a800006005556000600a55600d805460ff19166001179055348015620000d157600080fd5b507fc4d602847c072c5746c8363cc08a314d51b7735cd5794f817bfe8d33f2adf4338054600160ff19918216811790925573bc817a495f0114755da5305c5aa84fc5ca7ebabd60005260066020527f4c89a3834a4170789301d95459391d36b427695fd847bcc6e3617dd57e330e5080549091169091179055620001f5565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200019357805160ff1916838001178555620001c3565b82800160010185558215620001c3579182015b82811115620001c3578251825591602001919060010190620001a6565b50620001d1929150620001d5565b5090565b620001f291905b80821115620001d15760008155600101620001dc565b90565b61264f80620002056000396000f3006080604052600436106101cb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b811461028057806306fdde03146102b357806310d0ffdd1461033d578063139965321461035557806318160ddd1461036a578063226093731461037f57806327defa1f146103975780632a9121c7146103c0578063313ce567146103d8578063392efb52146104035780633ccfd60b1461041b5780634420e486146104325780634b75033414610453578063585bc281146104685780635d2d5c371461047d578063688abbf7146104d65780636b2f4632146104f057806370a082311461050557806378e97925146105265780637edebaf11461053b57806381e7e20e146105875780638620410b146105a857806389135ae9146105bd57806391e33107146105da578063949e8acd146105ef57806395d89b4114610604578063a0a2b57314610619578063a9059cbb14610631578063b84c824614610655578063b94bae91146106ae578063be45fd6214610703578063c47f00271461076c578063e4849b32146107c5578063e639dded146107dd578063e9fad8ee14610811578063f088d54714610826578063fdb5a03e1461083a575b346000600554826101da61084f565b0310156101f0576002543a11156101f057600080fd5b50600d54339060ff16801561020757506003544211155b1561023857600160a060020a03811660009081526006602052604090205460ff16151561023357600080fd5b610270565b600d5460ff161561024e57600d805460ff191690555b6005548261025a61084f565b0310156102705760045482111561027057600080fd5b61027b346000610855565b505050005b34801561028c57600080fd5b506102a1600160a060020a0360043516610af6565b60408051918252519081900360200190f35b3480156102bf57600080fd5b506102c8610b31565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103025781810151838201526020016102ea565b50505050905090810190601f16801561032f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034957600080fd5b506102a1600435610bbf565b34801561036157600080fd5b506102a1610bf4565b34801561037657600080fd5b506102a1610bfa565b34801561038b57600080fd5b506102a1600435610c00565b3480156103a357600080fd5b506103ac610c39565b604080519115158252519081900360200190f35b3480156103cc57600080fd5b506102a1600435610c42565b3480156103e457600080fd5b506103ed610cde565b6040805160ff9092168252519081900360200190f35b34801561040f57600080fd5b506103ac600435610ce3565b34801561042757600080fd5b50610430610cf8565b005b34801561043e57600080fd5b506102a1600160a060020a0360043516610dcb565b34801561045f57600080fd5b506102a1610ddd565b34801561047457600080fd5b506102a1610e32565b34801561048957600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610430943694929360249392840191908190840183828082843750949750610e389650505050505050565b3480156104e257600080fd5b506102a160043515156110a4565b3480156104fc57600080fd5b506102a161084f565b34801561051157600080fd5b506102a1600160a060020a03600435166110e7565b34801561053257600080fd5b506102a1611102565b6040805160206004803580820135601f81018490048402850184019095528484526102a19436949293602493928401919081908401838280828437509497506111089650505050505050565b34801561059357600080fd5b506103ac600160a060020a03600435166111df565b3480156105b457600080fd5b506102a16111f4565b3480156105c957600080fd5b50610430600435602435151561123d565b3480156105e657600080fd5b506102a1611322565b3480156105fb57600080fd5b506102a1611328565b34801561061057600080fd5b506102c861133b565b34801561062557600080fd5b50610430600435611395565b34801561063d57600080fd5b506103ac600160a060020a036004351660243561146f565b34801561066157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261043094369492936024939284019190819084018382808284375094975061175f9650505050505050565b3480156106ba57600080fd5b5060408051602060048035808201358381028086018501909652808552610430953695939460249493850192918291850190849080828437509497506118369650505050505050565b34801561070f57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526103ac948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506119b19650505050505050565b34801561077857600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610430943694929360249392840191908190840183828082843750949750611c569650505050505050565b3480156107d157600080fd5b50610430600435611d2d565b3480156107e957600080fd5b506107f5600435611e84565b60408051600160a060020a039092168252519081900360200190f35b34801561081d57600080fd5b50610430611e9f565b6102a1600160a060020a0360043516611ecc565b34801561084657600080fd5b50610430611f7d565b30315b90565b6000338180808080808061086a8b600a612033565b9650610877876003612033565b9550610883878761204a565b945061088f8b8861204a565b935061089a84610c42565b925068010000000000000000850291506000831180156108c45750600a546108c2848261205c565b115b15156108cf57600080fd5b600160a060020a038a16158015906108f9575087600160a060020a03168a600160a060020a031614155b801561091c5750600160a060020a038a166000908152600e602052604090205415155b1561096257600160a060020a038a16600090815260086020526040902054610944908761205c565b600160a060020a038b1660009081526008602052604090205561097d565b61096c858761205c565b945068010000000000000000850291505b6000600a5411156109e157610994600a548461205c565b600a8190556801000000000000000086028115156109ae57fe5b600b8054929091049091019055600a546801000000000000000086028115156109d357fe5b0483028203820391506109e7565b600a8390555b600160a060020a038816600090815260076020526040902054610a0a908461205c565b600160a060020a038916600081815260076020908152604080832094909455600b5460099091529290208054928602859003928301905590915032148015610a6b5750600160a060020a03881660009081526010602052604090205460ff16155b15610a9457600160a060020a0388166000908152601060205260409020805460ff191660011790555b89600160a060020a031688600160a060020a03167f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d58d86604051808381526020018281526020019250505060405180910390a350909998505050505050505050565b600160a060020a0316600090815260096020908152604080832054600790925290912054600b54680100000000000000009102919091030490565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bb75780601f10610b8c57610100808354040283529160200191610bb7565b820191906000526020600020905b815481529060010190602001808311610b9a57829003601f168201915b505050505081565b6000808080610bcf85600a612033565b9250610bdb858461204a565b9150610be682610c42565b90508093505b505050919050565b60025481565b600a5490565b600080600080600a548511151515610c1757600080fd5b610c2085612072565b9250610c2d83600a612033565b9150610be6838361204a565b600d5460ff1681565b600a546000906d04ee2d6d415b85acef810000000090829064012a05f200610ccb610cc57301c06a5ec5433c60ddaa16406f5a400000000000880268015af1d78b58c400006002860a0201710b7abc627050305adf14a3d9e400000000008502017a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000016120df565b8561204a565b811515610cd457fe5b0403949350505050565b601281565b600c6020526000908152604090205460ff1681565b6000806000610d0760016110a4565b11610d1157600080fd5b339150610d1e60006110a4565b600160a060020a038316600081815260096020908152604080832080546801000000000000000087020190556008909152808220805490839055905193019350909183156108fc0291849190818181858888f19350505050158015610d87573d6000803e3d6000fd5b50604080518281529051600160a060020a038416917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a25050565b600e6020526000908152604090205481565b600080600080600a5460001415610dfc57655af1e6744e009350610e2c565b610e0d670de0b6b3a7640000612072565b9250610e1a83600a612033565b9150610e26838361204a565b90508093505b50505090565b60045481565b336000610e4483612114565b9050600160a060020a0382163214610ea6576040805160e560020a62461bcd02815260206004820152601e60248201527f73656e64657220646f6573206e6f74206d656574207468652072756c65730000604482015290519081900360640190fd5b801515610efd576040805160e560020a62461bcd02815260206004820152601460248201527f6e616d652063616e6e6f7420626520656d707479000000000000000000000000604482015290519081900360640190fd5b6000818152600f6020526040902054600160a060020a031615610f90576040805160e560020a62461bcd02815260206004820152602560248201527f74686973206e616d652068617320616c7265616479206265656e20726567697360448201527f7465726564000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382166000908152600e602052604090205415611024576040805160e560020a62461bcd02815260206004820152602160248201527f706c6561736520646f206e6f742072657065617420726567697374726174696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000818152600f60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091558352600e8252808320849055601090915290205460ff16151561109f57600160a060020a0382166000908152601060205260409020805460ff191660011790555b505050565b600033826110ba576110b581610af6565b6110de565b600160a060020a0381166000908152600860205260409020546110dc82610af6565b015b91505b50919050565b600160a060020a031660009081526007602052604090205490565b60035481565b60003460006005548261111961084f565b03101561112f576002543a111561112f57600080fd5b50600d54339060ff16801561114657506003544211155b1561117757600160a060020a03811660009081526006602052604090205460ff16151561117257600080fd5b6111af565b600d5460ff161561118d57600d805460ff191690555b6005548261119961084f565b0310156111af576004548211156111af57600080fd5b610bec34600f60006111c088612114565b8152602081019190915260400160002054600160a060020a0316610855565b60106020526000908152604090205460ff1681565b600080600080600a546000141561121357655af43a8032009350610e2c565b611224670de0b6b3a7640000612072565b925061123183600a612033565b9150610e26838361205c565b6000339050600c6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106112b65780518252601f199092019160209182019101611297565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff161515925061130191505057600080fd5b506000918252600c6020526040909120805460ff1916911515919091179055565b60055481565b600033611334816110e7565b91505b5090565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bb75780601f10610b8c57610100808354040283529160200191610bb7565b6000339050600c6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061140e5780518252601f1990920191602091820191016113ef565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff161515925061145991505057600080fd5b635bd9d180421061146957600080fd5b50600355565b60008060606000806000611481611328565b1161148b57600080fd5b336000818152600760205260409020549094508611156114aa57600080fd5b600160a060020a03841660009081526010602052604090205460ff1615156114d157600080fd5b60006114dd60016110a4565b11156114eb576114eb610cf8565b600160a060020a03841660009081526007602052604090205461150e908761204a565b600160a060020a03808616600090815260076020526040808220939093559089168152205461153d908761205c565b600160a060020a03888116600081815260076020908152604080832095909555600b8054948a16835260099091528482208054948c0290940390935591549082529181208054928902909201909155873b925082111561169d57506040517fc0ee0b8a000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301908152602483018890526060604484019081528551606485015285518a949385169363c0ee0b8a9389938c938a9360840190602085019080838360005b8381101561162257818101518382015260200161160a565b50505050905090810190601f16801561164f5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b505050506040513d602081101561169a57600080fd5b50505b86600160a060020a031684600160a060020a03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1688866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117175781810151838201526020016116ff565b50505050905090810190601f1680156117445780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35060019695505050505050565b6000339050600c6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106117d85780518252601f1990920191602091820191016117b9565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff161515925061182391505057600080fd5b815161109f906001906020850190612595565b6000806000339050600c6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106118b25780518252601f199092019160209182019101611893565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff16151592506118fd91505057600080fd5b835192506000831161190e57600080fd5b600091505b828210156119ab5760106000858481518110151561192d57fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff1615156119a057600160106000868581518110151561196d57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff19169115159190911790555b600190910190611913565b50505050565b60008060008060006119c1611328565b116119cb57600080fd5b336000818152600760205260409020549093508611156119ea57600080fd5b600160a060020a03831660009081526010602052604090205460ff161515611a1157600080fd5b6000611a1d60016110a4565b1115611a2b57611a2b610cf8565b600160a060020a038316600090815260076020526040902054611a4e908761204a565b600160a060020a038085166000908152600760205260408082209390935590891681522054611a7d908761205c565b600160a060020a03888116600081815260076020908152604080832095909555600b8054948916835260099091528482208054948c0290940390935591549082529181208054928902909201909155873b9250821115611bdd57506040517fc0ee0b8a000000000000000000000000000000000000000000000000000000008152600160a060020a0383811660048301908152602483018890526060604484019081528751606485015287518a949385169363c0ee0b8a9388938c938c9360840190602085019080838360005b83811015611b62578181015183820152602001611b4a565b50505050905090810190601f168015611b8f5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b50505b86600160a060020a031683600160a060020a03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c168888604051808381526020018060200182810382528381815181526020019150805190602001908083836000838110156117175781810151838201526020016116ff565b6000339050600c6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ccf5780518252601f199092019160209182019101611cb0565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff1615159250611d1a91505057600080fd5b815161109f906000906020850190612595565b6000806000806000806000611d40611328565b11611d4a57600080fd5b33600081815260076020526040902054909650871115611d6957600080fd5b869450611d7585612072565b9350611d8284600a612033565b9250611d8e848461204a565b9150611d9c600a548661204a565b600a55600160a060020a038616600090815260076020526040902054611dc2908661204a565b600160a060020a038716600090815260076020908152604080832093909355600b546009909152918120805492880268010000000000000000860201928390039055600a549192501015611e3857611e34600b54600a54680100000000000000008602811515611e2e57fe5b0461205c565b600b555b60408051868152602081018490528151600160a060020a038916927fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a31139928290030190a250505050505050565b600f60205260009081526040902054600160a060020a031681565b3360008181526007602052604081205490811115611ec057611ec081611d2d565b611ec8610cf8565b5050565b600034600060055482611edd61084f565b031015611ef3576002543a1115611ef357600080fd5b50600d54339060ff168015611f0a57506003544211155b15611f3b57600160a060020a03811660009081526006602052604090205460ff161515611f3657600080fd5b611f73565b600d5460ff1615611f5157600d805460ff191690555b60055482611f5d61084f565b031015611f7357600454821115611f7357600080fd5b610bec3485610855565b600080600080611f8d60016110a4565b11611f9757600080fd5b611fa160006110a4565b33600081815260096020908152604080832080546801000000000000000087020190556008909152812080549082905590920194509250611fe3908490610855565b905081600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588483604051808381526020018281526020019250505060405180910390a2505050565b600080828481151561204157fe5b04949350505050565b60008282111561205657fe5b50900390565b60008282018381101561206b57fe5b9392505050565b600a54600090670de0b6b3a76400008381019181019083906120cc655af1e6744e0082850464012a05f20002018702600283670de0b6b3a763ffff1982890a8b9003010464012a05f200028115156120c657fe5b0461204a565b8115156120d557fe5b0495945050505050565b80600260018201045b818110156110e157809150600281828581151561210157fe5b040181151561210c57fe5b0490506120e8565b8051600090829082806020831180159061212e5750600383115b15156121aa576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203420616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b8360008151811015156121b957fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a0214156122fc578360018151811015156121f357fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515612270576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b83600181518110151561227f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a02141515156122fc576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b828210156125885783517f40000000000000000000000000000000000000000000000000000000000000009085908490811061233957fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156123ad575083517f5b000000000000000000000000000000000000000000000000000000000000009085908490811061238e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80612457575083517f6000000000000000000000000000000000000000000000000000000000000000908590849081106123e357fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015612457575083517f7b000000000000000000000000000000000000000000000000000000000000009085908490811061243857fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80612501575083517f2f000000000000000000000000000000000000000000000000000000000000009085908490811061248d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015612501575083517f3a00000000000000000000000000000000000000000000000000000000000000908590849081106124e257fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b151561257d576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600190910190612301565b5050506020015192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106125d657805160ff1916838001178555612603565b82800160010185558215612603579182015b828111156126035782518255916020019190600101906125e8565b50611337926108529250905b80821115611337576000815560010161260f5600a165627a7a72305820fa1e3d8583f022995a7e987566e75b84a988c7bb8df0a30abbbf9e69fe8fc8710029

   Swarm Source:
bzzr://fa1e3d8583f022995a7e987566e75b84a988c7bb8df0a30abbbf9e69fe8fc871

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.