Contract 0x2239df7104fd3f4a5e464e108506e76c47858a20

 

Contract Overview

BankHeist4D
Balance:
0.358554193844907421 Ether

EtherValue:
$52.15 (@ $145.44/ETH)
TxHash Block Age From To Value [TxFee]
0xa65c339c8d581c7dbe0aa9c8fd9bb5b4181931a482436f9ee3467481880e1879674523392 days 4 hrs ago0x27f1680513bfb0a65a395621c076d03d8254a865 IN  BankHeist4D0 Ether0.000091384
0x287f72273cbbe2b5581342ee21e8684c53adc0550ffe14af9b011d4f9ca01e36674522592 days 4 hrs ago0x285b29f6fd14f1785c01a2065ca8de319e009da3 IN  BankHeist4D0 Ether0.000091384
0x6a0255393cc77474aba0a2cdedfbf4bf7299bbe37c79f4a4984807ad42f23e08674521792 days 4 hrs ago0x27f1680513bfb0a65a395621c076d03d8254a865 IN  BankHeist4D0 Ether0.000091384
0x8c6a2e165cdc75dad80f9c92e5c1bd3d57aca4f55e5326111530345f19cf5437671475797 days 5 hrs ago0x65a64d2bce8f731d51f2ae0d58b592e7413530f5 IN  BankHeist4D0.001 Ether0.0014328963
0xe54b62cef8ee234ef3636ffb6046e80990c55047ea7294da676710d8d0bcb4bf6635961110 days 2 hrs ago0x32fea738d8fa275aca80747600a56eedb0d791ca IN  BankHeist4D0.001 Ether0.005390532
0xa30bee06f125fed8b4bc4acf0a1ee3b80e3a6462845ef67613b5a1e898923a546634863110 days 7 hrs ago0xfa210798b86b3b6ccc1bd522e759a427df2e643c IN  BankHeist4D0.001 Ether0.001471338
0xfe826b7fd1b4c8510923c08973b10cbed2406e3a5d35597d33e43088736b41cf6631245110 days 21 hrs ago0xe45b14ec81b6e7c7aa9e58bd7cc182995ec9aedb IN  BankHeist4D0 Ether0.000163398
0x49bacd62ff658b9669cee5541bb97cbc58e12701d51c355d8f43642b9eb23c2e6631242110 days 21 hrs ago0xba2a1ba671e1943be5d2d3da6c911bcf0d551c4b IN  BankHeist4D0 Ether0.000163398
0x97d9ffcd170119495aac9eea7c7415806348faad85c081f99f9dd014d2d6146c6631229110 days 21 hrs ago0xab395c6046b7ed6ab79d903d2267733194286f61 IN  BankHeist4D0 Ether0.000163398
0x6d26f907e242d09d87185cb4559a806effcbe07944f94eddbc326b8fbc2717876631227110 days 21 hrs ago0x246a44b950a87809d56dca3d94359578fb166b2d IN  BankHeist4D0 Ether0.000163398
0x7f5fc1de338752cf032234872ea55933628e0b5225f8d1264c53bd53a598718a6631219110 days 21 hrs ago0xdc85f5dfdd66ce4c2dad4866c858cf0d2edf52f6 IN  BankHeist4D0 Ether0.000163398
0x59f2fcb3a2169ecfd49dc6302b717cf576768e4e157454ea292c0802ef77f4006631216110 days 21 hrs ago0xca2cb26c8963cf2b68ac5cc80408742b4e155bbb IN  BankHeist4D0 Ether0.000163398
0xebf6a45cae89375890dd75fe009c8cdebe0c90a76e65b4c982aa4c739506d86a6631214110 days 21 hrs ago0x0f9c4c7a837d5739f65bfe43a7ef6bf21fbf0670 IN  BankHeist4D0 Ether0.000163398
0x139b261b6b8d54142be568754512e0507b6ab30b4f166582555c39539cf161b16631209110 days 21 hrs ago0xc23325a006bca5b7708e6b0b88850ec32d17018c IN  BankHeist4D0 Ether0.000163398
0xeddd4b36ee7138a515b21c07839bb6f8b2454da58fa70dda5153311f664878d56631205110 days 21 hrs ago0x34f9c0205bac45a4b789ad2a8ccdb593cd93b927 IN  BankHeist4D0 Ether0.000163398
0xd78c091fab809d277cd201174e04376217104b8dc0d6692423935a046b894d716631203110 days 21 hrs ago0x264b5382fd5ee738561ddea651171d963f10ec05 IN  BankHeist4D0 Ether0.000163398
0x4ff3b5443d55e290135db08da23b859bc95c9834625dca0eecca449fdfa524636631197110 days 21 hrs ago0x0ba132a9af5ffddb3679fe4bdd600d502d2a7f56 IN  BankHeist4D0 Ether0.000163398
0xf62be95a9939d7c3422cfcb185c14e99ee88b9d1643b3d2480b843876ac6c9ed6631194110 days 21 hrs ago0x45fa0f9e642229bc1ae9477ab6f2d6b39f1dd6df IN  BankHeist4D0 Ether0.000163398
0x620dd92fd65500b785e6686ae197451263539270d97525486812c592305d1b266631191110 days 21 hrs ago0x147a4a971781ec5b23385a59f1bbee6a352f369f IN  BankHeist4D0 Ether0.000163398
0x2b67a0ab409120770cfa9086d68e80a349d96d574dae058f888e10d8b13e9eb56631177110 days 21 hrs ago0xf7a2a420c1a07c942741cdcf7aeadadc9969a97c IN  BankHeist4D0 Ether0.000163398
0x89f8d18f2dc3d21026509a06cc2a110ee2d267dfa949b7dcb3ac294d9a99cfe96631166110 days 21 hrs ago0x693c8cbd1bd78b42f51600825ef26358599ad289 IN  BankHeist4D0 Ether0.000163398
0xb8bd83045b330b7863bca0a25c9c2afb1a6c35689e3ebb9aeae8f4fcd6b5f4e36631161110 days 21 hrs ago0x3d358b6a938bf37318e7180f9915250160539232 IN  BankHeist4D0 Ether0.000163398
0x7725ffe42ac8652e56e53dc69c716fb8042925f54acf78d19772eb397d19259d6631159110 days 21 hrs ago0x6fb7c0c8ec03b35e2d006df24662d740baa8a5d7 IN  BankHeist4D0 Ether0.000163398
0xe8189947104b96bdca39f2c10b98c6ded6e3e202872252933f19814984bc09486631155110 days 21 hrs ago0x7212e3370a708c70cfb877c78910c4cd208260b5 IN  BankHeist4D0 Ether0.000163398
0x13ed6299d092410d66e0cb1d117597e5711df2c31670778aeb3569fb8a8379566631152110 days 21 hrs ago0xf23462c33fe37bf96cadc8e0bbe3bdafa3359859 IN  BankHeist4D0 Ether0.000163398
[ Download CSV Export 

Latest 25 Internal Transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x8c6a2e165cdc75dad80f9c92e5c1bd3d57aca4f55e5326111530345f19cf5437671475797 days 5 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0001 Ether
0x8c6a2e165cdc75dad80f9c92e5c1bd3d57aca4f55e5326111530345f19cf5437671475797 days 5 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00003 Ether
0xe54b62cef8ee234ef3636ffb6046e80990c55047ea7294da676710d8d0bcb4bf6635961110 days 2 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0001 Ether
0xe54b62cef8ee234ef3636ffb6046e80990c55047ea7294da676710d8d0bcb4bf6635961110 days 2 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00003 Ether
0xa30bee06f125fed8b4bc4acf0a1ee3b80e3a6462845ef67613b5a1e898923a546634863110 days 7 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0001 Ether
0xa30bee06f125fed8b4bc4acf0a1ee3b80e3a6462845ef67613b5a1e898923a546634863110 days 7 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00003 Ether
0xeb4f9ea8cb8fffea77bd6bc331ab47d871e239cc9221a10eacc82c0067fba63c6629254111 days 5 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0001 Ether
0xeb4f9ea8cb8fffea77bd6bc331ab47d871e239cc9221a10eacc82c0067fba63c6629254111 days 5 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00003 Ether
0x533d65cd95d9114822de09782695b0888ed71eb752261c719e5b6ea7b0b6d4a36623191112 days 5 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0001 Ether
0x533d65cd95d9114822de09782695b0888ed71eb752261c719e5b6ea7b0b6d4a36623191112 days 5 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00003 Ether
0xe612fcbafd91581c67a098ea0b1479088c363cd7d30d2e2c64d1a2fb339853c66604459115 days 6 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0001 Ether
0xe612fcbafd91581c67a098ea0b1479088c363cd7d30d2e2c64d1a2fb339853c66604459115 days 6 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00003 Ether
0x485a3a4ca7025d66683a1f6fca8046f42c98bf4b668426f644362f28147abb0f6591649117 days 9 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.01 Ether
0x485a3a4ca7025d66683a1f6fca8046f42c98bf4b668426f644362f28147abb0f6591649117 days 9 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.003 Ether
0xf51202bef7526aad674b973ec1cdd527ab3d08a9fd9feb68f96ac54c8be832ba6577904119 days 15 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0002 Ether
0xf51202bef7526aad674b973ec1cdd527ab3d08a9fd9feb68f96ac54c8be832ba6577904119 days 15 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00006 Ether
0xbf7a894668088cf0b3abe3e196086d480a6eef8dbd8ad1507abe5d63bd8d2abe6555299123 days 7 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0001 Ether
0xbf7a894668088cf0b3abe3e196086d480a6eef8dbd8ad1507abe5d63bd8d2abe6555299123 days 7 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00003 Ether
0x430122cf1b9c656ef26d5aabf657a17fcdecd655310f82befc2e88311cca38416549023124 days 8 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0001 Ether
0x430122cf1b9c656ef26d5aabf657a17fcdecd655310f82befc2e88311cca38416549023124 days 8 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00003 Ether
0x230a49ede309438e4d938dddebc6d706e2ff75dba3ff2276e4fa4b29fd5bf1dc6548106124 days 12 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x1868ac105c4a2d0fccb8ab20749182eab6fa238c0.150658719370230352 Ether
0xcbf044d139cd9b9bff3f6bb393a39da815124333c005299c8eaef9ab9f551c936543035125 days 7 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0001 Ether
0xcbf044d139cd9b9bff3f6bb393a39da815124333c005299c8eaef9ab9f551c936543035125 days 7 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00003 Ether
0x65b76a6b4814da77b1c7a0bcbe88afc6c675e200e4cc28507413ff41073f488e6541908125 days 12 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200x32fea738d8fa275aca80747600a56eedb0d791ca0.0101 Ether
0x65b76a6b4814da77b1c7a0bcbe88afc6c675e200e4cc28507413ff41073f488e6541908125 days 12 hrs ago0x2239df7104fd3f4a5e464e108506e76c47858a200xd70c3f752feb69ecf8eb31e48b20a97d979e8e5e0.00303 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: BankOfEthVaultBreaker
Compiler Version: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimizer):  200


