ETH Price: $2,625.31 (+0.94%)
Gas: 1 Gwei

Contract

0xb7fC894F2B6764E114362d303E491709A85C01C2
 

Overview

ETH Balance

0.597062053961507372 ETH

Eth Value

$1,567.47 (@ $2,625.31/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Settle Bet74943662019-04-03 8:53:001956 days ago1554281580IN
0xb7fC894F...9A85C01C2
0 ETH0.0003264613
Place Bet74943652019-04-03 8:52:401956 days ago1554281560IN
0xb7fC894F...9A85C01C2
0.01 ETH0.001147818.0002
Settle Bet74829142019-04-01 13:45:421958 days ago1554126342IN
0xb7fC894F...9A85C01C2
0 ETH0.000149766
Place Bet74829112019-04-01 13:45:041958 days ago1554126304IN
0xb7fC894F...9A85C01C2
0.05 ETH0.000414273
Settle Bet74829032019-04-01 13:43:051958 days ago1554126185IN
0xb7fC894F...9A85C01C2
0 ETH0.000149766
Place Bet74828992019-04-01 13:42:081958 days ago1554126128IN
0xb7fC894F...9A85C01C2
0.04 ETH0.000414273
Settle Bet74828902019-04-01 13:39:451958 days ago1554125985IN
0xb7fC894F...9A85C01C2
0 ETH0.000149576
Place Bet74828882019-04-01 13:39:271958 days ago1554125967IN
0xb7fC894F...9A85C01C2
0.02 ETH0.000414273
Settle Bet74828782019-04-01 13:37:171958 days ago1554125837IN
0xb7fC894F...9A85C01C2
0 ETH0.000252110.1
Place Bet74828762019-04-01 13:37:001958 days ago1554125820IN
0xb7fC894F...9A85C01C2
0.01 ETH0.000980437.1
Settle Bet74828622019-04-01 13:34:011958 days ago1554125641IN
0xb7fC894F...9A85C01C2
0 ETH0.0002761511
Place Bet74828602019-04-01 13:33:271958 days ago1554125607IN
0xb7fC894F...9A85C01C2
0.01 ETH0.001148298
Settle Bet74418552019-03-26 3:26:551964 days ago1553570815IN
0xb7fC894F...9A85C01C2
0 ETH0.000175737
Place Bet74418532019-03-26 3:26:261964 days ago1553570786IN
0xb7fC894F...9A85C01C2
0.01 ETH0.000614244.28125
Settle Bet74418512019-03-26 3:26:001964 days ago1553570760IN
0xb7fC894F...9A85C01C2
0 ETH0.000182567.28125
Place Bet74418492019-03-26 3:25:271964 days ago1553570727IN
0xb7fC894F...9A85C01C2
0.01 ETH0.000688974.8
Settle Bet74410922019-03-26 0:38:571965 days ago1553560737IN
0xb7fC894F...9A85C01C2
0 ETH0.000100224
Place Bet74410892019-03-26 0:38:451965 days ago1553560725IN
0xb7fC894F...9A85C01C2
0.01 ETH0.000143471
Settle Bet74262272019-03-23 17:12:361967 days ago1553361156IN
0xb7fC894F...9A85C01C2
0 ETH0.000125525
Place Bet74262262019-03-23 17:12:281967 days ago1553361148IN
0xb7fC894F...9A85C01C2
0.05 ETH0.000286942
Settle Bet74261872019-03-23 17:01:091967 days ago1553360469IN
0xb7fC894F...9A85C01C2
0 ETH0.00012545
Place Bet74261852019-03-23 17:00:551967 days ago1553360455IN
0xb7fC894F...9A85C01C2
0.05 ETH0.000287072
Settle Bet74204392019-03-22 19:33:191968 days ago1553283199IN
0xb7fC894F...9A85C01C2
0 ETH0.000100424
Place Bet74204382019-03-22 19:32:521968 days ago1553283172IN
0xb7fC894F...9A85C01C2
0.01 ETH0.000287072
Settle Bet74012382019-03-19 19:47:331971 days ago1553024853IN
0xb7fC894F...9A85C01C2
0 ETH0.000125525
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
74943662019-04-03 8:53:001956 days ago1554281580
0xb7fC894F...9A85C01C2
0.0594 ETH
74829142019-04-01 13:45:421958 days ago1554126342
0xb7fC894F...9A85C01C2
1 wei
74829032019-04-01 13:43:051958 days ago1554126185
0xb7fC894F...9A85C01C2
1 wei
74828902019-04-01 13:39:451958 days ago1554125985
0xb7fC894F...9A85C01C2
1 wei
74828782019-04-01 13:37:171958 days ago1554125837
0xb7fC894F...9A85C01C2
1 wei
74828622019-04-01 13:34:011958 days ago1554125641
0xb7fC894F...9A85C01C2
1 wei
74418552019-03-26 3:26:551964 days ago1553570815
0xb7fC894F...9A85C01C2
1 wei
74418512019-03-26 3:26:001964 days ago1553570760
0xb7fC894F...9A85C01C2
1 wei
74410922019-03-26 0:38:571965 days ago1553560737
0xb7fC894F...9A85C01C2
0.0198 ETH
74262272019-03-23 17:12:361967 days ago1553361156
0xb7fC894F...9A85C01C2
1 wei
74261872019-03-23 17:01:091967 days ago1553360469
0xb7fC894F...9A85C01C2
1 wei
74204392019-03-22 19:33:191968 days ago1553283199
0xb7fC894F...9A85C01C2
1 wei
74012382019-03-19 19:47:331971 days ago1553024853
0xb7fC894F...9A85C01C2
1 wei
73567652019-03-12 21:30:281978 days ago1552426228
0xb7fC894F...9A85C01C2
1 wei
73567542019-03-12 21:28:031978 days ago1552426083
0xb7fC894F...9A85C01C2
0.0198 ETH
73564832019-03-12 20:31:391978 days ago1552422699
0xb7fC894F...9A85C01C2
0.0198 ETH
73564492019-03-12 20:24:581978 days ago1552422298
0xb7fC894F...9A85C01C2
0.0198 ETH
73450322019-03-11 1:52:211980 days ago1552269141
0xb7fC894F...9A85C01C2
1 wei
73450282019-03-11 1:51:461980 days ago1552269106
0xb7fC894F...9A85C01C2
0.0198 ETH
73360322019-03-09 16:21:101981 days ago1552148470
0xb7fC894F...9A85C01C2
0.01375 ETH
73098902019-03-05 14:47:241985 days ago1551797244
0xb7fC894F...9A85C01C2
1 wei
73098892019-03-05 14:47:191985 days ago1551797239
0xb7fC894F...9A85C01C2
1 wei
73039822019-03-04 16:22:011986 days ago1551716521
0xb7fC894F...9A85C01C2
1 wei
73036262019-03-04 15:01:281986 days ago1551711688
0xb7fC894F...9A85C01C2
0.08 ETH
73033472019-03-04 13:58:451986 days ago1551707925
0xb7fC894F...9A85C01C2
0.0594 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtherDice

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-01-17
*/

pragma solidity ^0.4.25;

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

    using SafeMath for uint256;

    /// *** Constants section

    // Each bet is deducted 1% in favour of the house, but no less than some minimum.
    // The lower bound is dictated by gas costs of the settleBet transaction, providing
    // headroom for up to 10 Gwei prices.
    uint constant HOUSE_EDGE_PERCENT = 1;

    // There is minimum and maximum bets.
    uint constant MIN_BET = 0.01 ether;
    uint constant MAX_AMOUNT = 300000 ether;

    // Modulo is a number of equiprobable outcomes in a game:
    //  - 2 for coin flip
    //  - 6 for dice
    //  - 6*6 = 36 for double dice
    //  - 100 for etheroll
    //  - 37 for roulette
    //  etc.
    // It's called so because 256-bit entropy is treated like a huge integer and
    // the remainder of its division by modulo is considered bet outcome.
    uint constant MAX_MODULO = 100;

    // For modulos below this threshold rolls are checked against a bit mask,
    // thus allowing betting on any combination of outcomes. For example, given
    // modulo 6 for dice, 101000 mask (base-2, big endian) means betting on
    // 4 and 6; for games with modulos higher than threshold (Etheroll), a simple
    // limit is used, allowing betting on any outcome in [0, N) range.
    //
    // The specific value is dictated by the fact that 256-bit intermediate
    // multiplication result allows implementing population count efficiently
    // for numbers that are up to 42 bits, and 40 is the highest multiple of
    // eight below 42.
    uint constant MAX_MASK_MODULO = 40;

    // This is a check on bet mask overflow.
    uint constant MAX_BET_MASK = 2 ** MAX_MASK_MODULO;

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

    // EVM BLOCKHASH opcode can query no further than 256 blocks into the
    // past. Given that settleBet uses block hash of placeBet as one of
    // complementary entropy sources, we cannot process bets older than this
    // threshold. On rare occasions etherdice.io croupier may fail to invoke
    // settleBet in this timespan due to technical issues or extreme Ethereum
    // congestion; such bets can be refunded via invoking refundBet.
    uint public betExpirationBlocks = 250;

    // Standard contract ownership transfer.
    address public owner;
    address private nextOwner;

    // Adjustable max bet profit. Used to cap bets against dynamic odds.
    uint public maxProfit;

    // The address corresponding to a private key used to sign placeBet commits.
    address public secretSigner;

    address public exchange = 0x89df456bb9ef0F7bf7718389b150d6161c9E0431;

    // Funds that are locked in potentially winning bets. Prevents contract from
    // committing to bets it cannot pay out.
    uint public lockedInBets;

    // A structure representing a single bet.
    struct Bet {
        // Wager amount in wei.
        uint amount;
        // Modulo of a game.
        uint8 modulo;
        // Number of winning outcomes, used to compute winning payment (* modulo/rollUnder),
        // and used instead of mask for games with modulo > MAX_MASK_MODULO.
        uint8 rollUnder;
        // Block number of placeBet tx.
        uint placeBlockNumber;
        // Bit mask representing winning bet outcomes (see MAX_MASK_MODULO comment).
        uint40 mask;
        // Address of a gambler, used to pay out winning bets.
        address gambler;
    }

    // Mapping from commits to all currently active & processed bets.
    mapping (uint => Bet) bets;

    // Croupier account.
    address public croupier;

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

    // This event is emitted in refundBet
    event Refund(uint commit, uint amount);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /// *** Betting logic

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

    // Bet placing transaction - issued by the player.
    //  betMask         - bet outcomes bit mask for modulo <= MAX_MASK_MODULO,
    //                    [0, betMask) for larger modulos.
    //  modulo          - game modulo.
    //  commitLastBlock - number of the maximum block where "commit" is still considered valid.
    //  commit          - Keccak256 hash of some secret "reveal" random number, to be supplied
    //                    by the etherdice.io croupier bot in the settleBet transaction. Supplying
    //                    "commit" ensures that "reveal" cannot be changed behind the scenes
    //                    after placeBet have been mined.
    //  recCode         - recommendation code. Record only the first recommendation relationship.
    //  r, s            - components of ECDSA signature of (commitLastBlock, commit).
    //
    // Commit, being essentially random 256-bit number, is used as a unique bet identifier in
    // the 'bets' mapping.
    //
    // Commits are signed with a block limit to ensure that they are used at most once - otherwise
    // it would be possible for a miner to place a bet with a known commit/reveal pair and tamper
    // with the blockhash. Croupier guarantees that commitLastBlock will always be not greater than
    // placeBet block number plus betExpirationBlocks. See whitepaper for details.
    function placeBet(uint betMask, uint modulo, uint commitLastBlock, uint commit, bytes32 r, bytes32 s, uint8 v) external payable {
        // Check that the bet is in 'clean' state.
        Bet storage bet = bets[commit];
        require (bet.gambler == address(0), "Bet should be in a 'clean' state.");

        // Validate input data ranges.
        require (modulo > 1 && modulo <= MAX_MODULO, "Modulo should be within range.");
        require (msg.value >= MIN_BET && msg.value <= MAX_AMOUNT, "Amount should be within range.");
        require (betMask > 0 && betMask < MAX_BET_MASK, "Mask should be within range.");

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

        uint rollUnder;
        //uint mask;

        if (modulo <= MAX_MASK_MODULO) {
            // Small modulo games specify bet outcomes via bit mask.
            // rollUnder is a number of 1 bits in this mask (population count).
            // This magic looking formula is an efficient way to compute population
            // count on EVM for numbers below 2**40.
            rollUnder = ((betMask.mul(POPCNT_MULT)) & POPCNT_MASK).mod(POPCNT_MODULO);
            //mask = betMask;
            bet.mask = uint40(betMask);
        } else {
            // Larger modulos specify the right edge of half-open interval of
            // winning bet outcomes.
            require (betMask > 0 && betMask <= modulo, "High modulo range, betMask larger than modulo.");
            rollUnder = betMask;
        }

        // Winning amount
        uint possibleWinAmount;
        possibleWinAmount = getDiceWinAmount(msg.value, modulo, rollUnder);

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

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

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

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

        // Store bet parameters on blockchain.
        bet.amount = msg.value;
        bet.modulo = uint8(modulo);
        bet.rollUnder = uint8(rollUnder);
        bet.placeBlockNumber = block.number;
        //bet.mask = uint40(mask);
        bet.gambler = msg.sender;
    }

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

        Bet storage bet = bets[commit];

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

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

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

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

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

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

        // Do a roll by taking a modulo of entropy. Compute winning amount.
        uint dice = uint(entropy).mod(modulo);

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

        uint diceWin = 0;

        // Determine dice outcome.
        if (modulo <= MAX_MASK_MODULO) {
            // For small modulo games, check the outcome against a bit mask.
            if ((2 ** dice) & bet.mask != 0) {
                diceWin = diceWinAmount;
            }

        } else {
            // For larger modulos, check inclusion into half-open interval.
            if (dice < rollUnder) {
                diceWin = diceWinAmount;
            }

        }

        // Unlock the bet amount, regardless of the outcome.
        lockedInBets = lockedInBets.sub(diceWinAmount);

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

        // Send results to user.
        emit SettleBet(commit, dice, amount, diceWin);

    }

    // Refund transaction - return the bet amount of a roll that was not processed in a
    // due timeframe. Processing such blocks is not possible due to EVM limitations (see
    // betExpirationBlocks comment above for details). In case you ever find yourself
    // in a situation like this, just contact the etherdice.io support, however nothing
    // precludes you from invoking this method yourself.
    function refundBet(uint commit) external {
        // Check that bet is in 'active' state.
        Bet storage bet = bets[commit];
        uint amount = bet.amount;

        require (amount != 0, "Bet should be in an 'active' state");

        // Check that bet has already expired.
        require (block.number > bet.placeBlockNumber.add(betExpirationBlocks), "Blockhash can't be queried by EVM.");

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

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

        lockedInBets = lockedInBets.sub(diceWinAmount);

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

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

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

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

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

    // This are some constants making O(1) population count in placeBet possible.
    // See whitepaper for intuition and proofs behind it.
    uint constant POPCNT_MULT = 0x0000000000002000000000100000000008000000000400000000020000000001;
    uint constant POPCNT_MASK = 0x0001041041041041041041041041041041041041041041041041041041041041;
    uint constant POPCNT_MODULO = 0x3F;

}

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

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

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

        return c;
    }

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

        return c;
    }

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

        return c;
    }

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

        return c;
    }

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

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"reveal","type":"uint256"}],"name":"getBetInfoByReveal","outputs":[{"name":"commit","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"modulo","type":"uint256"},{"name":"rollUnder","type":"uint256"},{"name":"placeBlockNumber","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"gambler","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"withdrawAmount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"betMask","type":"uint256"},{"name":"modulo","type":"uint256"},{"name":"commitLastBlock","type":"uint256"},{"name":"commit","type":"uint256"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"v","type":"uint8"}],"name":"placeBet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_betExpirationBlocks","type":"uint256"}],"name":"setBetExpirationBlocks","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secretSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"croupier","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"commit","type":"uint256"}],"name":"getBetInfo","outputs":[{"name":"amount","type":"uint256"},{"name":"modulo","type":"uint256"},{"name":"rollUnder","type":"uint256"},{"name":"placeBlockNumber","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"gambler","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"betExpirationBlocks","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"reveal","type":"uint256"},{"name":"blockHash","type":"bytes32"}],"name":"settleBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptNextOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"exchange","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nextOwner","type":"address"}],"name":"approveNextOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newSecretSigner","type":"address"}],"name":"setSecretSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lockedInBets","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"commit","type":"uint256"}],"name":"refundBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCroupier","type":"address"}],"name":"setCroupier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_maxProfit","type":"uint256"}],"name":"setMaxProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"},{"indexed":false,"name":"dice","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"diceWin","type":"uint256"}],"name":"SettleBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"}],"name":"Commit","type":"event"}]

