Contract 0xb7fC894F2B6764E114362d303E491709A85C01C2

 

Contract Overview

Balance:
0.320412053961507393 Ether

EtherValue:
$47.32 (@ $147.69/ETH)
TxHash Block Age From To Value [TxFee]
0xf57dec4546e18293655317134c92d655b5d100daadb77f188a99ea3a34cd802d72438169 hrs 14 mins ago0x9b5d687d96d0dadc5217b96bab029999da345e8c IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.000326053
0x40c23c2f465826bd860d9dfb77e21038dccbbf0f402ce9fd97fed2990bfd3e7a72438129 hrs 15 mins ago0x9f31c619adab0f9cd6f9b69e8343fc1ee0115d56 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.04 Ether0.000718965
0x806e8520dc55c100013b6fa8645aae5eae95205b21e5c6ca0ebaab962bd92c1772437789 hrs 26 mins ago0x9b5d687d96d0dadc5217b96bab029999da345e8c IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.0002079067
0x856e60baabeb82fd4eb6618471bf8d24e2af27ffac3337e1696a3c21615c6e3572437769 hrs 26 mins ago0x9f31c619adab0f9cd6f9b69e8343fc1ee0115d56 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.01 Ether0.00143793
0x962d5ac4b15f05ebe2ebeea1334335efe932e785699635936fbd38c9ce8cb01d724166521 hrs 15 mins ago0x9b5d687d96d0dadc5217b96bab029999da345e8c IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.0001808
0xd46d651fd11367592f5d3824d314575a75382c66bcf782c9d2888075ad992d40724141022 hrs 46 mins ago0xb477aceb6262b12a3c7b2445027a072f95c75bd3 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.01 Ether0.000717365
0x1a4a2bf910acb4433215c98e286537ebc748eef484b701c2006817c0d520ec04724141022 hrs 46 mins ago0x9b5d687d96d0dadc5217b96bab029999da345e8c IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.000222016
0x57bef819c8287dd2113748e8de6afe23aa4a9aa4b0e629d863c056a9465166c472294423 days 18 hrs ago0xf7705308097bfb2316581a7d571d201871781fc9 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.1 Ether0.000168855
0x7c244f306ff265ade753d0f9c3a9cc481cfd25d36e8cae4a60a31a139a0524b572286753 days 23 hrs ago0xb477aceb6262b12a3c7b2445027a072f95c75bd3 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.000137875
0x13895870a7ca88d1f3c3414b33e471d7420efc3baf97b0acc25fb73549c471a672253594 days 18 hrs ago0x9b5d687d96d0dadc5217b96bab029999da345e8c IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.000199744
0x52ba1dde509b33513716f49d1cbe295ccbc4f176976148c74a10e4f453e687d472253584 days 18 hrs ago0x09475262c6a1ffbedd480d2a15f35f978aaaac38 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.02 Ether0.000208155
0x59843fc923ea93da624d6f4b4795af06f41c9f838f76ffb803a718676a12739172253514 days 18 hrs ago0x09475262c6a1ffbedd480d2a15f35f978aaaac38 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.02 Ether0.000208155
0x1920747649b91dbc4a45c8dc0313013d6ba59f87510a5ba723057ec029907d3c72253504 days 18 hrs ago0x09475262c6a1ffbedd480d2a15f35f978aaaac38 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.04 Ether0.000208155
0x45b0e43454ab42e09567310d5d8b18cb506d49e4ddd99c332fbdcbd47b6fd44872253484 days 18 hrs ago0x09475262c6a1ffbedd480d2a15f35f978aaaac38 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.02 Ether0.000208155
0x82129ec7fbfc31d2b594f2eb084e9450a11b05c29381709ff48391e2b68929f872253444 days 18 hrs ago0x09475262c6a1ffbedd480d2a15f35f978aaaac38 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.04 Ether0.000208155
0x2e2794e0f9d52cbf1b6cb1c93f0fe700ae51b87acd6141b1cf2288d3662557e672253444 days 18 hrs ago0x9b5d687d96d0dadc5217b96bab029999da345e8c IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.000279488
0x03aa470d8fe1c09d78ceb9755119bc718b10d9962b0d9d209650bc059f1aaca872253434 days 18 hrs ago0x09475262c6a1ffbedd480d2a15f35f978aaaac38 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.02 Ether0.00061545
0x4f69d3dd613e01b4a727a41d608077b0d82bef86b112338728003b7e09de480572253434 days 18 hrs ago0x9b5d687d96d0dadc5217b96bab029999da345e8c IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.000279488
0xa6d0cee8a5cf22da0e30e246914904eb6c40d8c5d4e6b583f6eae21105a8ea6572253424 days 18 hrs ago0x09475262c6a1ffbedd480d2a15f35f978aaaac38 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.02 Ether0.00061513
0xdbb3fe45a8992a39eb6e8b44e0b0f72b9f1a36d0e046a3a8b8824a118f17cbb972253394 days 18 hrs ago0x9b5d687d96d0dadc5217b96bab029999da345e8c IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.000279368
0xab005625eb293eedcd0e9cacae0355f346a38e87cb6ed11a6dd3b46a1c2f4ce372253374 days 18 hrs ago0x09475262c6a1ffbedd480d2a15f35f978aaaac38 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.02 Ether0.000208155
0xf6aecd2fa2fe186ec78c35e8559ec3f357eca43a75e815b25e5c57c57f98d44b72253374 days 18 hrs ago0x09475262c6a1ffbedd480d2a15f35f978aaaac38 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.02 Ether0.00061481
0x7825a93c413c7c3ca841f09173a2a5f4f8431bc8f6e220cd0a595b8dc233104d72253374 days 18 hrs ago0x9b5d687d96d0dadc5217b96bab029999da345e8c IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.000244552
0x12349b3fbced655252ba77f599ccbbf17bee351468673d4f25f3e70d02c7010c72253354 days 18 hrs ago0x09475262c6a1ffbedd480d2a15f35f978aaaac38 IN  0xb7fc894f2b6764e114362d303e491709a85c01c20.02 Ether0.00061513
0xc17dcb61d039187e4c74b41358fe8a03dc21fdf24d2f433a8aac91d6a2b3c3ed72253334 days 18 hrs ago0x9b5d687d96d0dadc5217b96bab029999da345e8c IN  0xb7fc894f2b6764e114362d303e491709a85c01c20 Ether0.000244552
[ Download CSV Export 

Latest 25 Internal Transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0xf57dec4546e18293655317134c92d655b5d100daadb77f188a99ea3a34cd802d72438169 hrs 14 mins ago0xb7fc894f2b6764e114362d303e491709a85c01c20x9f31c619adab0f9cd6f9b69e8343fc1ee0115d560.0528 Ether
0x806e8520dc55c100013b6fa8645aae5eae95205b21e5c6ca0ebaab962bd92c1772437789 hrs 26 mins ago0xb7fc894f2b6764e114362d303e491709a85c01c20x9f31c619adab0f9cd6f9b69e8343fc1ee0115d560.013707692307692307 Ether
0x962d5ac4b15f05ebe2ebeea1334335efe932e785699635936fbd38c9ce8cb01d724166521 hrs 15 mins ago0xb7fc894f2b6764e114362d303e491709a85c01c20xb477aceb6262b12a3c7b2445027a072f95c75bd30.01 Ether
0x96edd1d631caf2794e580c310e88397f4c2952d010ef0ca21b6a15aeccb15fde72286633 days 23 hrs ago0xda548e0ad6c88652fd21c38f46edb58be3a7b1da0xb7fc894f2b6764e114362d303e491709a85c01c20.324682733448867802 Ether
0x13895870a7ca88d1f3c3414b33e471d7420efc3baf97b0acc25fb73549c471a672253594 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.066 Ether
0x2e2794e0f9d52cbf1b6cb1c93f0fe700ae51b87acd6141b1cf2288d3662557e672253444 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.033 Ether
0x4f69d3dd613e01b4a727a41d608077b0d82bef86b112338728003b7e09de480572253434 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.033 Ether
0xdbb3fe45a8992a39eb6e8b44e0b0f72b9f1a36d0e046a3a8b8824a118f17cbb972253394 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac381 wei
0x7825a93c413c7c3ca841f09173a2a5f4f8431bc8f6e220cd0a595b8dc233104d72253374 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.033 Ether
0xc17dcb61d039187e4c74b41358fe8a03dc21fdf24d2f433a8aac91d6a2b3c3ed72253334 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.066 Ether
0xa58f280a0ae92ff575e4179569b9976f453358e4edfd7bb558b4fecf3dc7ea3672253324 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.066 Ether
0xb23b24c0bc60634539d1a02c3fa5353bb88e405ce0b836f558bfe2eca9d51d4572253304 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.066 Ether
0x0acea1b80a540c8a1efcb8bf9724bcbaf6fd4dc4d60daed47239e20a05e3b63072253044 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.033 Ether
0x714309f0d289ad1b987b8aa537d742e6284447d5aa5d0206c8e6fb432fa741eb72252994 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.255483870967741935 Ether
0xa0bd0cb9f988beeae6d8890001bf4b9a205e37ec34a7151e2f9f274c58c7a75672252964 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.033 Ether
0x7579ee11e598bed4eb666ed810621a3237c25d14caeb2430aa14535d44ca439972252924 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.033 Ether
0xcda3730f6e841793a62814f6e2884cadffeb4239190f51bacc00ab0e87a71efd72252914 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac381 wei
0xd1cc49c26070b8675c484d75f35ebaf5a0b03e4d3e262fc754572d5a67070d5a72252904 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.132 Ether
0x017d741741107ebd173d5fcfa6a30a2079204b558ca59e6f85c983e7a716c99072252854 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.066 Ether
0x0cd8880fc183d672b6efe864976cab595458b7d5fcd2cd07107c19bfbbfb628572252834 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac381 wei
0x861a07be63f33d8c7145aeb1afbb3311ee2be2243655b14826080ff0996b845872252804 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac381 wei
0xb22cac573d39d0885daac1f038a68f640b0acac46deada694058a4a2812db3d772252784 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac381 wei
0xc52290a7a87fbc5141df292204fa4a6d6b8050adf6d931cea30a185ded97a5e172252744 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac381 wei
0xcf32e2381a5ff4099c8b0ffe0b58fffaff38c5b42c570058db2a62c70885b76572252724 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac381 wei
0x2d1f559449ce96b1c4d377148d708b553dd8b1ca46737a6992e4be1c13e6344c72252704 days 18 hrs ago0xb7fc894f2b6764e114362d303e491709a85c01c20x09475262c6a1ffbedd480d2a15f35f978aaaac380.255483870967741935 Ether
[ Download CSV Export 
Contract Source Code Verified (Exact Match)
Contract Name: EtherDice
Compiler Version: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimizer):  200


Contract Source Code
pragma solidity ^0.4.25;

// * etherdice.io
//
// * Ethereum smart contract.
//
// * 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.
//
contract EtherDice {

    using SafeMath for uint256;

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

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

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

    // 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 etherdice.io 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 public betExpirationBlocks = 250;

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

    address public exchange = 0x89df456bb9ef0F7bf7718389b150d6161c9E0431;

    // Funds that are locked in potentially winning bets. Prevents contract from
    // committing to bets it cannot pay out.
    uint 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.
        uint 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;

    // This event is emitted in settleBet for user results and stats
    event SettleBet(uint commit, uint dice, uint amount, uint diceWin);

    // This event is emitted in refundBet
    event Refund(uint commit, 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;
    }

    // Change bet expiration blocks. For the future.
    function setBetExpirationBlocks(uint _betExpirationBlocks) public onlyOwner {
        require (_betExpirationBlocks > 0, "betExpirationBlocks should be a sane number.");
        betExpirationBlocks = _betExpirationBlocks;
    }

    // Funds withdrawal to reinvestment contract for token holders.
    function withdrawFunds(uint withdrawAmount) external onlyOwner {
        require (withdrawAmount <= address(this).balance, "Increase amount larger than balance.");
        require (lockedInBets.add(withdrawAmount) <= address(this).balance, "Not enough funds.");
        exchange.transfer(withdrawAmount);
    }

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

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

    /// *** Betting logic

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

    // Bet placing transaction - issued by the player.
    //  betMask         - bet outcomes bit mask for modulo <= MAX_MASK_MODULO,
    //                    [0, betMask) for larger modulos.
    //  modulo          - game modulo.
    //  commitLastBlock - number of the maximum block where "commit" is still considered valid.
    //  commit          - Keccak256 hash of some secret "reveal" random number, to be supplied
    //                    by the etherdice.io croupier bot in the settleBet transaction. Supplying
    //                    "commit" ensures that "reveal" cannot be changed behind the scenes
    //                    after placeBet have been mined.
    //  recCode         - recommendation code. Record only the first recommendation relationship.
    //  r, s            - components of ECDSA signature of (commitLastBlock, commit).
    //
    // 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 betExpirationBlocks. See whitepaper for details.
    function placeBet(uint betMask, uint modulo, uint commitLastBlock, uint commit, bytes32 r, bytes32 s, uint8 v) 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.
        require (modulo > 1 && modulo <= MAX_MODULO, "Modulo should be within range.");
        require (msg.value >= MIN_BET && msg.value <= MAX_AMOUNT, "Amount should be within range.");
        require (betMask > 0 && betMask < MAX_BET_MASK, "Mask should be within range.");

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

        uint rollUnder;
        //uint mask;

        if (modulo <= MAX_MASK_MODULO) {
            // Small modulo games specify bet outcomes via bit mask.
            // rollUnder is a number of 1 bits in this mask (population count).
            // This magic looking formula is an efficient way to compute population
            // count on EVM for numbers below 2**40.
            rollUnder = ((betMask.mul(POPCNT_MULT)) & POPCNT_MASK).mod(POPCNT_MODULO);
            //mask = betMask;
            bet.mask = uint40(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
        uint possibleWinAmount;
        possibleWinAmount = getDiceWinAmount(msg.value, modulo, rollUnder);

        // Enforce max profit limit.
        require (possibleWinAmount <= msg.value.add(maxProfit), "maxProfit limit violation.");

        // Lock funds.
        lockedInBets = lockedInBets.add(possibleWinAmount);

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

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

        // Store bet parameters on blockchain.
        bet.amount = msg.value;
        bet.modulo = uint8(modulo);
        bet.rollUnder = uint8(rollUnder);
        bet.placeBlockNumber = 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];

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

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

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

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

        uint diceWin = 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 = lockedInBets.sub(diceWinAmount);

        // Send the funds to gambler.
        gambler.transfer(diceWin == 0 ? 1 wei : diceWin);

        // Send results to user.
        emit SettleBet(commit, dice, amount, 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
    // betExpirationBlocks comment above for details). In case you ever find yourself
    // in a situation like this, just contact the etherdice.io 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.add(betExpirationBlocks), "Blockhash can't be queried by EVM.");

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

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

        lockedInBets = lockedInBets.sub(diceWinAmount);

        // Send the refund.
        bet.gambler.transfer(amount);

        // Send results to user.
        emit Refund(commit, amount);
    }

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

        uint houseEdge = amount.mul(HOUSE_EDGE_PERCENT).div(100);

        require (houseEdge <= amount, "Bet doesn't even cover house edge.");
        winAmount = amount.sub(houseEdge).mul(modulo).div(rollUnder);
    }

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

}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0); // Solidity only automatically asserts when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two numbers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