Contract Source Code
pragma solidity^0.4.24;

/**
*
*
* Contacts: support (at) bankofeth.app
*           https://twitter.com/bankofeth
*           https://discord.gg/d5c7pfn
*           https://t.me/bankofeth
*           https://reddit.com/r/bankofeth
*
* PLAY NOW: https://heist.bankofeth.app/heist.htm
*  
* --- BANK OF ETH - BANK HEIST! ------------------------------------------------
*
* Hold the final key to complete the bank heist and win the entire vault funds!
* 
* = Passive income while the vault time lock runs down - as others buy into the 
* game you earn $ETH! 
* 
* = Buy enough keys for a chance to open the safety bank deposit boxes for a 
* instant win! 
* 
* = Game designed with 4 dimensions of income for you, the players!
*   (See https://heist.bankofeth.app/heist.htm for details)
* 
* = Can you hold the last key to win the game!
* = Can you win the safety deposit box!
*
* = Play NOW: https://heist.bankofeth.app/heist.htm
*
* Keys priced as low as 0.001 $ETH!
*
* Also - invest min 0.1 ETH for a chance to open a safety deposit box and 
* instantly win a bonus prize!
* 
* The more keys you own in each round, the more distributed ETH you'll earn!
* 
* All profits from thi game feed back into the main BankOfEth contract where 
* you can also be an investor in and earn a return on!
*
*
* --- COPYRIGHT ----------------------------------------------------------------
* 
*   This source code is provided for verification and audit purposes only and 
*   no license of re-use is granted.
*   
*   (C) Copyright 2018 BankOfEth.app
*   
*   
*   Sub-license, white-label, solidity or Ethereum development enquiries please 
*   contact support (at) bankofeth.app
*   
*   
* PLAY NOW: https://heist.bankofeth.app/heist.htm
* 
*/



library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

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

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

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

library Zero {
  function requireNotZero(uint a) internal pure {
    require(a != 0, "require not zero");
  }

  function requireNotZero(address addr) internal pure {
    require(addr != address(0), "require not zero address");
  }

  function notZero(address addr) internal pure returns(bool) {
    return !(addr == address(0));
  }

  function isZero(address addr) internal pure returns(bool) {
    return addr == address(0);
  }
}

library Percent {

  struct percent {
    uint num;
    uint den;
  }
  function mul(percent storage p, uint a) internal view returns (uint) {
    if (a == 0) {
      return 0;
    }
    return a*p.num/p.den;
  }

  function div(percent storage p, uint a) internal view returns (uint) {
    return a/p.num*p.den;
  }

  function sub(percent storage p, uint a) internal view returns (uint) {
    uint b = mul(p, a);
    if (b >= a) return 0;
    return a - b;
  }

  function add(percent storage p, uint a) internal view returns (uint) {
    return a + mul(p, a);
  }
}

library ToAddress {
  function toAddr(uint source) internal pure returns(address) {
    return address(source);
  }

  function toAddr(bytes source) internal pure returns(address addr) {
    assembly { addr := mload(add(source,0x14)) }
    return addr;
  }
}

interface BankOfEth {
    function receiveExternalProfits() external payable;
}

