Sponsored:   Color Platform: Decentralized App Store - Special Airdrop For Everyone (~17 Sep), Register NOW!
Contract Overview | Dice2Win
Balance: 337.170312329153392492 Ether
Ether Value: $79,056.32 (@ $234.47/ETH)
Transactions: 102173 txns
 Latest 25 txns From a total of 102173 Transactions
(+1 PendingTxn)

TxHash Age From To Value [TxFee]
0x7b563af0b339f0c017e9b9ecc0162f0bca4ffb81e23a6287eba4dd7a97ebe92b(pending)0xfcda5179437e2a3f142c97407b34542c0cfc67f0  IN  0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050.01 Ether(Pending)
0xebd9085225adf6ba5101b33163d2651f457fd0bc261770425943c98bb8a7c3e9 30 secs ago0x4c101f57dc0e6e8f0e73cfad17e5a336f782a5bb  IN   Dice2Win0.05 Ether0.00082142
0xdb8c37d740fb215d18fd4637ec6d2fdd482859c725a4d1cf8011ff17c9690ed6 30 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000471268
0x3d61dfff82a23daf9ef2c0c6627b4a7acad93bcf84df901b12ee274c7ee4a958 59 secs ago0x5618a0c3097014fd8fbe26d723710ca31b34c6c6  IN   Dice2Win0.1 Ether0.00123294
0x7e60ebb378968e2de0c0a61e54f5715eb72e0cb3939e101be1221a164d8d590a1 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.00047306
0xb8b2111aec92689f7b983b624d0f0f8bf9a3306239aa63b93f351b2de5f4bfd72 mins ago0x5618a0c3097014fd8fbe26d723710ca31b34c6c6  IN   Dice2Win0.1 Ether0.00123582
0x5f77a2e6433fac76d8bcc2a32bc6499213353b58899393ee62dbd547aafcf41e2 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.00047306
0x5476d656e89b5a2af141e840868635439cbe73e106aba379fc82d2f0aad3cfcf3 mins ago0x5618a0c3097014fd8fbe26d723710ca31b34c6c6  IN   Dice2Win0.1 Ether0.00123582
0x54fd42eadbb3404fab4beac796ddb8ed667fcf3580579cddcbfc3dfd45c780284 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000472164
0x92665192255ce0b2b3161f7d75a5cd67fb43a807ed93c7bfea922f2054405b7c4 mins ago0x5618a0c3097014fd8fbe26d723710ca31b34c6c6  IN   Dice2Win0.1 Ether0.00123582
0x2cca6fbe74623444a6478e3cf8509b629b92c4ea0d9d2953ea09e6d4c8b707626 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000471912
0xc8ca3ae1b4fc274ae0417b0d4855e299b7297bf35e8a290005244055d16e34cc7 mins ago0x5618a0c3097014fd8fbe26d723710ca31b34c6c6  IN   Dice2Win0.08 Ether0.00123597
0x936cc7db7ebed33c82c118cb17a9a3c608851f299009d177ba7dd847af201e8011 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000472724
0x627645b936bad925985d0a3c25fcc27c9e0252593fb75f1d0137776f95e3305212 mins ago0x5618a0c3097014fd8fbe26d723710ca31b34c6c6  IN   Dice2Win0.1 Ether0.00123486
0x8669124e069282624965fdefad1e6e720b145c586f8c06ed80a05d9cf361d41413 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000471982
0x27b8457403e0e2a2e9bd1bfd0c21cde64893aeadf128dff233d06ca87ff4779513 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.00047306
0xed00d8f46d370923daa343107a086807d266214e9c5b7b897d64129b45c8900f14 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000472724
0x1f4b5e0375b33ba5b030051a28d16e3f5601caeb9e5e1e63ff75c71bda14d82414 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000467404
0xdbd86138945e206ef77fd09b4a5ee4c57c17c04614fca14dd02b03d84a99e74415 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.00046767
0x2e290a7ebec27b71b42c5856bf2e8a94cb991dbbe282b94a338041bf167983bb16 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000472724
0xe81229ba2db13a24251e6c08af79bad6c25bb1c706d084890c795c0be4fa3db316 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000467334
0xd39ac284924950d5060f74880d1310c6a5a8158caac0fe7dedeb1800a35c265916 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000471646
0xb373b63f37acc856d38c931326fe7eeb84891f52a6f7dc3c2db82801e17c932816 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   Dice2Win0 Ether0.000472724
0x2e809b4b1cb71c40d60ae4fcd880704f4ead04ce5c2487da5be15e89a060d77d16 mins ago0xd450c5eab94942dc9e34274cffd1c6e287a3a0d3  IN   Dice2Win0.01 Ether0.001232205
0xbd7d59ffc9bb8641a25dd272fb7ef43ca70f013190275750aaed128d9caa95dd16 mins ago0x5618a0c3097014fd8fbe26d723710ca31b34c6c6  IN   Dice2Win0.1 Ether0.00123582
[ 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
0xdb8c37d740fb215d18fd4637ec6d2fdd482859c725a4d1cf8011ff17c9690ed66392736 30 secs ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c60.1764 Ether
0x7e60ebb378968e2de0c0a61e54f5715eb72e0cb3939e101be1221a164d8d590a63927331 min ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c60.1764 Ether
0x5f77a2e6433fac76d8bcc2a32bc6499213353b58899393ee62dbd547aafcf41e63927292 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c60.1764 Ether
0x54fd42eadbb3404fab4beac796ddb8ed667fcf3580579cddcbfc3dfd45c7802863927174 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c60.1764 Ether
0x2cca6fbe74623444a6478e3cf8509b629b92c4ea0d9d2953ea09e6d4c8b7076263927046 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c60.14256 Ether
0x936cc7db7ebed33c82c118cb17a9a3c608851f299009d177ba7dd847af201e80639269011 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c61 wei
0x8669124e069282624965fdefad1e6e720b145c586f8c06ed80a05d9cf361d414639268013 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xd450c5eab94942dc9e34274cffd1c6e287a3a0d30.0291 Ether
0x27b8457403e0e2a2e9bd1bfd0c21cde64893aeadf128dff233d06ca87ff47795639268013 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c60.1764 Ether
0xed00d8f46d370923daa343107a086807d266214e9c5b7b897d64129b45c8900f639267814 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xdb837bc09f0f6367a540df7cc0ce110eec2931e81 wei
0x1f4b5e0375b33ba5b030051a28d16e3f5601caeb9e5e1e63ff75c71bda14d824639267614 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x37d320fdf9e2e8760da089f66a9c50d45588e1a21 wei
0xdbd86138945e206ef77fd09b4a5ee4c57c17c04614fca14dd02b03d84a99e744639267315 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x34241da47768670cf372da49849c0bb86e6b3aae0.208421052631578947 Ether
0x2e290a7ebec27b71b42c5856bf2e8a94cb991dbbe282b94a338041bf167983bb639267016 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c61 wei
0xe81229ba2db13a24251e6c08af79bad6c25bb1c706d084890c795c0be4fa3db3639267016 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x34241da47768670cf372da49849c0bb86e6b3aae1 wei
0xd39ac284924950d5060f74880d1310c6a5a8158caac0fe7dedeb1800a35c2659639267016 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xd450c5eab94942dc9e34274cffd1c6e287a3a0d31 wei
0xb373b63f37acc856d38c931326fe7eeb84891f52a6f7dc3c2db82801e17c9328639267016 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c61 wei
0x031fe17a35521a2f5cb445c8d4a5367ff665c9da16e588e7b5f58e4f0389ae3d639266717 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xdb837bc09f0f6367a540df7cc0ce110eec2931e80.066 Ether
0x05e8bdc4c53e6fba300dc849876635c50e2a04a0c546ab6c1b2e94da76fe15b2639266517 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xf21fef621d17a114a364df9287df592e0643ba680.1584 Ether
0x3f9e29cca915bfd84feb3b5da8106a80bab1727fbf954e8fe2765720845de1cd639266517 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x34241da47768670cf372da49849c0bb86e6b3aae1 wei
0xc23f09fa68a9d840d18dc84f519df23d9e16d5416bf686c771a0b4e2efe5a7bc639266418 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x34241da47768670cf372da49849c0bb86e6b3aae1 wei
0x138c5c001b500eaa9cf7d3a97e4810112fec292d33c3be30d61824a7525e4e1b639266219 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xdb837bc09f0f6367a540df7cc0ce110eec2931e81 wei
0x67870f0330e5db7d9659273454c812d5659928f5bad61b19b4372733897a504a639266219 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xf21fef621d17a114a364df9287df592e0643ba681 wei
0x426abff270829bc814e862ad2ce550eec8220dc793a97cfa4d20072a2c23f501639266019 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c61 wei
0x95444e864f71d8e266135935a9dac334d2008a267c3c756e1df2ecee5319b70d639266019 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xf21fef621d17a114a364df9287df592e0643ba681 wei
0x5ae411cae66381e23bcfda6a4e25eb9e8ab398351d17d9babadec17eca00350b639265322 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050xf21fef621d17a114a364df9287df592e0643ba680.0394 Ether
0xc0770ac279b006254ccdb5a9bedfc6bb3feb3e1176543a7c7b01aa36847f287b639265322 mins ago0xd1ceeeeee83f8bcf3bedad437202b6154e9f54050x5618a0c3097014fd8fbe26d723710ca31b34c6c60.196 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 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.