608060405260fa60005560058054600160a060020a0319167389df456bb9ef0f7bf7718389b150d6161c9e043117905534801561003b57600080fd5b5060018054600160a060020a0319908116331790915560048054821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee908117909155600880549092161790556119ec8061008b6000396000f3006080604052600436106101065763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663072201348114610108578063155dd5ee14610161578063227ada3714610179578063340f4fea146101995780634d61537f146101b15780636b5c5f39146101e257806379141f80146101f75780638da5cb5b1461024b57806397e0328614610260578063b539cd5514610287578063ca722cdc1461029c578063d06c54fb146102b7578063d2f7265a146102cc578063d579fd44146102e1578063d702087f14610302578063df88126f14610323578063e1fdb4b414610338578063f8bb201c14610350578063fbd668a914610371575b005b34801561011457600080fd5b50610120600435610389565b604080519788526020880196909652868601949094526060860192909252608085015260a0840152600160a060020a031660c0830152519081900360e00190f35b34801561016d57600080fd5b50610106600435610435565b61010660043560243560443560643560843560a43560ff60c435166105bf565b3480156101a557600080fd5b50610106600435610c2e565b3480156101bd57600080fd5b506101c6610d13565b60408051600160a060020a039092168252519081900360200190f35b3480156101ee57600080fd5b506101c6610d22565b34801561020357600080fd5b5061020f600435610d31565b6040805196875260208701959095528585019390935260608501919091526080840152600160a060020a031660a0830152519081900360c00190f35b34801561025757600080fd5b506101c6610d80565b34801561026c57600080fd5b50610275610d8f565b60408051918252519081900360200190f35b34801561029357600080fd5b50610275610d95565b3480156102a857600080fd5b50610106600435602435610d9b565b3480156102c357600080fd5b50610106610fee565b3480156102d857600080fd5b506101c6611093565b3480156102ed57600080fd5b50610106600160a060020a03600435166110a2565b34801561030e57600080fd5b50610106600160a060020a0360043516611199565b34801561032f57600080fd5b5061027561122a565b34801561034457600080fd5b50610106600435611230565b34801561035c57600080fd5b50610106600160a060020a0360043516611411565b34801561037d57600080fd5b506101066004356114a2565b600080600080600080600087604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106103e35780518252601f1990920191602091820191016103c4565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060019004965061041f87610d31565b9b9d949c50929a91995097509095509350915050565b600154600160a060020a03163314610497576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115610515576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60065430319061052b908363ffffffff61159016565b1115610581576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600554604051600160a060020a039091169082156108fc029083906000818181858888f193505050501580156105bb573d6000803e3d6000fd5b5050565b600084815260076020526040812060038101549091908190650100000000009004600160a060020a031615610664576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600189118015610675575060648911155b15156106cb576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc1000034101580156106ec5750693f870857a3e0e38000003411155b1515610742576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b60008a1180156107575750650100000000008a105b15156107ad576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b8743111580156107d057506000546107cc90439063ffffffff61159016565b8811155b1515610826576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b60018888604051602001808364ffffffffff1664ffffffffff167b01000000000000000000000000000000000000000000000000000000028152600501828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106108ab5780518252601f19909201916020918201910161088c565b51815160209384036101000a60001901801990921691161790526040805192909401829003822060008084528383018087529190915260ff8c1683860152606083018e9052608083018d9052935160a08084019750919550601f1981019492819003909101925090865af1158015610927573d6000803e3d6000fd5b5050604051601f190151600454600160a060020a039081169116149050610998576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60288911610a1c576109fc603f7e010410410410410410410410410410410410410410410410410410410410416109ef8d79200000000010000000000800000000040000000002000000000163ffffffff6115ad16565b169063ffffffff6115db16565b60038401805464ffffffffff191664ffffffffff8d161790559150610aac565b60008a118015610a2c5750888a11155b1515610aa8576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8991505b610ab7348a846115fc565b9050610ace6003543461159090919063ffffffff16565b811115610b25576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600654610b38908263ffffffff61159016565b600681905530311015610b95576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b6040805188815290517f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f879181900360200190a15034825560018201805460ff191660ff998a161761ff0019166101009290991691909102979097179096555050436002850155505050600301805478ffffffffffffffffffffffffffffffffffffffff0000000000191633650100000000000217905550565b600154600160a060020a03163314610c90576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b60008111610d0e576040805160e560020a62461bcd02815260206004820152602c60248201527f62657445787069726174696f6e426c6f636b732073686f756c6420626520612060448201527f73616e65206e756d6265722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b600055565b600454600160a060020a031681565b600854600160a060020a031681565b6000908152600760205260409020805460018201546002830154600390930154919360ff80831694610100909304169264ffffffffff81169165010000000000909104600160a060020a031690565b600154600160a060020a031681565b60005481565b60035481565b6008546000908190600160a060020a03163314610e28576040805160e560020a62461bcd02815260206004820152602c60248201527f4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e60448201527f6f6e2d63726f75706965722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b83604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610e775780518252601f199092019160209182019101610e58565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526007909252929020600281015492965094505043119150610f379050576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b6000546002820154610f4e9163ffffffff61159016565b431115610fcb576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6002810154408314610fdc57600080fd5b610fe881858486611734565b50505050565b600254600160a060020a03163314611062576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206f6e6c792061636365707420707265617070726f766564206e657720604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6002546001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600554600160a060020a031681565b600154600160a060020a03163314611104576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600154600160a060020a038281169116141561116a576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a031633146111fb576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60065481565b6000818152600760205260408120805490918115156112bf576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60005460028401546112d69163ffffffff61159016565b4311611352576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008355600183015461137290839060ff808216916101009004166115fc565b600654909150611388908263ffffffff61196616565b600655600383015460405165010000000000909104600160a060020a0316906108fc8415029084906000818181858888f193505050501580156113cf573d6000803e3d6000fd5b50604080518581526020810184905281517f5eee8032448a7f1556f67b8a76a4dcfd75ff98c05198df9f420467d0a1234e38929181900390910190a150505050565b600154600160a060020a03163314611473576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a03163314611504576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e3800000811061158b576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600355565b6000828201838110156115a257600080fd5b8091505b5092915050565b6000808315156115c057600091506115a6565b508282028284828115156115d057fe5b04146115a257600080fd5b60008115156115e957600080fd5b81838115156115f457fe5b069392505050565b60008082600010801561160f5750838311155b1515611665576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b611687606461167b87600163ffffffff6115ad16565b9063ffffffff61197d16565b905084811115611707576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61172b8361167b8661171f898663ffffffff61196616565b9063ffffffff6115ad16565b95945050505050565b83546001850154600386015460ff8083169261010090041690650100000000009004600160a060020a031660008080808715156117e1576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008c556040805160208082018e90528183018c9052825180830384018152606090920192839052815191929182918401908083835b602083106118365780518252601f199092019160209182019101611817565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120965061187192508691508990506115db565b925061187e8888886115fc565b915060009050602887116118ab5760038c0154600284900a1664ffffffffff16156118a65750805b6118b6565b858310156118b65750805b6006546118c9908363ffffffff61196616565b600655600160a060020a0385166108fc82156118e557826118e8565b60015b6040518115909202916000818181858888f19350505050158015611910573d6000803e3d6000fd5b50604080518b8152602081018590528082018a90526060810183905290517f2ffb8b1e2d03a44dc007b9ce6a73b5ff4627abcf92c7e60ccce34146e2ea0a9f9181900360800190a1505050505050505050505050565b6000808383111561197657600080fd5b5050900390565b60008080831161198c57600080fd5b828481151561199757fe5b0494935050505056004f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a72305820f44f383c5783630548cd4fca32721c07d63f7380c217a15b26fe357306e62cde0029

