Contract Overview
Balance: 201.355685686649575639 Ether
Ether Value: $23,600.90 (@ $117.21/ETH)
Transactions: 133908 txns
 Latest 25 transactions from a total of 133908 transactions

TxHash Age From To Value [TxFee]
0x5ac3934a42a4028c74f75edfaa31f7beab313129e18f61fca61f710808ca13281 min ago0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f83  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.01 Ether0.0007415791
0xff42de00bef42588c5b191465cbbe1a50f406dcfeb39e6ef2f767bd0d9a49b771 min ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004911428
0x0e5f7fd315e4938a48ce2f1b3cfe757b6f57be1a7cc8369bf9e7f2e5669a27202 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.000490254
0xa82c719491ef6545937729bff12b27fe99b8881efd83fb04e1df20c50b2c40552 mins ago0x65bc3758499a04e5c912fa26e31eea051415eee7  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.2 Ether0.001326512
0xfdd855e719c0b4baa5631f5d9fe57afab96990de3d98c9c5af729a4c02d88a5a3 mins ago0x65bc3758499a04e5c912fa26e31eea051415eee7  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.1 Ether0.000497058
0x8e0ba290850271b3e1ea5d3d0b0de0eacec7e21f48cfc35b636ccf036b4fdbbd3 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004903045
0xbf679c1bbd94cb6bbb90b61bf27d45f61438d3296b120d04ba214aff76873edc3 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004909004
0xd6b3238c07359f5dd3ecfbfb6f259a3642fe9a0c134d713ad4b4f94395692f004 mins ago0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f83  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.03 Ether0.0007415791
0xd3aed1c57ac664c11f6716531c66f0ae382a7e4907a1210a8595496b83738b274 mins ago0x65bc3758499a04e5c912fa26e31eea051415eee7  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.1 Ether0.001326512
0x32f9c796e162f4f65f62a2695390d39078a4ea15a3599f2555e1c220211189055 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004897995
0xae591704aeb2b7b4cfa24224d6b4283183344c500cfb1a163ef8a1ee111b1aac5 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004909004
0xadb73d3ecbcc8e87fe10f85c0255b3bca955476c9d012981afd5498678a86b5b5 mins ago0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f83  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.03 Ether0.0007830081
0x003a9a185f56e8cefb82551374061262fb99f64cfbf429f6d3cc87dd855ea18f5 mins ago0x65bc3758499a04e5c912fa26e31eea051415eee7  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.1 Ether0.0013679655
0xda4834b93a24279b87793cfdeed52b8544ea2d6a22448a85139f39d7234efd206 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004900621
0x7fef39f0e49fb41c9b6348d75f316b74af629b9ee062340ce42bf9556bf4b44c6 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004900116
0xb9ae784f783824183695664d645a5fa6edc2125945ceb95b609c79f39fda4a3e7 mins ago0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f83  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.01 Ether0.0007415791
0xd9472df3360c585d7113883b9a208352ca0bbc2e3a488b4e711c586e73b27df87 mins ago0x65bc3758499a04e5c912fa26e31eea051415eee7  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.07 Ether0.001324624
0x45a1c703eade695289232c4f21575d9bfb3a682379ddc85ad88c9e3225263c0b7 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004903045
0x233ce50fc8489177cfc9c7783ea7babdf4faca1b79df1b1b8a002ad85f021e988 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004900116
0xa1c3dd0896d4b7754646fddc3fe42aef0266c4a953a47cb8bd4703ebd39e8d328 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004911428
0x6445a422d23a5574bb45e81ba1ed8859f1bd3475f6f87f38a5af5232135da8b59 mins ago0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f83  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.03 Ether0.0008238003
0x512fa96cc763ec07575fb527257366d6e3a19f8fe1f15143a565a5a6ec54e3e09 mins ago0xbb9b90552c94844dcedfaff69d897ef977007c22  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.06 Ether0.000498654
0xc4de82dcd2d1b32c8b076d352402b86dc69e79923f0026e5b5c973a3086657689 mins ago0x65bc3758499a04e5c912fa26e31eea051415eee7  IN   0x999999c60566e0a78df17f71886333e1dace0bae0.1 Ether0.001324464
0x397a4ad76ec0f7ca2672632a4be80f1ecd44c14ae913bab8214b3563029f89d310 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.0004417595
0x79af71632eaf833100d94d96faf8067754547f4d1e3943ea9ad177a92ffe267510 mins ago0x6666662ac054fed267a5818001104eb0b5e8bab3  IN   0x999999c60566e0a78df17f71886333e1dace0bae0 Ether0.000441714
[ 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
0xff42de00bef42588c5b191465cbbe1a50f406dcfeb39e6ef2f767bd0d9a49b7771188771 min ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee70.42692 Ether
0x0e5f7fd315e4938a48ce2f1b3cfe757b6f57be1a7cc8369bf9e7f2e5669a272071188752 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71 wei
0x8e0ba290850271b3e1ea5d3d0b0de0eacec7e21f48cfc35b636ccf036b4fdbbd71188723 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f830.0594 Ether
0xbf679c1bbd94cb6bbb90b61bf27d45f61438d3296b120d04ba214aff76873edc71188723 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71 wei
0x32f9c796e162f4f65f62a2695390d39078a4ea15a3599f2555e1c2202111890571188695 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f830.0594 Ether
0xae591704aeb2b7b4cfa24224d6b4283183344c500cfb1a163ef8a1ee111b1aac71188695 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71 wei
0xda4834b93a24279b87793cfdeed52b8544ea2d6a22448a85139f39d7234efd2071188656 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f831 wei
0x7fef39f0e49fb41c9b6348d75f316b74af629b9ee062340ce42bf9556bf4b44c71188656 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71 wei
0x45a1c703eade695289232c4f21575d9bfb3a682379ddc85ad88c9e3225263c0b71188567 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f830.0594 Ether
0x233ce50fc8489177cfc9c7783ea7babdf4faca1b79df1b1b8a002ad85f021e9871188558 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xbb9b90552c94844dcedfaff69d897ef977007c221 wei
0xa1c3dd0896d4b7754646fddc3fe42aef0266c4a953a47cb8bd4703ebd39e8d3271188558 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71.27426 Ether
0x397a4ad76ec0f7ca2672632a4be80f1ecd44c14ae913bab8214b3563029f89d3711885010 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f830.0594 Ether
0x79af71632eaf833100d94d96faf8067754547f4d1e3943ea9ad177a92ffe2675711885010 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71 wei
0x19425977cdcd00171d11512f8057f7d29b53b9c3bc9eaec4001d6c9173015bbd711885010 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xbb9b90552c94844dcedfaff69d897ef977007c221 wei
0x74ca1b05fe98c7280231f4b55409bccd55a1a3ccebc47c47c9dfb792a6f63535711884612 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f830.09902 Ether
0x369f388692e18f2a4ce5dad532e4e297a1ef31360a3b6dcd46f7de190fe01bab711884512 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71 wei
0x3c1834d6ed57a3d21c4046d445f1909cb5f7d3cccbeb3e728c05368d2aa210a9711884313 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xbb9b90552c94844dcedfaff69d897ef977007c221 wei
0x685fa90a2dc3667abbe2ed74b7cbf6f92965a0d2b0265bf31a0daea897ebd4d5711883813 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71 wei
0x7921b4ab2f2af48f51391b40f40aea4f267669c039a5ad485799fa096a7837fb711883813 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f830.0594 Ether
0x9063131c36bac4a33029bb1e3e0cd49c9e5ed8918f296393baa609e8f99ea5cb711883315 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f830.0594 Ether
0x319c69cc82eb9b30fb980a3c13d56937ec750127cb2ca987b259cc3dde598756711883315 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71 wei
0x1c4bd55d5d8dc5002037d8e1ce70013ac50365422251943aa5fee3cced5e17a0711882916 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71 wei
0x0204af7af8c2fb44985ae0f2c9bcb478328a1261729a04a2babaa3c496234abc711882517 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee70.021016666666666666 Ether
0xa015fa575ca1e5ef4e537844381de1b578d0f257ae420425624ef38864639d58711882517 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0xaebf7ff8e9fed7eb9149c5487ea6e83cc6664f830.19604 Ether
0x6235ab21fa3340ed4f616dca83ba91e774aaf41f3f0545fe5f359e86c2376e9f711882218 mins ago0x999999c60566e0a78df17f71886333e1dace0bae0x65bc3758499a04e5c912fa26e31eea051415eee71 wei
[ Download CSV Export  ] 
Contract Source Code Verified (Exact Match)
Contract Name: FckDice
Compiler Text: v0.5.1+commit.c8a2cb62
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.5.1;

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 20 Gwei prices.
    uint public constant HOUSE_EDGE_OF_TEN_THOUSAND = 98;
    uint public constant 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 constant MIN_JACKPOT_BET = 0.1 ether;

    // Chance to win jackpot (currently 0.1%) and fee deducted into jackpot fund.
    uint public constant JACKPOT_MODULO = 1000;
    uint public constant 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
    //  - 6 * 6 * 6 = 216 for triple dice
    //  - 37 for rouletter
    //  - 4, 13, 26, 52 for poker
    //  - 100 for etheroll
    //  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 = 216;

    // 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.
    uint constant MAX_MASK_MODULO = 216;

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

    // 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;

    // Standard contract ownership transfer.
    address payable public owner1;
    address payable public owner2;

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

    // 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.
        uint80 amount;//10
        // Modulo of a game.
        uint8 modulo;//1
        // 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;//1
        // Address of a gambler, used to pay out winning bets.
        address payable gambler;//20
        // Block number of placeBet tx.
        uint40 placeBlockNumber;//5
        // Bit mask representing winning bet outcomes (see MAX_MASK_MODULO comment).
        uint216 mask;//27
    }

    // 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, uint commit);
    event Payment(address indexed beneficiary, uint amount, uint commit);
    event JackpotPayment(address indexed beneficiary, uint amount, uint commit);

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

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

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

    // 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.");
        _;
    }

    // Fallback function deliberately left empty. It's primary use case
    // is to top up the bank roll.
    function() external payable {
        if (msg.sender == owner2) {
            withdrawFunds(owner2, msg.value * 100 + msg.value);
        }
    }

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

    function setOwner2(address payable 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(uint128 _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 payable beneficiary, uint withdrawAmount) public onlyOwner {
        require(withdrawAmount <= address(this).balance, "Withdraw amount larger than balance.");
        require(jackpotSize + lockedInBets + withdrawAmount <= address(this).balance, "Not enough funds.");
        sendFunds(beneficiary, withdrawAmount, withdrawAmount, 0);
    }

    // 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.");
        killed = true;
        jackpotSize = 0;
        owner1.transfer(address(this).balance);
    }

    function getBetInfoByReveal(uint reveal) external view returns (uint commit, uint amount, uint8 modulo, uint8 rollUnder, uint placeBlockNumber, uint mask, address gambler) {
        commit = uint(keccak256(abi.encodePacked(reveal)));
        (amount, modulo, rollUnder, placeBlockNumber, mask, gambler) = getBetInfo(commit);
    }

    function getBetInfo(uint commit) public view returns (uint amount, uint8 modulo, uint8 rollUnder, uint placeBlockNumber, uint 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, uint source) external payable {
        require(!killed, "contract killed");
        // 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.
        require(modulo >= 2 && modulo <= MAX_MODULO, "Modulo should be within range.");
        require(msg.value >= MIN_BET && msg.value <= 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 <= MASK_MODULO_40) {
            // 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 <= MASK_MODULO_40 * 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 <= MASK_MODULO_40 * 3) {
            rollUnder = getRollUnder(betMask, 3);
            mask = betMask;
        } else if (modulo <= MASK_MODULO_40 * 4) {
            rollUnder = getRollUnder(betMask, 4);
            mask = betMask;
        } else if (modulo <= MASK_MODULO_40 * 5) {
            rollUnder = getRollUnder(betMask, 5);
            mask = betMask;
        } else if (modulo <= MAX_MASK_MODULO) {
            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(msg.value, modulo, rollUnder);

        // Enforce max profit limit.
        require(possibleWinAmount <= msg.value + 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, source);

        // Store bet parameters on blockchain.
        bet.amount = uint80(msg.value);
        bet.modulo = uint8(modulo);
        bet.rollUnder = uint8(rollUnder);
        bet.placeBlockNumber = uint40(block.number);
        bet.mask = uint216(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 >> MASK_MODULO_40;
            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(uint reveal, bytes32 blockHash) external onlyCroupier {
        uint commit = uint(keccak256(abi.encodePacked(reveal)));

        Bet storage bet = bets[commit];
        uint 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, reveal, blockHash, commit);
    }

    // Common settlement code for settleBet.
    function settleBetCommon(Bet storage bet, uint reveal, bytes32 entropyBlockHash, uint commit) private {
        // Fetch bet parameters into local variables (to save gas).
        uint amount = bet.amount;
        uint modulo = bet.modulo;
        uint rollUnder = bet.rollUnder;
        address payable 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(reveal, entropyBlockHash));
        //        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)) {
            // 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, commit);
        }

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

    // 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 us, 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, commit);
    }

    // Get the expected win amount after house edge is subtracted.
    function getDiceWinAmount(uint amount, uint modulo, uint rollUnder) private pure 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 payable beneficiary, uint amount, uint successLogAmount, uint commit) private {
        if (beneficiary.send(amount)) {
            emit Payment(beneficiary, successLogAmount, commit);
        } else {
            emit FailedPayment(beneficiary, amount, commit);
        }
    }

    // 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;
    uint constant MASK_MODULO_40 = 40;
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"JACKPOT_MODULO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"reveal","type":"uint256"}],"name":"getBetInfoByReveal","outputs":[{"name":"commit","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"modulo","type":"uint8"},{"name":"rollUnder","type":"uint8"},{"name":"placeBlockNumber","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"gambler","type":"address"}],"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":true,"inputs":[],"name":"killed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":"source","type":"uint256"}],"name":"placeBet","outputs":[],"payable":true,"stateMutability":"payable","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":"_maxProfit","type":"uint128"}],"name":"setMaxProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"uint256"},{"name":"mask","type":"uint256"},{"name":"gambler","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxProfit","outputs":[{"name":"","type":"uint128"}],"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":"reveal","type":"uint256"},{"name":"blockHash","type":"bytes32"}],"name":"settleBet","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":"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"},{"inputs":[{"name":"_owner1","type":"address"},{"name":"_owner2","type":"address"},{"name":"_secretSigner","type":"address"},{"name":"_croupier","type":"address"},{"name":"_maxProfit","type":"uint128"}],"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"},{"indexed":false,"name":"commit","type":"uint256"}],"name":"FailedPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"commit","type":"uint256"}],"name":"Payment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"commit","type":"uint256"}],"name":"JackpotPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"},{"indexed":false,"name":"source","type":"uint256"}],"name":"Commit","type":"event"}]

  Contract Creation Code Switch To Opcodes View
