Sponsored:   Color - Revolutionizing the Dapp Ecosystem, Bounty & Airdrop, Get 240,000 COL NOW!
Contract Overview
Balance: 232.540624188890274759 Ether
Ether Value: $65,888.06 (@ $283.34/ETH)
Transactions: 118201 txns
Misc
Address Watch: Add To Watch List
Contract Creator: 0x9607e7837df2961faaddb8f18a3560126fed696bat txn 0x46e6d46886cacfa0d25612aa7a0c70fedcf67ec946d18fdd2edc06a417cf6cde
Token Balances:
 Latest 25 txns from a total Of 118201 transactions
(+5 PendingTxns)

TxHash Age From To Value [TxFee]
0xbaa39695be24a3bb1912a90d59b2699da32b50c8e5f9f9da93ee29aa67cb5064(pending)0x833362cff67f8efd57cb1bc2793dce3f1cf0606b  IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether(pending)
0x2155fe0666fd7d359066e8cfe494d34b89523bff642e219c2a2c73d5b51bfab6(pending)0xbfa5be039344da3abdb785beb06f66a608d2d886  IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether(pending)
0xca94b98241b6d54a8c14e4bb52cd5f7e4de3fffebdee57bd90bfb703fb1aea07(pending)0xbeba30e7f05581fd7330a58743b0331bd7dd5508  IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether(pending)
0x669173363aa3464fbc330b93fd4f0474df974cc009639e42e9998a8c2e7e29dc(pending)0xf5e0967fab3c01405417f769b15898f708f11e3c  IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.15 Ether(pending)
0x49141ee1687982744e2e323e7bfd6baa9b07a55f155b4dc79128d8b2fd59b8ca(pending)0x37d320fdf9e2e8760da089f66a9c50d45588e1a2  IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether(pending)
0xd402e6d884f0b276425c2239ec4eb28d7d7c0a62709aa3d531ae445ed65919cc 31 secs ago0xa215f3b27f46b94c17d99bf95869c40a5890ea69  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.000325168
0x40a8e77ed3771066e77079e11cb2e005a8b651a6ff83124411d6e56dbc02030b 31 secs ago0x978fe0cc6923af50b83f9a850206121160867419  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.00064892
0x9ba308106cdb152b4208b5a2dccb8041c9238237d130d6f9f3fa070414ac26eb 52 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.000223503
0xb5af649b6eacaf8e47723564e536ca1e7fbb4d983ad81e01083c43b41c3bbf6e 59 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.000223335
0x190cc0b543672f662367fc5fe57faa6a52748d3ad944faec023de8e1c0421b24 59 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.000223503
0x223a8edd4b9bff78c4ed50a0e7f857069b83ced9c368426ad1e06113674fb1e1 59 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.000222348
0xa33ecfc785195131d00b5e213010204361490dd96f3e70a0814f89ae4fecd2ed 59 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.000223503
0x467b0fcd72cdcc193a733454466e38e4927db91c35a7eec25e564d049d1da5b9 59 secs ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.000222796
0xcd82ff1c525bcf07c84ef968516dc80de87dee113f9ed81975a5521c77d968531 min ago0xa215f3b27f46b94c17d99bf95869c40a5890ea69  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.000325168
0xb3eb6594a5c2571ca9d9406ba5da0930e1bd1dacdb1340bf1635e776f495ffea1 min ago0xc93a9cab33975869e94f458ce590de4643d102c4  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.2 Ether0.0004866
0xc982d58261a79cd7e593bb21c137688c8a22a1df9a44c1f785d0c95496dd116d1 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.000223503
0x17e4af74cc2f3d072fd17c90ba27c0e4d4a64fb130c568eb2ee26429685409021 min ago0x345c1e7575648317ee597afd198ca4ad0fb1e110  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.25 Ether0.000650848
0xd299f1cc356b1dc4ea53718a4702a88bb07b1135322d1dbd48e4d7b42065425c1 min ago0x978fe0cc6923af50b83f9a850206121160867419  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.000648408
0x3c7f164fae3fe56c8ca82a1b5e92b24ceabd8f1f8bc1e37dd6b7ad1e470bcfba1 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.000223503
0x755135467f42d36d38a1e7f2808fbabdc888f9eb854b4cea3947d6a1c171117e1 min ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.000222985
0xe4b9926af29230e16e2ef555047438dacdd9464fdc0c7d0c550a882063d67b361 min ago0xf9c9ef9a9a494adff0ab70cf29d7a48dec3c6169  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.15 Ether0.0006488
0x811f419cb5950c417a53aafe218b1dc6adb9ce8b8ac1e657a1269367eba3ebdf2 mins ago0x978fe0cc6923af50b83f9a850206121160867419  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.000648408
0x66d17ade02e9336ad3a801b59709174f90337dcd200bc3e93eb3270f391e7e7e2 mins ago0x9083b81de64ef9a854d828d07054618aca6080b1  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.4 Ether0.000648288
0x26e1f8e0b059bca6a76e58e500d5c5a2ea8230c571dd63bf9272edb0721d9a892 mins ago0x00000000c0293c8ca34dac9bcc0f953532d34e4d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.000223335
0xe1d6392d8dcdd6a4e4b94f7fcb34e990e2dc7c9a7d6dc74160aadebe894799962 mins ago0xa215f3b27f46b94c17d99bf95869c40a5890ea69  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.000325424
[ 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
0x9ba308106cdb152b4208b5a2dccb8041c9238237d130d6f9f3fa070414ac26eb6156375 52 secs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xa215f3b27f46b94c17d99bf95869c40a5890ea690.11025 Ether
0xb5af649b6eacaf8e47723564e536ca1e7fbb4d983ad81e01083c43b41c3bbf6e6156374 59 secs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc93a9cab33975869e94f458ce590de4643d102c41 wei
0x190cc0b543672f662367fc5fe57faa6a52748d3ad944faec023de8e1c0421b246156374 59 secs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x345c1e7575648317ee597afd198ca4ad0fb1e1100.2773125 Ether
0x223a8edd4b9bff78c4ed50a0e7f857069b83ced9c368426ad1e06113674fb1e16156374 59 secs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x978fe0cc6923af50b83f9a8502061211608674191 wei
0xa33ecfc785195131d00b5e213010204361490dd96f3e70a0814f89ae4fecd2ed6156374 59 secs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xf9c9ef9a9a494adff0ab70cf29d7a48dec3c61690.295 Ether
0x467b0fcd72cdcc193a733454466e38e4927db91c35a7eec25e564d049d1da5b96156374 59 secs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x978fe0cc6923af50b83f9a8502061211608674191 wei
0xc982d58261a79cd7e593bb21c137688c8a22a1df9a44c1f785d0c95496dd116d61563721 min ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9083b81de64ef9a854d828d07054618aca6080b11.185 Ether
0x3c7f164fae3fe56c8ca82a1b5e92b24ceabd8f1f8bc1e37dd6b7ad1e470bcfba61563701 min ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xa215f3b27f46b94c17d99bf95869c40a5890ea690.11025 Ether
0x755135467f42d36d38a1e7f2808fbabdc888f9eb854b4cea3947d6a1c171117e61563701 min ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc93a9cab33975869e94f458ce590de4643d102c41 wei
0x26e1f8e0b059bca6a76e58e500d5c5a2ea8230c571dd63bf9272edb0721d9a8961563682 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9083b81de64ef9a854d828d07054618aca6080b11 wei
0xa8c0d656c0667e80a5e5bfdc8be9dfa15b3ff503315d0f69db6a1c5b7b608d7c61563672 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xa215f3b27f46b94c17d99bf95869c40a5890ea690.11025 Ether
0x346ecee27bb08cdb250e1e3bf03bf9736aff7891c51c3e0ce722f82bb454891561563653 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc93a9cab33975869e94f458ce590de4643d102c41 wei
0xbbbedddab3e5e684632b53abae3845273361bf07567aada9e54dac7cef21489661563653 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x978fe0cc6923af50b83f9a8502061211608674191 wei
0x6f3c0a36484220e4274118fa171375434292c788d4346083d9a61e35cf36131961563653 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9083b81de64ef9a854d828d07054618aca6080b11 wei
0x4135df33803a2a0e874bdd66ee1cb5d183eaf95af5a5df37b03c83f0da6e9a5261563604 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xa215f3b27f46b94c17d99bf95869c40a5890ea690.11025 Ether
0x4a795b1de558c88dc7c331ef02033da7fb9b354bcc049114aa17342e2ced9b2f61563585 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xf9c9ef9a9a494adff0ab70cf29d7a48dec3c61691 wei
0xf5f89d669c663cd96fd3d751b90d4f1c0fc2112b2ded7a6a983f5d459d8f690261563546 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9083b81de64ef9a854d828d07054618aca6080b10.196 Ether
0xb2881798152602c936137eca9928cb7aa45378f586afae24cf2409732c181df061563536 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x978fe0cc6923af50b83f9a8502061211608674191 wei
0x6b409af44507a29b7d852832cee6415f2c144c0597c81318c945ad4e80d8c3a361563507 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc93a9cab33975869e94f458ce590de4643d102c40.1188 Ether
0x67d4acf1b61a512dd47dca208fc5d54282a42d9a4455e71aab8ee938e8c1d42661563507 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9083b81de64ef9a854d828d07054618aca6080b10.196 Ether
0x42f06fbd92f72628a178bcc2e90d5d8c9393cc075a3da8b3951c3faa4e54d1e661563487 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x978fe0cc6923af50b83f9a8502061211608674191 wei
0x8d571843f9fb11d3c9c716e224193532a82fffe1cd658877625983124626e26b61563477 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xa215f3b27f46b94c17d99bf95869c40a5890ea690.11025 Ether
0xa94b098ec50d29fc67568b701d049f01b7094d5ed36e12fafe5b1eb083364dbf61563458 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x8cb4ed384f99d35311f21d3126e93c7dfe74a32d1 wei
0x223ac9bff1c5d3e4a48f820b6b6a3720f287f6e894d942a507696cdd3125455a61563458 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9083b81de64ef9a854d828d07054618aca6080b10.196 Ether
0xe968b7f505a433e54b872d66243b5b06c98398077c7844a981a3a20c347c821361563438 mins ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xa215f3b27f46b94c17d99bf95869c40a5890ea690.11025 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: Dice2Win
Compiler Version: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.23;

// * dice2.win - fair games that pay Ether.
//
// * Ethereum smart contract, deployed at 0xD1CEeeefA68a6aF0A5f6046132D986066c7f9426.
//
// * 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;

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

    // Constructor. Deliberately does not take any parameters.
    constructor () public {
        owner = msg.sender;
        secretSigner = DUMMY_ADDRESS;
    }

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

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

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

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

    // Settlement transaction - can in theory be issued by anyone, but is designed to be
    // handled by the dice2.win croupier bot. To settle a bet with a specific "commit",
    // settleBet should supply a "reveal" number that would Keccak256-hash to
    // "commit". clean_commit is some previously 'processed' bet, that will be moved into
    // 'clean' state to prevent blockchain bloat and refund some gas.
    function settleBet(uint reveal, uint cleanCommit) external {
        // "commit" for bet settlement can only be obtained by hashing a "reveal".
        uint commit = uint(keccak256(abi.encodePacked(reveal)));

        // Fetch bet parameters into local variables (to save gas).
        Bet storage bet = bets[commit];
        uint amount = bet.amount;
        uint modulo = bet.modulo;
        uint rollUnder = bet.rollUnder;
        uint placeBlockNumber = bet.placeBlockNumber;
        address gambler = bet.gambler;

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

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

        // 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, blockhash(placeBlockNumber)));

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

        // Clear storage of some previous bet.
        if (cleanCommit == 0) {
            return;
        }

        clearProcessedBet(cleanCommit);
    }

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

    // A helper routine to bulk clean the storage.
    function clearStorage(uint[] cleanCommits) external {
        uint length = cleanCommits.length;

        for (uint i = 0; i < length; i++) {
            clearProcessedBet(cleanCommits[i]);
        }
    }

    // Helper routine to move 'processed' bets into 'clean' state.
    function clearProcessedBet(uint commit) private {
        Bet storage bet = bets[commit];

        // Do not overwrite active bets with zeros; additionally prevent cleanup of bets
        // for which commit signatures may have not expired yet (see whitepaper for details).
        if (bet.amount != 0 || block.number <= bet.placeBlockNumber + BET_EXPIRATION_BLOCKS) {
            return;
        }

        // Zero out the remaining storage (amount was zeroed before, delete would consume 5k
        // more gas).
        bet.modulo = 0;
        bet.rollUnder = 0;
        bet.placeBlockNumber = 0;
        bet.mask = 0;
        bet.gambler = address(0);
    }

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

    Contract ABI  
[{"constant":false,"inputs":[{"name":"reveal","type":"uint256"},{"name":"cleanCommit","type":"uint256"}],"name":"settleBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secretSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"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":"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":"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":"cleanCommits","type":"uint256[]"}],"name":"clearStorage","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"}]

  Contract Creation Code Switch To Opcodes View
608060405234801561001057600080fd5b5060008054600160a060020a031990811633179091556003805490911673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1790556119da806100546000396000f3006080604052600436106100e55763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630d2cbe1381146100e757806341c0e1b5146101025780634d61537f1461011757806357246d23146101485780635e83b463146101795780638da5cb5b14610193578063b539cd55146101a8578063c1075329146101cf578063d06c54fb146101f3578063d579fd4414610208578063d6d30a5114610229578063d702087f14610241578063df88126f14610262578063e1fdb4b414610277578063ef1155421461028f578063fbd668a9146102af575b005b3480156100f357600080fd5b506100e56004356024356102c7565b34801561010e57600080fd5b506100e5610765565b34801561012357600080fd5b5061012c610889565b60408051600160a060020a039092168252519081900360200190f35b34801561015457600080fd5b5061015d610898565b604080516001608060020a039092168252519081900360200190f35b6100e560043560243560443560643560843560a4356108a7565b34801561019f57600080fd5b5061012c610f23565b3480156101b457600080fd5b506101bd610f32565b60408051918252519081900360200190f35b3480156101db57600080fd5b506100e5600160a060020a0360043516602435610f38565b3480156101ff57600080fd5b506100e56110a0565b34801561021457600080fd5b506100e5600160a060020a0360043516611145565b34801561023557600080fd5b506100e560043561123c565b34801561024d57600080fd5b506100e5600160a060020a03600435166113c5565b34801561026e57600080fd5b5061015d611456565b34801561028357600080fd5b506100e560043561146c565b34801561029b57600080fd5b506100e56004803560248101910135611629565b3480156102bb57600080fd5b506100e560043561165e565b6000806000806000806000806000806000806000808f604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061032b5780518252601f19909201916020918201910161030c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600190049d50600560008f81526020019081526020016000209c508c600001549b508c60010160009054906101000a900460ff1660ff169a508c60010160019054906101000a900460ff1660ff1699508c60010160029054906101000a900464ffffffffff1664ffffffffff1698508c600101600c9054906101000a9004600160a060020a031697508b600014151515610462576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b4389106104df576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b60fa8901431115610560576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008d600001819055508f8940604051602001808381526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106105ca5780518252601f1990920191602091820191016105ab565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912099508d92508991505081151561060557fe5b0695506106138c8c8c61174c565b90955093506000925082915060288b116106535760018d0154600287900a6701000000000000009091041664ffffffffff161561064e578492505b61065f565b8986101561065f578492505b600480546001608060020a03608060020a8083048216899003821602911617905567016345785d8a00008c106106d8576103e88b8881151561069d57fe5b048115156106a757fe5b0690508015156106d857600480546fffffffffffffffffffffffffffffffff1981169091556001608060020a031691505b600082111561072157604080518381529051600160a060020a038a16917fc388db0e8aa560a59633c094a0d0aa21322cd6234836fd5bac00fc5ae63b5783919081900360200190a25b61073e888484011561073557838501610738565b60015b85611894565b8e151561074a57610753565b6107538f611947565b50505050505050505050505050505050565b600054600160a060020a031633146107c7576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600454608060020a90046001608060020a03161561087b576040805160e560020a62461bcd02815260206004820152604860248201527f416c6c20626574732073686f756c642062652070726f6365737365642028736560448201527f74746c6564206f7220726566756e64656429206265666f72652073656c662d6460648201527f657374727563742e000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b600054600160a060020a0316ff5b600354600160a060020a031681565b6004546001608060020a031681565b60008381526005602052604081206001810154909190819081908190819081906c010000000000000000000000009004600160a060020a03161561095b576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b34955060018c11801561096f575060648c11155b15156109c5576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc1000086101580156109e65750693f870857a3e0e38000008611155b1515610a3c576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b60008d118015610a515750650100000000008d105b1515610aa7576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b438b1015610aff576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b8a8a604051602001808364ffffffffff1664ffffffffff167b01000000000000000000000000000000000000000000000000000000028152600501828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610b825780518252601f199092019160209182019101610b63565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209450600185601b8b8b604051600081526020016040526040518085600019166000191681526020018460ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610c26573d6000803e3d6000fd5b5050604051601f190151600354600160a060020a039081169116149050610c97576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60288c11610cea57603f7920000000001000000000080000000004000000000200000000018e027e01041041041041041041041041041041041041041041041041041041041041160693508c9250610d7a565b60008d118015610cfa57508b8d11155b1515610d76576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8c93505b610d85868d8661174c565b60025491935091508601821115610de6576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600480546001608060020a03608060020a808304821686018216810292821692909217808216850182166fffffffffffffffffffffffffffffffff19919091161792839055303183821692909304811691909101161115610e91576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b50509284556001909301805460ff191660ff998a161761ff00191661010099909416989098029290921766ffffffffff00001916620100004364ffffffffff90811691909102919091176bffffffffff0000000000000019166701000000000000009190921602176bffffffffffffffffffffffff16336c010000000000000000000000000217909555505050505050565b600054600160a060020a031681565b60025481565b600054600160a060020a03163314610f9a576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115611018576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a90930481169290920190911682011115611091576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b61109c828283611894565b5050565b600154600160a060020a03163314611114576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206f6e6c792061636365707420707265617070726f766564206e657720604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600054600160a060020a031633146111a7576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600054600160a060020a038281169116141561120d576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461129e576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b303181111561131c576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a90930481169290920190911682011115611395576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600480546fffffffffffffffffffffffffffffffff1981166001608060020a039182169390930116919091179055565b600054600160a060020a03163314611427576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600454608060020a90046001608060020a031681565b600081815260056020526040812080549091808215156114fc576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600184015464ffffffffff620100009091041660fa01431161158e576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000845560018401546115ae90849060ff8082169161010090041661174c565b600480546001608060020a03608060020a8083048216869003821602918116919091178082168490039091166fffffffffffffffffffffffffffffffff19919091161790556001860154919350915061162290600160a060020a036c01000000000000000000000000909104168480611894565b5050505050565b8060005b818110156116585761165084848381811061164457fe5b90506020020135611947565b60010161162d565b50505050565b600054600160a060020a031633146116c0576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e38000008110611747576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600255565b60008060008360001080156117615750848411155b15156117b7576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b67016345785d8a00008610156117ce5760006117d7565b66038d7ea4c680005b91505060648504660110d9316ec0008110156117f75750660110d9316ec0005b808201861015611877576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b838583838903030281151561188857fe5b04925050935093915050565b604051600160a060020a0384169083156108fc029084906000818181858888f193505050501561190257604080518281529051600160a060020a038516917fd4f43975feb89f48dd30cabbb32011045be187d1e11c8ea9faa43efc35282519919081900360200190a2611942565b604080518381529051600160a060020a038516917fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d919081900360200190a25b505050565b600081815260056020526040902080541515806119795750600181015464ffffffffff620100009091041660fa014311155b156119835761109c565b60006001820155505056004f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a723058201464f74d7c3605a5e8b2937c9c63cbfffbe70748dcdb9a894d39f046ca08da190029

   Swarm Source:
bzzr://1464f74d7c3605a5e8b2937c9c63cbfffbe70748dcdb9a894d39f046ca08da19

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.