Overview
Balance: 0.03 Ether
Ether Value: $2.83 (@ $94.39/ETH)
Transactions: 100580 txns
Misc:
Address Watch: Add To Watch List
 Latest 25 transactions from a total of 100580 transactions

TxHash Age From To Value [TxFee]
0x2a49559b029927e7a7af850b6eac47a23c98488e21ed4c7ff006715622b0cc167 days 23 hrs ago0x358e25cc4ab8d156bdb37f6ef7a12e2f03a7582d  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.00042544
0x17aed66d611cddcd990a6bba5c0574ec740685ebe6cd26154cd1a65bc3fbe1048 days 7 hrs ago0xbca2f0410df5347012120ba32ce18a13a6e1a354  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620.03 Ether0.00008893248
0x63e21f4dca3da739360e8bd098657a45398480ac408081bcee909b85f93672468 days 12 hrs ago0x08a6268b1362b02f6473ec22fac93795353f5173  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.0001134
0x72bc298e89c3155363ce43cb80b8cd1870ae9e5e8abb496ddcd1ef6f4da8da048 days 12 hrs ago0x08a6268b1362b02f6473ec22fac93795353f5173  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000164556
0x70ca42fbdbaaa0662057b7499d61f8a9964c5a358b7dccaa2e7e81c82099cded8 days 12 hrs ago0x08a6268b1362b02f6473ec22fac93795353f5173  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000115684
0xd4ae6bb977b6761c3bbed7101058db357afdedeabbc2d7331cc35df3a07dd4008 days 12 hrs ago0x08a6268b1362b02f6473ec22fac93795353f5173  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000414216
0x9217bb24c1a9fa991d6bc81dae882f06f46e8e8efbd0913cbf47c04f6a8376ff8 days 13 hrs ago0x01fd2b8c9c81044d37352704f1ce9ada7e1b6ae2  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000357532807
0x015121bdc11f1554d6bc1bff7aeb9c26d869af34e9b88b3ec391eddad618eb588 days 13 hrs ago0x01fd2b8c9c81044d37352704f1ce9ada7e1b6ae2  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000357297285
0x8412fe0d459ba2e5461fdf3921258be312f1f1b395e0f28f1398f854b4fc61f38 days 13 hrs ago0x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620.25 Ether0.0007613208
0x45c22dedd971b566fddf30e2ce408aed0f28b339b93f39c51d6113c1d05b6a3d8 days 13 hrs ago0x01fd2b8c9c81044d37352704f1ce9ada7e1b6ae2  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000357532807
0xcf7a6522f91b76c85b9deef2af3dc370664a69b60bdc3dfeaa1bfa4ff458daf18 days 13 hrs ago0x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620.1 Ether0.0007617144
0x43565419b6ec58bb435995b99a9dab37c2ceba4d8943b9e60945b6432cd006198 days 13 hrs ago0x391347b2025732528e80b7fae4128d2bb031a9d8  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620.1 Ether0.0007609272
0xa88f55e71fe604ce45d6c46569d9f8313ff71c54631e87919ba49db44fb0b8c58 days 13 hrs ago0x01fd2b8c9c81044d37352704f1ce9ada7e1b6ae2  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.00035927
0x595ea1d16d11b4221321c814994051e05992d9a69b9bbda62cbb20ef276700238 days 13 hrs ago0x01fd2b8c9c81044d37352704f1ce9ada7e1b6ae2  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.00036409
0xf37c4258cbd408078fd5c129f54bd34ea16ebe9385ea0b3f35fac80c95464f0e8 days 13 hrs ago0x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620.05 Ether0.0007605459
0x8bcbcc69b9cf6f63cf2965e8659ad12f229112f0c65beeeb618cd62c42a8cf9d8 days 13 hrs ago0x391347b2025732528e80b7fae4128d2bb031a9d8  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620.3 Ether0.0007864856
0xa3a84d847e92c20d39f48161f287351254f57e8e61e862a8a12092a4c93771028 days 13 hrs ago0x01fd2b8c9c81044d37352704f1ce9ada7e1b6ae2  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000357532807
0xe91cc03078bed344ebbd9e5b7706ec8e462f2a7f1a0dfe49c17343956ceb61b98 days 13 hrs ago0x01fd2b8c9c81044d37352704f1ce9ada7e1b6ae2  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000357297285
0xd65ffe45fa6da8b424115950dae880c64e310722cf5ce818e8a0acda8ba4bdc58 days 13 hrs ago0x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620.5 Ether0.0007365624
0x0e84ecae232ab9c968b5cb277f21987ce629f0b32e3f701e6d643773ab2688e88 days 13 hrs ago0x391347b2025732528e80b7fae4128d2bb031a9d8  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620.2 Ether0.0007369432
0xc7b2c4ebcfe93d06f698c766125fe9bb6717cc0dd2c8435318bbdcd92ed006d98 days 13 hrs ago0x01fd2b8c9c81044d37352704f1ce9ada7e1b6ae2  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000352791665
0x0cc8319ccca5ec298a79d12186daf552fc0076538ab3baad7279103a90c9c6ed8 days 13 hrs ago0x01fd2b8c9c81044d37352704f1ce9ada7e1b6ae2  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000353179679
0x2f895732776b9ba038c1fcbbc627342a4d867abb00d81845cf3c57bfab205cf98 days 13 hrs ago0x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620.5 Ether0.0013809944
0xd215119fa1d8846caf66a8aa41d334487c51f64485411e32316c3da10dc8e9f58 days 13 hrs ago0x01fd2b8c9c81044d37352704f1ce9ada7e1b6ae2  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620 Ether0.000353179679
0x4ec7c87ab444d37ca63accc36df444136d95dd1c9353c92a1813e1baceefbdab8 days 13 hrs ago0x391347b2025732528e80b7fae4128d2bb031a9d8  IN   0x0be3e6e3d9e99036ccce4fd0b692016de860aa620.2 Ether0.0012323672
[ 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
0x72bc298e89c3155363ce43cb80b8cd1870ae9e5e8abb496ddcd1ef6f4da8da0468593078 days 12 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x08a6268b1362b02f6473ec22fac93795353f517310.428014211932092605 Ether
0xd4ae6bb977b6761c3bbed7101058db357afdedeabbc2d7331cc35df3a07dd40068591818 days 12 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x08a6268b1362b02f6473ec22fac93795353f517340 Ether
0x9217bb24c1a9fa991d6bc81dae882f06f46e8e8efbd0913cbf47c04f6a8376ff68591608 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab0.5547375 Ether
0x015121bdc11f1554d6bc1bff7aeb9c26d869af34e9b88b3ec391eddad618eb5868591568 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab1 wei
0x45c22dedd971b566fddf30e2ce408aed0f28b339b93f39c51d6113c1d05b6a3d68591548 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d80.14703 Ether
0xa88f55e71fe604ce45d6c46569d9f8313ff71c54631e87919ba49db44fb0b8c568591508 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab1 wei
0x595ea1d16d11b4221321c814994051e05992d9a69b9bbda62cbb20ef2767002368591508 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d81 wei
0xa3a84d847e92c20d39f48161f287351254f57e8e61e862a8a12092a4c937710268591428 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab0.88938 Ether
0xe91cc03078bed344ebbd9e5b7706ec8e462f2a7f1a0dfe49c17343956ceb61b968591428 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d81 wei
0xc7b2c4ebcfe93d06f698c766125fe9bb6717cc0dd2c8435318bbdcd92ed006d968591368 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab1.111725 Ether
0x0cc8319ccca5ec298a79d12186daf552fc0076538ab3baad7279103a90c9c6ed68591348 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d81 wei
0xd215119fa1d8846caf66a8aa41d334487c51f64485411e32316c3da10dc8e9f568591318 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab1 wei
0xa12a8f5a516dedeb7e937ccc9252bf8903a4266f20ac644983d334b044a9d6e968591298 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d80.354672 Ether
0x14ac6bd4c9c2e303994cf9e03c18963a6e18104baf17afb269eca29e3b7de60968591268 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab1 wei
0x56a911974e2de6309c30d3a33aed81a7261f304bd1340a2b6e007662f70b2f0468591228 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab1.33497 Ether
0x0f9c01618b4fa2b8f1b7c3c88a8c131f17b3ac0659effcc3d23fb5f48c3a41bf68591198 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d81 wei
0x8bb98f5dcf56c1d19df816389459599660035e10250642241ef4427a16af80fb68591198 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d80.354672 Ether
0x91e43368da314862e8cbea8bdd2a8844812e2a80c47f373e4028364175e7e55f68591168 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x5f0fef30fe87a6276066c4b1a539c0dd9544d4ab1 wei
0xa68ffa5f3ded72b23d619aafdd312d781a4fe70246670c5fc16d5f58884ae71768591168 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d81 wei
0x0ec1978cb068c4306ebc6bd46d3be31baef5021308ba80f13a25e77ead41ea1b68591138 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d81 wei
0xc7ef7cb2b6e4d99ecb9f540b3a43131096882ac5e72fcbc9a69fc686e1ac0f4368591128 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d80.354672 Ether
0x02c0a4591d33ef99ba9137ce4f30d35bb277b826fae035c9a50ec45ea68c625c68591098 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d80.354672 Ether
0x666733ec3ca91982d2a4bff03be4a33a96b64c9afd7011aaec53593666e6aefd68591078 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d81 wei
0x9cd84fe181c039bf8567d603144d381668c772265efa6eb764051736fad6904168591038 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x391347b2025732528e80b7fae4128d2bb031a9d80.176436 Ether
0x22969883e579eea5db59889b2d9928db384cc2cad21cc055a7ad364943f560d968589918 days 13 hrs ago0x0be3e6e3d9e99036ccce4fd0b692016de860aa620x3b09ab1e342545f5b4e3d1d85815409e36109e131.513206 Ether
[ Download CSV Export  ] 
Contract Self Destruct Called At TxHash 0x72bc298e89c3155363ce43cb80b8cd1870ae9e5e8abb496ddcd1ef6f4da8da04

Contract Source Code Verified (Exact Match)
Contract Name: FckDice
Compiler Text: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.25;


contract FckDice {
    /// *** Constants section

    // Each bet is deducted 0.98% in favour of the house, but no less than some minimum.
    // The lower bound is dictated by gas costs of the settleBet transaction, providing
    // headroom for up to 10 Gwei prices.
    uint public HOUSE_EDGE_OF_TEN_THOUSAND = 98;
    uint public HOUSE_EDGE_MINIMUM_AMOUNT = 0.0003 ether;

    // Bets lower than this amount do not participate in jackpot rolls (and are
    // not deducted JACKPOT_FEE).
    uint public MIN_JACKPOT_BET = 0.1 ether;

    // Chance to win jackpot (currently 0.1%) and fee deducted into jackpot fund.
    uint public JACKPOT_MODULO = 1000;
    uint public JACKPOT_FEE = 0.001 ether;

    // There is minimum and maximum bets.
    uint constant MIN_BET = 0.01 ether;
    uint constant MAX_AMOUNT = 300000 ether;

    // Modulo is a number of equiprobable outcomes in a game:
    //  - 2 for coin flip
    //  - 6 for dice
    //  - 6*6 = 36 for double dice
    //  - 100 for etheroll
    //  - 37 for roulette
    //  etc.
    // It's called so because 256-bit entropy is treated like a huge integer and
    // the remainder of its division by modulo is considered bet outcome.
    uint constant MAX_MODULO = 255;

    // For modulos below this threshold rolls are checked against a bit mask,
    // thus allowing betting on any combination of outcomes. For example, given
    // modulo 6 for dice, 101000 mask (base-2, big endian) means betting on
    // 4 and 6; for games with modulos higher than threshold (Etheroll), a simple
    // limit is used, allowing betting on any outcome in [0, N) range.
    //
    // The specific value is dictated by the fact that 256-bit intermediate
    // multiplication result allows implementing population count efficiently
    // for numbers that are up to 42 bits, and 40 is the highest multiple of
    // eight below 42.
    uint constant MAX_MASK_MODULO = 40;

    // This is a check on bet mask overflow.
    uint constant MAX_BET_MASK = 2 ** (MAX_MASK_MODULO * 6);

    // EVM BLOCKHASH opcode can query no further than 256 blocks into the
    // past. Given that settleBet uses block hash of placeBet as one of
    // complementary entropy sources, we cannot process bets older than this
    // threshold. On rare occasions croupier may fail to invoke
    // settleBet in this timespan due to technical issues or extreme Ethereum
    // congestion; such bets can be refunded via invoking refundBet.
    uint constant BET_EXPIRATION_BLOCKS = 250;

    // Some deliberately invalid address to initialize the secret signer with.
    // Forces maintainers to invoke setSecretSigner before processing any bets.
    // address constant DUMMY_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

    // Standard contract ownership transfer.
    address public owner1;
    address public owner2;
    //    address private nextOwner;

    // Adjustable max bet profit. Used to cap bets against dynamic odds.
    uint public maxProfit;

    // The address corresponding to a private key used to sign placeBet commits.
    address public secretSigner;

    // Accumulated jackpot fund.
    uint128 public jackpotSize;

    // Funds that are locked in potentially winning bets. Prevents contract from
    // committing to bets it cannot pay out.
    uint128 public lockedInBets;

    // A structure representing a single bet.
    struct Bet {
        // Wager amount in wei.
        uint amount;
        // Modulo of a game.
        uint8 modulo;
        // Number of winning outcomes, used to compute winning payment (* modulo/rollUnder),
        // and used instead of mask for games with modulo > MAX_MASK_MODULO.
        uint8 rollUnder;
        // Block number of placeBet tx.
        uint40 placeBlockNumber;
        // Bit mask representing winning bet outcomes (see MAX_MASK_MODULO comment).
        uint240 mask;
        // Address of a gambler, used to pay out winning bets.
        address gambler;
    }

    // Mapping from commits to all currently active & processed bets.
    mapping(uint => Bet) bets;

    // Croupier account.
    address public croupier;

    // Events that are issued to make statistic recovery easier.
    event FailedPayment(address indexed beneficiary, uint amount);
    event Payment(address indexed beneficiary, uint amount);
    event JackpotPayment(address indexed beneficiary, uint amount);

    // This event is emitted in placeBet to record commit in the logs.
    event Commit(uint commit);

    // Constructor.
    constructor (address _owner1, address _owner2,
        address _secretSigner, address _croupier, uint _maxProfit
    ) public payable {
        owner1 = _owner1;
        owner2 = _owner2;
        secretSigner = _secretSigner;
        croupier = _croupier;
        require(_maxProfit < MAX_AMOUNT, "maxProfit should be a sane number.");
        maxProfit = _maxProfit;
    }

    // Standard modifier on methods invokable only by contract owner.
    modifier onlyOwner {
        require(msg.sender == owner1 || msg.sender == owner2, "OnlyOwner methods called by non-owner.");
        _;
    }

    // Standard modifier on methods invokable only by contract owner.
    modifier onlyCroupier {
        require(msg.sender == croupier, "OnlyCroupier methods called by non-croupier.");
        _;
    }

    //    // Standard contract ownership transfer implementation,
    //    function approveNextOwner(address _nextOwner) external onlyOwner {
    //        require(_nextOwner != owner, "Cannot approve current owner.");
    //        nextOwner = _nextOwner;
    //    }
    //
    //    function acceptNextOwner() external {
    //        require(msg.sender == nextOwner, "Can only accept preapproved new owner.");
    //        owner = nextOwner;
    //    }

    // Fallback function deliberately left empty. It's primary use case
    // is to top up the bank roll.
    function() public payable {
    }

    function setOwner1(address o) external onlyOwner {
        require(o != address(0));
        require(o != owner1);
        require(o != owner2);
        owner1 = o;
    }

    function setOwner2(address o) external onlyOwner {
        require(o != address(0));
        require(o != owner1);
        require(o != owner2);
        owner2 = o;
    }

    // See comment for "secretSigner" variable.
    function setSecretSigner(address newSecretSigner) external onlyOwner {
        secretSigner = newSecretSigner;
    }

    // Change the croupier address.
    function setCroupier(address newCroupier) external onlyOwner {
        croupier = newCroupier;
    }

    // Change max bet reward. Setting this to zero effectively disables betting.
    function setMaxProfit(uint _maxProfit) public onlyOwner {
        require(_maxProfit < MAX_AMOUNT, "maxProfit should be a sane number.");
        maxProfit = _maxProfit;
    }

    // This function is used to bump up the jackpot fund. Cannot be used to lower it.
    function increaseJackpot(uint increaseAmount) external onlyOwner {
        require(increaseAmount <= address(this).balance, "Increase amount larger than balance.");
        require(jackpotSize + lockedInBets + increaseAmount <= address(this).balance, "Not enough funds.");
        jackpotSize += uint128(increaseAmount);
    }

    // Funds withdrawal to cover costs of croupier operation.
    function withdrawFunds(address beneficiary, uint withdrawAmount) external onlyOwner {
        require(withdrawAmount <= address(this).balance, "Increase amount larger than balance.");
        require(jackpotSize + lockedInBets + withdrawAmount <= address(this).balance, "Not enough funds.");
        sendFunds(beneficiary, withdrawAmount, withdrawAmount);
    }

    // Contract may be destroyed only when there are no ongoing bets,
    // either settled or refunded. All funds are transferred to contract owner.
    function kill() external onlyOwner {
        require(lockedInBets == 0, "All bets should be processed (settled or refunded) before self-destruct.");
        selfdestruct(owner1);
    }

    function getBetInfo(uint commit) external view returns (uint amount, uint8 modulo, uint8 rollUnder, uint40 placeBlockNumber, uint240 mask, address gambler) {
        Bet storage bet = bets[commit];
        amount = bet.amount;
        modulo = bet.modulo;
        rollUnder = bet.rollUnder;
        placeBlockNumber = bet.placeBlockNumber;
        mask = bet.mask;
        gambler = bet.gambler;
    }

    /// *** Betting logic

    // Bet states:
    //  amount == 0 && gambler == 0 - 'clean' (can place a bet)
    //  amount != 0 && gambler != 0 - 'active' (can be settled or refunded)
    //  amount == 0 && gambler != 0 - 'processed' (can clean storage)
    //
    //  NOTE: Storage cleaning is not implemented in this contract version; it will be added
    //        with the next upgrade to prevent polluting Ethereum state with expired bets.

    // Bet placing transaction - issued by the player.
    //  betMask         - bet outcomes bit mask for modulo <= MAX_MASK_MODULO,
    //                    [0, betMask) for larger modulos.
    //  modulo          - game modulo.
    //  commitLastBlock - number of the maximum block where "commit" is still considered valid.
    //  commit          - Keccak256 hash of some secret "reveal" random number, to be supplied
    //                    by the croupier bot in the settleBet transaction. Supplying
    //                    "commit" ensures that "reveal" cannot be changed behind the scenes
    //                    after placeBet have been mined.
    //  r, s            - components of ECDSA signature of (commitLastBlock, commit). v is
    //                    guaranteed to always equal 27.
    //
    // Commit, being essentially random 256-bit number, is used as a unique bet identifier in
    // the 'bets' mapping.
    //
    // Commits are signed with a block limit to ensure that they are used at most once - otherwise
    // it would be possible for a miner to place a bet with a known commit/reveal pair and tamper
    // with the blockhash. Croupier guarantees that commitLastBlock will always be not greater than
    // placeBet block number plus BET_EXPIRATION_BLOCKS. See whitepaper for details.
    function placeBet(uint betMask, uint modulo, uint commitLastBlock, uint commit, bytes32 r, bytes32 s) external payable {
        // Check that the bet is in 'clean' state.
        Bet storage bet = bets[commit];
        require(bet.gambler == address(0), "Bet should be in a 'clean' state.");

        // Validate input data ranges.
        uint amount = msg.value;
        require(modulo > 1 && modulo <= MAX_MODULO, "Modulo should be within range.");
        require(amount >= MIN_BET && amount <= MAX_AMOUNT, "Amount should be within range.");
        require(betMask > 0 && betMask < MAX_BET_MASK, "Mask should be within range.");

        // Check that commit is valid - it has not expired and its signature is valid.
        require(block.number <= commitLastBlock, "Commit has expired.");
        bytes32 signatureHash = keccak256(abi.encodePacked(commitLastBlock, commit));
        require(secretSigner == ecrecover(signatureHash, 27, r, s), "ECDSA signature is not valid.");

        uint rollUnder;
        uint mask;

        if (modulo <= MAX_MASK_MODULO) {
            // Small modulo games specify bet outcomes via bit mask.
            // rollUnder is a number of 1 bits in this mask (population count).
            // This magic looking formula is an efficient way to compute population
            // count on EVM for numbers below 2**40.
            rollUnder = ((betMask * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO;
            mask = betMask;
        } else if (modulo <= MAX_MASK_MODULO * 2) {
            rollUnder = getRollUnder(betMask, 2);
            mask = betMask;
        } else if (modulo == 100) {
            require(betMask > 0 && betMask <= modulo, "High modulo range, betMask larger than modulo.");
            rollUnder = betMask;
        } else if (modulo <= MAX_MASK_MODULO * 3) {
            rollUnder = getRollUnder(betMask, 3);
            mask = betMask;
        } else if (modulo <= MAX_MASK_MODULO * 4) {
            rollUnder = getRollUnder(betMask, 4);
            mask = betMask;
        } else if (modulo <= MAX_MASK_MODULO * 5) {
            rollUnder = getRollUnder(betMask, 5);
            mask = betMask;
        } else if (modulo <= MAX_MASK_MODULO * 6) {
            rollUnder = getRollUnder(betMask, 6);
            mask = betMask;
        } else {
            // Larger modulos specify the right edge of half-open interval of
            // winning bet outcomes.
            require(betMask > 0 && betMask <= modulo, "High modulo range, betMask larger than modulo.");
            rollUnder = betMask;
        }

        // Winning amount and jackpot increase.
        uint possibleWinAmount;
        uint jackpotFee;

        //        emit DebugUint("rollUnder", rollUnder);
        (possibleWinAmount, jackpotFee) = getDiceWinAmount(amount, modulo, rollUnder);

        // Enforce max profit limit.
        require(possibleWinAmount <= amount + maxProfit, "maxProfit limit violation.");

        // Lock funds.
        lockedInBets += uint128(possibleWinAmount);
        jackpotSize += uint128(jackpotFee);

        // Check whether contract has enough funds to process this bet.
        require(jackpotSize + lockedInBets <= address(this).balance, "Cannot afford to lose this bet.");

        // Record commit in logs.
        emit Commit(commit);

        // Store bet parameters on blockchain.
        bet.amount = amount;
        bet.modulo = uint8(modulo);
        bet.rollUnder = uint8(rollUnder);
        bet.placeBlockNumber = uint40(block.number);
        bet.mask = uint240(mask);
        bet.gambler = msg.sender;
        //        emit DebugUint("placeBet-placeBlockNumber", bet.placeBlockNumber);
    }

    function getRollUnder(uint betMask, uint n) private pure returns (uint rollUnder) {
        rollUnder += (((betMask & MASK40) * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO;
        for (uint i = 1; i < n; i++) {
            betMask = betMask >> MAX_MASK_MODULO;
            rollUnder += (((betMask & MASK40) * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO;
        }
        return rollUnder;
    }

    // This is the method used to settle 99% of bets. To process a bet with a specific
    // "commit", settleBet should supply a "reveal" number that would Keccak256-hash to
    // "commit". "blockHash" is the block hash of placeBet block as seen by croupier; it
    // is additionally asserted to prevent changing the bet outcomes on Ethereum reorgs.
    function settleBet(bytes20 reveal1, bytes20 reveal2, bytes32 blockHash) external onlyCroupier {
        uint commit = uint(keccak256(abi.encodePacked(reveal1, reveal2)));
        //         emit DebugUint("settleBet-reveal1", uint(reveal1));
        //         emit DebugUint("settleBet-reveal2", uint(reveal2));
        //         emit DebugUint("settleBet-commit", commit);

        Bet storage bet = bets[commit];
        uint placeBlockNumber = bet.placeBlockNumber;

        //         emit DebugBytes32("settleBet-placeBlockhash", blockhash(placeBlockNumber));
        //         emit DebugUint("settleBet-placeBlockNumber", bet.placeBlockNumber);

        // Check that bet has not expired yet (see comment to BET_EXPIRATION_BLOCKS).
        require(block.number > placeBlockNumber, "settleBet in the same block as placeBet, or before.");
        require(block.number <= placeBlockNumber + BET_EXPIRATION_BLOCKS, "Blockhash can't be queried by EVM.");
        require(blockhash(placeBlockNumber) == blockHash, "blockHash invalid");

        // Settle bet using reveal and blockHash as entropy sources.
        settleBetCommon(bet, reveal1, reveal2, blockHash);
    }

    // Debug events
    //    event DebugBytes32(string name, bytes32 data);
    //    event DebugUint(string name, uint data);

    // Common settlement code for settleBet.
    function settleBetCommon(Bet storage bet, bytes20 reveal1, bytes20 reveal2, bytes32 entropyBlockHash) private {
        // Fetch bet parameters into local variables (to save gas).
        uint amount = bet.amount;
        uint modulo = bet.modulo;
        uint rollUnder = bet.rollUnder;
        address gambler = bet.gambler;

        // Check that bet is in 'active' state.
        require(amount != 0, "Bet should be in an 'active' state");

        // Move bet into 'processed' state already.
        bet.amount = 0;

        // The RNG - combine "reveal" and blockhash of placeBet using Keccak256. Miners
        // are not aware of "reveal" and cannot deduce it from "commit" (as Keccak256
        // preimage is intractable), and house is unable to alter the "reveal" after
        // placeBet have been mined (as Keccak256 collision finding is also intractable).
        bytes32 entropy = keccak256(abi.encodePacked(reveal1, entropyBlockHash, reveal2));
        //emit DebugBytes32("entropy", entropy);

        // Do a roll by taking a modulo of entropy. Compute winning amount.
        uint dice = uint(entropy) % modulo;

        uint diceWinAmount;
        uint _jackpotFee;
        (diceWinAmount, _jackpotFee) = getDiceWinAmount(amount, modulo, rollUnder);

        uint diceWin = 0;
        uint jackpotWin = 0;

        // Determine dice outcome.
        if ((modulo != 100) && (modulo <= MAX_MASK_MODULO * 6)) {
            // For small modulo games, check the outcome against a bit mask.
            if ((2 ** dice) & bet.mask != 0) {
                diceWin = diceWinAmount;
            }
        } else {
            // For larger modulos, check inclusion into half-open interval.
            if (dice < rollUnder) {
                diceWin = diceWinAmount;
            }
        }

        // Unlock the bet amount, regardless of the outcome.
        lockedInBets -= uint128(diceWinAmount);

        // Roll for a jackpot (if eligible).
        if (amount >= MIN_JACKPOT_BET) {
            // The second modulo, statistically independent from the "main" dice roll.
            // Effectively you are playing two games at once!
            uint jackpotRng = (uint(entropy) / modulo) % JACKPOT_MODULO;

            // Bingo!
            if (jackpotRng == 0) {
                jackpotWin = jackpotSize;
                jackpotSize = 0;
            }
        }

        // Log jackpot win.
        if (jackpotWin > 0) {
            emit JackpotPayment(gambler, jackpotWin);
        }

        // Send the funds to gambler.
        sendFunds(gambler, diceWin + jackpotWin == 0 ? 1 wei : diceWin + jackpotWin, diceWin);
    }

    // Refund transaction - return the bet amount of a roll that was not processed in a
    // due timeframe. Processing such blocks is not possible due to EVM limitations (see
    // BET_EXPIRATION_BLOCKS comment above for details). In case you ever find yourself
    // in a situation like this, just contact the fck.com support, however nothing
    // precludes you from invoking this method yourself.
    function refundBet(uint commit) external {
        // Check that bet is in 'active' state.
        Bet storage bet = bets[commit];
        uint amount = bet.amount;

        require(amount != 0, "Bet should be in an 'active' state");

        // Check that bet has already expired.
        require(block.number > bet.placeBlockNumber + BET_EXPIRATION_BLOCKS, "Blockhash can't be queried by EVM.");

        // Move bet into 'processed' state, release funds.
        bet.amount = 0;

        uint diceWinAmount;
        uint jackpotFee;
        (diceWinAmount, jackpotFee) = getDiceWinAmount(amount, bet.modulo, bet.rollUnder);

        lockedInBets -= uint128(diceWinAmount);
        if (jackpotSize >= jackpotFee) {
            jackpotSize -= uint128(jackpotFee);
        }

        // Send the refund.
        sendFunds(bet.gambler, amount, amount);
    }

    // Get the expected win amount after house edge is subtracted.
    function getDiceWinAmount(uint amount, uint modulo, uint rollUnder) private view returns (uint winAmount, uint jackpotFee) {
        require(0 < rollUnder && rollUnder <= modulo, "Win probability out of range.");

        jackpotFee = amount >= MIN_JACKPOT_BET ? JACKPOT_FEE : 0;

        uint houseEdge = amount * HOUSE_EDGE_OF_TEN_THOUSAND / 10000;

        if (houseEdge < HOUSE_EDGE_MINIMUM_AMOUNT) {
            houseEdge = HOUSE_EDGE_MINIMUM_AMOUNT;
        }

        require(houseEdge + jackpotFee <= amount, "Bet doesn't even cover house edge.");

        winAmount = (amount - houseEdge - jackpotFee) * modulo / rollUnder;
    }

    // Helper routine to process the payment.
    function sendFunds(address beneficiary, uint amount, uint successLogAmount) private {
        if (beneficiary.send(amount)) {
            emit Payment(beneficiary, successLogAmount);
        } else {
            emit FailedPayment(beneficiary, amount);
        }
    }

    // This are some constants making O(1) population count in placeBet possible.
    // See whitepaper for intuition and proofs behind it.
    uint constant POPCNT_MULT = 0x0000000000002000000000100000000008000000000400000000020000000001;
    uint constant POPCNT_MASK = 0x0001041041041041041041041041041041041041041041041041041041041041;
    uint constant POPCNT_MODULO = 0x3F;
    uint constant MASK40 = 0xFFFFFFFFFF;
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"JACKPOT_MODULO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_JACKPOT_BET","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"o","type":"address"}],"name":"setOwner1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secretSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner2","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"HOUSE_EDGE_OF_TEN_THOUSAND","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"jackpotSize","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"o","type":"address"}],"name":"setOwner2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"betMask","type":"uint256"},{"name":"modulo","type":"uint256"},{"name":"commitLastBlock","type":"uint256"},{"name":"commit","type":"uint256"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"placeBet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"croupier","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"commit","type":"uint256"}],"name":"getBetInfo","outputs":[{"name":"amount","type":"uint256"},{"name":"modulo","type":"uint8"},{"name":"rollUnder","type":"uint8"},{"name":"placeBlockNumber","type":"uint40"},{"name":"mask","type":"uint240"},{"name":"gambler","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"HOUSE_EDGE_MINIMUM_AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"JACKPOT_FEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"withdrawAmount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"increaseAmount","type":"uint256"}],"name":"increaseJackpot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newSecretSigner","type":"address"}],"name":"setSecretSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lockedInBets","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"reveal1","type":"bytes20"},{"name":"reveal2","type":"bytes20"},{"name":"blockHash","type":"bytes32"}],"name":"settleBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"commit","type":"uint256"}],"name":"refundBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCroupier","type":"address"}],"name":"setCroupier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_maxProfit","type":"uint256"}],"name":"setMaxProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_owner1","type":"address"},{"name":"_owner2","type":"address"},{"name":"_secretSigner","type":"address"},{"name":"_croupier","type":"address"},{"name":"_maxProfit","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"FailedPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Payment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"JackpotPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"}],"name":"Commit","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040526062600055660110d9316ec00060015567016345785d8a00006002556103e860035566038d7ea4c6800060045560405160a0806121078339810160409081528151602083015191830151606084015160809094015160058054600160a060020a03808616600160a060020a0319928316179092556006805483881690831617905560088054838616908316179055600b80549288169290911691909117905591939091693f870857a3e0e3800000811061014557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60075550505050611fac8061015b6000396000f30060806040526004361061013d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301f60217811461013f5780630cf9349d146101665780631b5806201461017b57806341c0e1b51461019c5780634d61537f146101b157806352709725146101e2578063537af6c4146101f757806357246d231461020c5780635825884f1461023d5780635e83b4631461025e5780636b5c5f3914610278578063736889141461028d57806379141f80146102a2578063b539cd551461030a578063bcce60401461031f578063bf020f6114610334578063c107532914610349578063d6d30a511461036d578063d702087f14610385578063df88126f146103a6578063e163b75b146103bb578063e1fdb4b4146103eb578063f8bb201c14610403578063fbd668a914610424575b005b34801561014b57600080fd5b5061015461043c565b60408051918252519081900360200190f35b34801561017257600080fd5b50610154610442565b34801561018757600080fd5b5061013d600160a060020a0360043516610448565b3480156101a857600080fd5b5061013d61053b565b3480156101bd57600080fd5b506101c6610676565b60408051600160a060020a039092168252519081900360200190f35b3480156101ee57600080fd5b506101c6610685565b34801561020357600080fd5b50610154610694565b34801561021857600080fd5b5061022161069a565b604080516001608060020a039092168252519081900360200190f35b34801561024957600080fd5b5061013d600160a060020a03600435166106a9565b61013d60043560243560443560643560843560a43561079c565b34801561028457600080fd5b506101c6610f43565b34801561029957600080fd5b506101c6610f52565b3480156102ae57600080fd5b506102ba600435610f61565b6040805196875260ff9586166020880152939094168584015264ffffffffff9091166060850152600160f060020a03166080840152600160a060020a0390911660a0830152519081900360c00190f35b34801561031657600080fd5b50610154610fbb565b34801561032b57600080fd5b50610154610fc1565b34801561034057600080fd5b50610154610fc7565b34801561035557600080fd5b5061013d600160a060020a0360043516602435610fcd565b34801561037957600080fd5b5061013d60043561114c565b34801561039157600080fd5b5061013d600160a060020a03600435166112ec565b3480156103b257600080fd5b50610221611394565b3480156103c757600080fd5b5061013d6bffffffffffffffffffffffff19600435811690602435166044356113aa565b3480156103f757600080fd5b5061013d60043561165b565b34801561040f57600080fd5b5061013d600160a060020a036004351661181d565b34801561043057600080fd5b5061013d6004356118c5565b60035481565b60025481565b600554600160a060020a031633148061046b5750600654600160a060020a031633145b15156104c1576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611f61833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600160a060020a03811615156104d657600080fd5b600554600160a060020a03828116911614156104f157600080fd5b600654600160a060020a038281169116141561050c57600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600554600160a060020a031633148061055e5750600654600160a060020a031633145b15156105b4576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611f61833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600954608060020a90046001608060020a031615610668576040805160e560020a62461bcd02815260206004820152604860248201527f416c6c20626574732073686f756c642062652070726f6365737365642028736560448201527f74746c6564206f7220726566756e64656429206265666f72652073656c662d6460648201527f657374727563742e000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b600554600160a060020a0316ff5b600854600160a060020a031681565b600654600160a060020a031681565b60005481565b6009546001608060020a031681565b600554600160a060020a03163314806106cc5750600654600160a060020a031633145b1515610722576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611f61833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600160a060020a038116151561073757600080fd5b600554600160a060020a038281169116141561075257600080fd5b600654600160a060020a038281169116141561076d57600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000838152600a60205260408120600381015490919081908190819081908190600160a060020a031615610840576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b34955060018c118015610854575060ff8c11155b15156108aa576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc1000086101580156108cb5750693f870857a3e0e38000008611155b1515610921576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b60008d11801561094f57507e010000000000000000000000000000000000000000000000000000000000008d105b15156109a5576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b438b10156109fd576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b8a8a60405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610a545780518252601f199092019160209182019101610a35565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209450600185601b8b8b604051600081526020016040526040518085600019166000191681526020018460ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610af8573d6000803e3d6000fd5b5050604051601f190151600854600160a060020a039081169116149050610b69576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60288c11610bbc57603f7920000000001000000000080000000004000000000200000000018e027e01041041041041041041041041041041041041041041041041041041041041160693508c9250610d52565b60508c11610bd957610bcf8d60026119ca565b93508c9250610d52565b8b60641415610c765760008d118015610bf257508b8d11155b1515610c6e576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8c9350610d52565b60788c11610c8957610bcf8d60036119ca565b60a08c11610c9c57610bcf8d60046119ca565b60c88c11610caf57610bcf8d60056119ca565b60f08c11610cc257610bcf8d60066119ca565b60008d118015610cd257508b8d11155b1515610d4e576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8c93505b610d5d868d86611a84565b60075491935091508601821115610dbe576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600980546001608060020a03608060020a808304821686018216810292821692909217808216850182166fffffffffffffffffffffffffffffffff19919091161792839055303183821692909304811691909101161115610e69576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b604080518b815290517f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f879181900360200190a1505092845560018401805460ff191660ff9a8b161761ff00191661010092909a16919091029890981766ffffffffff00001916620100004364ffffffffff1602179097556002820180547fffff00000000000000000000000000000000000000000000000000000000000016600160f060020a0390921691909117905560030180543373ffffffffffffffffffffffffffffffffffffffff19909116179055505050505050565b600b54600160a060020a031681565b600554600160a060020a031681565b6000908152600a60205260409020805460018201546002830154600390930154919360ff808316946101008404909116936201000090930464ffffffffff1692600160f060020a0390911691600160a060020a0390911690565b60075481565b60015481565b60045481565b600554600160a060020a0316331480610ff05750600654600160a060020a031633145b1515611046576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611f61833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b30318111156110c4576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60095430316001608060020a03808316608060020a9093048116929092019091168201111561113d576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b611148828283611bbf565b5050565b600554600160a060020a031633148061116f5750600654600160a060020a031633145b15156111c5576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611f61833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115611243576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60095430316001608060020a03808316608060020a909304811692909201909116820111156112bc576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600980546fffffffffffffffffffffffffffffffff1981166001608060020a039182169390930116919091179055565b600554600160a060020a031633148061130f5750600654600160a060020a031633145b1515611365576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611f61833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600954608060020a90046001608060020a031681565b600b5460009081908190600160a060020a03163314611439576040805160e560020a62461bcd02815260206004820152602c60248201527f4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e60448201527f6f6e2d63726f75706965722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b604080516bffffffffffffffffffffffff19808916602080840191909152908816603483015282516028818403018152604890920192839052815191929182918401908083835b6020831061149f5780518252601f199092019160209182019101611480565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000818152600a909252929020600181015492975095505062010000900464ffffffffff16925050438210905061156e576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b60fa81014311156115ef576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b80408414611647576040805160e560020a62461bcd02815260206004820152601160248201527f626c6f636b4861736820696e76616c6964000000000000000000000000000000604482015290519081900360640190fd5b61165382878787611c72565b505050505050565b6000818152600a6020526040812080549091808215156116eb576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600184015464ffffffffff620100009091041660fa01431161177d576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008455600184015461179d90849060ff80821691610100900416611a84565b600980546001608060020a03608060020a808304821686900382160291811691909117918290559294509092501681116117fd57600980546001608060020a03808216849003166fffffffffffffffffffffffffffffffff199091161790555b600384015461181690600160a060020a03168480611bbf565b5050505050565b600554600160a060020a03163314806118405750600654600160a060020a031633145b1515611896576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611f61833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600554600160a060020a03163314806118e85750600654600160a060020a031633145b151561193e576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611f61833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e380000081106119c5576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600755565b603f7e0104104104104104104104104104104104104104104104104104104104104179200000000010000000000800000000040000000002000000000164ffffffffff851602160660015b82811015611a7d576501000000000090930492603f64ffffffffff8516792000000000100000000008000000000400000000020000000001027e0104104104104104104104104104104104104104104104104104104104104116069190910190600101611a15565b5092915050565b6000806000836000108015611a995750848411155b1515611aef576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b600254861015611b00576000611b04565b6004545b600054909250612710908702049050600154811015611b2257506001545b808201861015611ba2576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8385838389030302811515611bb357fe5b04925050935093915050565b604051600160a060020a0384169083156108fc029084906000818181858888f1935050505015611c2d57604080518281529051600160a060020a038516917fd4f43975feb89f48dd30cabbb32011045be187d1e11c8ea9faa43efc35282519919081900360200190a2611c6d565b604080518381529051600160a060020a038516917fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d919081900360200190a25b505050565b83546001850154600386015460ff8083169261010090041690600160a060020a031660008080808080808a1515611d19576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008f600001819055508d8c8e60405160200180846bffffffffffffffffffffffff19166bffffffffffffffffffffffff191681526014018360001916600019168152602001826bffffffffffffffffffffffff19166bffffffffffffffffffffffff1916815260140193505050506040516020818303038152906040526040518082805190602001908083835b60208310611dc65780518252601f199092019160209182019101611da7565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912099508c925089915050811515611e0157fe5b069550611e0f8b8b8b611a84565b90955093506000925082915060648a14801590611e2d575060f08a11155b15611e6a578e60020160009054906101000a9004600160f060020a0316600160f060020a03168660020a166000141515611e65578492505b611e76565b88861015611e76578492505b600980546001608060020a03608060020a808304821689900382160291161790556002548b10611ee9576003548a88811515611eae57fe5b04811515611eb857fe5b069050801515611ee957600980546fffffffffffffffffffffffffffffffff1981169091556001608060020a031691505b6000821115611f3257604080518381529051600160a060020a038a16917fc388db0e8aa560a59633c094a0d0aa21322cd6234836fd5bac00fc5ae63b5783919081900360200190a25b611f4f8884840115611f4657838501611f49565b60015b85611bbf565b50505050505050505050505050505056004f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a7230582000d7a0e60f5404056ef9e53bb769f694e12abd9c00e92ff04863e2f9afe678b2002900000000000000000000000008a6268b1362b02f6473ec22fac93795353f5173000000000000000000000000d81f6028509b1c38c48abd2e5ca6f28889ebbd4d0000000000000000000000005a5f158fb01b03a9df99337386516ebcbd1b93eb00000000000000000000000001fd2b8c9c81044d37352704f1ce9ada7e1b6ae20000000000000000000000000000000000000000000000004563918244f40000

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000008a6268b1362b02f6473ec22fac93795353f5173000000000000000000000000d81f6028509b1c38c48abd2e5ca6f28889ebbd4d0000000000000000000000005a5f158fb01b03a9df99337386516ebcbd1b93eb00000000000000000000000001fd2b8c9c81044d37352704f1ce9ada7e1b6ae20000000000000000000000000000000000000000000000004563918244f40000

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000008a6268b1362b02f6473ec22fac93795353f5173
Arg [1] : 000000000000000000000000d81f6028509b1c38c48abd2e5ca6f28889ebbd4d
Arg [2] : 0000000000000000000000005a5f158fb01b03a9df99337386516ebcbd1b93eb
Arg [3] : 00000000000000000000000001fd2b8c9c81044d37352704f1ce9ada7e1b6ae2
Arg [4] : 0000000000000000000000000000000000000000000000004563918244f40000


   Swarm Source:
bzzr://00d7a0e60f5404056ef9e53bb769f694e12abd9c00e92ff04863e2f9afe678b2

 

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.