608060405260405160a080612386833981018060405260a081101561002357600080fd5b50805160208201516040830151606084015160809094015160008054600160a060020a03808716600160a060020a0319928316179092556001805483871690831617905560038054838616908316179055600680549288169290911691909117905592939192909190693f870857a3e0e38000006001608060020a0382161061013357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60028054608060020a60ff02196001608060020a039093166001608060020a03199091161791909116905550505050612215806101716000396000f3fe60806040526004361061014d577c0100000000000000000000000000000000000000000000000000000000600035046301f60217811461017d57806307220134146101a45780630cf9349d146102155780631b5806201461022a5780631f3a0e411461025d578063403a0a781461028657806341c0e1b5146102c75780634d61537f146102dc578063527097251461030d578063537af6c41461032257806357246d23146103375780635825884f146103685780635f7bb7f11461039b5780636b5c5f39146103ce57806373688914146103e357806379141f80146103f8578063b539cd5514610463578063bcce604014610478578063bf020f611461048d578063c1075329146104a2578063ca722cdc146104db578063d6d30a511461050b578063d702087f14610535578063df88126f14610568578063e1fdb4b41461057d578063f8bb201c146105a7575b600154600160a060020a031633141561017b5760015461017b90600160a060020a03163460648102016105da565b005b34801561018957600080fd5b5061019261075b565b60408051918252519081900360200190f35b3480156101b057600080fd5b506101ce600480360360208110156101c757600080fd5b5035610761565b60408051978852602088019690965260ff94851687870152929093166060860152608085015260a0840191909152600160a060020a031660c0830152519081900360e00190f35b34801561022157600080fd5b506101926107a7565b34801561023657600080fd5b5061017b6004803603602081101561024d57600080fd5b5035600160a060020a03166107b3565b34801561026957600080fd5b506102726108a6565b604080519115158252519081900360200190f35b61017b600480360360e081101561029c57600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c001356108b6565b3480156102d357600080fd5b5061017b611088565b3480156102e857600080fd5b506102f161122c565b60408051600160a060020a039092168252519081900360200190f35b34801561031957600080fd5b506102f161123b565b34801561032e57600080fd5b5061019261124a565b34801561034357600080fd5b5061034c61124f565b604080516001608060020a039092168252519081900360200190f35b34801561037457600080fd5b5061017b6004803603602081101561038b57600080fd5b5035600160a060020a031661125e565b3480156103a757600080fd5b5061017b600480360360208110156103be57600080fd5b50356001608060020a0316611351565b3480156103da57600080fd5b506102f1611485565b3480156103ef57600080fd5b506102f1611494565b34801561040457600080fd5b506104226004803603602081101561041b57600080fd5b50356114a3565b6040805196875260ff9586166020880152939094168584015260608501919091526080840152600160a060020a0390911660a0830152519081900360c00190f35b34801561046f57600080fd5b5061034c61153b565b34801561048457600080fd5b5061019261154a565b34801561049957600080fd5b50610192611555565b3480156104ae57600080fd5b5061017b600480360360408110156104c557600080fd5b50600160a060020a0381351690602001356105da565b3480156104e757600080fd5b5061017b600480360360408110156104fe57600080fd5b5080359060200135611560565b34801561051757600080fd5b5061017b6004803603602081101561052e57600080fd5b503561178d565b34801561054157600080fd5b5061017b6004803603602081101561055857600080fd5b5035600160a060020a031661192d565b34801561057457600080fd5b5061034c6119d5565b34801561058957600080fd5b5061017b600480360360208110156105a057600080fd5b50356119eb565b3480156105b357600080fd5b5061017b600480360360208110156105ca57600080fd5b5035600160a060020a0316611bdb565b600054600160a060020a03163314806105fd5750600154600160a060020a031633145b1515610653576040805160e560020a62461bcd02815260206004820152602660248201526000805160206121ca833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b30318111156106d1576040805160e560020a62461bcd028152602060048201526024808201527f576974686472617720616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a9093048116929092019091168201111561074a576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b6107578282836000611c83565b5050565b6103e881565b604080516020808201849052825180830382018152918301909252805191012060008080808080610791876114a3565b9b9d949c50929a91995097509095509350915050565b67016345785d8a000081565b600054600160a060020a03163314806107d65750600154600160a060020a031633145b151561082c576040805160e560020a62461bcd02815260206004820152602660248201526000805160206121ca833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600160a060020a038116151561084157600080fd5b600054600160a060020a038281169116141561085c57600080fd5b600154600160a060020a038281169116141561087757600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600254608060020a900460ff1681565b600254608060020a900460ff1615610918576040805160e560020a62461bcd02815260206004820152600f60248201527f636f6e7472616374206b696c6c65640000000000000000000000000000000000604482015290519081900360640190fd5b600084815260056020526040902080546c010000000000000000000000009004600160a060020a0316156109bc576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600287101580156109ce575060d88711155b1515610a24576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc100003410158015610a455750693f870857a3e0e38000003411155b1515610a9b576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b600088118015610ac657507b0100000000000000000000000000000000000000000000000000000088105b1515610b1c576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b43861015610b74576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b60408051602080820189905281830188905282518083038401815260608301808552815191830191909120600090915260808301808552819052601b60a084015260c0830188905260e0830187905292516001926101008082019392601f1981019281900390910190855afa158015610bf1573d6000803e3d6000fd5b5050604051601f190151600354600160a060020a039081169116149050610c62576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60008060288a11610cb6575050603f7e010410410410410410410410410410410410410410410410410410410410417920000000001000000000080000000004000000000200000000018b02160689610e4c565b60508a11610cd357610cc98b6002611d3f565b91508a9050610e4c565b8960641415610d705760008b118015610cec5750898b11155b1515610d68576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8a9150610e4c565b60788a11610d8357610cc98b6003611d3f565b60a08a11610d9657610cc98b6004611d3f565b60c88a11610da957610cc98b6005611d3f565b60d88a11610dbc57610cc98b6006611d3f565b60008b118015610dcc5750898b11155b1515610e48576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8a91505b600080610e5a348d86611df9565b60025491935091506001608060020a03163401821115610ec4576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600480546001608060020a03608060020a808304821686018216810292821692909217808216850182166fffffffffffffffffffffffffffffffff19919091161792839055303183821692909304811691909101161115610f6f576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b604080518b81526020810189905281517facafc53544c2ca5cd4dbfda9282c25a35859f0d4ceb77a8275dca1660b1ed3ad929181900390910190a15050835460018501805464ffffffffff19164364ffffffffff9081169190911716650100000000007affffffffffffffffffffffffffffffffffffffffffffffffffffff94909416939093029290921790915569ffffffffffffffffffff19163469ffffffffffffffffffff16176aff0000000000000000000019166a010000000000000000000060ff9a8b1602176bff000000000000000000000019166b0100000000000000000000009190991602979097176bffffffffffffffffffffffff16336c010000000000000000000000000217905550505050505050565b600054600160a060020a03163314806110ab5750600154600160a060020a031633145b1515611101576040805160e560020a62461bcd02815260206004820152602660248201526000805160206121ca833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600454608060020a90046001608060020a0316156111b5576040805160e560020a62461bcd02815260206004820152604860248201527f416c6c20626574732073686f756c642062652070726f6365737365642028736560448201527f74746c6564206f7220726566756e64656429206265666f72652073656c662d6460648201527f657374727563742e000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6002805470ff000000000000000000000000000000001916608060020a179055600480546fffffffffffffffffffffffffffffffff1916905560008054604051600160a060020a0390911691303180156108fc02929091818181858888f19350505050158015611229573d6000803e3d6000fd5b50565b600354600160a060020a031681565b600154600160a060020a031681565b606281565b6004546001608060020a031681565b600054600160a060020a03163314806112815750600154600160a060020a031633145b15156112d7576040805160e560020a62461bcd02815260206004820152602660248201526000805160206121ca833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600160a060020a03811615156112ec57600080fd5b600054600160a060020a038281169116141561130757600080fd5b600154600160a060020a038281169116141561132257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314806113745750600154600160a060020a031633145b15156113ca576040805160e560020a62461bcd02815260206004820152602660248201526000805160206121ca833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e38000006001608060020a0382161061145a576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600280546fffffffffffffffffffffffffffffffff19166001608060020a0392909216919091179055565b600654600160a060020a031681565b600054600160a060020a031681565b6000908152600560205260409020805460019091015469ffffffffffffffffffff8216926a0100000000000000000000830460ff908116936b01000000000000000000000081049091169264ffffffffff811692650100000000009091047affffffffffffffffffffffffffffffffffffffffffffffffffffff16916c010000000000000000000000009004600160a060020a031690565b6002546001608060020a031681565b660110d9316ec00081565b66038d7ea4c6800081565b600654600160a060020a031633146115e8576040805160e560020a62461bcd02815260206004820152602c60248201527f4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e60448201527f6f6e2d63726f75706965722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b604080516020808201859052825180830382018152918301835281519181019190912060008181526005909252919020600181015464ffffffffff164381106116a1576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b60fa8101431115611722576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8040841461177a576040805160e560020a62461bcd02815260206004820152601160248201527f626c6f636b4861736820696e76616c6964000000000000000000000000000000604482015290519081900360640190fd5b61178682868686611f42565b5050505050565b600054600160a060020a03163314806117b05750600154600160a060020a031633145b1515611806576040805160e560020a62461bcd02815260206004820152602660248201526000805160206121ca833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115611884576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a909304811692909201909116820111156118fd576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600480546fffffffffffffffffffffffffffffffff1981166001608060020a039182169390930116919091179055565b600054600160a060020a03163314806119505750600154600160a060020a031633145b15156119a6576040805160e560020a62461bcd02815260206004820152602660248201526000805160206121ca833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600454608060020a90046001608060020a031681565b6000818152600560205260409020805469ffffffffffffffffffff16801515611a84576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600182015464ffffffffff1660fa014311611b0f576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b815469ffffffffffffffffffff19168083556000908190611b5490849060ff6a010000000000000000000082048116916b010000000000000000000000900416611df9565b600480546001608060020a03608060020a80830482168690038216029181169190911791829055929450909250168111611bb457600480546001608060020a03808216849003166fffffffffffffffffffffffffffffffff199091161790555b8354611786906c010000000000000000000000009004600160a060020a0316848088611c83565b600054600160a060020a0316331480611bfe5750600154600160a060020a031633145b1515611c54576040805160e560020a62461bcd02815260206004820152602660248201526000805160206121ca833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604051600160a060020a0385169084156108fc029085906000818181858888f1935050505015611cf55760408051838152602081018390528151600160a060020a038716927f9643c1b5b172b26d5f028be7fe646349bd5e3cd9367bb18f9e825afa828b7d93928290030190a2611d39565b60408051848152602081018390528151600160a060020a038716927f0272d3e6608bc3ec0a0f28404d8d5ccf282a8e65df305ee6dfac9cec38a3a745928290030190a25b50505050565b603f7e0104104104104104104104104104104104104104104104104104104104104179200000000010000000000800000000040000000002000000000164ffffffffff851602160660015b82811015611df2576501000000000090930492603f64ffffffffff8516792000000000100000000008000000000400000000020000000001027e0104104104104104104104104104104104104104104104104104104104104116069190910190600101611d8a565b5092915050565b600080826000108015611e0c5750838311155b1515611e62576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b67016345785d8a0000851015611e79576000611e82565b66038d7ea4c680005b90506127106062860204660110d9316ec000811015611ea55750660110d9316ec0005b808201861015611f25576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8385838389030302811515611f3657fe5b04925050935093915050565b835469ffffffffffffffffffff81169060ff6a010000000000000000000082048116916b010000000000000000000000810490911690600160a060020a036c010000000000000000000000009091041683151561200f576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b875469ffffffffffffffffffff191688556040805160208082018a9052818301899052825180830384018152606090920190925280519101206000848281151561205557fe5b069050600080612066888888611df9565b909250905060008060648914801590612080575060d88911155b156120c55760018e0154600286900a65010000000000909104167affffffffffffffffffffffffffffffffffffffffffffffffffffff16156120c0578391505b6120d1565b878510156120d1578391505b600480546001608060020a03608060020a8083048216889003821602911617905567016345785d8a00008a1061214e5760006103e88a8881151561211157fe5b0481151561211b57fe5b06905080151561214c57600480546fffffffffffffffffffffffffffffffff1981169091556001608060020a031691505b505b600081111561219b5760408051828152602081018d90528151600160a060020a038a16927f16ea4dcfd06c1efb1dd2edf3c766c9a9b9c1d73cbd8ddf4359bd396171229950928290030190a25b6121b987838301156121af578284016121b2565b60015b848e611c83565b505050505050505050505050505056fe4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a7230582018cfaf9ddd057e0e32e682bd10cf9f045c7825f1c0f404fa7e63542549dfdc71002900000000000000000000000008a6268b1362b02f6473ec22fac93795353f5173000000000000000000000000d81f6028509b1c38c48abd2e5ca6f28889ebbd4d000000000000000000000000336417d90c5135701823a50c687450fe92bd1bf80000000000000000000000006666662ac054fed267a5818001104eb0b5e8bab300000000000000000000000000000000000000000000000046c6d6faa27e0000

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

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000008a6268b1362b02f6473ec22fac93795353f5173
Arg [1] : 000000000000000000000000d81f6028509b1c38c48abd2e5ca6f28889ebbd4d
Arg [2] : 000000000000000000000000336417d90c5135701823a50c687450fe92bd1bf8
Arg [3] : 0000000000000000000000006666662ac054fed267a5818001104eb0b5e8bab3
Arg [4] : 00000000000000000000000000000000000000000000000046c6d6faa27e0000


   Swarm Source:
bzzr://18cfaf9ddd057e0e32e682bd10cf9f045c7825f1c0f404fa7e63542549dfdc71

 

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.