Contract 0xD1CEeeefA68a6aF0A5f6046132D986066c7f9426

 
Ad
Ad
Txn Hash Method
Block
From
To
Value
0x75eb32ddc26fcf999731a4769390461ff3c7843cce7ad1526df75fa1bb13a457Settle Bet78446282019-05-27 23:27:15854 days 12 hrs ago0x828153f377571082d254a2a4a26bd700f75eb3f4 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260 Ether0.0000717273
0x8145a0a7d28eee5cae9b8b3770bad2caa4993e79314ef6a7314bff0964f4d89aPlace Bet78268602019-05-25 5:10:34857 days 6 hrs ago0xeeb58f4e5edcc601b360a11d980348c9f8a145fd IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.0001772466
0xa19cf28f6b2cbb45a1ae5352aedfdf73f5178bc766756ae32112af90867fde8fPlace Bet75177982019-04-07 0:30:54905 days 11 hrs ago0x364deb42bf5640fe184850908f0a6ee00d28f66d IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.02 Ether0.0002358168
0x84c26b84e771a14153fda0069a52521cf9a7690301d91c1c73ea4d14dc50bf5bPlace Bet75177982019-04-07 0:30:54905 days 11 hrs ago0x364deb42bf5640fe184850908f0a6ee00d28f66d IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.03 Ether0.0002063397
0x25dfb3e4426d9508559b0c8bc0a7e76b6008136c1812d7a4044beaea28e8019aPlace Bet75177952019-04-07 0:30:12905 days 11 hrs ago0x364deb42bf5640fe184850908f0a6ee00d28f66d IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.0001772466
0xcac495654d7c60ebc88407987198d0c039eb822c08003db2dcba3042bdeada9bPlace Bet65142182018-10-14 15:13:131079 days 20 hrs ago0x86a954b6cc928cb11409360055062fb46755d328 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.00022155757.5
0xa141dde6d9983711401572d2f80240e034e69773e450f3a07123c44863e9d942Place Bet65138722018-10-14 13:50:321079 days 21 hrs ago0x86a954b6cc928cb11409360055062fb46755d328 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.00022155757.5
0x04505e9a5805e468fbecea07157d191faa1ae5b55bebe636a7cfd1879a00aa0dPlace Bet64845692018-10-09 19:55:161084 days 15 hrs ago0xdca86c584709c6cd7b88f6ba61f842dae99724fe IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.0002658699
0xd537e7f09aa44290b368f51664590ff8904ff20be6e9d1afb7ed4e6722c8c7d4Place Bet64596362018-10-05 19:06:451088 days 16 hrs ago0x112d6492c93f40c8821a088c670c4eb46ca5145e IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.00017941936.1
0x0960bbd156f4842c20ac0e56411acd6d04335eba39f2ab808ffac2f5c6f7366fPlace Bet64136822018-09-28 6:43:291096 days 4 hrs ago0xe1cb196d79e39031fb1a04cc1adf99facd47690e IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.000400887213.6
0x22d42cc6db8bdbd08c7951a28790c935519b4bf1427d4a2607cf29744549ce12Place Bet63560902018-09-18 19:20:241105 days 16 hrs ago0xd52eb47b5c84402dc019b0b70ede7fd2d76f85bb IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.000370526410.8
0x2c3e3f86355cc6b2445ca2ea18ff8e526a62d8058a4646b91a3ad4ef32d0b380Place Bet63560872018-09-18 19:19:271105 days 16 hrs ago0xd52eb47b5c84402dc019b0b70ede7fd2d76f85bb IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.000371217610.8
0x4ee3dda801c80e8ea1f1cc271b39de12ea0c286ca8dc3ffae1cbf999692e919ePlace Bet63560682018-09-18 19:14:411105 days 16 hrs ago0xd52eb47b5c84402dc019b0b70ede7fd2d76f85bb IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.03 Ether0.00036090610.5
0x8d334e5980e40ecc2e8e3f0e1ea6082fd3fefd0ea3f03c657b5d9352946208f2Place Bet63560562018-09-18 19:11:511105 days 16 hrs ago0xd52eb47b5c84402dc019b0b70ede7fd2d76f85bb IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.000349941610.2
0x29c39751389bafab8522032bbb0f3737f2c93c0831991b053da56dde1ed98326Place Bet63531652018-09-18 7:32:131106 days 4 hrs ago0x98f2ae6b26fa1669192689fd12fe42e495fbac03 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.4 Ether0.000380818811.1
0x5b99d54efeb8522865987ca69b979607f396ab20ae6b8c32e3354b4e5c31a44ePlace Bet63531602018-09-18 7:31:231106 days 4 hrs ago0x98f2ae6b26fa1669192689fd12fe42e495fbac03 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.97 Ether0.000380108411.1
0xe3f20e96ba65893ac41a1f99cfe70513feff05f7e1024d122313596dade20775Place Bet63531562018-09-18 7:30:231106 days 4 hrs ago0x98f2ae6b26fa1669192689fd12fe42e495fbac03 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.97 Ether0.00041169612
0xfe275be88acbbd9f51b800ce684d76d392e3608a85d809252d62137a27ca91d8Place Bet63418642018-09-16 11:03:421108 days 34 mins ago0x26b6a8267473710feeec93656607757742e41bf6 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.0002744648
0xb9e722d6215276d7c637756316bfe28a6962eb24d77a498349fc2b95fb76dae7Place Bet63418612018-09-16 11:02:001108 days 35 mins ago0x26b6a8267473710feeec93656607757742e41bf6 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.0002830418.25
0xb49943fc85cb786588b860731c2c4b349e9973d03d742abfbbbb0bffcd997882Place Bet63418592018-09-16 11:01:261108 days 36 mins ago0x26b6a8267473710feeec93656607757742e41bf6 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.0002830418.25
0x7bcd510b2e343c68eae51b177de5f42ec41b481ca78c48dbc11e54ee133c43e8Place Bet63417412018-09-16 10:33:511108 days 1 hr ago0x26b6a8267473710feeec93656607757742e41bf6 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.02 Ether0.0002744648
0xe9f3cc8eacc07df02aa24c81af4f04cf9569461670da3f353d908ef4421dbb4aPlace Bet63293252018-09-14 9:11:551110 days 2 hrs ago0x98f2ae6b26fa1669192689fd12fe42e495fbac03 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.00039454211.5
0x7fbb8f803f7346fea3eec6e4cf43f3275bd7fc84e8810ced20a2f5e87c3663f7Place Bet63293192018-09-14 9:10:321110 days 2 hrs ago0x98f2ae6b26fa1669192689fd12fe42e495fbac03 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.1 Ether0.00037738811
0x5343ae066105469d9e0d7a8e25f3c4ac074ec2e495975fc8c90f9cca008ff2bePlace Bet63237762018-09-13 11:15:111111 days 22 mins ago0xadb5863ea8db92ac30f41e23af7c85d74dd505e2 IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.01 Ether0.00017497085.1
0x0b7de324ada5447a87cf80f57fba5f8ebecefdb3788e026349ed87919b2bec50Place Bet63165122018-09-12 6:21:471112 days 5 hrs ago0xb9d40a49e2565212ede04eb97e3af1c7598f87ed IN  0xd1ceeeefa68a6af0a5f6046132d986066c7f94260.05 Ether0.000270595569.16
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd5879efd14be648992432f8b9ecbd3db8eae9524732a8fff83b6557e8f7ad61762824812018-09-06 13:26:161117 days 22 hrs ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x98f2ae6b26fa1669192689fd12fe42e495fbac030.059399999999999992 Ether
0x1f960aa2b4190308e1f783ea7eab2dc24e35c77dd55ee1fd6a1aaf62ad33215a62823692018-09-06 12:56:561117 days 22 hrs ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x4f10eb44cc069e8052832a7a841b0e3b758ff8cf0.071279999999999984 Ether
0xa9a03800a04cf3cbcf5c276a2e5abf4578fb2530b3cb21d731a67dde02c170bb62819872018-09-06 11:22:441118 days 15 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f9426 0xd1ceeeeee8af2791fc928beffb0ffac3387850de115 Ether
0x5b6282cbfb0d5308721d050d3c5762c5feba5c24dfab1119c8301e0df4bacda762819442018-09-06 11:12:191118 days 25 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x292eb4da428d13a2b13ea9257a58781f9037de650.0194 Ether
0x90716926d06c2f26403018b5012ae3b62e024b0e21dc5e22ea1893e286f0c63a62819312018-09-06 11:09:301118 days 28 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9df57302d5cdf26277c96ec6664e1f5c7b7578b61 wei
0xf08800ad7a73024b9508e5a7aa1623870a54c4862561d9a88e4780d1feb0174e62819292018-09-06 11:09:191118 days 28 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xa9161f47ae1177ccceeeee480aba66c98abc4f7a0.112547368421052631 Ether
0xea65af1e7cda5ab49b66cb7cf9118ec6c0be59c676f8517bde2a41693263a1cc62819292018-09-06 11:09:191118 days 28 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x56e24ba44e5662d494aa8fae7e1fb135ce5f80181 wei
0xc479bbd95c82b7a641d49b5192d8679b7c39374c00e8c3efbb14a656c88f9bec62819292018-09-06 11:09:191118 days 28 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x540fc6c567cda49e9c1d485443d9c99f817279800.0194 Ether
0xa68eb50ea1cf07e34bea6618ef1aa513ea7b97ae55c394a672ff44540b5a6f6e62819292018-09-06 11:09:191118 days 28 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9df57302d5cdf26277c96ec6664e1f5c7b7578b61 wei
0xd7076df02834d3d1fa4142d59ff17decc9ac7f3dd7ec0f82451f7731e5ee89d762819252018-09-06 11:07:331118 days 30 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x40584ddb22779dc7280cd09deecca4771f7855420.196 Ether
0xa352aaba461f3370f82bd08b88f9f521572d2cd015e4f3536cc890cc98bed8fe62819212018-09-06 11:06:341118 days 31 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x61abe292ea4921c2056292ff200bd41135bfd9ae0.0594 Ether
0x463cfd99aa222018d3807653c5d35ecbcee4db34c098890ea2f6ce7726149bb262819212018-09-06 11:06:341118 days 31 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x40584ddb22779dc7280cd09deecca4771f7855421 wei
0xaaf67c8f1d99dc2af120b06c8cc5652444537d458bdd45b454fa4c5f0db7fe4162819182018-09-06 11:06:111118 days 31 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9df57302d5cdf26277c96ec6664e1f5c7b7578b61 wei
0xaa4152737a9eef9cf24fb89bfc5ac387a3e5a7c98a3106ca2e85987be7e266cf62819162018-09-06 11:05:591118 days 31 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x56e24ba44e5662d494aa8fae7e1fb135ce5f80180.0394 Ether
0x743afb6bd4c75011f9eae3b20190d209b3c1d7f8c4a6cb51a3d92d163974cc7962819162018-09-06 11:05:591118 days 31 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x40584ddb22779dc7280cd09deecca4771f7855421 wei
0xedb16bec6969184c41c2fe71f62ca0aa51f97a4e38458b49109bb02f5921bc6b62819142018-09-06 11:05:351118 days 32 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc126c3027832d2468347bef4fe5d38afc2fb28030.10692 Ether
0xb6e6c33c5ff4510813305abb4c44dadce222d88be3526b407e98483bf7eaa71762819122018-09-06 11:05:121118 days 32 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x540fc6c567cda49e9c1d485443d9c99f817279800.0194 Ether
0xb0095465129862234292e36581d7d69c44a9114cb498143c25a852880a42c13562819102018-09-06 11:04:421118 days 33 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x56e24ba44e5662d494aa8fae7e1fb135ce5f80181 wei
0x4269da8dc85a1018f058b728a5932172ab350e327e1842c67c2474da3b6c93f862819102018-09-06 11:04:421118 days 33 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x40584ddb22779dc7280cd09deecca4771f7855420.6118 Ether
0x21c3dab4a67af934cdfff98fc0f8382832e340404c090b18a39e8e296b21be9362819102018-09-06 11:04:421118 days 33 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc126c3027832d2468347bef4fe5d38afc2fb28030.10692 Ether
0x4af0c5d8fbf5db88ae5c3c519e2b4fe8fe8b591f1d7e8d69a75547939125a8c262819102018-09-06 11:04:421118 days 33 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x9df57302d5cdf26277c96ec6664e1f5c7b7578b61 wei
0xcd5a6db25f17c6d5506e1b0112df6af3dc1444dead432c31e34384794a4ec70462819072018-09-06 11:03:351118 days 34 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc126c3027832d2468347bef4fe5d38afc2fb28031 wei
0xe4bb208580e484a4a08509b65d8b928ce0563b2d56aeddaa2e9ab02632b84e0562819052018-09-06 11:02:511118 days 34 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x40584ddb22779dc7280cd09deecca4771f7855421 wei
0xe01a50c902088644b0530b0f551fb6225de185a845dc4ed71b4df9c884c730c162819012018-09-06 11:02:181118 days 35 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260x540fc6c567cda49e9c1d485443d9c99f817279800.0194 Ether
0xcd44634a8fcd308d0f44f277eea7ea2ae8e211279c9d9402a04582059c802e4162819012018-09-06 11:02:181118 days 35 mins ago 0xd1ceeeefa68a6af0a5f6046132d986066c7f94260xc126c3027832d2468347bef4fe5d38afc2fb28031 wei
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Dice2Win

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-07-11
*/

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 Security Audit

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"}]

