ETH Price: $3,062.62 (+2.70%)
Gas: 1 Gwei

Contract

0xD1CEeeefA68a6aF0A5f6046132D986066c7f9426
 

Overview

ETH Balance

2.469615395068332062 ETH

Eth Value

$7,563.50 (@ $3,062.62/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Settle Bet78446282019-05-27 23:27:151867 days ago1558999635IN
0xD1CEeeef...66c7f9426
0 ETH0.000071723
Place Bet78268602019-05-25 5:10:341869 days ago1558761034IN
0xD1CEeeef...66c7f9426
0.05 ETH0.000177246
Place Bet75177982019-04-07 0:30:541917 days ago1554597054IN
0xD1CEeeef...66c7f9426
0.02 ETH0.000235818
Place Bet75177982019-04-07 0:30:541917 days ago1554597054IN
0xD1CEeeef...66c7f9426
0.03 ETH0.000206337
Place Bet75177952019-04-07 0:30:121917 days ago1554597012IN
0xD1CEeeef...66c7f9426
0.01 ETH0.000177246
Place Bet65142182018-10-14 15:13:132092 days ago1539529993IN
0xD1CEeeef...66c7f9426
0.01 ETH0.000221557.5
Place Bet65138722018-10-14 13:50:322092 days ago1539525032IN
0xD1CEeeef...66c7f9426
0.01 ETH0.000221557.5
Place Bet64845692018-10-09 19:55:162097 days ago1539114916IN
0xD1CEeeef...66c7f9426
0.1 ETH0.000265869
Place Bet64596362018-10-05 19:06:452101 days ago1538766405IN
0xD1CEeeef...66c7f9426
0.01 ETH0.000179416.1
Place Bet64136822018-09-28 6:43:292108 days ago1538117009IN
0xD1CEeeef...66c7f9426
0.1 ETH0.0004008813.6
Place Bet63560902018-09-18 19:20:242118 days ago1537298424IN
0xD1CEeeef...66c7f9426
0.01 ETH0.0003705210.8
Place Bet63560872018-09-18 19:19:272118 days ago1537298367IN
0xD1CEeeef...66c7f9426
0.05 ETH0.0003712110.8
Place Bet63560682018-09-18 19:14:412118 days ago1537298081IN
0xD1CEeeef...66c7f9426
0.03 ETH0.000360910.5
Place Bet63560562018-09-18 19:11:512118 days ago1537297911IN
0xD1CEeeef...66c7f9426
0.05 ETH0.0003499410.2
Place Bet63531652018-09-18 7:32:132118 days ago1537255933IN
0xD1CEeeef...66c7f9426
0.4 ETH0.0003808111.1
Place Bet63531602018-09-18 7:31:232118 days ago1537255883IN
0xD1CEeeef...66c7f9426
0.97 ETH0.000380111.1
Place Bet63531562018-09-18 7:30:232118 days ago1537255823IN
0xD1CEeeef...66c7f9426
0.97 ETH0.0004116912
Place Bet63418642018-09-16 11:03:422120 days ago1537095822IN
0xD1CEeeef...66c7f9426
0.05 ETH0.000274468
Place Bet63418612018-09-16 11:02:002120 days ago1537095720IN
0xD1CEeeef...66c7f9426
0.05 ETH0.000283048.25
Place Bet63418592018-09-16 11:01:262120 days ago1537095686IN
0xD1CEeeef...66c7f9426
0.05 ETH0.000283048.25
Place Bet63417412018-09-16 10:33:512120 days ago1537094031IN
0xD1CEeeef...66c7f9426
0.02 ETH0.000274468
Place Bet63293252018-09-14 9:11:552122 days ago1536916315IN
0xD1CEeeef...66c7f9426
0.1 ETH0.0003945411.5
Place Bet63293192018-09-14 9:10:322122 days ago1536916232IN
0xD1CEeeef...66c7f9426
0.1 ETH0.0003773811
Place Bet63237762018-09-13 11:15:112123 days ago1536837311IN
0xD1CEeeef...66c7f9426
0.01 ETH0.000174975.1
Place Bet63165122018-09-12 6:21:472124 days ago1536733307IN
0xD1CEeeef...66c7f9426
0.05 ETH0.000270599.16
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
62824812018-09-06 13:26:162130 days ago1536240376
0xD1CEeeef...66c7f9426
0.05939999 ETH
62823692018-09-06 12:56:562130 days ago1536238616
0xD1CEeeef...66c7f9426
0.07127999 ETH
62819872018-09-06 11:22:442130 days ago1536232964
0xD1CEeeef...66c7f9426
115 ETH
62819442018-09-06 11:12:192130 days ago1536232339
0xD1CEeeef...66c7f9426
0.0194 ETH
62819312018-09-06 11:09:302130 days ago1536232170
0xD1CEeeef...66c7f9426
1 wei
62819292018-09-06 11:09:192130 days ago1536232159
0xD1CEeeef...66c7f9426
0.11254736 ETH
62819292018-09-06 11:09:192130 days ago1536232159
0xD1CEeeef...66c7f9426
1 wei
62819292018-09-06 11:09:192130 days ago1536232159
0xD1CEeeef...66c7f9426
0.0194 ETH
62819292018-09-06 11:09:192130 days ago1536232159
0xD1CEeeef...66c7f9426
1 wei
62819252018-09-06 11:07:332130 days ago1536232053
0xD1CEeeef...66c7f9426
0.196 ETH
62819212018-09-06 11:06:342130 days ago1536231994
0xD1CEeeef...66c7f9426
0.0594 ETH
62819212018-09-06 11:06:342130 days ago1536231994
0xD1CEeeef...66c7f9426
1 wei
62819182018-09-06 11:06:112130 days ago1536231971
0xD1CEeeef...66c7f9426
1 wei
62819162018-09-06 11:05:592130 days ago1536231959
0xD1CEeeef...66c7f9426
0.0394 ETH
62819162018-09-06 11:05:592130 days ago1536231959
0xD1CEeeef...66c7f9426
1 wei
62819142018-09-06 11:05:352130 days ago1536231935
0xD1CEeeef...66c7f9426
0.10692 ETH
62819122018-09-06 11:05:122130 days ago1536231912
0xD1CEeeef...66c7f9426
0.0194 ETH
62819102018-09-06 11:04:422130 days ago1536231882
0xD1CEeeef...66c7f9426
1 wei
62819102018-09-06 11:04:422130 days ago1536231882
0xD1CEeeef...66c7f9426
0.6118 ETH
62819102018-09-06 11:04:422130 days ago1536231882
0xD1CEeeef...66c7f9426
0.10692 ETH
62819102018-09-06 11:04:422130 days ago1536231882
0xD1CEeeef...66c7f9426
1 wei
62819072018-09-06 11:03:352130 days ago1536231815
0xD1CEeeef...66c7f9426
1 wei
62819052018-09-06 11:02:512130 days ago1536231771
0xD1CEeeef...66c7f9426
1 wei
62819012018-09-06 11:02:182130 days ago1536231738
0xD1CEeeef...66c7f9426
0.0194 ETH
62819012018-09-06 11:02:182130 days ago1536231738
0xD1CEeeef...66c7f9426
1 wei
View All Internal Transactions
Loading...
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

Deployed Bytecode

0x6080604052600436106100e55763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630d2cbe1381146100e757806341c0e1b5146101025780634d61537f1461011757806357246d23146101485780635e83b463146101795780638da5cb5b14610193578063b539cd55146101a8578063c1075329146101cf578063d06c54fb146101f3578063d579fd4414610208578063d6d30a5114610229578063d702087f14610241578063df88126f14610262578063e1fdb4b414610277578063ef1155421461028f578063fbd668a9146102af575b005b3480156100f357600080fd5b506100e56004356024356102c7565b34801561010e57600080fd5b506100e5610765565b34801561012357600080fd5b5061012c610889565b60408051600160a060020a039092168252519081900360200190f35b34801561015457600080fd5b5061015d610898565b604080516001608060020a039092168252519081900360200190f35b6100e560043560243560443560643560843560a4356108a7565b34801561019f57600080fd5b5061012c610f23565b3480156101b457600080fd5b506101bd610f32565b60408051918252519081900360200190f35b3480156101db57600080fd5b506100e5600160a060020a0360043516602435610f38565b3480156101ff57600080fd5b506100e56110a0565b34801561021457600080fd5b506100e5600160a060020a0360043516611145565b34801561023557600080fd5b506100e560043561123c565b34801561024d57600080fd5b506100e5600160a060020a03600435166113c5565b34801561026e57600080fd5b5061015d611456565b34801561028357600080fd5b506100e560043561146c565b34801561029b57600080fd5b506100e56004803560248101910135611629565b3480156102bb57600080fd5b506100e560043561165e565b6000806000806000806000806000806000806000808f604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061032b5780518252601f19909201916020918201910161030c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600190049d50600560008f81526020019081526020016000209c508c600001549b508c60010160009054906101000a900460ff1660ff169a508c60010160019054906101000a900460ff1660ff1699508c60010160029054906101000a900464ffffffffff1664ffffffffff1698508c600101600c9054906101000a9004600160a060020a031697508b600014151515610462576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b4389106104df576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b60fa8901431115610560576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008d600001819055508f8940604051602001808381526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106105ca5780518252601f1990920191602091820191016105ab565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912099508d92508991505081151561060557fe5b0695506106138c8c8c61174c565b90955093506000925082915060288b116106535760018d0154600287900a6701000000000000009091041664ffffffffff161561064e578492505b61065f565b8986101561065f578492505b600480546001608060020a03608060020a8083048216899003821602911617905567016345785d8a00008c106106d8576103e88b8881151561069d57fe5b048115156106a757fe5b0690508015156106d857600480546fffffffffffffffffffffffffffffffff1981169091556001608060020a031691505b600082111561072157604080518381529051600160a060020a038a16917fc388db0e8aa560a59633c094a0d0aa21322cd6234836fd5bac00fc5ae63b5783919081900360200190a25b61073e888484011561073557838501610738565b60015b85611894565b8e151561074a57610753565b6107538f611947565b50505050505050505050505050505050565b600054600160a060020a031633146107c7576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600454608060020a90046001608060020a03161561087b576040805160e560020a62461bcd02815260206004820152604860248201527f416c6c20626574732073686f756c642062652070726f6365737365642028736560448201527f74746c6564206f7220726566756e64656429206265666f72652073656c662d6460648201527f657374727563742e000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b600054600160a060020a0316ff5b600354600160a060020a031681565b6004546001608060020a031681565b60008381526005602052604081206001810154909190819081908190819081906c010000000000000000000000009004600160a060020a03161561095b576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b34955060018c11801561096f575060648c11155b15156109c5576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc1000086101580156109e65750693f870857a3e0e38000008611155b1515610a3c576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b60008d118015610a515750650100000000008d105b1515610aa7576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b438b1015610aff576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b8a8a604051602001808364ffffffffff1664ffffffffff167b01000000000000000000000000000000000000000000000000000000028152600501828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610b825780518252601f199092019160209182019101610b63565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209450600185601b8b8b604051600081526020016040526040518085600019166000191681526020018460ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610c26573d6000803e3d6000fd5b5050604051601f190151600354600160a060020a039081169116149050610c97576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60288c11610cea57603f7920000000001000000000080000000004000000000200000000018e027e01041041041041041041041041041041041041041041041041041041041041160693508c9250610d7a565b60008d118015610cfa57508b8d11155b1515610d76576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8c93505b610d85868d8661174c565b60025491935091508601821115610de6576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600480546001608060020a03608060020a808304821686018216810292821692909217808216850182166fffffffffffffffffffffffffffffffff19919091161792839055303183821692909304811691909101161115610e91576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b50509284556001909301805460ff191660ff998a161761ff00191661010099909416989098029290921766ffffffffff00001916620100004364ffffffffff90811691909102919091176bffffffffff0000000000000019166701000000000000009190921602176bffffffffffffffffffffffff16336c010000000000000000000000000217909555505050505050565b600054600160a060020a031681565b60025481565b600054600160a060020a03163314610f9a576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115611018576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a90930481169290920190911682011115611091576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b61109c828283611894565b5050565b600154600160a060020a03163314611114576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206f6e6c792061636365707420707265617070726f766564206e657720604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600054600160a060020a031633146111a7576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600054600160a060020a038281169116141561120d576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461129e576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b303181111561131c576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a90930481169290920190911682011115611395576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600480546fffffffffffffffffffffffffffffffff1981166001608060020a039182169390930116919091179055565b600054600160a060020a03163314611427576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600454608060020a90046001608060020a031681565b600081815260056020526040812080549091808215156114fc576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600184015464ffffffffff620100009091041660fa01431161158e576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000845560018401546115ae90849060ff8082169161010090041661174c565b600480546001608060020a03608060020a8083048216869003821602918116919091178082168490039091166fffffffffffffffffffffffffffffffff19919091161790556001860154919350915061162290600160a060020a036c01000000000000000000000000909104168480611894565b5050505050565b8060005b818110156116585761165084848381811061164457fe5b90506020020135611947565b60010161162d565b50505050565b600054600160a060020a031633146116c0576040805160e560020a62461bcd028152602060048201526026602482015260008051602061198f833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e38000008110611747576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600255565b60008060008360001080156117615750848411155b15156117b7576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b67016345785d8a00008610156117ce5760006117d7565b66038d7ea4c680005b91505060648504660110d9316ec0008110156117f75750660110d9316ec0005b808201861015611877576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b838583838903030281151561188857fe5b04925050935093915050565b604051600160a060020a0384169083156108fc029084906000818181858888f193505050501561190257604080518281529051600160a060020a038516917fd4f43975feb89f48dd30cabbb32011045be187d1e11c8ea9faa43efc35282519919081900360200190a2611942565b604080518381529051600160a060020a038516917fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d919081900360200190a25b505050565b600081815260056020526040902080541515806119795750600181015464ffffffffff620100009091041660fa014311155b156119835761109c565b60006001820155505056004f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a723058201464f74d7c3605a5e8b2937c9c63cbfffbe70748dcdb9a894d39f046ca08da190029

Swarm Source

bzzr://1464f74d7c3605a5e8b2937c9c63cbfffbe70748dcdb9a894d39f046ca08da19

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.