Contract Overview
Balance: 2.469615395068332062 Ether
Ether Value: $259.21 (@ $104.96/ETH)
Transactions: 324200 txns
 Latest 25 transactions from a total of 324200 transactions

TxHash Age From To Value [TxFee]
0xcac495654d7c60ebc88407987198d0c039eb822c08003db2dcba3042bdeada9b66 days 1 hr ago0x86a954b6cc928cb11409360055062fb46755d328  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.0002215575
0xa141dde6d9983711401572d2f80240e034e69773e450f3a07123c44863e9d94266 days 2 hrs ago0x86a954b6cc928cb11409360055062fb46755d328  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.0002215575
0x04505e9a5805e468fbecea07157d191faa1ae5b55bebe636a7cfd1879a00aa0d70 days 20 hrs ago0xdca86c584709c6cd7b88f6ba61f842dae99724fe  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.000265869
0xd537e7f09aa44290b368f51664590ff8904ff20be6e9d1afb7ed4e6722c8c7d474 days 21 hrs ago0x112d6492c93f40c8821a088c670c4eb46ca5145e  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.0001794193
0x0960bbd156f4842c20ac0e56411acd6d04335eba39f2ab808ffac2f5c6f7366f82 days 9 hrs ago0xe1cb196d79e39031fb1a04cc1adf99facd47690e  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.0004008872
0x22d42cc6db8bdbd08c7951a28790c935519b4bf1427d4a2607cf29744549ce1291 days 21 hrs ago0xd52eb47b5c84402dc019b0b70ede7fd2d76f85bb  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.0003705264
0x2c3e3f86355cc6b2445ca2ea18ff8e526a62d8058a4646b91a3ad4ef32d0b38091 days 21 hrs ago0xd52eb47b5c84402dc019b0b70ede7fd2d76f85bb  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.0003712176
0x4ee3dda801c80e8ea1f1cc271b39de12ea0c286ca8dc3ffae1cbf999692e919e91 days 21 hrs ago0xd52eb47b5c84402dc019b0b70ede7fd2d76f85bb  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.03 Ether0.000360906
0x8d334e5980e40ecc2e8e3f0e1ea6082fd3fefd0ea3f03c657b5d9352946208f291 days 21 hrs ago0xd52eb47b5c84402dc019b0b70ede7fd2d76f85bb  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.0003499416
0x29c39751389bafab8522032bbb0f3737f2c93c0831991b053da56dde1ed9832692 days 8 hrs ago0x98f2ae6b26fa1669192689fd12fe42e495fbac03  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.4 Ether0.0003808188
0x5b99d54efeb8522865987ca69b979607f396ab20ae6b8c32e3354b4e5c31a44e92 days 8 hrs ago0x98f2ae6b26fa1669192689fd12fe42e495fbac03  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.97 Ether0.0003801084
0xe3f20e96ba65893ac41a1f99cfe70513feff05f7e1024d122313596dade2077592 days 8 hrs ago0x98f2ae6b26fa1669192689fd12fe42e495fbac03  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.97 Ether0.000411696
0xfe275be88acbbd9f51b800ce684d76d392e3608a85d809252d62137a27ca91d894 days 5 hrs ago0x26b6a8267473710feeec93656607757742e41bf6  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.000274464
0xb9e722d6215276d7c637756316bfe28a6962eb24d77a498349fc2b95fb76dae794 days 5 hrs ago0x26b6a8267473710feeec93656607757742e41bf6  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.000283041
0xb49943fc85cb786588b860731c2c4b349e9973d03d742abfbbbb0bffcd99788294 days 5 hrs ago0x26b6a8267473710feeec93656607757742e41bf6  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.000283041
0x7bcd510b2e343c68eae51b177de5f42ec41b481ca78c48dbc11e54ee133c43e894 days 5 hrs ago0x26b6a8267473710feeec93656607757742e41bf6  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.02 Ether0.000274464
0xe9f3cc8eacc07df02aa24c81af4f04cf9569461670da3f353d908ef4421dbb4a96 days 7 hrs ago0x98f2ae6b26fa1669192689fd12fe42e495fbac03  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.000394542
0x7fbb8f803f7346fea3eec6e4cf43f3275bd7fc84e8810ced20a2f5e87c3663f796 days 7 hrs ago0x98f2ae6b26fa1669192689fd12fe42e495fbac03  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.000377388
0x5343ae066105469d9e0d7a8e25f3c4ac074ec2e495975fc8c90f9cca008ff2be97 days 5 hrs ago0xadb5863ea8db92ac30f41e23af7c85d74dd505e2  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.0001749708
0x0b7de324ada5447a87cf80f57fba5f8ebecefdb3788e026349ed87919b2bec5098 days 10 hrs ago0xb9d40a49e2565212ede04eb97e3af1c7598f87ed  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.00027059556
0xfb8012794c660d4541f176b00e8f601473e52b80f7a5239d1655766635afaea698 days 10 hrs ago0xb9d40a49e2565212ede04eb97e3af1c7598f87ed  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.02 Ether0.00027059556
0x562e5b17d55054041917ea2b844e0faa7b7f75f3cefc21e7e5eae2ea1ed1751198 days 10 hrs ago0xb9d40a49e2565212ede04eb97e3af1c7598f87ed  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.00029541
0xd6e53740087313600c81eb12aa18698cf436a8a08876f096047f4c0d96102afb99 days 12 hrs ago0x0acde893f6fa74e04b0b953f60cffa11e07bdd2d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.000206787
0x6c1515b22d7bb21795d9911f7e6ef84438c5c0eb0dec045ea7c00b01f76478e499 days 12 hrs ago0x0acde893f6fa74e04b0b953f60cffa11e07bdd2d  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.0001949706
0x79ad36a59157d1b36496b75b7d14e8e20926ba18eb470270c5a91a201c2320db102 days 1 hr ago0x292eb4da428d13a2b13ea9257a58781f9037de65  IN   0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.000308772
[ 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
0xd5879efd14be648992432f8b9ecbd3db8eae9524732a8fff83b6557e8f7ad6176282481104 days 3 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x98f2ae6b26fa1669192689fd12fe42e495fbac030.059399999999999992 Ether
0x1f960aa2b4190308e1f783ea7eab2dc24e35c77dd55ee1fd6a1aaf62ad33215a6282369104 days 3 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x4f10eb44cc069e8052832a7a841b0e3b758ff8cf0.071279999999999984 Ether
0xa9a03800a04cf3cbcf5c276a2e5abf4578fb2530b3cb21d731a67dde02c170bb6281987104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xd1ceeeeee8af2791fc928beffb0ffac3387850de115 Ether
0x5b6282cbfb0d5308721d050d3c5762c5feba5c24dfab1119c8301e0df4bacda76281944104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x292eb4da428d13a2b13ea9257a58781f9037de650.0194 Ether
0x90716926d06c2f26403018b5012ae3b62e024b0e21dc5e22ea1893e286f0c63a6281931104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9df57302d5cdf26277c96ec6664e1f5c7b7578b61 wei
0xf08800ad7a73024b9508e5a7aa1623870a54c4862561d9a88e4780d1feb0174e6281929104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xa9161f47ae1177ccceeeee480aba66c98abc4f7a0.112547368421052631 Ether
0xea65af1e7cda5ab49b66cb7cf9118ec6c0be59c676f8517bde2a41693263a1cc6281929104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x56e24ba44e5662d494aa8fae7e1fb135ce5f80181 wei
0xc479bbd95c82b7a641d49b5192d8679b7c39374c00e8c3efbb14a656c88f9bec6281929104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x540fc6c567cda49e9c1d485443d9c99f817279800.0194 Ether
0xa68eb50ea1cf07e34bea6618ef1aa513ea7b97ae55c394a672ff44540b5a6f6e6281929104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9df57302d5cdf26277c96ec6664e1f5c7b7578b61 wei
0xd7076df02834d3d1fa4142d59ff17decc9ac7f3dd7ec0f82451f7731e5ee89d76281925104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x40584ddb22779dc7280cd09deecca4771f7855420.196 Ether
0xa352aaba461f3370f82bd08b88f9f521572d2cd015e4f3536cc890cc98bed8fe6281921104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x61abe292ea4921c2056292ff200bd41135bfd9ae0.0594 Ether
0x463cfd99aa222018d3807653c5d35ecbcee4db34c098890ea2f6ce7726149bb26281921104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x40584ddb22779dc7280cd09deecca4771f7855421 wei
0xaaf67c8f1d99dc2af120b06c8cc5652444537d458bdd45b454fa4c5f0db7fe416281918104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9df57302d5cdf26277c96ec6664e1f5c7b7578b61 wei
0xaa4152737a9eef9cf24fb89bfc5ac387a3e5a7c98a3106ca2e85987be7e266cf6281916104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x56e24ba44e5662d494aa8fae7e1fb135ce5f80180.0394 Ether
0x743afb6bd4c75011f9eae3b20190d209b3c1d7f8c4a6cb51a3d92d163974cc796281916104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x40584ddb22779dc7280cd09deecca4771f7855421 wei
0xedb16bec6969184c41c2fe71f62ca0aa51f97a4e38458b49109bb02f5921bc6b6281914104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc126c3027832d2468347bef4fe5d38afc2fb28030.10692 Ether
0xb6e6c33c5ff4510813305abb4c44dadce222d88be3526b407e98483bf7eaa7176281912104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x540fc6c567cda49e9c1d485443d9c99f817279800.0194 Ether
0xb0095465129862234292e36581d7d69c44a9114cb498143c25a852880a42c1356281910104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x56e24ba44e5662d494aa8fae7e1fb135ce5f80181 wei
0x4269da8dc85a1018f058b728a5932172ab350e327e1842c67c2474da3b6c93f86281910104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x40584ddb22779dc7280cd09deecca4771f7855420.6118 Ether
0x21c3dab4a67af934cdfff98fc0f8382832e340404c090b18a39e8e296b21be936281910104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc126c3027832d2468347bef4fe5d38afc2fb28030.10692 Ether
0x4af0c5d8fbf5db88ae5c3c519e2b4fe8fe8b591f1d7e8d69a75547939125a8c26281910104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9df57302d5cdf26277c96ec6664e1f5c7b7578b61 wei
0xcd5a6db25f17c6d5506e1b0112df6af3dc1444dead432c31e34384794a4ec7046281907104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc126c3027832d2468347bef4fe5d38afc2fb28031 wei
0xe4bb208580e484a4a08509b65d8b928ce0563b2d56aeddaa2e9ab02632b84e056281905104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x40584ddb22779dc7280cd09deecca4771f7855421 wei
0xe01a50c902088644b0530b0f551fb6225de185a845dc4ed71b4df9c884c730c16281901104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x540fc6c567cda49e9c1d485443d9c99f817279800.0194 Ether
0xcd44634a8fcd308d0f44f277eea7ea2ae8e211279c9d9402a04582059c802e416281901104 days 5 hrs ago0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc126c3027832d2468347bef4fe5d38afc2fb28031 wei
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

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



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.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 transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.