608060405234801561001057600080fd5b5060008054600160a060020a031990811633179091556003805490911673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1790556119da806100546000396000f3006080604052600436106100e55763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630d2cbe1381146100e757806341c0e1b5146101025780634d61537f1461011757806357246d23146101485780635e83b463146101795780638da5cb5b14610193578063b539cd55146101a8578063c1075329146101cf578063d06c54fb146101f3578063d579fd4414610208578063d6d30a5114610229578063d702087f14610241578063df88126f14610262578063e1fdb4b414610277578063ef1155421461028f578063fbd668a9146102af575b005b3480156100f357600080fd5b506100e56004356024356102c7565b34801561010e57600080fd5b506100e5610765565b34801561012357600080fd5b5061012c610889565b60408051600160a060020a039092168252519081900360200190f35b34801561015457600080fd5b5061015d610898565b604080516001608060020a039092168252519081900360200190f35b6100e560043560243560443560643560843560a4356108a7565b34801561019f57600080fd5b5061012c610f23565b3480156101b457600080fd5b506101bd610f32565b60408051918252519081900360200190f35b3480156101db57600080fd5b506100e5600160a060020a0360043516602435610f38565b3480156101ff57600080fd5b506100e56110a0565b34801561021457600080fd5b506100e5600160a060020a0360043516611145565b34801561023557600080fd5b506100e560043561123c565b34801561024d57600080fd5b506100e5600160a060020a03600435166113c5565b34801561026e57600080fd5b5061015d611456565b34801561028357600080fd5b506100e560043561146c565b34801561029b57600080fd5b506100e56004803560248101910135611629565b3480156102bb57600080fd5b506100e560043561165e565b6000806000806000806000806000806000806000808f604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061032b5780518252601f19909201916020918201910161030c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600190049d50600560008f81526020019081526020016000209c508c600001549b508c60010160009054906101000a900460ff1660ff169a508c60010160019054906101000a900460ff1660ff1699508c60010160029054906101000a900464ffffffffff1664ffffffffff1698508c600101600c9054906101000a9004600160a060020a031697508b600014151515610462576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b4389106104df576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b60fa8901431115610560576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008d600001819055508f8940604051602001808381526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106105ca5780518252601f1990920191602091820191016105ab565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912099508d92508991505081151561060557fe5b0695506106138c8c8c61174c565b90955093506000925082915060288b116106535760018d0154600287900a6701000000000000009091041664ffffffffff161561064e578492505b61065f565b8986101561065f578492505b600480546001608060020a03608060020a8083048216899003821602911617905567016345785d8a00008c106106d8576103e88b8881151561069d57fe5b048115156106a757fe5b0690508015156106d857600480546fffffffffffffffffffffffffffffffff1981169091556001608060020a031691505b600082111561072157604080518381529051600160a060020a038a16917fc388db0e8aa560a59633c094a0d0aa21322cd6234836fd5bac00fc5ae63b5783919081900360200190a25b61073e888484011561073557838501610738565b60015b85611894565b8e151561074a57610753565b6107538f611947565b50505050505050505050505050505050565b600054600160a060020a031633146107c7576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600454608060020a90046001608060020a03161561087b576040805160e560020a62461bcd02815260206004820152604860248201527f416c6c20626574732073686f756c642062652070726f6365737365642028736560448201527f74746c6564206f7220726566756e64656429206265666f72652073656c662d6460648201527f657374727563742e000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b600054600160a060020a0316ff5b600354600160a060020a031681565b6004546001608060020a031681565b60008381526005602052604081206001810154909190819081908190819081906c010000000000000000000000009004600160a060020a03161561095b576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b34955060018c11801561096f575060648c11155b15156109c5576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc1000086101580156109e65750693f870857a3e0e38000008611155b1515610a3c576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b60008d118015610a515750650100000000008d105b1515610aa7576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b438b1015610aff576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b8a8a604051602001808364ffffffffff1664ffffffffff167b01000000000000000000000000000000000000000000000000000000028152600501828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610b825780518252601f199092019160209182019101610b63565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209450600185601b8b8b604051600081526020016040526040518085600019166000191681526020018460ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610c26573d6000803e3d6000fd5b5050604051601f190151600354600160a060020a039081169116149050610c97576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60288c11610cea57603f7920000000001000000000080000000004000000000200000000018e027e01041041041041041041041041041041041041041041041041041041041041160693508c9250610d7a565b60008d118015610cfa57508b8d11155b1515610d76576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8c93505b610d85868d8661174c565b60025491935091508601821115610de6576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600480546001608060020a03608060020a808304821686018216810292821692909217808216850182166fffffffffffffffffffffffffffffffff19919091161792839055303183821692909304811691909101161115610e91576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b50509284556001909301805460ff191660ff998a161761ff00191661010099909416989098029290921766ffffffffff00001916620100004364ffffffffff90811691909102919091176bffffffffff0000000000000019166701000000000000009190921602176bffffffffffffffffffffffff16336c010000000000000000000000000217909555505050505050565b600054600160a060020a031681565b60025481565b600054600160a060020a03163314610f9a576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115611018576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a90930481169290920190911682011115611091576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b61109c828283611894565b5050565b600154600160a060020a03163314611114576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206f6e6c792061636365707420707265617070726f766564206e657720604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600054600160a060020a031633146111a7576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600054600160a060020a038281169116141561120d576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461129e576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b303181111561131c576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a90930481169290920190911682011115611395576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600480546fffffffffffffffffffffffffffffffff1981166001608060020a039182169390930116919091179055565b600054600160a060020a03163314611427576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600454608060020a90046001608060020a031681565b600081815260056020526040812080549091808215156114fc576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600184015464ffffffffff620100009091041660fa01431161158e576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000845560018401546115ae90849060ff8082169161010090041661174c565b600480546001608060020a03608060020a8083048216869003821602918116919091178082168490039091166fffffffffffffffffffffffffffffffff19919091161790556001860154919350915061162290600160a060020a036c01000000000000000000000000909104168480611894565b5050505050565b8060005b818110156116585761165084848381811061164457fe5b90506020020135611947565b60010161162d565b50505050565b600054600160a060020a031633146116c0576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e38000008110611747576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600255565b60008060008360001080156117615750848411155b15156117b7576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b67016345785d8a00008610156117ce5760006117d7565b66038d7ea4c680005b91505060648504660110d9316ec0008110156117f75750660110d9316ec0005b808201861015611877576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b838583838903030281151561188857fe5b04925050935093915050565b604051600160a060020a0384169083156108fc029084906000818181858888f193505050501561190257604080518281529051600160a060020a038516917fd4f43975feb89f48dd30cabbb32011045be187d1e11c8ea9faa43efc35282519919081900360200190a2611942565b604080518381529051600160a060020a038516917fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d919081900360200190a25b505050565b600081815260056020526040902080541515806119795750600181015464ffffffffff620100009091041660fa014311155b156119835761109c565b60006001820155505056004f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a723058201464f74d7c3605a5e8b2937c9c63cbfffbe70748dcdb9a894d39f046ca08da190029

Swarm Source

bzzr://1464f74d7c3605a5e8b2937c9c63cbfffbe70748dcdb9a894d39f046ca08da19
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.