ETH Price: $3,304.30 (+2.46%)
 
Transaction Hash
Method
Block
From
To
Kill118672622021-02-16 10:23:571437 days ago1613471037IN
0xF1c9eE01...59B1EcB48
0 ETH0.00154893107
Withdraw Funds101159472020-05-22 13:32:361707 days ago1590154356IN
0xF1c9eE01...59B1EcB48
0 ETH0.001137633.00000023
Settle Bet99853972020-05-02 7:22:271727 days ago1588404147IN
0xF1c9eE01...59B1EcB48
0 ETH0.000168595
Place Bet99853952020-05-02 7:22:161727 days ago1588404136IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000400715
Settle Bet99772572020-05-01 1:09:271729 days ago1588295367IN
0xF1c9eE01...59B1EcB48
0 ETH0.000235937
Place Bet99772542020-05-01 1:07:521729 days ago1588295272IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000721289
Settle Bet99572702020-04-27 22:37:001732 days ago1588027020IN
0xF1c9eE01...59B1EcB48
0 ETH0.000084382.5
Place Bet99572642020-04-27 22:36:031732 days ago1588026963IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000200352.5
Settle Bet99559092020-04-27 17:35:301732 days ago1588008930IN
0xF1c9eE01...59B1EcB48
0 ETH0.000164145
Settle Bet99559092020-04-27 17:35:301732 days ago1588008930IN
0xF1c9eE01...59B1EcB48
0 ETH0.000168655
Settle Bet99559092020-04-27 17:35:301732 days ago1588008930IN
0xF1c9eE01...59B1EcB48
0 ETH0.000168465
Place Bet99558592020-04-27 17:25:551732 days ago1588008355IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.0008016610
Place Bet99558532020-04-27 17:24:571732 days ago1588008297IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000309768.1
Place Bet99558502020-04-27 17:24:001732 days ago1588008240IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000649158.1
Place Bet99558362020-04-27 17:21:501732 days ago1588008110IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.0008014310
Place Bet99558042020-04-27 17:14:581732 days ago1588007698IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000286729.5
Place Bet99544952020-04-27 12:19:321732 days ago1587989972IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000202136.7
Place Bet99544642020-04-27 12:12:181732 days ago1587989538IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000271539
Place Bet99491672020-04-26 16:25:461733 days ago1587918346IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000148836
Place Bet99474722020-04-26 10:03:391733 days ago1587895419IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000198538
Place Bet99467992020-04-26 7:35:501733 days ago1587886550IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000138975.6
Place Bet99441612020-04-25 21:51:421734 days ago1587851502IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000124025
Place Bet99441612020-04-25 21:51:421734 days ago1587851502IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000024811
Place Bet99408732020-04-25 9:39:481734 days ago1587807588IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.000049612
Place Bet99356642020-04-24 14:05:451735 days ago1587737145IN
0xF1c9eE01...59B1EcB48
0.01 ETH0.0002480510
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
118672622021-02-16 10:23:571437 days ago1613471037
0xF1c9eE01...59B1EcB48
1.50828747 ETH
101159472020-05-22 13:32:361707 days ago1590154356
0xF1c9eE01...59B1EcB48
0.32 ETH
99853972020-05-02 7:22:271727 days ago1588404147
0xF1c9eE01...59B1EcB48
1 wei
99772572020-05-01 1:09:271729 days ago1588295367
0xF1c9eE01...59B1EcB48
0.0194 ETH
99572702020-04-27 22:37:001732 days ago1588027020
0xF1c9eE01...59B1EcB48
0.0194 ETH
99559092020-04-27 17:35:301732 days ago1588008930
0xF1c9eE01...59B1EcB48
1 wei
99559092020-04-27 17:35:301732 days ago1588008930
0xF1c9eE01...59B1EcB48
1 wei
99559092020-04-27 17:35:301732 days ago1588008930
0xF1c9eE01...59B1EcB48
0.0194 ETH
93399872020-01-23 19:55:421827 days ago1579809342
0xF1c9eE01...59B1EcB48
1 wei
93394072020-01-23 17:49:311827 days ago1579801771
0xF1c9eE01...59B1EcB48
1 wei
93393492020-01-23 17:34:231827 days ago1579800863
0xF1c9eE01...59B1EcB48
1 wei
93392342020-01-23 17:09:341827 days ago1579799374
0xF1c9eE01...59B1EcB48
1 wei
93390562020-01-23 16:33:551827 days ago1579797235
0xF1c9eE01...59B1EcB48
0.11424705 ETH
93379712020-01-23 12:34:321827 days ago1579782872
0xF1c9eE01...59B1EcB48
0.147 ETH
93377812020-01-23 11:56:541827 days ago1579780614
0xF1c9eE01...59B1EcB48
0.2158 ETH
93302692020-01-22 8:26:041828 days ago1579681564
0xF1c9eE01...59B1EcB48
0.3 ETH
93302542020-01-22 8:21:191828 days ago1579681279
0xF1c9eE01...59B1EcB48
1 wei
93302202020-01-22 8:14:521828 days ago1579680892
0xF1c9eE01...59B1EcB48
0.01 ETH
93302152020-01-22 8:14:021828 days ago1579680842
0xF1c9eE01...59B1EcB48
0.01 ETH
93302122020-01-22 8:13:161828 days ago1579680796
0xF1c9eE01...59B1EcB48
0.01 ETH
92159982020-01-04 20:11:341846 days ago1578168694
0xF1c9eE01...59B1EcB48
1 wei
92159022020-01-04 19:51:171846 days ago1578167477
0xF1c9eE01...59B1EcB48
1 wei
92154482020-01-04 18:15:071846 days ago1578161707
0xF1c9eE01...59B1EcB48
0.15617647 ETH
92151112020-01-04 16:57:431846 days ago1578157063
0xF1c9eE01...59B1EcB48
0.177 ETH
92148562020-01-04 16:02:321846 days ago1578153752
0xF1c9eE01...59B1EcB48
0.16185 ETH
View All Internal Transactions
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x84fe156cb7f09d55320745b97e7636e9cd40c96a2bcb3e349627bb1578430c6b