Contract ABI
[{"constant":true,"inputs":[{"name":"reveal","type":"uint256"}],"name":"getBetInfoByReveal","outputs":[{"name":"commit","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"modulo","type":"uint256"},{"name":"rollUnder","type":"uint256"},{"name":"placeBlockNumber","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"gambler","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"withdrawAmount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"betMask","type":"uint256"},{"name":"modulo","type":"uint256"},{"name":"commitLastBlock","type":"uint256"},{"name":"commit","type":"uint256"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"v","type":"uint8"}],"name":"placeBet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_betExpirationBlocks","type":"uint256"}],"name":"setBetExpirationBlocks","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":"croupier","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"commit","type":"uint256"}],"name":"getBetInfo","outputs":[{"name":"amount","type":"uint256"},{"name":"modulo","type":"uint256"},{"name":"rollUnder","type":"uint256"},{"name":"placeBlockNumber","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"gambler","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"betExpirationBlocks","outputs":[{"name":"","type":"uint256"}],"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":"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":true,"inputs":[],"name":"exchange","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nextOwner","type":"address"}],"name":"approveNextOwner","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":"uint256"}],"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":false,"name":"commit","type":"uint256"},{"indexed":false,"name":"dice","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"diceWin","type":"uint256"}],"name":"SettleBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"}],"name":"Commit","type":"event"}]