contract BankOfEthVaultBreaker {
    
    using SafeMath for uint256;
    using Percent for Percent.percent;
    using Zero for *;
    using ToAddress for *;

    // Events    
    event KeysIssued(address indexed to, uint keys, uint timestamp);
    event EthDistributed(uint amount, uint timestamp);
    event ReturnsWithdrawn(address indexed by, uint amount, uint timestamp);
    event JackpotWon(address by, uint amount, uint timestamp);
    event AirdropWon(address by, uint amount, uint timestamp);
    event RoundStarted(uint indexed ID, uint hardDeadline, uint timestamp);
    
    address owner;
    address devAddress;
    address bankOfEthAddress = 0xd70c3f752Feb69Ecf8Eb31E48B20A97D979e8e5e;

    BankOfEth localBankOfEth;
    

    // settings
    uint public constant STARTING_KEY_PRICE = 1 finney; // 0.01 eth
    uint public constant HARD_DEADLINE_DURATION = 30 days; // hard deadline is this much after the round start
    
    uint public constant TIME_PER_KEY = 5 minutes; // how much time is added to the soft deadline per key purchased
    uint public constant PRICE_INCREASE_PERIOD = 1 hours; // how often the price doubles after the hard deadline
    uint constant WAD = 10 ** 18;
    uint constant RAY = 10 ** 27;
    
    Percent.percent private m_currentRoundJackpotPercent = Percent.percent(15, 100); // 15/100*100% = 15%
    Percent.percent private m_investorsPercent = Percent.percent(65, 100); // 65/100*100% = 65%
    Percent.percent private m_devPercent = Percent.percent(10, 100); // 15/100*100% = 15%
    Percent.percent private m_nextRoundSeedPercent = Percent.percent(5, 100); // 15/100*100% = 15%
    Percent.percent private m_airdropPercent = Percent.percent(2, 100); // 15/100*100% = 15%
    Percent.percent private m_bankOfEthProfitPercent = Percent.percent(3, 100); // 15/100*100% = 15%
    Percent.percent private m_refPercent = Percent.percent(3, 100); // 3/100*100% = 15%
    
    struct SafeBreaker {
        //uint lastCumulativeReturnsPoints;
        uint lastCumulativeReturnsPoints;
        uint keys;
    }
    
    struct GameRound {
        uint totalInvested;        
        uint jackpot;
        uint airdropPot;
        uint totalKeys;
        uint cumulativeReturnsPoints; // this is to help calculate returns when the total number of keys changes
        uint hardDeadline;
        uint softDeadline;
        uint price;
        uint lastPriceIncreaseTime;
        address lastInvestor;
        bool finalized;
        mapping (address => SafeBreaker) safeBreakers;
    }
    
    struct Vault {
        uint totalReturns; // Total balance = returns + referral returns + jackpots/airdrops 
        uint refReturns; // how much of the total is from referrals
    }

    mapping (address => Vault) vaults;

    uint public latestRoundID;// the first round has an ID of 0
    GameRound[] rounds;
    
    
    uint256 public minInvestment = 1 finney; // 0.01 eth
    uint256 public maxInvestment = 2000 ether; 
    uint256 public roundDuration = (24 hours);
    uint public soft_deadline_duration = 1 days; // max soft deadline
    bool public gamePaused = false;
    bool public limitedReferralsMode = true;
    
    mapping(address => bool) private m_referrals; // we only pay out on the first set of referrals
    
    
    // Game vars
    uint public jackpotSeed;// Jackpot from previous rounds
    
    uint public unclaimedReturns;
    uint public constant MULTIPLIER = RAY;
    
    // Main stats:
    uint public totalJackpotsWon;
    uint public totalKeysSold;
    uint public totalEarningsGenerated;

    
    // modifiers
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }
    
    modifier notOnPause() {
        require(gamePaused == false, "Game Paused");
        _;
    }
    
    

    
    constructor() public {

        owner = msg.sender;
        devAddress = msg.sender;
        localBankOfEth = BankOfEth(bankOfEthAddress);
        
        rounds.length++;
        GameRound storage rnd = rounds[0];
        latestRoundID = 0;

        rnd.lastInvestor = msg.sender;
        rnd.price = STARTING_KEY_PRICE;
        rnd.hardDeadline = now + HARD_DEADLINE_DURATION;
        rnd.softDeadline = now + soft_deadline_duration;
        jackpotSeed = 0; 
        rnd.jackpot = jackpotSeed;
        

        
    }
    
    function () public payable {
        buyKeys(address(0x0));
    }
    
    function investorInfo(address investor, uint roundID) external view
    returns(uint keys, uint totalReturns, uint referralReturns) 
    {
        GameRound storage rnd = rounds[roundID];
        keys = rnd.safeBreakers[investor].keys;
        (totalReturns, referralReturns) = estimateReturns(investor, roundID);
    }
    function estimateReturns(address investor, uint roundID) public view 
    returns (uint totalReturns, uint refReturns) 
    {
        GameRound storage rnd = rounds[roundID];
        uint outstanding;
        if(rounds.length > 1) {
            if(hasReturns(investor, roundID - 1)) {
                GameRound storage prevRnd = rounds[roundID - 1];
                outstanding = _outstandingReturns(investor, prevRnd);
            }
        }

        outstanding += _outstandingReturns(investor, rnd);
        
        totalReturns = vaults[investor].totalReturns + outstanding;
        refReturns = vaults[investor].refReturns;
    }
    
    function roundInfo(uint roundID) external view 
    returns(
        address leader, 
        uint price,
        uint jackpot, 
        uint airdrop, 
        uint keys, 
        uint totalInvested,
        uint distributedReturns,
        uint _hardDeadline,
        uint _softDeadline,
        bool finalized
        )
    {
        GameRound storage rnd = rounds[roundID];
        leader = rnd.lastInvestor;
        price = rnd.price;
        jackpot = rnd.jackpot;
        airdrop = rnd.airdropPot;
        keys = rnd.totalKeys;
        totalInvested = rnd.totalInvested;
        distributedReturns = m_currentRoundJackpotPercent.mul(rnd.totalInvested);
        //wmul(rnd.totalInvested, RETURNS_FRACTION);
        _hardDeadline = rnd.hardDeadline;
        _softDeadline = rnd.softDeadline;
        finalized = rnd.finalized;
    }
    
    function totalsInfo() external view 
    returns(
        uint totalReturns,
        uint totalKeys,
        uint totalJackpots
    ) {
        GameRound storage rnd = rounds[latestRoundID];
        if(rnd.softDeadline > now) {
            totalKeys = totalKeysSold + rnd.totalKeys;
            totalReturns = totalEarningsGenerated + m_currentRoundJackpotPercent.mul(rnd.totalInvested); 
            // wmul(rnd.totalInvested, RETURNS_FRACTION);
        } else {
            totalKeys = totalKeysSold;
            totalReturns = totalEarningsGenerated;
        }
        totalJackpots = totalJackpotsWon;
    }

    
    function reinvestReturns(uint value) public {        
        reinvestReturns(value, address(0x0));
    }

    function reinvestReturns(uint value, address ref) public {        
        GameRound storage rnd = rounds[latestRoundID];
        _updateReturns(msg.sender, rnd);        
        require(vaults[msg.sender].totalReturns >= value, "Can't spend what you don't have");        
        vaults[msg.sender].totalReturns = vaults[msg.sender].totalReturns.sub(value);
        vaults[msg.sender].refReturns = min(vaults[msg.sender].refReturns, vaults[msg.sender].totalReturns);
        unclaimedReturns = unclaimedReturns.sub(value);
        _purchase(rnd, value, ref);
    }
    function withdrawReturns() public {
        GameRound storage rnd = rounds[latestRoundID];

        if(rounds.length > 1) {// check if they also have returns from before
            if(hasReturns(msg.sender, latestRoundID - 1)) {
                GameRound storage prevRnd = rounds[latestRoundID - 1];
                _updateReturns(msg.sender, prevRnd);
            }
        }
        _updateReturns(msg.sender, rnd);
        uint amount = vaults[msg.sender].totalReturns;
        require(amount > 0, "Nothing to withdraw!");
        unclaimedReturns = unclaimedReturns.sub(amount);
        vaults[msg.sender].totalReturns = 0;
        vaults[msg.sender].refReturns = 0;
        
        rnd.safeBreakers[msg.sender].lastCumulativeReturnsPoints = rnd.cumulativeReturnsPoints;
        msg.sender.transfer(amount);

        emit ReturnsWithdrawn(msg.sender, amount, now);
    }
    function hasReturns(address investor, uint roundID) public view returns (bool) {
        GameRound storage rnd = rounds[roundID];
        return rnd.cumulativeReturnsPoints > rnd.safeBreakers[investor].lastCumulativeReturnsPoints;
    }
    function updateMyReturns(uint roundID) public {
        GameRound storage rnd = rounds[roundID];
        _updateReturns(msg.sender, rnd);
    }
    
    function finalizeLastRound() public {
        GameRound storage rnd = rounds[latestRoundID];
        _finalizeRound(rnd);
    }
    function finalizeAndRestart() public payable {
        finalizeLastRound();
        startNewRound(address(0x0));
    }
    
    function finalizeAndRestart(address _referer) public payable {
        finalizeLastRound();
        startNewRound(_referer);
    }
    
    event debugLog(uint _num, string _string);
    
    function startNewRound(address _referer) public payable {
        
        require(rounds[latestRoundID].finalized, "Previous round not finalized");
        require(rounds[latestRoundID].softDeadline < now, "Previous round still running");
        
        uint _rID = rounds.length++; // first round is 0
        GameRound storage rnd = rounds[_rID];
        latestRoundID = _rID;

        rnd.lastInvestor = msg.sender;
        rnd.price = STARTING_KEY_PRICE;
        rnd.hardDeadline = now + HARD_DEADLINE_DURATION;
        rnd.softDeadline = now + soft_deadline_duration;
        rnd.jackpot = jackpotSeed;
        jackpotSeed = 0; 

        _purchase(rnd, msg.value, _referer);
        emit RoundStarted(_rID, rnd.hardDeadline, now);
    }
    
    
    function buyKeys(address _referer) public payable notOnPause {
        require(msg.value >= minInvestment);
        if(rounds.length > 0) {
            GameRound storage rnd = rounds[latestRoundID];   
               
            _purchase(rnd, msg.value, _referer);            
        } else {
            revert("Not yet started");
        }
        
    }
    
    
    function _purchase(GameRound storage rnd, uint value, address referer) internal {
        require(rnd.softDeadline >= now, "After deadline!");
        require(value >= rnd.price/10, "Not enough Ether!");
        rnd.totalInvested = rnd.totalInvested.add(value);

        // Set the last investor (to win the jackpot after the deadline)
        if(value >= rnd.price)
            rnd.lastInvestor = msg.sender;
        
        
        _airDrop(rnd, value);
        

        _splitRevenue(rnd, value, referer);
        
        _updateReturns(msg.sender, rnd);
        
        uint newKeys = _issueKeys(rnd, msg.sender, value);


        uint timeIncreases = newKeys/WAD;// since 1 key is represented by 1 * 10^18, divide by 10^18
        // adjust soft deadline to new soft deadline
        uint newDeadline = rnd.softDeadline.add( timeIncreases.mul(TIME_PER_KEY));
        
        rnd.softDeadline = min(newDeadline, now + soft_deadline_duration);
        // If after hard deadline, double the price every price increase periods
        if(now > rnd.hardDeadline) {
            if(now > rnd.lastPriceIncreaseTime + PRICE_INCREASE_PERIOD) {
                rnd.price = rnd.price * 2;
                rnd.lastPriceIncreaseTime = now;
            }
        }
    }
    function _issueKeys(GameRound storage rnd, address _safeBreaker, uint value) internal returns(uint) {    
        if(rnd.safeBreakers[_safeBreaker].lastCumulativeReturnsPoints == 0) {
            rnd.safeBreakers[_safeBreaker].lastCumulativeReturnsPoints = rnd.cumulativeReturnsPoints;
        }    
        
        uint newKeys = wdiv(value, rnd.price);
        
        //bonuses:
        if(value >= 100 ether) {
            newKeys = newKeys.mul(2);//get double keys if you paid more than 100 ether
        } else if(value >= 10 ether) {
            newKeys = newKeys.add(newKeys/2);//50% bonus
        } else if(value >= 1 ether) {
            newKeys = newKeys.add(newKeys/3);//33% bonus
        } else if(value >= 100 finney) {
            newKeys = newKeys.add(newKeys/10);//10% bonus
        }

        rnd.safeBreakers[_safeBreaker].keys = rnd.safeBreakers[_safeBreaker].keys.add(newKeys);
        rnd.totalKeys = rnd.totalKeys.add(newKeys);
        emit KeysIssued(_safeBreaker, newKeys, now);
        return newKeys;
    }    
    function _updateReturns(address _safeBreaker, GameRound storage rnd) internal {
        if(rnd.safeBreakers[_safeBreaker].keys == 0) {
            return;
        }
        
        uint outstanding = _outstandingReturns(_safeBreaker, rnd);

        // if there are any returns, transfer them to the investor's vaults
        if (outstanding > 0) {
            vaults[_safeBreaker].totalReturns = vaults[_safeBreaker].totalReturns.add(outstanding);
        }

        rnd.safeBreakers[_safeBreaker].lastCumulativeReturnsPoints = rnd.cumulativeReturnsPoints;
    }
    function _outstandingReturns(address _safeBreaker, GameRound storage rnd) internal view returns(uint) {
        if(rnd.safeBreakers[_safeBreaker].keys == 0) {
            return 0;
        }
        // check if there've been new returns
        uint newReturns = rnd.cumulativeReturnsPoints.sub(
            rnd.safeBreakers[_safeBreaker].lastCumulativeReturnsPoints
            );

        uint outstanding = 0;
        if(newReturns != 0) { 
            // outstanding returns = (total new returns points * ivestor keys) / MULTIPLIER
            // The MULTIPLIER is used also at the point of returns disbursment
            outstanding = newReturns.mul(rnd.safeBreakers[_safeBreaker].keys) / MULTIPLIER;
        }

        return outstanding;
    }
    function _splitRevenue(GameRound storage rnd, uint value, address ref) internal {
        uint roundReturns; // how much to pay in dividends to round players
        

        if(ref != address(0x0)) {

            // only pay referrals for the first investment of each player
            if(
                (!m_referrals[msg.sender] && limitedReferralsMode == true)
                ||
                limitedReferralsMode == false
                ) {
            
            
                uint _referralEarning = m_refPercent.mul(value);
                unclaimedReturns = unclaimedReturns.add(_referralEarning);
                vaults[ref].totalReturns = vaults[ref].totalReturns.add(_referralEarning);
                vaults[ref].refReturns = vaults[ref].refReturns.add(_referralEarning);
                
                value = value.sub(_referralEarning);
                
                m_referrals[msg.sender] = true;
                
            }
        } else {
        }
        
        roundReturns = m_investorsPercent.mul(value); // 65%
        
        uint airdrop_value = m_airdropPercent.mul(value);
        
        uint jackpot_value = m_currentRoundJackpotPercent.mul(value); //15%
        
        uint dev_value = m_devPercent.mul(value);
        
        uint bankOfEth_profit = m_bankOfEthProfitPercent.mul(value);
        localBankOfEth.receiveExternalProfits.value(bankOfEth_profit)();
        
        // if this is the first purchase, roundReturns goes to jackpot (no one can claim these returns otherwise)
        if(rnd.totalKeys == 0) {
            rnd.jackpot = rnd.jackpot.add(roundReturns);
        } else {
            _disburseReturns(rnd, roundReturns);
        }
        
        rnd.airdropPot = rnd.airdropPot.add(airdrop_value);
        rnd.jackpot = rnd.jackpot.add(jackpot_value);
        
        devAddress.transfer(dev_value);
        
    }
    function _disburseReturns(GameRound storage rnd, uint value) internal {
        emit EthDistributed(value, now);
        unclaimedReturns = unclaimedReturns.add(value);// keep track of unclaimed returns
        // The returns points represent returns*MULTIPLIER/totalkeys (at the point of purchase)
        // This allows us to keep outstanding balances of keyholders when the total supply changes in real time
        if(rnd.totalKeys == 0) {
            //rnd.cumulativeReturnsPoints = mul(value, MULTIPLIER) / wdiv(value, rnd.price);
            rnd.cumulativeReturnsPoints = value.mul(MULTIPLIER) / wdiv(value, rnd.price);
        } else {
            rnd.cumulativeReturnsPoints = rnd.cumulativeReturnsPoints.add(
                value.mul(MULTIPLIER) / rnd.totalKeys
            );
        }
    }
    function _airDrop(GameRound storage rnd, uint value) internal {
        require(msg.sender == tx.origin, "Only Humans Allowed! (or scripts that don't use smart contracts)!");
        if(value > 100 finney) {
            /**
                Creates a random number from the last block hash and current timestamp.
                One could add more seemingly random data like the msg.sender, etc, but that doesn't 
                make it harder for a miner to manipulate the result in their favor (if they intended to).
             */
            uint chance = uint(keccak256(abi.encodePacked(blockhash(block.number - 1), now)));
            if(chance % 200 == 0) {// once in 200 times
                uint prize = rnd.airdropPot / 2;// win half of the pot, regardless of how much you paid
                rnd.airdropPot = rnd.airdropPot / 2;
                vaults[msg.sender].totalReturns = vaults[msg.sender].totalReturns.add(prize);
                unclaimedReturns = unclaimedReturns.add(prize);
                totalJackpotsWon += prize;
                emit AirdropWon(msg.sender, prize, now);
            }
        }
    }
    
    
    function _finalizeRound(GameRound storage rnd) internal {
        require(!rnd.finalized, "Already finalized!");
        require(rnd.softDeadline < now, "Round still running!");


        // Transfer jackpot to winner's vault
        vaults[rnd.lastInvestor].totalReturns = vaults[rnd.lastInvestor].totalReturns.add(rnd.jackpot);
        unclaimedReturns = unclaimedReturns.add(rnd.jackpot);
        
        emit JackpotWon(rnd.lastInvestor, rnd.jackpot, now);
        totalJackpotsWon += rnd.jackpot;
        // transfer the leftover to the next round's jackpot
        jackpotSeed = jackpotSeed.add( m_nextRoundSeedPercent.mul(rnd.totalInvested));
            
        //Empty the AD pot if it has a balance.
        jackpotSeed = jackpotSeed.add(rnd.airdropPot);
        
        //Send out dividends to token holders
        //uint _div;
        
        //_div = wmul(rnd.totalInvested, DIVIDENDS_FRACTION);            
        
        //token.disburseDividends.value(_div)();
        //totalDividendsPaid += _div;
        totalKeysSold += rnd.totalKeys;
        totalEarningsGenerated += m_currentRoundJackpotPercent.mul(rnd.totalInvested);

        rnd.finalized = true;
    }
    
    // Owner only functions    
    function p_setOwner(address _owner) public onlyOwner {
        owner = _owner;
    }
    function p_setDevAddress(address _devAddress) public onlyOwner {
        devAddress = _devAddress;
    }
    function p_setCurrentRoundJackpotPercent(uint num, uint dem) public onlyOwner {
        m_currentRoundJackpotPercent = Percent.percent(num, dem);
    }
    function p_setInvestorsPercent(uint num, uint dem) public onlyOwner {
        m_investorsPercent = Percent.percent(num, dem);
    }
    function p_setDevPercent(uint num, uint dem) public onlyOwner {
        m_devPercent = Percent.percent(num, dem);
    }
    function p_setNextRoundSeedPercent(uint num, uint dem) public onlyOwner {
        m_nextRoundSeedPercent = Percent.percent(num, dem);
    }
    function p_setAirdropPercent(uint num, uint dem) public onlyOwner {
        m_airdropPercent = Percent.percent(num, dem);
    }
    function p_setBankOfEthProfitPercent(uint num, uint dem) public onlyOwner {
        m_bankOfEthProfitPercent = Percent.percent(num, dem);
    }
    function p_setMinInvestment(uint _minInvestment) public onlyOwner {
        minInvestment = _minInvestment;
    }
    function p_setMaxInvestment(uint _maxInvestment) public onlyOwner {
        maxInvestment = _maxInvestment;
    }
    function p_setGamePaused(bool _gamePaused) public onlyOwner {
        gamePaused = _gamePaused;
    }
    function p_setRoundDuration(uint256 _roundDuration) public onlyOwner {
        roundDuration = _roundDuration;
    }
    function p_setBankOfEthAddress(address _bankOfEthAddress) public onlyOwner {
        bankOfEthAddress = _bankOfEthAddress;
        localBankOfEth = BankOfEth(bankOfEthAddress);
    }
    function p_setLimitedReferralsMode(bool _limitedReferralsMode) public onlyOwner {
        limitedReferralsMode = _limitedReferralsMode;
    }
    function p_setSoft_deadline_duration(uint _soft_deadline_duration) public onlyOwner {
        soft_deadline_duration = _soft_deadline_duration;
    }
    // Util functions
    function notZeroAndNotSender(address addr) internal view returns(bool) {
        return addr.notZero() && addr != msg.sender;
    }
    function min(uint x, uint y) internal pure returns (uint z) {
        return x <= y ? x : y;
    }
    function max(uint x, uint y) internal pure returns (uint z) {
        return x >= y ? x : y;
    }
    function wmul(uint x, uint y) internal pure returns (uint z) {
        z = x.mul(y).add(WAD/2) / WAD;
        //z = add(mul(x, y), WAD / 2) / WAD;
    }
    function rmul(uint x, uint y) internal pure returns (uint z) {
        z = x.mul(y).add(RAY/2) / RAY;
        //z = add(mul(x, y), RAY / 2) / RAY;
    }
    function wdiv(uint x, uint y) internal pure returns (uint z) {
        z = x.mul(WAD).add(y/2)/y;
        //z = add(mul(x, WAD), y / 2) / y;
    }
    function rdiv(uint x, uint y) internal pure returns (uint z) {
        z = x.mul(RAY).add(y/2)/y;
        //z = add(mul(x, RAY), y / 2) / y;
    }
    
    uint op;
    function gameOp() public {
        op++;
    }

}