Deployed Bytecode

0x6080604052600436106101065763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663072201348114610108578063155dd5ee14610161578063227ada3714610179578063340f4fea146101995780634d61537f146101b15780636b5c5f39146101e257806379141f80146101f75780638da5cb5b1461024b57806397e0328614610260578063b539cd5514610287578063ca722cdc1461029c578063d06c54fb146102b7578063d2f7265a146102cc578063d579fd44146102e1578063d702087f14610302578063df88126f14610323578063e1fdb4b414610338578063f8bb201c14610350578063fbd668a914610371575b005b34801561011457600080fd5b50610120600435610389565b604080519788526020880196909652868601949094526060860192909252608085015260a0840152600160a060020a031660c0830152519081900360e00190f35b34801561016d57600080fd5b50610106600435610435565b61010660043560243560443560643560843560a43560ff60c435166105bf565b3480156101a557600080fd5b50610106600435610c2e565b3480156101bd57600080fd5b506101c6610d13565b60408051600160a060020a039092168252519081900360200190f35b3480156101ee57600080fd5b506101c6610d22565b34801561020357600080fd5b5061020f600435610d31565b6040805196875260208701959095528585019390935260608501919091526080840152600160a060020a031660a0830152519081900360c00190f35b34801561025757600080fd5b506101c6610d80565b34801561026c57600080fd5b50610275610d8f565b60408051918252519081900360200190f35b34801561029357600080fd5b50610275610d95565b3480156102a857600080fd5b50610106600435602435610d9b565b3480156102c357600080fd5b50610106610fee565b3480156102d857600080fd5b506101c6611093565b3480156102ed57600080fd5b50610106600160a060020a03600435166110a2565b34801561030e57600080fd5b50610106600160a060020a0360043516611199565b34801561032f57600080fd5b5061027561122a565b34801561034457600080fd5b50610106600435611230565b34801561035c57600080fd5b50610106600160a060020a0360043516611411565b34801561037d57600080fd5b506101066004356114a2565b600080600080600080600087604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106103e35780518252601f1990920191602091820191016103c4565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060019004965061041f87610d31565b9b9d949c50929a91995097509095509350915050565b600154600160a060020a03163314610497576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b3031811115610515576040805160e560020a62461bcd028152602060048201526024808201527f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60065430319061052b908363ffffffff61159016565b1115610581576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682066756e64732e000000000000000000000000000000604482015290519081900360640190fd5b600554604051600160a060020a039091169082156108fc029083906000818181858888f193505050501580156105bb573d6000803e3d6000fd5b5050565b600084815260076020526040812060038101549091908190650100000000009004600160a060020a031615610664576040805160e560020a62461bcd02815260206004820152602160248201527f4265742073686f756c6420626520696e20612027636c65616e2720737461746560448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600189118015610675575060648911155b15156106cb576040805160e560020a62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc1000034101580156106ec5750693f870857a3e0e38000003411155b1515610742576040805160e560020a62461bcd02815260206004820152601e60248201527f416d6f756e742073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b60008a1180156107575750650100000000008a105b15156107ad576040805160e560020a62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b8743111580156107d057506000546107cc90439063ffffffff61159016565b8811155b1515610826576040805160e560020a62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b60018888604051602001808364ffffffffff1664ffffffffff167b01000000000000000000000000000000000000000000000000000000028152600501828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106108ab5780518252601f19909201916020918201910161088c565b51815160209384036101000a60001901801990921691161790526040805192909401829003822060008084528383018087529190915260ff8c1683860152606083018e9052608083018d9052935160a08084019750919550601f1981019492819003909101925090865af1158015610927573d6000803e3d6000fd5b5050604051601f190151600454600160a060020a039081169116149050610998576040805160e560020a62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b60288911610a1c576109fc603f7e010410410410410410410410410410410410410410410410410410410410416109ef8d79200000000010000000000800000000040000000002000000000163ffffffff6115ad16565b169063ffffffff6115db16565b60038401805464ffffffffff191664ffffffffff8d161790559150610aac565b60008a118015610a2c5750888a11155b1515610aa8576040805160e560020a62461bcd02815260206004820152602e60248201527f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676560448201527f72207468616e206d6f64756c6f2e000000000000000000000000000000000000606482015290519081900360840190fd5b8991505b610ab7348a846115fc565b9050610ace6003543461159090919063ffffffff16565b811115610b25576040805160e560020a62461bcd02815260206004820152601a60248201527f6d617850726f666974206c696d69742076696f6c6174696f6e2e000000000000604482015290519081900360640190fd5b600654610b38908263ffffffff61159016565b600681905530311015610b95576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b6040805188815290517f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f879181900360200190a15034825560018201805460ff191660ff998a161761ff0019166101009290991691909102979097179096555050436002850155505050600301805478ffffffffffffffffffffffffffffffffffffffff0000000000191633650100000000000217905550565b600154600160a060020a03163314610c90576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b60008111610d0e576040805160e560020a62461bcd02815260206004820152602c60248201527f62657445787069726174696f6e426c6f636b732073686f756c6420626520612060448201527f73616e65206e756d6265722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b600055565b600454600160a060020a031681565b600854600160a060020a031681565b6000908152600760205260409020805460018201546002830154600390930154919360ff80831694610100909304169264ffffffffff81169165010000000000909104600160a060020a031690565b600154600160a060020a031681565b60005481565b60035481565b6008546000908190600160a060020a03163314610e28576040805160e560020a62461bcd02815260206004820152602c60248201527f4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e60448201527f6f6e2d63726f75706965722e0000000000000000000000000000000000000000606482015290519081900360840190fd5b83604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610e775780518252601f199092019160209182019101610e58565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526007909252929020600281015492965094505043119150610f379050576040805160e560020a62461bcd02815260206004820152603360248201527f736574746c6542657420696e207468652073616d6520626c6f636b206173207060448201527f6c6163654265742c206f72206265666f72652e00000000000000000000000000606482015290519081900360840190fd5b6000546002820154610f4e9163ffffffff61159016565b431115610fcb576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6002810154408314610fdc57600080fd5b610fe881858486611734565b50505050565b600254600160a060020a03163314611062576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206f6e6c792061636365707420707265617070726f766564206e657720604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6002546001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600554600160a060020a031681565b600154600160a060020a03163314611104576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b600154600160a060020a038281169116141561116a576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a031633146111fb576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60065481565b6000818152600760205260408120805490918115156112bf576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60005460028401546112d69163ffffffff61159016565b4311611352576040805160e560020a62461bcd02815260206004820152602260248201527f426c6f636b686173682063616e2774206265207175657269656420627920455660448201527f4d2e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008355600183015461137290839060ff808216916101009004166115fc565b600654909150611388908263ffffffff61196616565b600655600383015460405165010000000000909104600160a060020a0316906108fc8415029084906000818181858888f193505050501580156113cf573d6000803e3d6000fd5b50604080518581526020810184905281517f5eee8032448a7f1556f67b8a76a4dcfd75ff98c05198df9f420467d0a1234e38929181900390910190a150505050565b600154600160a060020a03163314611473576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a03163314611504576040805160e560020a62461bcd02815260206004820152602660248201526000805160206119a1833981519152604482015260d160020a6537bbb732b91702606482015290519081900360840190fd5b693f870857a3e0e3800000811061158b576040805160e560020a62461bcd02815260206004820152602260248201527f6d617850726f6669742073686f756c6420626520612073616e65206e756d626560448201527f722e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600355565b6000828201838110156115a257600080fd5b8091505b5092915050565b6000808315156115c057600091506115a6565b508282028284828115156115d057fe5b04146115a257600080fd5b60008115156115e957600080fd5b81838115156115f457fe5b069392505050565b60008082600010801561160f5750838311155b1515611665576040805160e560020a62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b611687606461167b87600163ffffffff6115ad16565b9063ffffffff61197d16565b905084811115611707576040805160e560020a62461bcd02815260206004820152602260248201527f42657420646f65736e2774206576656e20636f76657220686f7573652065646760448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61172b8361167b8661171f898663ffffffff61196616565b9063ffffffff6115ad16565b95945050505050565b83546001850154600386015460ff8083169261010090041690650100000000009004600160a060020a031660008080808715156117e1576040805160e560020a62461bcd02815260206004820152602260248201527f4265742073686f756c6420626520696e20616e2027616374697665272073746160448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008c556040805160208082018e90528183018c9052825180830384018152606090920192839052815191929182918401908083835b602083106118365780518252601f199092019160209182019101611817565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120965061187192508691508990506115db565b925061187e8888886115fc565b915060009050602887116118ab5760038c0154600284900a1664ffffffffff16156118a65750805b6118b6565b858310156118b65750805b6006546118c9908363ffffffff61196616565b600655600160a060020a0385166108fc82156118e557826118e8565b60015b6040518115909202916000818181858888f19350505050158015611910573d6000803e3d6000fd5b50604080518b8152602081018590528082018a90526060810183905290517f2ffb8b1e2d03a44dc007b9ce6a73b5ff4627abcf92c7e60ccce34146e2ea0a9f9181900360800190a1505050505050505050505050565b6000808383111561197657600080fd5b5050900390565b60008080831161198c57600080fd5b828481151561199757fe5b0494935050505056004f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2da165627a7a72305820f44f383c5783630548cd4fca32721c07d63f7380c217a15b26fe357306e62cde0029

Swarm Source

bzzr://f44f383c5783630548cd4fca32721c07d63f7380c217a15b26fe357306e62cde

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.