Sponsored:   Temco - Join the Largest VC Backed ICO on the Bitcoin Network! TEMCO KYC Whitelist Starts Now!!
Contract Overview |  Dice2Win
Balance: 287.981308755914639925 Ether
Ether Value: $38,776.68 (@ $134.65/ETH)
Transactions: 541100 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x284b470276cd51640d29f7dcbabc4583eb136a03at txn 0xb027da9fa4a116dc28eb9f38fa6ca0168853c5a5f5f54dd06e147acda3d0c299
Token Balance:
 Latest 25 transactions from a total of 541100 transactions

TxHash Age From To Value [TxFee]
0xabbc0d55e60b477672f6e38f82a436a913532976aacee4caa4f27cbb5ae0a676 19 secs ago0xf2727c91a1f3198d74a7c42e16950abb2ff7bc41  IN   Dice2Win0.35 Ether0.00041066
0xf460acc4523c09d9131653e5f4741b021a158b5382672a52acd39209283aaf26 19 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000569279
0x1c9261181a88f82d1b46fa278659ac7bac27f48345fd99cb8127be4950929de4 19 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000568871
0x1d7f97a67a1e6ecac8bd65d8807e82de19c2a89025ad6330fc87f01839527697 24 secs ago0xba333f8ff556bf35d38e102a98daf1c5f6d9d708  IN   Dice2Win0.1 Ether0.001478376
0xd32b1a62e8704bd16a5d1c5053c51ed75b3f415379ac5840be544f238e6e53e4 24 secs ago0x53a65913ed38d4537fb928bfcff03df00b8b26fd  IN   Dice2Win0.1 Ether0.001806002
0x39f5484d3a47027355959eae4eed063cb0c1923e7b93f17a39923694272abdb4 24 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.00057443
0xeedddb5a68d623aa88c51dd95509d838cc5b7079577e22e8240f0a6fdf03be2f 30 secs ago0x5324886149503aecc39cca9701684679c0a835ea  IN   Dice2Win0.1 Ether0.00147879
0x9cba8b421b1ba7ed2ac0baa876c2540cb0afde398a41fb108371e7433e1cb48d 30 secs ago0x53a65913ed38d4537fb928bfcff03df00b8b26fd  IN   Dice2Win0.1 Ether0.00180741
0x89797136fcc33675b2b2d73d90287ad7f3288f7f9ab0dc23ed0ab91ead54d74c 49 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000569279
0x5aa8226093bb7e33e3984c0383618023628f42310bf1d718f7160cabdb21ac18 49 secs ago0x66011067feac5b7fbd75198093992ff943c87300  IN   Dice2Win0.15 Ether0.001805496
0xbf936f932b31a11b8eb0ba5d78c8a67f7791381b717a49043da4df3f5b9efa071 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000574022
0x38a97c5b1286e613b02db04cc87879e94d89e3908a7e0d2708b1272a09d5b8ba1 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.00057443
0xf0d0becfb555aee9cfabe24b91a12f09d721fda8f156d485752d8e7c73aaef7c1 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000569279
0x20749884c1b70ffb348037de89138c2acf819c070e76d705e02c596d4ce80c9b1 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.00056797
0xd4e419e4a73e502716a8c099f4f50cc140100e3d052fe04f2ec562f588fafe341 min ago0x53a65913ed38d4537fb928bfcff03df00b8b26fd  IN   Dice2Win0.1 Ether0.001804594
0xd2215a25bf0a35643ec14881739c496ff17ba8231f184294ee3f04d7e0c3cdba1 min ago0xba333f8ff556bf35d38e102a98daf1c5f6d9d708  IN   Dice2Win0.1 Ether0.001478376
0x3cc4fe782cc5d4b5216e6f32903bee68a56fe95d93ad6936adf6d5f2f82420df1 min ago0x66011067feac5b7fbd75198093992ff943c87300  IN   Dice2Win0.15 Ether0.0020533
0x921130666a38ba4b3e2b25e40d16ae7c7f926c92acdb86f29620fe9a90fa03ad1 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.00057443
0x54563e821477643998ff310e2df399b06c9a3e4572561a1281ad7d44a044d4121 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000571778
0x8b8441d70ff49301a434a5a535f3c0287dda3a35c5624a791633d6a39e30a1fa1 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000569279
0x5eeaa56b8eccd0af2f9bdbd74fd2ac3f4ecacf902f771cee7933a6cb2ce07c881 min ago0x53a65913ed38d4537fb928bfcff03df00b8b26fd  IN   Dice2Win0.1 Ether0.002052275
0xbc9ad68a60f9114093c25a30740863dffb08906b089452b18db071e3fc310f7b2 mins ago0x41bf14ee5e6b444ab84ac94daa7af6e4f52d61cf  IN   Dice2Win0.0125 Ether0.000903166
0x3447051b34aed21c38beda9e5d6ba217b0b4075b8df22e0833a06affbb50a46a2 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000568871
0x76989d4fccb89f790f77577d20a39c4003e34545018e9c087d2ee097d62701a02 mins ago0xba333f8ff556bf35d38e102a98daf1c5f6d9d708  IN   Dice2Win0.1 Ether0.001478376
0x4653063e421447d05317a15f99e57ab6a501c3371484906115f8b19b8feeb1212 mins ago0x66011067feac5b7fbd75198093992ff943c87300  IN   Dice2Win0.04 Ether0.001807124
[ 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
0xf460acc4523c09d9131653e5f4741b021a158b5382672a52acd39209283aaf266740024 19 secs ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5324886149503aecc39cca9701684679c0a835ea0.14 Ether
0x1c9261181a88f82d1b46fa278659ac7bac27f48345fd99cb8127be4950929de46740024 19 secs ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x53a65913ed38d4537fb928bfcff03df00b8b26fd1 wei
0x39f5484d3a47027355959eae4eed063cb0c1923e7b93f17a39923694272abdb46740023 24 secs ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x66011067feac5b7fbd75198093992ff943c873000.22125 Ether
0x89797136fcc33675b2b2d73d90287ad7f3288f7f9ab0dc23ed0ab91ead54d74c6740021 49 secs ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x53a65913ed38d4537fb928bfcff03df00b8b26fd0.128947368421052631 Ether
0xbf936f932b31a11b8eb0ba5d78c8a67f7791381b717a49043da4df3f5b9efa0767400191 min ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xba333f8ff556bf35d38e102a98daf1c5f6d9d7081 wei
0x38a97c5b1286e613b02db04cc87879e94d89e3908a7e0d2708b1272a09d5b8ba67400191 min ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x66011067feac5b7fbd75198093992ff943c873000.22125 Ether
0xf0d0becfb555aee9cfabe24b91a12f09d721fda8f156d485752d8e7c73aaef7c67400191 min ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x53a65913ed38d4537fb928bfcff03df00b8b26fd0.108888888888888888 Ether
0x20749884c1b70ffb348037de89138c2acf819c070e76d705e02c596d4ce80c9b67400191 min ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x41bf14ee5e6b444ab84ac94daa7af6e4f52d61cf0.0305 Ether
0x921130666a38ba4b3e2b25e40d16ae7c7f926c92acdb86f29620fe9a90fa03ad67400171 min ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xba333f8ff556bf35d38e102a98daf1c5f6d9d7080.196 Ether
0x54563e821477643998ff310e2df399b06c9a3e4572561a1281ad7d44a044d41267400171 min ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x66011067feac5b7fbd75198093992ff943c873001 wei
0x8b8441d70ff49301a434a5a535f3c0287dda3a35c5624a791633d6a39e30a1fa67400171 min ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x53a65913ed38d4537fb928bfcff03df00b8b26fd0.128947368421052631 Ether
0x3447051b34aed21c38beda9e5d6ba217b0b4075b8df22e0833a06affbb50a46a67400152 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x53a65913ed38d4537fb928bfcff03df00b8b26fd1 wei
0x59074b47bf754d1f704eedaf34de12b751a4d35eee39fe18bdaccde739b81dc567400132 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xbabc2ec78dffb9f0c110769935b4a7128a295c020.0305 Ether
0x804d8bc49678eb6ef7668641cec038e68fc66e424a04bb4a77803eeee6cc271967400132 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xba333f8ff556bf35d38e102a98daf1c5f6d9d7081 wei
0x40989802fa4322da59bc84c161a740181bc997eb46489b013e0c3400b28ff2e567400132 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x53a65913ed38d4537fb928bfcff03df00b8b26fd1 wei
0x5624599ba8814384cf16066b7dc90245b669aab671a18552459d7376348a33eb67400132 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x66011067feac5b7fbd75198093992ff943c873001 wei
0x60444dd06af202a75d6ec21bd05ec1e6921435c626aaa5c23077d63e6fe2338367400102 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xba333f8ff556bf35d38e102a98daf1c5f6d9d7080.196 Ether
0x4fec478c2cfedf8c8b69d5f189fd7cb42c89d2e82cad5ce88e2257969d9ca8d867400102 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xc17a7daaddc216878d385c1b2b1dd95f13b065531 wei
0x9c030c914c816afdee0d789553053bd3d3b9619f3f8380714608c8c4dca6729867400102 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x53a65913ed38d4537fb928bfcff03df00b8b26fd0.108888888888888888 Ether
0x426ddba975744f2c7bd4ae01e53f7c6f74e940b0031eeb2c63cdf0ef157400e667400102 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x66011067feac5b7fbd75198093992ff943c873000.147 Ether
0x5301ad214874e1fb0446d3db948b5785db13ecadb2e44628d1e3354dc2ad2df667400083 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x53a65913ed38d4537fb928bfcff03df00b8b26fd0.128947368421052631 Ether
0xb2e4810047705b4c46857cfd117c3e86c986ac0672f60c970b1e9bad10e579d967400083 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x53a65913ed38d4537fb928bfcff03df00b8b26fd0.108888888888888888 Ether
0xcf43d303254917b61a8ef7e6683feccecdbfc217a1d036e1d1064d7c127aabbf67400083 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xba333f8ff556bf35d38e102a98daf1c5f6d9d7081 wei
0xc08a81e6908954727d1d11814091acd868c07abfe07eccee171f0d949347833e67400083 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x66011067feac5b7fbd75198093992ff943c873000.1176 Ether
0x94741d45ef49fff62673caf0c6827072cbde6619f6d285426ce666ae30a0e86767400044 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x53a65913ed38d4537fb928bfcff03df00b8b26fd0.128947368421052631 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: Dice2Win
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.24;

// * dice2.win - fair games that pay Ether. Version 5.
//
// * Ethereum smart contract, deployed at 0xD1CEeeeee83F8bCF3BEDad437202b6154E9F5405.
//
// * Uses hybrid commit-reveal + block hash random number generation that is immune
//   to tampering by players, house and miners. Apart from being fully transparent,
//   this also allows arbitrarily high bets.
//
// * Refer to https://dice2.win/whitepaper.pdf for detailed description and proofs.

contract Dice2Win {
    /// *** Constants section

    // Each bet is deducted 1% 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 constant HOUSE_EDGE_PERCENT = 1;
    uint 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 constant MIN_JACKPOT_BET = 0.1 ether;

    // Chance to win jackpot (currently 0.1%) and fee deducted into jackpot fund.
    uint constant JACKPOT_MODULO = 1000;
    uint 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
    //  - 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 = 100;

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

    // 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 dice2.win 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 owner;
    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).
        uint40 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. Deliberately does not take any parameters.
    constructor () public {
        owner = msg.sender;
        secretSigner = DUMMY_ADDRESS;
        croupier = DUMMY_ADDRESS;
    }

    // Standard modifier on methods invokable only by contract owner.
    modifier onlyOwner {
        require (msg.sender == owner, "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 {
    }

    // 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 dice2.win 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(owner);
    }

    /// *** 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 dice2.win 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(uint40(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. For detailed proof consult
            // the dice2.win whitepaper.
            rollUnder = ((betMask * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO;
            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;

        (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 = uint40(mask);
        bet.gambler = msg.sender;
    }

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

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

    // This method is used to settle a bet that was mined into an uncle block. At this
    // point the player was shown some bet outcome, but the blockhash at placeBet height
    // is different because of Ethereum chain reorg. We supply a full merkle proof of the
    // placeBet transaction receipt to provide untamperable evidence that uncle block hash
    // indeed was present on-chain at some point.
    function settleBetUncleMerkleProof(uint reveal, uint40 canonicalBlockNumber) external onlyCroupier {
        // "commit" for bet settlement can only be obtained by hashing a "reveal".
        uint commit = uint(keccak256(abi.encodePacked(reveal)));

        Bet storage bet = bets[commit];

        // Check that canonical block hash can still be verified.
        require (block.number <= canonicalBlockNumber + BET_EXPIRATION_BLOCKS, "Blockhash can't be queried by EVM.");

        // Verify placeBet receipt.
        requireCorrectReceipt(4 + 32 + 32 + 4);

        // Reconstruct canonical & uncle block hashes from a receipt merkle proof, verify them.
        bytes32 canonicalHash;
        bytes32 uncleHash;
        (canonicalHash, uncleHash) = verifyMerkleProof(commit, 4 + 32 + 32);
        require (blockhash(canonicalBlockNumber) == canonicalHash);

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

    // Common settlement code for settleBet & settleBetUncleMerkleProof.
    function settleBetCommon(Bet storage bet, uint reveal, 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(reveal, entropyBlockHash));

        // 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 <= 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);
        }

        // 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 dice2.win 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);
        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 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_PERCENT / 100;

        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;

    // *** Merkle proofs.

    // This helpers are used to verify cryptographic proofs of placeBet inclusion into
    // uncle blocks. They are used to prevent bet outcome changing on Ethereum reorgs without
    // compromising the security of the smart contract. Proof data is appended to the input data
    // in a simple prefix length format and does not adhere to the ABI.
    // Invariants checked:
    //  - receipt trie entry contains a (1) successful transaction (2) directed at this smart
    //    contract (3) containing commit as a payload.
    //  - receipt trie entry is a part of a valid merkle proof of a block header
    //  - the block header is a part of uncle list of some block on canonical chain
    // The implementation is optimized for gas cost and relies on the specifics of Ethereum internal data structures.
    // Read the whitepaper for details.

    // Helper to verify a full merkle proof starting from some seedHash (usually commit). "offset" is the location of the proof
    // beginning in the calldata.
    function verifyMerkleProof(uint seedHash, uint offset) pure private returns (bytes32 blockHash, bytes32 uncleHash) {
        // (Safe) assumption - nobody will write into RAM during this method invocation.
        uint scratchBuf1;  assembly { scratchBuf1 := mload(0x40) }

        uint uncleHeaderLength; uint blobLength; uint shift; uint hashSlot;

        // Verify merkle proofs up to uncle block header. Calldata layout is:
        //  - 2 byte big-endian slice length
        //  - 2 byte big-endian offset to the beginning of previous slice hash within the current slice (should be zeroed)
        //  - followed by the current slice verbatim
        for (;; offset += blobLength) {
            assembly { blobLength := and(calldataload(sub(offset, 30)), 0xffff) }
            if (blobLength == 0) {
                // Zero slice length marks the end of uncle proof.
                break;
            }

            assembly { shift := and(calldataload(sub(offset, 28)), 0xffff) }
            require (shift + 32 <= blobLength, "Shift bounds check.");

            offset += 4;
            assembly { hashSlot := calldataload(add(offset, shift)) }
            require (hashSlot == 0, "Non-empty hash slot.");

            assembly {
                calldatacopy(scratchBuf1, offset, blobLength)
                mstore(add(scratchBuf1, shift), seedHash)
                seedHash := sha3(scratchBuf1, blobLength)
                uncleHeaderLength := blobLength
            }
        }

        // At this moment the uncle hash is known.
        uncleHash = bytes32(seedHash);

        // Construct the uncle list of a canonical block.
        uint scratchBuf2 = scratchBuf1 + uncleHeaderLength;
        uint unclesLength; assembly { unclesLength := and(calldataload(sub(offset, 28)), 0xffff) }
        uint unclesShift;  assembly { unclesShift := and(calldataload(sub(offset, 26)), 0xffff) }
        require (unclesShift + uncleHeaderLength <= unclesLength, "Shift bounds check.");

        offset += 6;
        assembly { calldatacopy(scratchBuf2, offset, unclesLength) }
        memcpy(scratchBuf2 + unclesShift, scratchBuf1, uncleHeaderLength);

        assembly { seedHash := sha3(scratchBuf2, unclesLength) }

        offset += unclesLength;

        // Verify the canonical block header using the computed sha3Uncles.
        assembly {
            blobLength := and(calldataload(sub(offset, 30)), 0xffff)
            shift := and(calldataload(sub(offset, 28)), 0xffff)
        }
        require (shift + 32 <= blobLength, "Shift bounds check.");

        offset += 4;
        assembly { hashSlot := calldataload(add(offset, shift)) }
        require (hashSlot == 0, "Non-empty hash slot.");

        assembly {
            calldatacopy(scratchBuf1, offset, blobLength)
            mstore(add(scratchBuf1, shift), seedHash)

            // At this moment the canonical block hash is known.
            blockHash := sha3(scratchBuf1, blobLength)
        }
    }

    // Helper to check the placeBet receipt. "offset" is the location of the proof beginning in the calldata.
    // RLP layout: [triePath, str([status, cumGasUsed, bloomFilter, [[address, [topics], data]])]
    function requireCorrectReceipt(uint offset) view private {
        uint leafHeaderByte; assembly { leafHeaderByte := byte(0, calldataload(offset)) }

        require (leafHeaderByte >= 0xf7, "Receipt leaf longer than 55 bytes.");
        offset += leafHeaderByte - 0xf6;

        uint pathHeaderByte; assembly { pathHeaderByte := byte(0, calldataload(offset)) }

        if (pathHeaderByte <= 0x7f) {
            offset += 1;

        } else {
            require (pathHeaderByte >= 0x80 && pathHeaderByte <= 0xb7, "Path is an RLP string.");
            offset += pathHeaderByte - 0x7f;
        }

        uint receiptStringHeaderByte; assembly { receiptStringHeaderByte := byte(0, calldataload(offset)) }
        require (receiptStringHeaderByte == 0xb9, "Receipt string is always at least 256 bytes long, but less than 64k.");
        offset += 3;

        uint receiptHeaderByte; assembly { receiptHeaderByte := byte(0, calldataload(offset)) }
        require (receiptHeaderByte == 0xf9, "Receipt is always at least 256 bytes long, but less than 64k.");
        offset += 3;

        uint statusByte; assembly { statusByte := byte(0, calldataload(offset)) }
        require (statusByte == 0x1, "Status should be success.");
        offset += 1;

        uint cumGasHeaderByte; assembly { cumGasHeaderByte := byte(0, calldataload(offset)) }
        if (cumGasHeaderByte <= 0x7f) {
            offset += 1;

        } else {
            require (cumGasHeaderByte >= 0x80 && cumGasHeaderByte <= 0xb7, "Cumulative gas is an RLP string.");
            offset += cumGasHeaderByte - 0x7f;
        }

        uint bloomHeaderByte; assembly { bloomHeaderByte := byte(0, calldataload(offset)) }
        require (bloomHeaderByte == 0xb9, "Bloom filter is always 256 bytes long.");
        offset += 256 + 3;

        uint logsListHeaderByte; assembly { logsListHeaderByte := byte(0, calldataload(offset)) }
        require (logsListHeaderByte == 0xf8, "Logs list is less than 256 bytes long.");
        offset += 2;

        uint logEntryHeaderByte; assembly { logEntryHeaderByte := byte(0, calldataload(offset)) }
        require (logEntryHeaderByte == 0xf8, "Log entry is less than 256 bytes long.");
        offset += 2;

        uint addressHeaderByte; assembly { addressHeaderByte := byte(0, calldataload(offset)) }
        require (addressHeaderByte == 0x94, "Address is 20 bytes long.");

        uint logAddress; assembly { logAddress := and(calldataload(sub(offset, 11)), 0xffffffffffffffffffffffffffffffffffffffff) }
        require (logAddress == uint(address(this)));
    }

    // Memory copy.
    function memcpy(uint dest, uint src, uint len) pure private {
        // Full 32 byte words
        for(; len >= 32; len -= 32) {
            assembly { mstore(dest, mload(src)) }
            dest += 32; src += 32;
        }

        // Remaining bytes
        uint mask = 256 ** (32 - len) - 1;
        assembly {
            let srcpart := and(mload(src), not(mask))
            let destpart := and(mload(dest), mask)
            mstore(dest, or(destpart, srcpart))
        }
    }
}

    Contract ABI  
[{"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":"jackpotSize","outputs":[{"name":"","type":"uint128"}],"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":"placeBet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"croupier","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"reveal","type":"uint256"},{"name":"canonicalBlockNumber","type":"uint40"}],"name":"settleBetUncleMerkleProof","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxProfit","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":"acceptNextOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nextOwner","type":"address"}],"name":"approveNextOwner","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"},{"constant":false,"inputs":[{"name":"_maxProfit","type":"uint256"}],"name":"setMaxProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"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
608060405234801561001057600080fd5b5060008054600160a060020a0319908116331790915560038054821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90811790915560068054909216179055612502806100606000396000f3006080604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166341c0e1b581146100fd5780634d61537f1461011257806357246d23146101435780635e83b463146101745780636b5c5f391461018e57806374e048d5146101a35780638da5cb5b146101c5578063b539cd55146101da578063c107532914610201578063ca722cdc14610225578063d06c54fb14610240578063d579fd4414610255578063d6d30a5114610276578063d702087f1461028e578063df88126f146102af578063e1fdb4b4146102c4578063f8bb201c146102dc578063fbd668a9146102fd575b005b34801561010957600080fd5b506100fb610315565b34801561011e57600080fd5b50610127610439565b60408051600160a060020a039092168252519081900360200190f35b34801561014f57600080fd5b50610158610448565b604080516001608060020a039092168252519081900360200190f35b6100fb60043560243560443560643560843560a435610457565b34801561019a57600080fd5b50610127610b06565b3480156101af57600080fd5b506100fb60043564ffffffffff60243516610b15565b3480156101d157600080fd5b50610127610cfc565b3480156101e657600080fd5b506101ef610d0b565b60408051918252519081900360200190f35b34801561020d57600080fd5b506100fb600160a060020a0360043516602435610d11565b34801561023157600080fd5b506100fb600435602435610e79565b34801561024c57600080fd5b506100fb6110c6565b34801561026157600080fd5b506100fb600160a060020a036004351661116b565b34801561028257600080fd5b506100fb600435611262565b34801561029a57600080fd5b506100fb600160a060020a03600435166113eb565b3480156102bb57600080fd5b5061015861147c565b3480156102d057600080fd5b506100fb600435611492565b3480156102e857600080fd5b506100fb600160a060020a0360043516611648565b34801561030957600080fd5b506100fb6004356116d9565b600054600160a060020a03163314610377576040805160e560020a62461bcd02815260206004820152602660248201526000805160206124b7833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600454608060020a90046001608060020a03161561042b576040805160e560020a62461bcd02815260206004820152604860248201527f416c6c20626574732073686f756c642062652070726f6365737365642028736560448201527f74746c6564206f7220726566756e64656429206265666f72652073656c662d6460648201527f657374727563742e000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b600054600160a060020a0316ff5b600354600160a060020a031681565b6004546001608060020a031681565b60008381526005602052604081206001810154909190819081908190819081906c010000000000000000000000009004600160a060020a03161561050b576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b34955060018c11801561051f575060648c11155b1515610575576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc1000086101580156105965750693f870857a3e0e38000008611155b15156105ec576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b60008d1180156106015750650100000000008d105b1515610657576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b438b10156106af576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b8a8a604051602001808364ffffffffff1664ffffffffff167b01000000000000000000000000000000000000000000000000000000028152600501828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106107325780518252601f199092019160209182019101610713565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209450600185601b8b8b604051600081526020016040526040518085600019166000191681526020018460ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af11580156107d6573d6000803e3d6000fd5b5050604051601f190151600354600160a060020a039081169116149050610847576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60288c1161089a57603f7920000000001000000000080000000004000000000200000000018e027e01041041041041041041041041041041041041041041041041041041041041160693508c925061092a565b60008d1180156108aa57508b8d11155b1515610926576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8c93505b610935868d866117c7565b60025491935091508601821115610996576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600480546001608060020a03608060020a808304821686018216810292821692909217808216850182166fffffffffffffffffffffffffffffffff19919091161792839055303183821692909304811691909101161115610a41576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b604080518b815290517f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f879181900360200190a150509284556001909301805460ff191660ff998a161761ff00191661010099909416989098029290921766ffffffffff00001916620100004364ffffffffff90811691909102919091176bffffffffff0000000000000019166701000000000000009190921602176bffffffffffffffffffffffff16336c010000000000000000000000000217909555505050505050565b600654600160a060020a031681565b600654600090819081908190600160a060020a03163314610ba6576040805160e560020a62461bcd02815260206004820152602c60248201527f4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e60448201527f6f6e2d63726f75706965722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b85604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610bf55780518252601f199092019160209182019101610bd6565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000818152600590925292902091975090955050505060fa64ffffffffff861601431115610cbb576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b610cc5604861190f565b610cd0846044611e90565b909250905064ffffffffff8516408214610ce957600080fd5b610cf483878361211e565b505050505050565b600054600160a060020a031681565b60025481565b600054600160a060020a03163314610d73576040805160e560020a62461bcd02815260206004820152602660248201526000805160206124b7833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115610df1576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a90930481169290920190911682011115610e6a576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b610e758282836123bf565b5050565b60065460009081908190600160a060020a03163314610f08576040805160e560020a62461bcd02815260206004820152602c60248201527f4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e60448201527f6f6e2d63726f75706965722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b84604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610f575780518252601f199092019160209182019101610f38565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526005909252929020600181015492975095505062010000900464ffffffffff169250504382109050611026576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b60fa81014311156110a7576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b804084146110b457600080fd5b6110bf82868661211e565b5050505050565b600154600160a060020a0316331461113a576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206f6e6c792061636365707420707265617070726f766564206e657720604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600054600160a060020a031633146111cd576040805160e560020a62461bcd02815260206004820152602660248201526000805160206124b7833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600054600160a060020a0382811691161415611233576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031633146112c4576040805160e560020a62461bcd02815260206004820152602660248201526000805160206124b7833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115611342576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a909304811692909201909116820111156113bb576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600480546fffffffffffffffffffffffffffffffff1981166001608060020a039182169390930116919091179055565b600054600160a060020a0316331461144d576040805160e560020a62461bcd02815260206004820152602660248201526000805160206124b7833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600454608060020a90046001608060020a031681565b60008181526005602052604081208054909180821515611522576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600184015464ffffffffff620100009091041660fa0143116115b4576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000845560018401546115d490849060ff808216916101009004166117c7565b600480546001608060020a03608060020a8083048216869003821602918116919091178082168490039091166fffffffffffffffffffffffffffffffff1991909116179055600186015491935091506110bf90600160a060020a036c010000000000000000000000009091041684806123bf565b600054600160a060020a031633146116aa576040805160e560020a62461bcd02815260206004820152602660248201526000805160206124b7833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461173b576040805160e560020a62461bcd02815260206004820152602660248201526000805160206124b7833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e380000081106117c2576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600255565b60008060008360001080156117dc5750848411155b1515611832576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b67016345785d8a0000861015611849576000611852565b66038d7ea4c680005b91505060648504660110d9316ec0008110156118725750660110d9316ec0005b8082018610156118f2576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b838583838903030281151561190357fe5b04925050935093915050565b8035600090811a9080808080808080808060f78b101561199f576040805160e560020a62461bcd02815260206004820152602260248201527f52656365697074206c656166206c6f6e676572207468616e203535206279746560448201527f732e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9a8a0160f519019a8b3560001a9950607f8a116119c15760018c019b50611a32565b60808a101580156119d3575060b78a11155b1515611a29576040805160e560020a62461bcd02815260206004820152601660248201527f5061746820697320616e20524c5020737472696e672e00000000000000000000604482015290519081900360640190fd5b9a8901607e19019a5b8b3560001a985060b98914611ade576040805160e560020a62461bcd028152602060048201526044602482018190527f5265636569707420737472696e6720697320616c77617973206174206c656173908201527f7420323536206279746573206c6f6e672c20627574206c657373207468616e2060648201527f36346b2e00000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b60039b909b019a8b3560001a975060f98814611b6a576040805160e560020a62461bcd02815260206004820152603d60248201527f5265636569707420697320616c77617973206174206c6561737420323536206260448201527f79746573206c6f6e672c20627574206c657373207468616e2036346b2e000000606482015290519081900360840190fd5b60039b909b019a8b3560001a965060018714611bd0576040805160e560020a62461bcd02815260206004820152601960248201527f5374617475732073686f756c6420626520737563636573732e00000000000000604482015290519081900360640190fd5b60019b909b019a8b3560001a9550607f8611611bf15760018c019b50611c62565b60808610158015611c03575060b78611155b1515611c59576040805160e560020a62461bcd02815260206004820181905260248201527f43756d756c61746976652067617320697320616e20524c5020737472696e672e604482015290519081900360640190fd5b9a8501607e19019a5b8b3560001a945060b98514611ce7576040805160e560020a62461bcd02815260206004820152602660248201527f426c6f6f6d2066696c74657220697320616c776179732032353620627974657360448201527f206c6f6e672e0000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6101039b909b019a8b3560001a935060f88414611d74576040805160e560020a62461bcd02815260206004820152602660248201527f4c6f6773206c697374206973206c657373207468616e2032353620627974657360448201527f206c6f6e672e0000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60029b909b019a8b3560001a925060f88314611e00576040805160e560020a62461bcd02815260206004820152602660248201527f4c6f6720656e747279206973206c657373207468616e2032353620627974657360448201527f206c6f6e672e0000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60029b909b019a8b3560001a915060948214611e66576040805160e560020a62461bcd02815260206004820152601960248201527f41646472657373206973203230206279746573206c6f6e672e00000000000000604482015290519081900360640190fd5b50600a198b0135600160a060020a0316308114611e8257600080fd5b505050505050505050505050565b6040516000908190818080808080805b601d198b013561ffff169550851515611eb857611f9c565b601b198b013561ffff16945060208501861015611f1f576040805160e560020a62461bcd02815260206004820152601360248201527f536869667420626f756e647320636865636b2e00000000000000000000000000604482015290519081900360640190fd5b60048b81019b8601013593508315611f81576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f6e2d656d707479206861736820736c6f742e000000000000000000000000604482015290519081900360640190fd5b858b89378b858901528588209b50859650858b019a50611ea0565b508a9750505083850161ffff601b198a01358116906019198b013516808701821015612012576040805160e560020a62461bcd02815260206004820152601360248201527f536869667420626f756e647320636865636b2e00000000000000000000000000604482015290519081900360640190fd5b60068b019a50818b84376120298184018989612472565b8183209b509981019961ffff601d198c013581169650601b198c0135169450602085018610156120a3576040805160e560020a62461bcd02815260206004820152601360248201527f536869667420626f756e647320636865636b2e00000000000000000000000000604482015290519081900360640190fd5b60048b81019b8601013593508315612105576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f6e2d656d707479206861736820736c6f742e000000000000000000000000604482015290519081900360640190fd5b858b893750505050830196909652509390932093915050565b8254600184015460ff808216916101008104909116906c010000000000000000000000009004600160a060020a031660008080808080808a15156121d2576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008e600001819055508c8c604051602001808381526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061223b5780518252601f19909201916020918201910161221c565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912099508c92508991505081151561227657fe5b0695506122848b8b8b6117c7565b90955093506000925082915060288a116122c45760018e0154600287900a6701000000000000009091041664ffffffffff16156122bf578492505b6122d0565b888610156122d0578492505b600480546001608060020a03608060020a8083048216899003821602911617905567016345785d8a00008b10612349576103e88a8881151561230e57fe5b0481151561231857fe5b06905080151561234957600480546fffffffffffffffffffffffffffffffff1981169091556001608060020a031691505b600082111561239257604080518381529051600160a060020a038a16917fc388db0e8aa560a59633c094a0d0aa21322cd6234836fd5bac00fc5ae63b5783919081900360200190a25b6123af88848401156123a6578385016123a9565b60015b856123bf565b5050505050505050505050505050565b604051600160a060020a0384169083156108fc029084906000818181858888f193505050501561242d57604080518281529051600160a060020a038516917fd4f43975feb89f48dd30cabbb32011045be187d1e11c8ea9faa43efc35282519919081900360200190a261246d565b604080518381529051600160a060020a038516917fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d919081900360200190a25b505050565b60005b60208210612497578251845260209384019390920191601f1990910190612475565b50905182516020929092036101000a600019018019909116911617905256004f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a7230582097a658d8cae8d3fc8b1b58edee5c8be8d1da3ad9373a1dfda4a8ebfa493423dd0029

   Swarm Source:
bzzr://97a658d8cae8d3fc8b1b58edee5c8be8d1da3ad9373a1dfda4a8ebfa493423dd

 

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.