Contract ABI
[{"constant":true,"inputs":[],"name":"maxInvestment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MULTIPLIER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unclaimedReturns","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_roundDuration","type":"uint256"}],"name":"p_setRoundDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalKeysSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_referer","type":"address"}],"name":"startNewRound","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_referer","type":"address"}],"name":"buyKeys","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"limitedReferralsMode","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"num","type":"uint256"},{"name":"dem","type":"uint256"}],"name":"p_setInvestorsPercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalEarningsGenerated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"},{"name":"roundID","type":"uint256"}],"name":"investorInfo","outputs":[{"name":"keys","type":"uint256"},{"name":"totalReturns","type":"uint256"},{"name":"referralReturns","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"soft_deadline_duration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minInvestment","type":"uint256"}],"name":"p_setMinInvestment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_limitedReferralsMode","type":"bool"}],"name":"p_setLimitedReferralsMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"roundID","type":"uint256"}],"name":"updateMyReturns","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"roundID","type":"uint256"}],"name":"roundInfo","outputs":[{"name":"leader","type":"address"},{"name":"price","type":"uint256"},{"name":"jackpot","type":"uint256"},{"name":"airdrop","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"totalInvested","type":"uint256"},{"name":"distributedReturns","type":"uint256"},{"name":"_hardDeadline","type":"uint256"},{"name":"_softDeadline","type":"uint256"},{"name":"finalized","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"},{"name":"roundID","type":"uint256"}],"name":"hasReturns","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawReturns","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalizeAndRestart","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalsInfo","outputs":[{"name":"totalReturns","type":"uint256"},{"name":"totalKeys","type":"uint256"},{"name":"totalJackpots","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_devAddress","type":"address"}],"name":"p_setDevAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"p_setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"jackpotSeed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"num","type":"uint256"},{"name":"dem","type":"uint256"}],"name":"p_setBankOfEthProfitPercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"num","type":"uint256"},{"name":"dem","type":"uint256"}],"name":"p_setNextRoundSeedPercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"num","type":"uint256"},{"name":"dem","type":"uint256"}],"name":"p_setAirdropPercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_maxInvestment","type":"uint256"}],"name":"p_setMaxInvestment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_soft_deadline_duration","type":"uint256"}],"name":"p_setSoft_deadline_duration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"gameOp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"num","type":"uint256"},{"name":"dem","type":"uint256"}],"name":"p_setCurrentRoundJackpotPercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minInvestment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"HARD_DEADLINE_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"reinvestReturns","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"},{"name":"roundID","type":"uint256"}],"name":"estimateReturns","outputs":[{"name":"totalReturns","type":"uint256"},{"name":"refReturns","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STARTING_KEY_PRICE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gamePaused","type":"bool"}],"name":"p_setGamePaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bankOfEthAddress","type":"address"}],"name":"p_setBankOfEthAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalizeLastRound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gamePaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"},{"name":"ref","type":"address"}],"name":"reinvestReturns","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TIME_PER_KEY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalJackpotsWon","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_referer","type":"address"}],"name":"finalizeAndRestart","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"num","type":"uint256"},{"name":"dem","type":"uint256"}],"name":"p_setDevPercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"latestRoundID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"roundDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PRICE_INCREASE_PERIOD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"keys","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"KeysIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"EthDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"by","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"ReturnsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"by","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"JackpotWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"by","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"AirdropWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"ID","type":"uint256"},{"indexed":false,"name":"hardDeadline","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RoundStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_num","type":"uint256"},{"indexed":false,"name":"_string","type":"string"}],"name":"debugLog","type":"event"}]