Contract Creation Code
608060405260fa60005560058054600160a060020a0319167389df456bb9ef0f7bf7718389b150d6161c9e043117905534801561003b57600080fd5b5060018054600160a060020a0319908116331790915560048054821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee908117909155600880549092161790556119ec8061008b6000396000f3006080604052600436106101065763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663072201348114610108578063155dd5ee14610161578063227ada3714610179578063340f4fea146101995780634d61537f146101b15780636b5c5f39146101e257806379141f80146101f75780638da5cb5b1461024b57806397e0328614610260578063b539cd5514610287578063ca722cdc1461029c578063d06c54fb146102b7578063d2f7265a146102cc578063d579fd44146102e1578063d702087f14610302578063df88126f14610323578063e1fdb4b414610338578063f8bb201c14610350578063fbd668a914610371575b005b34801561011457600080fd5b50610120600435610389565b604080519788526020880196909652868601949094526060860192909252608085015260a0840152600160a060020a031660c0830152519081900360e00190f35b34801561016d57600080fd5b50610106600435610435565b61010660043560243560443560643560843560a43560ff60c435166105bf565b3480156101a557600080fd5b50610106600435610c2e565b3480156101bd57600080fd5b506101c6610d13565b60408051600160a060020a039092168252519081900360200190f35b3480156101ee57600080fd5b506101c6610d22565b34801561020357600080fd5b5061020f600435610d31565b6040805196875260208701959095528585019390935260608501919091526080840152600160a060020a031660a0830152519081900360c00190f35b34801561025757600080fd5b506101c6610d80565b34801561026c57600080fd5b50610275610d8f565b60408051918252519081900360200190f35b34801561029357600080fd5b50610275610d95565b3480156102a857600080fd5b50610106600435602435610d9b565b3480156102c357600080fd5b50610106610fee565b3480156102d857600080fd5b506101c6611093565b3480156102ed57600080fd5b50610106600160a060020a03600435166110a2565b34801561030e57600080fd5b50610106600160a060020a0360043516611199565b34801561032f57600080fd5b5061027561122a565b34801561034457600080fd5b50610106600435611230565b34801561035c57600080fd5b50610106600160a060020a0360043516611411565b34801561037d57600080fd5b506101066004356114a2565b600080600080600080600087604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106103e35780518252601f1990920191602091820191016103c4565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060019004965061041f87610d31565b9b9d949c50929a91995097509095509350915050565b600154600160a060020a03163314610497576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115610515576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60065430319061052b908363ffffffff61159016565b1115610581576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600554604051600160a060020a039091169082156108fc029083906000818181858888f193505050501580156105bb573d6000803e3d6000fd5b5050565b600084815260076020526040812060038101549091908190650100000000009004600160a060020a031615610664576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600189118015610675575060648911155b15156106cb576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc1000034101580156106ec5750693f870857a3e0e38000003411155b1515610742576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b60008a1180156107575750650100000000008a105b15156107ad576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b8743111580156107d057506000546107cc90439063ffffffff61159016565b8811155b1515610826576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b60018888604051602001808364ffffffffff1664ffffffffff167b01000000000000000000000000000000000000000000000000000000028152600501828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106108ab5780518252601f19909201916020918201910161088c565b51815160209384036101000a60001901801990921691161790526040805192909401829003822060008084528383018087529190915260ff8c1683860152606083018e9052608083018d9052935160a08084019750919550601f1981019492819003909101925090865af1158015610927573d6000803e3d6000fd5b5050604051601f190151600454600160a060020a039081169116149050610998576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60288911610a1c576109fc603f7e010410410410410410410410410410410410410410410410410410410410416109ef8d79200000000010000000000800000000040000000002000000000163ffffffff6115ad16565b169063ffffffff6115db16565b60038401805464ffffffffff191664ffffffffff8d161790559150610aac565b60008a118015610a2c5750888a11155b1515610aa8576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8991505b610ab7348a846115fc565b9050610ace6003543461159090919063ffffffff16565b811115610b25576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600654610b38908263ffffffff61159016565b600681905530311015610b95576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b6040805188815290517f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f879181900360200190a15034825560018201805460ff191660ff998a161761ff0019166101009290991691909102979097179096555050436002850155505050600301805478ffffffffffffffffffffffffffffffffffffffff0000000000191633650100000000000217905550565b600154600160a060020a03163314610c90576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b60008111610d0e576040805160e560020a62461bcd02815260206004820152602c60248201527f62657445787069726174696f6e426c6f636b732073686f756c6420626520612060448201527f73616e65206e756d6265722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b600055565b600454600160a060020a031681565b600854600160a060020a031681565b6000908152600760205260409020805460018201546002830154600390930154919360ff80831694610100909304169264ffffffffff81169165010000000000909104600160a060020a031690565b600154600160a060020a031681565b60005481565b60035481565b6008546000908190600160a060020a03163314610e28576040805160e560020a62461bcd02815260206004820152602c60248201527f4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e60448201527f6f6e2d63726f75706965722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b83604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610e775780518252601f199092019160209182019101610e58565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526007909252929020600281015492965094505043119150610f379050576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b6000546002820154610f4e9163ffffffff61159016565b431115610fcb576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6002810154408314610fdc57600080fd5b610fe881858486611734565b50505050565b600254600160a060020a03163314611062576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206f6e6c792061636365707420707265617070726f766564206e657720604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6002546001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600554600160a060020a031681565b600154600160a060020a03163314611104576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600154600160a060020a038281169116141561116a576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a031633146111fb576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60065481565b6000818152600760205260408120805490918115156112bf576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60005460028401546112d69163ffffffff61159016565b4311611352576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008355600183015461137290839060ff808216916101009004166115fc565b600654909150611388908263ffffffff61196616565b600655600383015460405165010000000000909104600160a060020a0316906108fc8415029084906000818181858888f193505050501580156113cf573d6000803e3d6000fd5b50604080518581526020810184905281517f5eee8032448a7f1556f67b8a76a4dcfd75ff98c05198df9f420467d0a1234e38929181900390910190a150505050565b600154600160a060020a03163314611473576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a03163314611504576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e3800000811061158b576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600355565b6000828201838110156115a257600080fd5b8091505b5092915050565b6000808315156115c057600091506115a6565b508282028284828115156115d057fe5b04146115a257600080fd5b60008115156115e957600080fd5b81838115156115f457fe5b069392505050565b60008082600010801561160f5750838311155b1515611665576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b611687606461167b87600163ffffffff6115ad16565b9063ffffffff61197d16565b905084811115611707576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61172b8361167b8661171f898663ffffffff61196616565b9063ffffffff6115ad16565b95945050505050565b83546001850154600386015460ff8083169261010090041690650100000000009004600160a060020a031660008080808715156117e1576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008c556040805160208082018e90528183018c9052825180830384018152606090920192839052815191929182918401908083835b602083106118365780518252601f199092019160209182019101611817565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120965061187192508691508990506115db565b925061187e8888886115fc565b915060009050602887116118ab5760038c0154600284900a1664ffffffffff16156118a65750805b6118b6565b858310156118b65750805b6006546118c9908363ffffffff61196616565b600655600160a060020a0385166108fc82156118e557826118e8565b60015b6040518115909202916000818181858888f19350505050158015611910573d6000803e3d6000fd5b50604080518b8152602081018590528082018a90526060810183905290517f2ffb8b1e2d03a44dc007b9ce6a73b5ff4627abcf92c7e60ccce34146e2ea0a9f9181900360800190a1505050505050505050505050565b6000808383111561197657600080fd5b5050900390565b60008080831161198c57600080fd5b828481151561199757fe5b0494935050505056004f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a72305820f44f383c5783630548cd4fca32721c07d63f7380c217a15b26fe357306e62cde0029


   Swarm Source:
bzzr://f44f383c5783630548cd4fca32721c07d63f7380c217a15b26fe357306e62cde
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.