Contract Source Code Verified (Exact Match)

Contract Name:
FairCasino

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2019-03-06
*/

pragma solidity ^0.4.25;

// * myethergames.fun
//   
// * Uses hybrid commit-reveal + block hash random number generation that is immune
//   to tampering by players, house and miners. Apart from being fully transparent,
//   this also allows arbitrarily high bets.

contract FairCasino {
    
    /// *** 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 myethergames.fun 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.
    
    // 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;

    // Croupier account.
    address public croupier;

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

    // This event is emitted in placeBet to record commit in the logs.
    event Commit(uint commit);

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

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

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

    // Standard contract ownership transfer implementation,
    function approveNextOwner(address _nextOwner) external onlyOwner {
        require (_nextOwner != owner, "Cannot approve current owner.");
        nextOwner = _nextOwner;
    }

    function acceptNextOwner() external {
        require (msg.sender == nextOwner, "Can only accept preapproved new owner.");
        owner = nextOwner;
    }

    // Fallback function deliberately left empty. It's primary use case
    // is to top up the bank roll.
    function () public payable {
    }

    // See comment for "secretSigner" variable.
    function setSecretSigner(address newSecretSigner) external onlyOwner {
        secretSigner = newSecretSigner;
    }

    // Change the croupier address.
    function setCroupier(address newCroupier) external onlyOwner {
        croupier = newCroupier;
    }

    // Change max bet reward. Setting this to zero effectively disables betting.
    function setMaxProfit(uint _maxProfit) public onlyOwner {
        require (_maxProfit < MAX_AMOUNT, "maxProfit should be a sane number.");
        maxProfit = _maxProfit;
    }

    // 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 myethergames.fun 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)
    //
    //  NOTE: Storage cleaning is not implemented in this contract version; it will be added
    //        with the next upgrade to prevent polluting Ethereum state with expired bets.

    // Bet placing transaction - issued by the player.
    //  betMask         - bet outcomes bit mask for modulo <= MAX_MASK_MODULO,
    //                    [0, betMask) for larger modulos.
    //  modulo          - game modulo.
    //  commitLastBlock - number of the maximum block where "commit" is still considered valid.
    //  commit          - Keccak256 hash of some secret "reveal" random number, to be supplied
    //                    by the myethergames.fun 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
    //                    equal 27 or 28.
    //
    // 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, uint8 v) external payable {
        // Check that the bet is in 'clean' state.
        Bet storage bet = bets[commit];
        require (bet.gambler == address(0), "Bet should be in a 'clean' state.");

        // Validate input data ranges.
        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(v >= 27 && v <=28);
        require (block.number <= commitLastBlock, "Commit has expired.");
        require (secretSigner == 
            ecrecover(keccak256(abi.encodePacked(uint40(commitLastBlock), commit)), v, r, s), "ECDSA signature is not valid.");

        uint rollUnder;
        uint mask;

        if (modulo <= MAX_MASK_MODULO) {
            // Small modulo games specify bet outcomes via bit mask.
            // rollUnder is a number of 1 bits in this mask (population count).
            // This magic looking formula is an efficient way to compute population
            // count on EVM for numbers below 2**40. For detailed proof consult
            // the myethergames.fun 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.");

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

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

    // This is the method used to settle 99% of bets. To process a bet with a specific
    // "commit", settleBet should supply a "reveal" number that would Keccak256-hash to
    // "commit". "blockHash" is the block hash of placeBet block as seen by croupier; it
    // is additionally asserted to prevent changing the bet outcomes on Ethereum reorgs.
    function settleBet(uint reveal, bytes32 blockHash) external onlyCroupier {
        uint commit = uint(keccak256(abi.encodePacked(reveal)));

        Bet storage bet = bets[commit];
        uint placeBlockNumber = bet.placeBlockNumber;

        // 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.");
        require (blockhash(placeBlockNumber) == blockHash);

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

    // Common settlement code for settleBet & settleBetUncleMerkleProof.
    function settleBetCommon(Bet storage bet, uint reveal, bytes32 entropyBlockHash) private {
        // Fetch bet parameters into local variables (to save gas).
        uint amount = bet.amount;
        uint modulo = bet.modulo;
        uint rollUnder = bet.rollUnder;
        address gambler = bet.gambler;

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

        // Move bet into 'processed' state already.
        bet.amount = 0;

        // The RNG - combine "reveal" and blockhash of placeBet using Keccak256. Miners
        // are not aware of "reveal" and cannot deduce it from "commit" (as Keccak256
        // preimage is intractable), and house is unable to alter the "reveal" after
        // placeBet have been mined (as Keccak256 collision finding is also intractable).
        bytes32 entropy = keccak256(abi.encodePacked(reveal, entropyBlockHash));

        // Do a roll by taking a modulo of entropy. Compute winning amount.
        uint dice = uint(entropy) % 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);
    }

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

    // 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":"betMask","type":"uint256"},{"name":"modulo","type":"uint256"},{"name":"commitLastBlock","type":"uint256"},{"name":"commit","type":"uint256"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"v","type":"uint8"}],"name":"placeBet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"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":true,"inputs":[],"name":"croupier","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"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":"reveal","type":"uint256"},{"name":"blockHash","type":"bytes32"}],"name":"settleBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptNextOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":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":"newCroupier","type":"address"}],"name":"setCroupier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_maxProfit","type":"uint256"}],"name":"setMaxProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":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"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"}],"name":"Commit","type":"event"}]

608060405234801561001057600080fd5b5060008054600160a060020a031990811633179091556003805482167377777a7ad41f5f0578d96c0dee0afd28163762291790556006805490911673fc5998ae24dd8eccad7acbf1427002b94f3830fc179055611ac1806100726000396000f3006080604052600436106100f05763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663227ada3781146100f257806341c0e1b5146101125780634d61537f1461012757806357246d23146101585780636b5c5f39146101895780638da5cb5b1461019e578063b539cd55146101b3578063c1075329146101da578063ca722cdc146101fe578063d06c54fb14610219578063d579fd441461022e578063d6d30a511461024f578063d702087f14610267578063df88126f14610288578063e1fdb4b41461029d578063f8bb201c146102b5578063fbd668a9146102d6575b005b6100f060043560243560443560643560843560a43560ff60c435166102ee565b34801561011e57600080fd5b506100f06109bd565b34801561013357600080fd5b5061013c610ae1565b60408051600160a060020a039092168252519081900360200190f35b34801561016457600080fd5b5061016d610af0565b604080516001608060020a039092168252519081900360200190f35b34801561019557600080fd5b5061013c610aff565b3480156101aa57600080fd5b5061013c610b0e565b3480156101bf57600080fd5b506101c8610b1d565b60408051918252519081900360200190f35b3480156101e657600080fd5b506100f0600160a060020a0360043516602435610b23565b34801561020a57600080fd5b506100f0600435602435610c8b565b34801561022557600080fd5b506100f0610ed8565b34801561023a57600080fd5b506100f0600160a060020a0360043516610f7d565b34801561025b57600080fd5b506100f0600435611074565b34801561027357600080fd5b506100f0600160a060020a03600435166111fd565b34801561029457600080fd5b5061016d61128e565b3480156102a957600080fd5b506100f06004356112a4565b3480156102c157600080fd5b506100f0600160a060020a036004351661145a565b3480156102e257600080fd5b506100f06004356114eb565b6000848152600560205260408120600181015490919081908190819081906c010000000000000000000000009004600160a060020a0316156103a0576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b34945060018c1180156103b4575060648c11155b151561040a576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc10000851015801561042b5750693f870857a3e0e38000008511155b1515610481576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b60008d1180156104965750650100000000008d105b15156104ec576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b601b8760ff16101580156105045750601c8760ff1611155b151561050f57600080fd5b438b1015610567576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b60018b8b604051602001808364ffffffffff1664ffffffffff167b01000000000000000000000000000000000000000000000000000000028152600501828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106105ec5780518252601f1990920191602091820191016105cd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020888b8b604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af115801561068d573d6000803e3d6000fd5b5050604051601f190151600354600160a060020a0390811691161490506106fe576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60288c1161075157603f7920000000001000000000080000000004000000000200000000018e027e01041041041041041041041041041041041041041041041041041041041041160693508c92506107e1565b60008d11801561076157508b8d11155b15156107dd576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8c93505b6107ec858d866115d9565b6002549193509150850182111561084d576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600480546001608060020a03608060020a808304821686018216810292821692909217808216850182166fffffffffffffffffffffffffffffffff199190911617928390553031838216929093048116919091011611156108f8576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b604080518b815290517f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f879181900360200190a150509183556001909201805460ff191660ff998a161761ff00191661010099909316989098029190911766ffffffffff00001916620100004364ffffffffff90811691909102919091176bffffffffff0000000000000019166701000000000000009190921602176bffffffffffffffffffffffff16336c010000000000000000000000000217909555505050505050565b600054600160a060020a03163314610a1f576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600454608060020a90046001608060020a031615610ad3576040805160e560020a62461bcd02815260206004820152604860248201527f416c6c20626574732073686f756c642062652070726f6365737365642028736560448201527f74746c6564206f7220726566756e64656429206265666f72652073656c662d6460648201527f657374727563742e000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b600054600160a060020a0316ff5b600354600160a060020a031681565b6004546001608060020a031681565b600654600160a060020a031681565b600054600160a060020a031681565b60025481565b600054600160a060020a03163314610b85576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115610c03576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a90930481169290920190911682011115610c7c576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b610c87828283611721565b5050565b60065460009081908190600160a060020a03163314610d1a576040805160e560020a62461bcd02815260206004820152602c60248201527f4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e60448201527f6f6e2d63726f75706965722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b84604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610d695780518252601f199092019160209182019101610d4a565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526005909252929020600181015492975095505062010000900464ffffffffff169250504382109050610e38576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b60fa8101431115610eb9576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b80408414610ec657600080fd5b610ed18286866117d4565b5050505050565b600154600160a060020a03163314610f4c576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206f6e6c792061636365707420707265617070726f766564206e657720604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600054600160a060020a03163314610fdf576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600054600160a060020a0382811691161415611045576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031633146110d6576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115611154576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a909304811692909201909116820111156111cd576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600480546fffffffffffffffffffffffffffffffff1981166001608060020a039182169390930116919091179055565b600054600160a060020a0316331461125f576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600454608060020a90046001608060020a031681565b60008181526005602052604081208054909180821515611334576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600184015464ffffffffff620100009091041660fa0143116113c6576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000845560018401546113e690849060ff808216916101009004166115d9565b600480546001608060020a03608060020a8083048216869003821602918116919091178082168490039091166fffffffffffffffffffffffffffffffff199190911617905560018601549193509150610ed190600160a060020a036c01000000000000000000000000909104168480611721565b600054600160a060020a031633146114bc576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461154d576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e380000081106115d4576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600255565b60008060008360001080156115ee5750848411155b1515611644576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b67016345785d8a000086101561165b576000611664565b66038d7ea4c680005b91505060648504660110d9316ec0008110156116845750660110d9316ec0005b808201861015611704576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b838583838903030281151561171557fe5b04925050935093915050565b604051600160a060020a0384169083156108fc029084906000818181858888f193505050501561178f57604080518281529051600160a060020a038516917fd4f43975feb89f48dd30cabbb32011045be187d1e11c8ea9faa43efc35282519919081900360200190a26117cf565b604080518381529051600160a060020a038516917fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d919081900360200190a25b505050565b8254600184015460ff808216916101008104909116906c010000000000000000000000009004600160a060020a031660008080808080808a1515611888576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008e600001819055508c8c604051602001808381526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106118f15780518252601f1990920191602091820191016118d2565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912099508c92508991505081151561192c57fe5b06955061193a8b8b8b6115d9565b90955093506000925082915060288a1161197a5760018e0154600287900a6701000000000000009091041664ffffffffff1615611975578492505b611986565b88861015611986578492505b600480546001608060020a03608060020a8083048216899003821602911617905567016345785d8a00008b106119ff576103e88a888115156119c457fe5b048115156119ce57fe5b0690508015156119ff57600480546fffffffffffffffffffffffffffffffff1981169091556001608060020a031691505b6000821115611a4857604080518381529051600160a060020a038a16917fc388db0e8aa560a59633c094a0d0aa21322cd6234836fd5bac00fc5ae63b5783919081900360200190a25b611a658884840115611a5c57838501611a5f565b60015b85611721565b505050505050505050505050505056004f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a72305820b9535e281be781448b50e50d311e3edc2a8ee8dad008f8c31fd90d7f7b3b5d9a0029

Deployed Bytecode

0x6080604052600436106100f05763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663227ada3781146100f257806341c0e1b5146101125780634d61537f1461012757806357246d23146101585780636b5c5f39146101895780638da5cb5b1461019e578063b539cd55146101b3578063c1075329146101da578063ca722cdc146101fe578063d06c54fb14610219578063d579fd441461022e578063d6d30a511461024f578063d702087f14610267578063df88126f14610288578063e1fdb4b41461029d578063f8bb201c146102b5578063fbd668a9146102d6575b005b6100f060043560243560443560643560843560a43560ff60c435166102ee565b34801561011e57600080fd5b506100f06109bd565b34801561013357600080fd5b5061013c610ae1565b60408051600160a060020a039092168252519081900360200190f35b34801561016457600080fd5b5061016d610af0565b604080516001608060020a039092168252519081900360200190f35b34801561019557600080fd5b5061013c610aff565b3480156101aa57600080fd5b5061013c610b0e565b3480156101bf57600080fd5b506101c8610b1d565b60408051918252519081900360200190f35b3480156101e657600080fd5b506100f0600160a060020a0360043516602435610b23565b34801561020a57600080fd5b506100f0600435602435610c8b565b34801561022557600080fd5b506100f0610ed8565b34801561023a57600080fd5b506100f0600160a060020a0360043516610f7d565b34801561025b57600080fd5b506100f0600435611074565b34801561027357600080fd5b506100f0600160a060020a03600435166111fd565b34801561029457600080fd5b5061016d61128e565b3480156102a957600080fd5b506100f06004356112a4565b3480156102c157600080fd5b506100f0600160a060020a036004351661145a565b3480156102e257600080fd5b506100f06004356114eb565b6000848152600560205260408120600181015490919081908190819081906c010000000000000000000000009004600160a060020a0316156103a0576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b34945060018c1180156103b4575060648c11155b151561040a576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc10000851015801561042b5750693f870857a3e0e38000008511155b1515610481576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b60008d1180156104965750650100000000008d105b15156104ec576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b601b8760ff16101580156105045750601c8760ff1611155b151561050f57600080fd5b438b1015610567576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b60018b8b604051602001808364ffffffffff1664ffffffffff167b01000000000000000000000000000000000000000000000000000000028152600501828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106105ec5780518252601f1990920191602091820191016105cd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020888b8b604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af115801561068d573d6000803e3d6000fd5b5050604051601f190151600354600160a060020a0390811691161490506106fe576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60288c1161075157603f7920000000001000000000080000000004000000000200000000018e027e01041041041041041041041041041041041041041041041041041041041041160693508c92506107e1565b60008d11801561076157508b8d11155b15156107dd576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8c93505b6107ec858d866115d9565b6002549193509150850182111561084d576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600480546001608060020a03608060020a808304821686018216810292821692909217808216850182166fffffffffffffffffffffffffffffffff199190911617928390553031838216929093048116919091011611156108f8576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b604080518b815290517f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f879181900360200190a150509183556001909201805460ff191660ff998a161761ff00191661010099909316989098029190911766ffffffffff00001916620100004364ffffffffff90811691909102919091176bffffffffff0000000000000019166701000000000000009190921602176bffffffffffffffffffffffff16336c010000000000000000000000000217909555505050505050565b600054600160a060020a03163314610a1f576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600454608060020a90046001608060020a031615610ad3576040805160e560020a62461bcd02815260206004820152604860248201527f416c6c20626574732073686f756c642062652070726f6365737365642028736560448201527f74746c6564206f7220726566756e64656429206265666f72652073656c662d6460648201527f657374727563742e000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b600054600160a060020a0316ff5b600354600160a060020a031681565b6004546001608060020a031681565b600654600160a060020a031681565b600054600160a060020a031681565b60025481565b600054600160a060020a03163314610b85576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115610c03576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a90930481169290920190911682011115610c7c576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b610c87828283611721565b5050565b60065460009081908190600160a060020a03163314610d1a576040805160e560020a62461bcd02815260206004820152602c60248201527f4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e60448201527f6f6e2d63726f75706965722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b84604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610d695780518252601f199092019160209182019101610d4a565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526005909252929020600181015492975095505062010000900464ffffffffff169250504382109050610e38576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b60fa8101431115610eb9576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b80408414610ec657600080fd5b610ed18286866117d4565b5050505050565b600154600160a060020a03163314610f4c576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206f6e6c792061636365707420707265617070726f766564206e657720604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600054600160a060020a03163314610fdf576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600054600160a060020a0382811691161415611045576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031633146110d6576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115611154576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60045430316001608060020a03808316608060020a909304811692909201909116820111156111cd576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600480546fffffffffffffffffffffffffffffffff1981166001608060020a039182169390930116919091179055565b600054600160a060020a0316331461125f576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600454608060020a90046001608060020a031681565b60008181526005602052604081208054909180821515611334576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600184015464ffffffffff620100009091041660fa0143116113c6576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000845560018401546113e690849060ff808216916101009004166115d9565b600480546001608060020a03608060020a8083048216869003821602918116919091178082168490039091166fffffffffffffffffffffffffffffffff199190911617905560018601549193509150610ed190600160a060020a036c01000000000000000000000000909104168480611721565b600054600160a060020a031633146114bc576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461154d576040805160e560020a62461bcd0281526020600482015260266024820152600080516020611a76833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e380000081106115d4576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600255565b60008060008360001080156115ee5750848411155b1515611644576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b67016345785d8a000086101561165b576000611664565b66038d7ea4c680005b91505060648504660110d9316ec0008110156116845750660110d9316ec0005b808201861015611704576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b838583838903030281151561171557fe5b04925050935093915050565b604051600160a060020a0384169083156108fc029084906000818181858888f193505050501561178f57604080518281529051600160a060020a038516917fd4f43975feb89f48dd30cabbb32011045be187d1e11c8ea9faa43efc35282519919081900360200190a26117cf565b604080518381529051600160a060020a038516917fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d919081900360200190a25b505050565b8254600184015460ff808216916101008104909116906c010000000000000000000000009004600160a060020a031660008080808080808a1515611888576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008e600001819055508c8c604051602001808381526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106118f15780518252601f1990920191602091820191016118d2565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912099508c92508991505081151561192c57fe5b06955061193a8b8b8b6115d9565b90955093506000925082915060288a1161197a5760018e0154600287900a6701000000000000009091041664ffffffffff1615611975578492505b611986565b88861015611986578492505b600480546001608060020a03608060020a8083048216899003821602911617905567016345785d8a00008b106119ff576103e88a888115156119c457fe5b048115156119ce57fe5b0690508015156119ff57600480546fffffffffffffffffffffffffffffffff1981169091556001608060020a031691505b6000821115611a4857604080518381529051600160a060020a038a16917fc388db0e8aa560a59633c094a0d0aa21322cd6234836fd5bac00fc5ae63b5783919081900360200190a25b611a658884840115611a5c57838501611a5f565b60015b85611721565b505050505050505050505050505056004f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a72305820b9535e281be781448b50e50d311e3edc2a8ee8dad008f8c31fd90d7f7b3b5d9a0029

Swarm Source

bzzr://b9535e281be781448b50e50d311e3edc2a8ee8dad008f8c31fd90d7f7b3b5d9a

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.