Contract Creation Code
60028054600160a060020a03191673d70c3f752feb69ecf8eb31e48b20a97d979e8e5e178155600f6080819052606460a081905260048290556005818155604160c081905260e08390526006556007829055600a61010081815261012084905260088290556009849055610140839052610160849052919055600b8290556101808490526101a0829052600c93909355600d81905560036101c08190526101e0829052600e8190559181905561024060405261020082905261022081905260109190915560115566038d7ea4c68000601555686c6b935b8bbd4000006016556201518060178190556018556019805461ffff191690911790553480156200010557600080fd5b506000805433600160a060020a031991821681178355600180548316909117815560025460038054600160a060020a03909216919093161790915560148054916200015391908301620001bf565b506014805460009081106200016457fe5b60009182526020822060138390556009600b909202019081018054600160a060020a0319163317905566038d7ea4c6800060078201554262278d0081016005830155601854016006820155601b829055600101555062000260565b815481835581811115620001ee57600b0281600b028360005260206000209182019101620001ee9190620001f3565b505050565b6200025d91905b8082111562000259576000808255600182018190556002820181905560038201819055600482018190556005820181905560068201819055600782018190556008820155600981018054600160a860020a0319169055600b01620001fa565b5090565b90565b61215a80620002706000396000f3006080604052600436106102395763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416622e13168114610245578063059f8b161461026c5780630d6c03fa1461028157806315067c4e146102965780631a00932b146102ae5780631f9f168e146102c3578063299e952f146102d757806338d18cd6146102eb5780633ba04463146103145780633bfc1b251461032f5780633d6859f2146103445780633d93d204146103865780633e1566011461039b57806340901b08146103b357806340c0ece3146103cd578063427f0b00146103e557806348afd1b3146104595780634c7ce18a1461047d578063536942b61461049257806357b168111461049a5780635ecff851146104af57806360979759146104d0578063619360df146104f157806361edfe6e1461050657806364070b6f1461052157806365dc128e1461053c5780636c4fe255146105575780637bc9eb8c1461056f57806383a6899314610587578063842e062f1461059c5780638ac2c680146105b75780639b079084146105cc5780639e93d0e4146105e1578063a2860050146105f9578063a2b9d85b14610636578063af77c4731461064b578063b8de85d814610665578063c24a967414610686578063c3de1ab91461069b578063c5c87db4146106b0578063d1adeabd146106d4578063d287e9e4146106e9578063dcacf19a146106fe578063eac472bf14610712578063f76339dc1461072d578063f7cb789a14610742578063f958b9ca14610757575b610243600061076c565b005b34801561025157600080fd5b5061025a610869565b60408051918252519081900360200190f35b34801561027857600080fd5b5061025a61086f565b34801561028d57600080fd5b5061025a61087f565b3480156102a257600080fd5b50610243600435610885565b3480156102ba57600080fd5b5061025a6108a1565b610243600160a060020a03600435166108a7565b610243600160a060020a036004351661076c565b3480156102f757600080fd5b50610300610a84565b604080519115158252519081900360200190f35b34801561032057600080fd5b50610243600435602435610a92565b34801561033b57600080fd5b5061025a610ac7565b34801561035057600080fd5b50610368600160a060020a0360043516602435610acd565b60408051938452602084019290925282820152519081900360600190f35b34801561039257600080fd5b5061025a610b29565b3480156103a757600080fd5b50610243600435610b2f565b3480156103bf57600080fd5b506102436004351515610b4b565b3480156103d957600080fd5b50610243600435610b7c565b3480156103f157600080fd5b506103fd600435610ba7565b60408051600160a060020a03909b168b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152151561012083015251908190036101400190f35b34801561046557600080fd5b50610300600160a060020a0360043516602435610c5e565b34801561048957600080fd5b50610243610caa565b610243610e3d565b3480156104a657600080fd5b50610368610e51565b3480156104bb57600080fd5b50610243600160a060020a0360043516610ec5565b3480156104dc57600080fd5b50610243600160a060020a0360043516610f0b565b3480156104fd57600080fd5b5061025a610f51565b34801561051257600080fd5b50610243600435602435610f57565b34801561052d57600080fd5b50610243600435602435610f8c565b34801561054857600080fd5b50610243600435602435610fc1565b34801561056357600080fd5b50610243600435610ff6565b34801561057b57600080fd5b50610243600435611012565b34801561059357600080fd5b5061024361102e565b3480156105a857600080fd5b50610243600435602435611039565b3480156105c357600080fd5b5061025a61106e565b3480156105d857600080fd5b5061025a611074565b3480156105ed57600080fd5b5061024360043561107b565b34801561060557600080fd5b5061061d600160a060020a0360043516602435611089565b6040805192835260208301919091528051918290030190f35b34801561064257600080fd5b5061025a61113b565b34801561065757600080fd5b506102436004351515611146565b34801561067157600080fd5b50610243600160a060020a0360043516611170565b34801561069257600080fd5b506102436111c3565b3480156106a757600080fd5b506103006111ef565b3480156106bc57600080fd5b50610243600435600160a060020a03602435166111f8565b3480156106e057600080fd5b5061025a611304565b3480156106f557600080fd5b5061025a61130a565b610243600160a060020a0360043516611310565b34801561071e57600080fd5b50610243600435602435611321565b34801561073957600080fd5b5061025a611356565b34801561074e57600080fd5b5061025a61135c565b34801561076357600080fd5b5061025a611362565b60195460009060ff16156107ca576040805160e560020a62461bcd02815260206004820152600b60248201527f47616d6520506175736564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6015543410156107d957600080fd5b601454600010156108155760146013548154811015156107f557fe5b90600052602060002090600b02019050610810813484611368565b610865565b6040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f742079657420737461727465640000000000000000000000000000000000604482015290519081900360640190fd5b5050565b60165481565b6b033b2e3c9fd0803ce800000081565b601c5481565b600054600160a060020a0316331461089c57600080fd5b601755565b601e5481565b60008060146013548154811015156108bb57fe5b90600052602060002090600b020160090160149054906101000a900460ff161515610930576040805160e560020a62461bcd02815260206004820152601c60248201527f50726576696f757320726f756e64206e6f742066696e616c697a656400000000604482015290519081900360640190fd5b42601460135481548110151561094257fe5b90600052602060002090600b0201600601541015156109ab576040805160e560020a62461bcd02815260206004820152601c60248201527f50726576696f757320726f756e64207374696c6c2072756e6e696e6700000000604482015290519081900360640190fd5b60148054906109bd9060018301612092565b91506014828154811015156109ce57fe5b60009182526020822060138590556009600b90920201908101805473ffffffffffffffffffffffffffffffffffffffff19163317905566038d7ea4c6800060078201554262278d0081016005830155601854016006820155601b80546001830155919091559050610a40813485611368565b600581015460408051918252426020830152805184927fa359b664a68acd8839e42112eb50eff3408165e15074fde89ddb58a0db2e691d92908290030190a2505050565b601954610100900460ff1681565b600054600160a060020a03163314610aa957600080fd5b60408051808201909152828152602001819052600691909155600755565b601f5481565b600080600080601485815481101515610ae257fe5b60009182526020808320600160a060020a038a168452600a600b90930201918201905260409091206001015494509050610b1c8686611089565b9497909650939450505050565b60185481565b600054600160a060020a03163314610b4657600080fd5b601555565b600054600160a060020a03163314610b6257600080fd5b601980549115156101000261ff0019909216919091179055565b6000601482815481101515610b8d57fe5b90600052602060002090600b020190506108653382611516565b600080600080600080600080600080600060148c815481101515610bc757fe5b90600052602060002090600b020190508060090160009054906101000a9004600160a060020a03169a508060070154995080600101549850806002015497508060030154965080600001549550610c2c816000015460046115bc90919063ffffffff16565b945080600501549350806006015492508060090160149054906101000a900460ff169150509193959799509193959799565b600080601483815481101515610c7057fe5b60009182526020808320600160a060020a0388168452600a600b909302019182019052604090912054600482015411925090505092915050565b60008060006014601354815481101515610cc057fe5b90600052602060002090600b0201925060016014805490501115610d2057610ced33600160135403610c5e565b15610d20576014600160135403815481101515610d0657fe5b90600052602060002090600b02019150610d203383611516565b610d2a3384611516565b5033600090815260126020526040812054908111610d92576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f7468696e6720746f20776974686472617721000000000000000000000000604482015290519081900360640190fd5b601c54610da5908263ffffffff6115e916565b601c553360008181526012602090815260408083208381556001018390556004870154600a8801909252808320919091555183156108fc0291849190818181858888f19350505050158015610dfe573d6000803e3d6000fd5b5060408051828152426020820152815133927f9c966b5bc18019d098e148b90be05c3898ff5bfb9bb936a24e5659fbab8f16d0928290030190a2505050565b610e456111c3565b610e4f60006108a7565b565b6000806000806014601354815481101515610e6857fe5b90600052602060002090600b020190504281600601541115610eaf576003810154601e54825491019350610ea49060049063ffffffff6115bc16565b601f54019350610eba565b601e549250601f5493505b601d54915050909192565b600054600160a060020a03163314610edc57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610f2257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601b5481565b600054600160a060020a03163314610f6e57600080fd5b60408051808201909152828152602001819052600e91909155600f55565b600054600160a060020a03163314610fa357600080fd5b60408051808201909152828152602001819052600a91909155600b55565b600054600160a060020a03163314610fd857600080fd5b60408051808201909152828152602001819052600c91909155600d55565b600054600160a060020a0316331461100d57600080fd5b601655565b600054600160a060020a0316331461102957600080fd5b601855565b602080546001019055565b600054600160a060020a0316331461105057600080fd5b60408051808201909152828152602001819052600491909155600555565b60155481565b62278d0081565b6110868160006111f8565b50565b60008060008060006014868154811015156110a057fe5b90600052602060002090600b02019250600160148054905011156110ff576110cb8760018803610c5e565b156110ff576014805460001988019081106110e257fe5b90600052602060002090600b020190506110fc87826115fb565b91505b61110987846115fb565b600160a060020a0390971660009081526012602052604090208054600190910154979092019190910196945050505050565b66038d7ea4c6800081565b600054600160a060020a0316331461115d57600080fd5b6019805460ff1916911515919091179055565b600054600160a060020a0316331461118757600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03938416179182905560038054929093169116179055565b600060146013548154811015156111d657fe5b90600052602060002090600b02019050611086816116bd565b60195460ff1681565b6000601460135481548110151561120b57fe5b90600052602060002090600b020190506112253382611516565b3360009081526012602052604090205483111561128c576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e2774207370656e64207768617420796f7520646f6e2774206861766500604482015290519081900360640190fd5b336000908152601260205260409020546112ac908463ffffffff6115e916565b336000908152601260205260409020818155600101546112cb916118fd565b33600090815260126020526040902060010155601c546112f1908463ffffffff6115e916565b601c556112ff818484611368565b505050565b61012c81565b601d5481565b6113186111c3565b611086816108a7565b600054600160a060020a0316331461133857600080fd5b60408051808201909152828152602001819052600891909155600955565b60135481565b60175481565b610e1081565b6000806000428660060154101515156113cb576040805160e560020a62461bcd02815260206004820152600f60248201527f416674657220646561646c696e65210000000000000000000000000000000000604482015290519081900360640190fd5b6007860154600a900485101561142b576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f75676820457468657221000000000000000000000000000000604482015290519081900360640190fd5b855461143d908663ffffffff61191616565b86556007860154851061146c5760098601805473ffffffffffffffffffffffffffffffffffffffff1916331790555b6114768686611925565b611481868686611b10565b61148b3387611516565b611496863387611dcc565b9250670de0b6b3a7640000830491506114cb6114ba8361012c63ffffffff611f5416565b60068801549063ffffffff61191616565b90506114db8160185442016118fd565b6006870155600586015442111561150e57610e1086600801540142111561150e5760078601805460020290554260088701555b505050505050565b600160a060020a0382166000908152600a82016020526040812060010154151561153f576112ff565b61154983836115fb565b9050600081111561159757600160a060020a03831660009081526012602052604090205461157d908263ffffffff61191616565b600160a060020a0384166000908152601260205260409020555b6004820154600160a060020a0384166000908152600a84016020526040902055505050565b60008115156115cd575060006115e3565b6001830154835483028115156115df57fe5b0490505b92915050565b6000828211156115f557fe5b50900390565b600160a060020a0382166000908152600a8201602052604081206001015481908190151561162c57600092506116b5565b600160a060020a0385166000908152600a85016020526040902054600485015461165b9163ffffffff6115e916565b91506000905081156116b157600160a060020a0385166000908152600a850160205260409020600101546b033b2e3c9fd0803ce8000000906116a490849063ffffffff611f5416565b8115156116ad57fe5b0490505b8092505b505092915050565b600981015474010000000000000000000000000000000000000000900460ff1615611732576040805160e560020a62461bcd02815260206004820152601260248201527f416c72656164792066696e616c697a6564210000000000000000000000000000604482015290519081900360640190fd5b6006810154421161178d576040805160e560020a62461bcd02815260206004820152601460248201527f526f756e64207374696c6c2072756e6e696e6721000000000000000000000000604482015290519081900360640190fd5b60018101546009820154600160a060020a03166000908152601260205260409020546117be9163ffffffff61191616565b6009820154600160a060020a03166000908152601260205260409020556001810154601c546117f29163ffffffff61191616565b601c556009810154600182015460408051600160a060020a03909316835260208301919091524282820152517f9bf6779d4fdb5218dc61e8e6fe8a97e1acf4e957496f671df1d2c247c7b17e989181900360600190a16001810154601d80549091019055805461187d9061186e90600a9063ffffffff6115bc16565b601b549063ffffffff61191616565b601b8190556002820154611897919063ffffffff61191616565b601b556003810154601e8054909101905580546118bc9060049063ffffffff6115bc16565b601f80549091019055600901805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b60008183111561190d578161190f565b825b9392505050565b60008282018381101561190f57fe5b6000803332146119cb576040805160e560020a62461bcd02815260206004820152604160248201527f4f6e6c792048756d616e7320416c6c6f7765642120286f72207363726970747360448201527f207468617420646f6e27742075736520736d61727420636f6e7472616374732960648201527f2100000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b67016345785d8a0000831115611b0a57604080516000194301406020808301919091524282840152825180830384018152606090920192839052815191929182918401908083835b60208310611a325780518252601f199092019160209182019101611a13565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120945060c89250849150611a6b9050565b061515611b0a575060028381018054919091049081905533600090815260126020526040902054611a9c9082611916565b33600090815260126020526040902055601c54611abf908263ffffffff61191616565b601c55601d8054820190556040805133815260208101839052428183015290517fae2c353ed7750c25ce8f00fe577ab43f61e9556ec95c36aeb25f58413e51a73b9181900360600190a15b50505050565b60008080808080600160a060020a03871615611c3657336000908152601a602052604090205460ff16158015611b53575060195460ff6101009091041615156001145b80611b665750601954610100900460ff16155b15611c3657611b7c60108963ffffffff6115bc16565b601c54909550611b92908663ffffffff61191616565b601c55600160a060020a038716600090815260126020526040902054611bbe908663ffffffff61191616565b600160a060020a038816600090815260126020526040902090815560010154611bed908663ffffffff61191616565b600160a060020a038816600090815260126020526040902060010155611c19888663ffffffff6115e916565b336000908152601a60205260409020805460ff1916600117905597505b611c4760068963ffffffff6115bc16565b9550611c5a600c8963ffffffff6115bc16565b9350611c6d60048963ffffffff6115bc16565b9250611c8060088963ffffffff6115bc16565b9150611c93600e8963ffffffff6115bc16565b9050600360009054906101000a9004600160a060020a0316600160a060020a031663b6055167826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b158015611d0157600080fd5b505af1158015611d15573d6000803e3d6000fd5b5050505050886003015460001415611d46576001890154611d3c908763ffffffff61191616565b60018a0155611d50565b611d508987611f78565b6002890154611d65908563ffffffff61191616565b60028a01556001890154611d7f908463ffffffff61191616565b6001808b019190915554604051600160a060020a039091169083156108fc029084906000818181858888f19350505050158015611dc0573d6000803e3d6000fd5b50505050505050505050565b600160a060020a0382166000908152600a8401602052604081205481901515611e10576004850154600160a060020a0385166000908152600a870160205260409020555b611e1e83866007015461205b565b905068056bc75e2d631000008310611e4857611e4181600263ffffffff611f5416565b9050611ea4565b678ac7230489e800008310611e6d57611e416002825b8391900463ffffffff61191616565b670de0b6b3a76400008310611e8757611e41600382611e5e565b67016345785d8a00008310611ea457611ea1600a82611e5e565b90505b600160a060020a0384166000908152600a86016020526040902060010154611ed2908263ffffffff61191616565b600160a060020a0385166000908152600a870160205260409020600101556003850154611f05908263ffffffff61191616565b6003860155604080518281524260208201528151600160a060020a038716927f6a690ae633aa0c665ee22a899b3db4af4dcef93adc1c3c66dc2da9f66adb1e40928290030190a2949350505050565b6000828202831580611f705750828482811515611f6d57fe5b04145b151561190f57fe5b6040805182815242602082015281517f70379dac3a4a51835511cfc03381e19715dc6dd6ae8667b1094f04314343cbbf929181900390910190a1601c54611fc5908263ffffffff61191616565b601c556003820154151561201157611fe181836007015461205b565b611ffd826b033b2e3c9fd0803ce800000063ffffffff611f5416565b81151561200657fe5b046004830155610865565b600382015461205290612036836b033b2e3c9fd0803ce800000063ffffffff611f5416565b81151561203f57fe5b600485015491900463ffffffff61191616565b60048301555050565b6000816120896002820461207d86670de0b6b3a764000063ffffffff611f5416565b9063ffffffff61191616565b8115156115df57fe5b8154818355818111156112ff576000838152602090206112ff9161212b91600b9182028101918502015b8082111561212757600080825560018201819055600282018190556003820181905560048201819055600582018190556006820181905560078201819055600882015560098101805474ffffffffffffffffffffffffffffffffffffffffff19169055600b016120bc565b5090565b905600a165627a7a72305820e557fa958935f5b12bde1fce4c2ed6f9115108977045a01d97841de6305aee180029


   Swarm Source:
bzzr://e557fa958935f5b12bde1fce4c2ed6f9115108977045a01d97841de6305aee18
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.