ETH Price: $3,208.30 (-1.43%)
Gas: 1 Gwei

Contract

0x1f58Af89d12D4A60647f99a9fc71Dd0367B56dF4
 

Overview

ETH Balance

441 wei

Eth Value

Less Than $0.01 (@ $3,208.30/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
End Game53285962018-03-27 2:09:172315 days ago1522116557IN
0x1f58Af89...367B56dF4
0 ETH0.000099652.25
Buyout53283052018-03-27 0:59:222315 days ago1522112362IN
0x1f58Af89...367B56dF4
0.151875 ETH0.000343632.25
Buyout And Set R...53282992018-03-27 0:58:182315 days ago1522112298IN
0x1f58Af89...367B56dF4
0.10125 ETH0.000445022.25
Buyout53281962018-03-27 0:32:002315 days ago1522110720IN
0x1f58Af89...367B56dF4
0.10125 ETH0.000343632.25
Buyout And Set R...53281702018-03-27 0:26:352315 days ago1522110395IN
0x1f58Af89...367B56dF4
0.0675 ETH0.000969166
Buyout And Set R...53281702018-03-27 0:26:352315 days ago1522110395IN
0x1f58Af89...367B56dF4
0.0675 ETH0.001829549.25
Buyout53280182018-03-26 23:49:472315 days ago1522108187IN
0x1f58Af89...367B56dF4
0.0675 ETH0.000343632.25
Buyout And Set R...53279272018-03-26 23:27:222315 days ago1522106842IN
0x1f58Af89...367B56dF4
0.045 ETH0.0019383312
Buyout And Set R...53279252018-03-26 23:26:532315 days ago1522106813IN
0x1f58Af89...367B56dF4
0.045 ETH0.001141696
Buyout And Set R...53279212018-03-26 23:26:152315 days ago1522106775IN
0x1f58Af89...367B56dF4
0.045 ETH0.001038725.25
Buyout And Set R...53278852018-03-26 23:18:312315 days ago1522106311IN
0x1f58Af89...367B56dF4
0.045 ETH0.0021936813
Buyout53277762018-03-26 22:53:002315 days ago1522104780IN
0x1f58Af89...367B56dF4
0.045 ETH0.000278972.25
Buyout53277722018-03-26 22:51:512315 days ago1522104711IN
0x1f58Af89...367B56dF4
0.045 ETH0.000496353.25
Buyout And Set R...53276662018-03-26 22:26:572315 days ago1522103217IN
0x1f58Af89...367B56dF4
0.03 ETH0.001141696
Buyout And Set R...53276652018-03-26 22:26:482315 days ago1522103208IN
0x1f58Af89...367B56dF4
0.03 ETH0.000445162.25
Buyout And Set R...53276312018-03-26 22:18:322315 days ago1522102712IN
0x1f58Af89...367B56dF4
0.03 ETH0.0025311715
Buyout53275282018-03-26 21:52:052315 days ago1522101125IN
0x1f58Af89...367B56dF4
0.03 ETH0.000343632.25
Buyout And Set R...53274462018-03-26 21:31:362315 days ago1522099896IN
0x1f58Af89...367B56dF4
0.03 ETH0.000896814
Buyout53274352018-03-26 21:27:592315 days ago1522099679IN
0x1f58Af89...367B56dF4
0.045 ETH0.000468552.25
Buyout And Set R...53274332018-03-26 21:27:442315 days ago1522099664IN
0x1f58Af89...367B56dF4
0.02 ETH0.000807645
Buyout And Set R...53274332018-03-26 21:27:442315 days ago1522099664IN
0x1f58Af89...367B56dF4
0.02 ETH0.001274856
Buyout And Set R...53274282018-03-26 21:26:582315 days ago1522099618IN
0x1f58Af89...367B56dF4
0.02 ETH0.000445162.25
Buyout And Set R...53274282018-03-26 21:26:582315 days ago1522099618IN
0x1f58Af89...367B56dF4
0.02 ETH0.000482032.25
Buyout And Set R...53274282018-03-26 21:26:582315 days ago1522099618IN
0x1f58Af89...367B56dF4
0.02 ETH0.000362522.25
Buyout And Set R...53274252018-03-26 21:26:202315 days ago1522099580IN
0x1f58Af89...367B56dF4
0.02 ETH0.000396562.25
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
53285962018-03-27 2:09:172315 days ago1522116557
0x1f58Af89...367B56dF4
0.1334375 ETH
53283052018-03-27 0:59:222315 days ago1522112362
0x1f58Af89...367B56dF4
0.006075 ETH
53283052018-03-27 0:59:222315 days ago1522112362
0x1f58Af89...367B56dF4
0.00253125 ETH
53283052018-03-27 0:59:222315 days ago1522112362
0x1f58Af89...367B56dF4
0.00253125 ETH
53283052018-03-27 0:59:222315 days ago1522112362
0x1f58Af89...367B56dF4
0.00253125 ETH
53283052018-03-27 0:59:222315 days ago1522112362
0x1f58Af89...367B56dF4
0.12301875 ETH
53282992018-03-27 0:58:182315 days ago1522112298
0x1f58Af89...367B56dF4
0.00253125 ETH
53282992018-03-27 0:58:182315 days ago1522112298
0x1f58Af89...367B56dF4
0.00075937 ETH
53282992018-03-27 0:58:182315 days ago1522112298
0x1f58Af89...367B56dF4
0.00075937 ETH
53282992018-03-27 0:58:182315 days ago1522112298
0x1f58Af89...367B56dF4
0.0010125 ETH
53282992018-03-27 0:58:182315 days ago1522112298
0x1f58Af89...367B56dF4
0.0010125 ETH
53282992018-03-27 0:58:182315 days ago1522112298
0x1f58Af89...367B56dF4
0.0010125 ETH
53282992018-03-27 0:58:182315 days ago1522112298
0x1f58Af89...367B56dF4
0.0010125 ETH
53282992018-03-27 0:58:182315 days ago1522112298
0x1f58Af89...367B56dF4
0.0010125 ETH
53282992018-03-27 0:58:182315 days ago1522112298
0x1f58Af89...367B56dF4
0.0820125 ETH
53281962018-03-27 0:32:002315 days ago1522110720
0x1f58Af89...367B56dF4
0.00405 ETH
53281962018-03-27 0:32:002315 days ago1522110720
0x1f58Af89...367B56dF4
0.0016875 ETH
53281962018-03-27 0:32:002315 days ago1522110720
0x1f58Af89...367B56dF4
0.0016875 ETH
53281962018-03-27 0:32:002315 days ago1522110720
0x1f58Af89...367B56dF4
0.0016875 ETH
53281962018-03-27 0:32:002315 days ago1522110720
0x1f58Af89...367B56dF4
0.0820125 ETH
53281702018-03-27 0:26:352315 days ago1522110395
0x1f58Af89...367B56dF4
0.00329062 ETH
53281702018-03-27 0:26:352315 days ago1522110395
0x1f58Af89...367B56dF4
0.00075937 ETH
53281702018-03-27 0:26:352315 days ago1522110395
0x1f58Af89...367B56dF4
0.0010125 ETH
53281702018-03-27 0:26:352315 days ago1522110395
0x1f58Af89...367B56dF4
0.0010125 ETH
53281702018-03-27 0:26:352315 days ago1522110395
0x1f58Af89...367B56dF4
0.0010125 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BurnupGameCore

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-03-20
*/

pragma solidity ^0.4.18;


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

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws 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 Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

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


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}


/**
 * @title Claimable
 * @dev Extension for the Ownable contract, where the ownership needs to be claimed.
 * This allows the new owner to accept the transfer.
 */
contract Claimable is Ownable {
  address public pendingOwner;

  /**
   * @dev Modifier throws if called by any account other than the pendingOwner.
   */
  modifier onlyPendingOwner() {
    require(msg.sender == pendingOwner);
    _;
  }

  /**
   * @dev Allows the current owner to set the pendingOwner address.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) onlyOwner public {
    pendingOwner = newOwner;
  }

  /**
   * @dev Allows the pendingOwner address to finalize the transfer.
   */
  function claimOwnership() onlyPendingOwner public {
    OwnershipTransferred(owner, pendingOwner);
    owner = pendingOwner;
    pendingOwner = address(0);
  }
}


/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    Unpause();
  }
}


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}


/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}


/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
  function safeTransfer(ERC20Basic token, address to, uint256 value) internal {
    assert(token.transfer(to, value));
  }

  function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal {
    assert(token.transferFrom(from, to, value));
  }

  function safeApprove(ERC20 token, address spender, uint256 value) internal {
    assert(token.approve(spender, value));
  }
}


/**
 * @title Contracts that should be able to recover tokens
 * @author SylTi
 * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
 * This will prevent any accidental loss of tokens.
 */
contract CanReclaimToken is Ownable {
  using SafeERC20 for ERC20Basic;

  /**
   * @dev Reclaim all ERC20Basic compatible tokens
   * @param token ERC20Basic The address of the token contract
   */
  function reclaimToken(ERC20Basic token) external onlyOwner {
    uint256 balance = token.balanceOf(this);
    token.safeTransfer(owner, balance);
  }

}


/// @dev Implements access control to the DWorld contract.
contract BurnupGameAccessControl is Claimable, Pausable, CanReclaimToken {
    address public cfoAddress;
    address public cooAddress;
    
    function BurnupGameAccessControl() public {
        // The creator of the contract is the initial CFO.
        cfoAddress = msg.sender;
    
        // The creator of the contract is the initial COO.
        cooAddress = msg.sender;
    }
    
    /// @dev Access modifier for CFO-only functionality.
    modifier onlyCFO() {
        require(msg.sender == cfoAddress);
        _;
    }
    
    /// @dev Access modifier for COO-only functionality.
    modifier onlyCOO() {
        require(msg.sender == cooAddress);
        _;
    }

    /// @dev Assigns a new address to act as the CFO. Only available to the current contract owner.
    /// @param _newCFO The address of the new CFO.
    function setCFO(address _newCFO) external onlyOwner {
        require(_newCFO != address(0));

        cfoAddress = _newCFO;
    }
    
    /// @dev Assigns a new address to act as the COO. Only available to the current contract owner.
    /// @param _newCOO The address of the new COO.
    function setCOO(address _newCOO) external onlyOwner {
        require(_newCOO != address(0));

        cooAddress = _newCOO;
    }
}


/// @dev Defines base data structures for DWorld.
contract BurnupGameBase is BurnupGameAccessControl {
    using SafeMath for uint256;
    
    event NextGame(uint256 rows, uint256 cols, uint256 activityTimer, uint256 unclaimedTilePrice, uint256 buyoutReferralBonusPercentage, uint256 buyoutPrizePoolPercentage, uint256 buyoutDividendPercentage, uint256 buyoutFeePercentage);
    event Start(uint256 indexed gameIndex, address indexed starter, uint256 timestamp, uint256 prizePool, uint256 rows, uint256 cols, uint256 activityTimer, uint256 unclaimedTilePrice, uint256 buyoutReferralBonusPercentage, uint256 buyoutPrizePoolPercentage, uint256 buyoutDividendPercentage, uint256 buyoutFeePercentage);
    event End(uint256 indexed gameIndex, address indexed winner, uint256 indexed identifier, uint256 x, uint256 y, uint256 timestamp, uint256 prize);
    event Buyout(uint256 indexed gameIndex, address indexed player, uint256 indexed identifier, uint256 x, uint256 y, uint256 timestamp, uint256 timeoutTimestamp, uint256 newPrice, uint256 newPrizePool);
    event SpiceUpPrizePool(uint256 indexed gameIndex, address indexed spicer, uint256 spiceAdded, string message, uint256 newPrizePool);
    
    /// @dev Struct to hold game settings.
    struct GameSettings {
        uint256 rows; // 5
        uint256 cols; // 8
        
        /// @dev Time after last trade after which tiles become inactive.
        uint256 activityTimer; // 3600
        
        /// @dev Base price for unclaimed tiles.
        uint256 unclaimedTilePrice; // 0.01 ether
        
        /// @dev Percentage of the buyout price that goes towards the referral
        /// bonus. In 1/1000th of a percentage.
        uint256 buyoutReferralBonusPercentage; // 750
        
        /// @dev Percentage of the buyout price that goes towards the prize
        /// pool. In 1/1000th of a percentage.
        uint256 buyoutPrizePoolPercentage; // 10000
    
        /// @dev Percentage of the buyout price that goes towards dividends
        /// surrounding the tile that is bought out. In in 1/1000th of
        /// a percentage.
        uint256 buyoutDividendPercentage; // 5000
    
        /// @dev Buyout fee in 1/1000th of a percentage.
        uint256 buyoutFeePercentage; // 2500
    }
    
    /// @dev Struct to hold game state.
    struct GameState {
        /// @dev Boolean indicating whether the game is live.
        bool gameStarted;
    
        /// @dev Time at which the game started.
        uint256 gameStartTimestamp;
    
        /// @dev Keep track of tile ownership.
        mapping (uint256 => address) identifierToOwner;
        
        /// @dev Keep track of the timestamp at which a tile was flipped last.
        mapping (uint256 => uint256) identifierToBuyoutTimestamp;
        
        /// @dev Current tile price.
        mapping (uint256 => uint256) identifierToBuyoutPrice;
        
        /// @dev Keep track of the tile that was flipped last.
        uint256 lastFlippedTile;
        
        /// @dev The prize pool.
        uint256 prizePool;
    }
    
    /// @notice Mapping from game indices to game settings.
    mapping (uint256 => GameSettings) public gameSettings;
    
    /// @notice Mapping from game indices to game states.
    mapping (uint256 => GameState) public gameStates;
    
    /// @notice The index of the current game.
    uint256 public gameIndex = 0;
    
    /// @dev Settings for the next game
    GameSettings public nextGameSettings;
    
    function BurnupGameBase() public {
        // Initial settings.
        setNextGameSettings(
            4, // rows
            5, // cols
            3600, // activityTimer
            0.01 ether, // unclaimedTilePrice
            750, // buyoutReferralBonusPercentage
            10000, // buyoutPrizePoolPercentage
            5000, // buyoutDividendPercentage
            2500 // buyoutFeePercentage
        );
    }
    
    /// @dev Test whether the coordinate is valid.
    /// @param x The x-part of the coordinate to test.
    /// @param y The y-part of the coordinate to test.
    function validCoordinate(uint256 x, uint256 y) public view returns(bool) {
        return x < gameSettings[gameIndex].cols && y < gameSettings[gameIndex].rows;
    }
    
    /// @dev Represent a 2D coordinate as a single uint.
    /// @param x The x-coordinate.
    /// @param y The y-coordinate.
    function coordinateToIdentifier(uint256 x, uint256 y) public view returns(uint256) {
        require(validCoordinate(x, y));
        
        return (y * gameSettings[gameIndex].cols) + x;
    }
    
    /// @dev Turn a single uint representation of a coordinate into its x and y parts.
    /// @param identifier The uint representation of a coordinate.
    /// Assumes the identifier is valid.
    function identifierToCoordinate(uint256 identifier) public view returns(uint256 x, uint256 y) {
        y = identifier / gameSettings[gameIndex].cols;
        x = identifier - (y * gameSettings[gameIndex].cols);
    }
    
    /// @notice Sets the settings for the next game.
    function setNextGameSettings(
        uint256 rows,
        uint256 cols,
        uint256 activityTimer,
        uint256 unclaimedTilePrice,
        uint256 buyoutReferralBonusPercentage,
        uint256 buyoutPrizePoolPercentage,
        uint256 buyoutDividendPercentage,
        uint256 buyoutFeePercentage
    )
        public
        onlyCFO
    {
        // Buyout dividend must be 2% at the least.
        // Buyout dividend percentage may be 12.5% at the most.
        require(2000 <= buyoutDividendPercentage && buyoutDividendPercentage <= 12500);
        
        // Buyout fee may be 5% at the most.
        require(buyoutFeePercentage <= 5000);
        
        nextGameSettings = GameSettings({
            rows: rows,
            cols: cols,
            activityTimer: activityTimer,
            unclaimedTilePrice: unclaimedTilePrice,
            buyoutReferralBonusPercentage: buyoutReferralBonusPercentage,
            buyoutPrizePoolPercentage: buyoutPrizePoolPercentage,
            buyoutDividendPercentage: buyoutDividendPercentage,
            buyoutFeePercentage: buyoutFeePercentage
        });
        
        NextGame(rows, cols, activityTimer, unclaimedTilePrice, buyoutReferralBonusPercentage, buyoutPrizePoolPercentage, buyoutDividendPercentage, buyoutFeePercentage);
    }
}


/// @dev Holds ownership functionality such as transferring.
contract BurnupGameOwnership is BurnupGameBase {
    
    event Transfer(address indexed from, address indexed to, uint256 indexed deedId);
    
    /// @notice Name of the collection of deeds (non-fungible token), as defined in ERC721Metadata.
    function name() public pure returns (string _deedName) {
        _deedName = "Burnup Tiles";
    }
    
    /// @notice Symbol of the collection of deeds (non-fungible token), as defined in ERC721Metadata.
    function symbol() public pure returns (string _deedSymbol) {
        _deedSymbol = "BURN";
    }
    
    /// @dev Checks if a given address owns a particular tile.
    /// @param _owner The address of the owner to check for.
    /// @param _identifier The tile identifier to check for.
    function _owns(address _owner, uint256 _identifier) internal view returns (bool) {
        return gameStates[gameIndex].identifierToOwner[_identifier] == _owner;
    }
    
    /// @dev Assigns ownership of a specific deed to an address.
    /// @param _from The address to transfer the deed from.
    /// @param _to The address to transfer the deed to.
    /// @param _identifier The identifier of the deed to transfer.
    function _transfer(address _from, address _to, uint256 _identifier) internal {
        // Transfer ownership.
        gameStates[gameIndex].identifierToOwner[_identifier] = _to;
        
        // Emit the transfer event.
        Transfer(_from, _to, _identifier);
    }
    
    /// @notice Returns the address currently assigned ownership of a given deed.
    /// @dev Required for ERC-721 compliance.
    function ownerOf(uint256 _identifier) external view returns (address _owner) {
        _owner = gameStates[gameIndex].identifierToOwner[_identifier];

        require(_owner != address(0));
    }
    
    /// @notice Transfer a deed to another address. If transferring to a smart
    /// contract be VERY CAREFUL to ensure that it is aware of ERC-721, or your
    /// deed may be lost forever.
    /// @param _to The address of the recipient, can be a user or contract.
    /// @param _identifier The identifier of the deed to transfer.
    /// @dev Required for ERC-721 compliance.
    function transfer(address _to, uint256 _identifier) external whenNotPaused {
        // One can only transfer their own deeds.
        require(_owns(msg.sender, _identifier));
        
        // Transfer ownership
        _transfer(msg.sender, _to, _identifier);
    }
}


/**
 * @title PullPayment
 * @dev Base contract supporting async send for pull payments. Inherit from this
 * contract and use asyncSend instead of send.
 */
contract PullPayment {
  using SafeMath for uint256;

  mapping(address => uint256) public payments;
  uint256 public totalPayments;

  /**
  * @dev withdraw accumulated balance, called by payee.
  */
  function withdrawPayments() public {
    address payee = msg.sender;
    uint256 payment = payments[payee];

    require(payment != 0);
    require(this.balance >= payment);

    totalPayments = totalPayments.sub(payment);
    payments[payee] = 0;

    assert(payee.send(payment));
  }

  /**
  * @dev Called by the payer to store the sent amount as credit to be pulled.
  * @param dest The destination address of the funds.
  * @param amount The amount to transfer.
  */
  function asyncSend(address dest, uint256 amount) internal {
    payments[dest] = payments[dest].add(amount);
    totalPayments = totalPayments.add(amount);
  }
}


/// @dev Implements access control to the BurnUp wallet.
contract BurnupHoldingAccessControl is Claimable, Pausable, CanReclaimToken {
    address public cfoAddress;
    
    /// Boolean indicating whether an address is a BurnUp Game contract.
    mapping (address => bool) burnupGame;

    function BurnupHoldingAccessControl() public {
        // The creator of the contract is the initial CFO.
        cfoAddress = msg.sender;
    }
    
    /// @dev Access modifier for CFO-only functionality.
    modifier onlyCFO() {
        require(msg.sender == cfoAddress);
        _;
    }
    
    /// @dev Access modifier for functionality that may only be called by a BurnUp game.
    modifier onlyBurnupGame() {
        // The sender must be a recognized BurnUp game address.
        require(burnupGame[msg.sender]);
        _;
    }

    /// @dev Assigns a new address to act as the CFO. Only available to the current contract owner.
    /// @param _newCFO The address of the new CFO.
    function setCFO(address _newCFO) external onlyOwner {
        require(_newCFO != address(0));

        cfoAddress = _newCFO;
    }
    
    /// @dev Add a Burnup game contract address.
    /// @param addr The address of the Burnup game contract.
    function addBurnupGame(address addr) external onlyOwner {
        burnupGame[addr] = true;
    }
    
    /// @dev Remove a Burnup game contract address.
    /// @param addr The address of the Burnup game contract.
    function removeBurnupGame(address addr) external onlyOwner {
        delete burnupGame[addr];
    }
}


/// @dev Implements the BurnUp wallet.
contract BurnupHoldingReferral is BurnupHoldingAccessControl {

    event SetReferrer(address indexed referral, address indexed referrer);

    /// Referrer of player.
    mapping (address => address) addressToReferrerAddress;
    
    /// Get the referrer of a player.
    /// @param player The address of the player to get the referrer of.
    function referrerOf(address player) public view returns (address) {
        return addressToReferrerAddress[player];
    }
    
    /// Set the referrer for a player.
    /// @param playerAddr The address of the player to set the referrer for.
    /// @param referrerAddr The address of the referrer to set.
    function _setReferrer(address playerAddr, address referrerAddr) internal {
        addressToReferrerAddress[playerAddr] = referrerAddr;
        
        // Emit event.
        SetReferrer(playerAddr, referrerAddr);
    }
}


/// @dev Implements the BurnUp wallet.
contract BurnupHoldingCore is BurnupHoldingReferral, PullPayment {
    using SafeMath for uint256;
    
    address public beneficiary1;
    address public beneficiary2;
    
    function BurnupHoldingCore(address _beneficiary1, address _beneficiary2) public {
        // The creator of the contract is the initial CFO.
        cfoAddress = msg.sender;
        
        // Set the two beneficiaries.
        beneficiary1 = _beneficiary1;
        beneficiary2 = _beneficiary2;
    }
    
    /// Pay the two beneficiaries. Sends both beneficiaries
    /// a halve of the payment.
    function payBeneficiaries() external payable {
        uint256 paymentHalve = msg.value.div(2);
        
        // We do not want a single wei to get stuck.
        uint256 otherPaymentHalve = msg.value.sub(paymentHalve);
        
        // Send payment for manual withdrawal.
        asyncSend(beneficiary1, paymentHalve);
        asyncSend(beneficiary2, otherPaymentHalve);
    }
    
    /// Sets a new address for Beneficiary one.
    /// @param addr The new address.
    function setBeneficiary1(address addr) external onlyCFO {
        beneficiary1 = addr;
    }
    
    /// Sets a new address for Beneficiary two.
    /// @param addr The new address.
    function setBeneficiary2(address addr) external onlyCFO {
        beneficiary2 = addr;
    }
    
    /// Set a referrer.
    /// @param playerAddr The address to set the referrer for.
    /// @param referrerAddr The address of the referrer to set.
    function setReferrer(address playerAddr, address referrerAddr) external onlyBurnupGame whenNotPaused returns(bool) {
        if (referrerOf(playerAddr) == address(0x0) && playerAddr != referrerAddr) {
            // Set the referrer, if no referrer has been set yet, and the player
            // and referrer are not the same address.
            _setReferrer(playerAddr, referrerAddr);
            
            // Indicate success.
            return true;
        }
        
        // Indicate failure.
        return false;
    }
}


/// @dev Holds functionality for finance related to tiles.
contract BurnupGameFinance is BurnupGameOwnership, PullPayment {
    /// Address of Burnup wallet
    BurnupHoldingCore burnupHolding;
    
    function BurnupGameFinance(address burnupHoldingAddress) public {
        burnupHolding = BurnupHoldingCore(burnupHoldingAddress);
    }
    
    /// @dev Find the _claimed_ tiles surrounding a tile.
    /// @param _deedId The identifier of the tile to get the surrounding tiles for.
    function _claimedSurroundingTiles(uint256 _deedId) internal view returns (uint256[] memory) {
        var (x, y) = identifierToCoordinate(_deedId);
        
        // Find all claimed surrounding tiles.
        uint256 claimed = 0;
        
        // Create memory buffer capable of holding all tiles.
        uint256[] memory _tiles = new uint256[](8);
        
        // Loop through all neighbors.
        for (int256 dx = -1; dx <= 1; dx++) {
            for (int256 dy = -1; dy <= 1; dy++) {
                if (dx == 0 && dy == 0) {
                    // Skip the center (i.e., the tile itself).
                    continue;
                }
                
                uint256 nx = uint256(int256(x) + dx);
                uint256 ny = uint256(int256(y) + dy);
                
                if (nx >= gameSettings[gameIndex].cols || ny >= gameSettings[gameIndex].rows) {
                    // This coordinate is outside the game bounds.
                    continue;
                }
                
                // Get the coordinates of this neighboring identifier.
                uint256 neighborIdentifier = coordinateToIdentifier(
                    nx,
                    ny
                );
                
                if (gameStates[gameIndex].identifierToOwner[neighborIdentifier] != address(0x0)) {
                    _tiles[claimed] = neighborIdentifier;
                    claimed++;
                }
            }
        }
        
        // Memory arrays cannot be resized, so copy all
        // tiles from the buffer to the tile array.
        uint256[] memory tiles = new uint256[](claimed);
        
        for (uint256 i = 0; i < claimed; i++) {
            tiles[i] = _tiles[i];
        }
        
        return tiles;
    }
    
    /// @dev Calculate the next buyout price given the current total buyout cost.
    /// @param price The current buyout price.
    function nextBuyoutPrice(uint256 price) public pure returns (uint256) {
        if (price < 0.02 ether) {
            return price.mul(200).div(100); // * 2.0
        } else {
            return price.mul(150).div(100); // * 1.5
        }
    }
    
    /// @dev Assign the proceeds of the buyout.
    function _assignBuyoutProceeds(
        address currentOwner,
        uint256[] memory claimedSurroundingTiles,
        uint256 fee,
        uint256 currentOwnerWinnings,
        uint256 totalDividendPerBeneficiary,
        uint256 referralBonus,
        uint256 prizePoolFunds
    )
        internal
    {
    
        if (currentOwner != 0x0) {
            // Send the current owner's winnings.
            _sendFunds(currentOwner, currentOwnerWinnings);
        } else {
            // There is no current owner.
            fee = fee.add(currentOwnerWinnings);
        }
        
        // Assign dividends to owners of surrounding tiles.
        for (uint256 i = 0; i < claimedSurroundingTiles.length; i++) {
            address beneficiary = gameStates[gameIndex].identifierToOwner[claimedSurroundingTiles[i]];
            _sendFunds(beneficiary, totalDividendPerBeneficiary);
        }
        
        /// Distribute the referral bonuses (if any) for an address.
        address referrer1 = burnupHolding.referrerOf(msg.sender);
        if (referrer1 != 0x0) {
            _sendFunds(referrer1, referralBonus);
        
            address referrer2 = burnupHolding.referrerOf(referrer1);
            if (referrer2 != 0x0) {
                _sendFunds(referrer2, referralBonus);
            } else {
                // There is no second-level referrer.
                fee = fee.add(referralBonus);
            }
        } else {
            // There are no first and second-level referrers.
            fee = fee.add(referralBonus.mul(2));
        }
        
        // Send the fee to the holding contract.
        burnupHolding.payBeneficiaries.value(fee)();
        
        // Increase the prize pool.
        gameStates[gameIndex].prizePool = gameStates[gameIndex].prizePool.add(prizePoolFunds);
    }
    
    /// @dev Calculate and assign the proceeds from the buyout.
    /// @param currentOwner The current owner of the tile that is being bought out.
    /// @param _deedId The identifier of the tile that is being bought out.
    /// @param claimedSurroundingTiles The surrounding tiles that have been claimed.
    function _calculateAndAssignBuyoutProceeds(address currentOwner, uint256 _deedId, uint256[] memory claimedSurroundingTiles)
        internal 
        returns (uint256 price)
    {
        // The current price.
        
        if (currentOwner == 0x0) {
            price = gameSettings[gameIndex].unclaimedTilePrice;
        } else {
            price = gameStates[gameIndex].identifierToBuyoutPrice[_deedId];
        }
        
        // Calculate the variable dividends based on the buyout price
        // (only to be paid if there are surrounding tiles).
        uint256 variableDividends = price.mul(gameSettings[gameIndex].buyoutDividendPercentage).div(100000);
        
        // Calculate fees, referral bonus, and prize pool funds.
        uint256 fee            = price.mul(gameSettings[gameIndex].buyoutFeePercentage).div(100000);
        uint256 referralBonus  = price.mul(gameSettings[gameIndex].buyoutReferralBonusPercentage).div(100000);
        uint256 prizePoolFunds = price.mul(gameSettings[gameIndex].buyoutPrizePoolPercentage).div(100000);
        
        // Calculate and assign buyout proceeds.
        uint256 currentOwnerWinnings = price.sub(fee).sub(referralBonus.mul(2)).sub(prizePoolFunds);
        
        uint256 totalDividendPerBeneficiary;
        if (claimedSurroundingTiles.length > 0) {
            // If there are surrounding tiles, variable dividend is to be paid
            // based on the buyout price.
            // Calculate the dividend per surrounding tile.
            totalDividendPerBeneficiary = variableDividends / claimedSurroundingTiles.length;
            
            currentOwnerWinnings = currentOwnerWinnings.sub(variableDividends);
            // currentOwnerWinnings = currentOwnerWinnings.sub(totalDividendPerBeneficiary * claimedSurroundingTiles.length);
        }
        
        _assignBuyoutProceeds(
            currentOwner,
            claimedSurroundingTiles,
            fee,
            currentOwnerWinnings,
            totalDividendPerBeneficiary,
            referralBonus,
            prizePoolFunds
        );
    }
    
    /// @dev Send funds to a beneficiary. If sending fails, assign
    /// funds to the beneficiary's balance for manual withdrawal.
    /// @param beneficiary The beneficiary's address to send funds to
    /// @param amount The amount to send.
    function _sendFunds(address beneficiary, uint256 amount) internal {
        if (!beneficiary.send(amount)) {
            // Failed to send funds. This can happen due to a failure in
            // fallback code of the beneficiary, or because of callstack
            // depth.
            // Send funds asynchronously for manual withdrawal by the
            // beneficiary.
            asyncSend(beneficiary, amount);
        }
    }
}


/// @dev Holds core game functionality.
contract BurnupGameCore is BurnupGameFinance {
    
    function BurnupGameCore(address burnupHoldingAddress) public BurnupGameFinance(burnupHoldingAddress) {}
    
    /// @notice Buy the current owner out of the tile.
    /// @param _gameIndex The index of the game to play on.
    /// @param startNewGameIfIdle Start a new game if the current game is idle.
    /// @param x The x-coordinate of the tile to buy.
    /// @param y The y-coordinate of the tile to buy.
    function buyout(uint256 _gameIndex, bool startNewGameIfIdle, uint256 x, uint256 y) public payable {
        // Check to see if the game should end. Process payment.
        _processGameEnd();
        
        if (!gameStates[gameIndex].gameStarted) {
            // If the game is not started, the contract must not be paused.
            require(!paused);
            
            // If the game is not started, the player must be willing to start
            // a new game.
            require(startNewGameIfIdle);
            
            // Set the price and timeout.
            gameSettings[gameIndex] = nextGameSettings;
            
            // Start the game.
            gameStates[gameIndex].gameStarted = true;
            
            // Set game started timestamp.
            gameStates[gameIndex].gameStartTimestamp = block.timestamp;
            
            // Emit start event.
            Start(gameIndex, msg.sender, block.timestamp, gameStates[gameIndex].prizePool, gameSettings[gameIndex].rows, gameSettings[gameIndex].cols, gameSettings[gameIndex].activityTimer, gameSettings[gameIndex].unclaimedTilePrice, gameSettings[gameIndex].buyoutReferralBonusPercentage, gameSettings[gameIndex].buyoutPrizePoolPercentage, gameSettings[gameIndex].buyoutDividendPercentage, gameSettings[gameIndex].buyoutFeePercentage);
        }
    
        // Check the game index.
        if (startNewGameIfIdle) {
            // The given game index must be the current game index, or the previous
            // game index.
            require(_gameIndex == gameIndex || _gameIndex.add(1) == gameIndex);
        } else {
            // Only play on the game indicated by the player.
            require(_gameIndex == gameIndex);
        }
        
        uint256 identifier = coordinateToIdentifier(x, y);
        
        address currentOwner = gameStates[gameIndex].identifierToOwner[identifier];
        
        // Tile must be unowned, or active.
        if (currentOwner == address(0x0)) {
            // Tile must still be flippable.
            require(gameStates[gameIndex].gameStartTimestamp.add(gameSettings[gameIndex].activityTimer) >= block.timestamp);
        } else {
            // Tile must be active.
            require(gameStates[gameIndex].identifierToBuyoutTimestamp[identifier].add(gameSettings[gameIndex].activityTimer) >= block.timestamp);
        }
        
        // Get existing surrounding tiles.
        uint256[] memory claimedSurroundingTiles = _claimedSurroundingTiles(identifier);
        
        // Assign the buyout proceeds and retrieve the total cost.
        uint256 price = _calculateAndAssignBuyoutProceeds(currentOwner, identifier, claimedSurroundingTiles);
        
        // Enough Ether must be supplied.
        require(msg.value >= price);
        
        // Transfer the tile.
        _transfer(currentOwner, msg.sender, identifier);
        
        // Set this tile to be the most recently bought out.
        gameStates[gameIndex].lastFlippedTile = identifier;
        
        // Calculate and set the new tile price.
        gameStates[gameIndex].identifierToBuyoutPrice[identifier] = nextBuyoutPrice(price);
        
        // Set the buyout timestamp.
        gameStates[gameIndex].identifierToBuyoutTimestamp[identifier] = block.timestamp;
        
        // Emit event
        Buyout(gameIndex, msg.sender, identifier, x, y, block.timestamp, block.timestamp + gameSettings[gameIndex].activityTimer, gameStates[gameIndex].identifierToBuyoutPrice[identifier], gameStates[gameIndex].prizePool);
        
        // Calculate the excess Ether sent.
        // msg.value is greater than or equal to price,
        // so this cannot underflow.
        uint256 excess = msg.value - price;
        
        if (excess > 0) {
            // Refund any excess Ether (not susceptible to re-entry attack, as
            // the owner is assigned before the transfer takes place).
            msg.sender.transfer(excess);
        }
    }
    
    /// @notice Buy the current owner out of the tile. Set the player's referrer.
    /// @param _gameIndex The index of the game to play on.
    /// @param startNewGameIfIdle Start a new game if the current game is idle.
    /// @param x The x-coordinate of the tile to buy.
    /// @param y The y-coordinate of the tile to buy.
    function buyoutAndSetReferrer(uint256 _gameIndex, bool startNewGameIfIdle, uint256 x, uint256 y, address referrerAddress) external payable {
        // Set the referrer.
        burnupHolding.setReferrer(msg.sender, referrerAddress);
    
        // Play.
        buyout(_gameIndex, startNewGameIfIdle, x, y);
    }
    
    /// @notice Spice up the prize pool.
    /// @param _gameIndex The index of the game to add spice to.
    /// @param message An optional message to be sent along with the spice.
    function spiceUp(uint256 _gameIndex, string message) external payable {
        // Check to see if the game should end. Process payment.
        _processGameEnd();
        
        // Check the game index.
        require(_gameIndex == gameIndex);
    
        // Game must be live or unpaused.
        require(gameStates[gameIndex].gameStarted || !paused);
        
        // Funds must be sent.
        require(msg.value > 0);
        
        // Add funds to the prize pool.
        gameStates[gameIndex].prizePool = gameStates[gameIndex].prizePool.add(msg.value);
        
        // Emit event.
        SpiceUpPrizePool(gameIndex, msg.sender, msg.value, message, gameStates[gameIndex].prizePool);
    }
    
    /// @notice End the game. Pay prize.
    function endGame() external {
        require(_processGameEnd());
    }
    
    /// @dev End the game. Pay prize.
    function _processGameEnd() internal returns(bool) {
        address currentOwner = gameStates[gameIndex].identifierToOwner[gameStates[gameIndex].lastFlippedTile];
    
        // The game must be started.
        if (!gameStates[gameIndex].gameStarted) {
            return false;
        }
    
        // The last flipped tile must be owned (i.e. there has been at
        // least one flip).
        if (currentOwner == address(0x0)) {
            return false;
        }
        
        // The last flipped tile must have become inactive.
        if (gameStates[gameIndex].identifierToBuyoutTimestamp[gameStates[gameIndex].lastFlippedTile].add(gameSettings[gameIndex].activityTimer) >= block.timestamp) {
            return false;
        }
        
        // Assign prize pool to the owner of the last-flipped tile.
        if (gameStates[gameIndex].prizePool > 0) {
            _sendFunds(currentOwner, gameStates[gameIndex].prizePool);
        }
        
        // Get coordinates of last flipped tile.
        var (x, y) = identifierToCoordinate(gameStates[gameIndex].lastFlippedTile);
        
        // Emit event.
        End(gameIndex, currentOwner, gameStates[gameIndex].lastFlippedTile, x, y, gameStates[gameIndex].identifierToBuyoutTimestamp[gameStates[gameIndex].lastFlippedTile].add(gameSettings[gameIndex].activityTimer), gameStates[gameIndex].prizePool);
        
        // Increment the game index. This won't overflow before the heat death of the universe.
        gameIndex++;
        
        // Indicate ending the game was successful.
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"totalPayments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"gameSettings","outputs":[{"name":"rows","type":"uint256"},{"name":"cols","type":"uint256"},{"name":"activityTimer","type":"uint256"},{"name":"unclaimedTilePrice","type":"uint256"},{"name":"buyoutReferralBonusPercentage","type":"uint256"},{"name":"buyoutPrizePoolPercentage","type":"uint256"},{"name":"buyoutDividendPercentage","type":"uint256"},{"name":"buyoutFeePercentage","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"_deedName","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"coordinateToIdentifier","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nextGameSettings","outputs":[{"name":"rows","type":"uint256"},{"name":"cols","type":"uint256"},{"name":"activityTimer","type":"uint256"},{"name":"unclaimedTilePrice","type":"uint256"},{"name":"buyoutReferralBonusPercentage","type":"uint256"},{"name":"buyoutPrizePoolPercentage","type":"uint256"},{"name":"buyoutDividendPercentage","type":"uint256"},{"name":"buyoutFeePercentage","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCFO","type":"address"}],"name":"setCFO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gameIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"price","type":"uint256"}],"name":"nextBuyoutPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawPayments","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_identifier","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"endGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"identifier","type":"uint256"}],"name":"identifierToCoordinate","outputs":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gameIndex","type":"uint256"},{"name":"startNewGameIfIdle","type":"bool"},{"name":"x","type":"uint256"},{"name":"y","type":"uint256"},{"name":"referrerAddress","type":"address"}],"name":"buyoutAndSetReferrer","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_gameIndex","type":"uint256"},{"name":"startNewGameIfIdle","type":"bool"},{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"buyout","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"_deedSymbol","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"gameStates","outputs":[{"name":"gameStarted","type":"bool"},{"name":"gameStartTimestamp","type":"uint256"},{"name":"lastFlippedTile","type":"uint256"},{"name":"prizePool","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"validCoordinate","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_identifier","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rows","type":"uint256"},{"name":"cols","type":"uint256"},{"name":"activityTimer","type":"uint256"},{"name":"unclaimedTilePrice","type":"uint256"},{"name":"buyoutReferralBonusPercentage","type":"uint256"},{"name":"buyoutPrizePoolPercentage","type":"uint256"},{"name":"buyoutDividendPercentage","type":"uint256"},{"name":"buyoutFeePercentage","type":"uint256"}],"name":"setNextGameSettings","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"payments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gameIndex","type":"uint256"},{"name":"message","type":"string"}],"name":"spiceUp","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"burnupHoldingAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"deedId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"rows","type":"uint256"},{"indexed":false,"name":"cols","type":"uint256"},{"indexed":false,"name":"activityTimer","type":"uint256"},{"indexed":false,"name":"unclaimedTilePrice","type":"uint256"},{"indexed":false,"name":"buyoutReferralBonusPercentage","type":"uint256"},{"indexed":false,"name":"buyoutPrizePoolPercentage","type":"uint256"},{"indexed":false,"name":"buyoutDividendPercentage","type":"uint256"},{"indexed":false,"name":"buyoutFeePercentage","type":"uint256"}],"name":"NextGame","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"gameIndex","type":"uint256"},{"indexed":true,"name":"starter","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"prizePool","type":"uint256"},{"indexed":false,"name":"rows","type":"uint256"},{"indexed":false,"name":"cols","type":"uint256"},{"indexed":false,"name":"activityTimer","type":"uint256"},{"indexed":false,"name":"unclaimedTilePrice","type":"uint256"},{"indexed":false,"name":"buyoutReferralBonusPercentage","type":"uint256"},{"indexed":false,"name":"buyoutPrizePoolPercentage","type":"uint256"},{"indexed":false,"name":"buyoutDividendPercentage","type":"uint256"},{"indexed":false,"name":"buyoutFeePercentage","type":"uint256"}],"name":"Start","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"gameIndex","type":"uint256"},{"indexed":true,"name":"winner","type":"address"},{"indexed":true,"name":"identifier","type":"uint256"},{"indexed":false,"name":"x","type":"uint256"},{"indexed":false,"name":"y","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"prize","type":"uint256"}],"name":"End","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"gameIndex","type":"uint256"},{"indexed":true,"name":"player","type":"address"},{"indexed":true,"name":"identifier","type":"uint256"},{"indexed":false,"name":"x","type":"uint256"},{"indexed":false,"name":"y","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"timeoutTimestamp","type":"uint256"},{"indexed":false,"name":"newPrice","type":"uint256"},{"indexed":false,"name":"newPrizePool","type":"uint256"}],"name":"Buyout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"gameIndex","type":"uint256"},{"indexed":true,"name":"spicer","type":"address"},{"indexed":false,"name":"spiceAdded","type":"uint256"},{"indexed":false,"name":"message","type":"string"},{"indexed":false,"name":"newPrizePool","type":"uint256"}],"name":"SpiceUpPrizePool","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60606040526001805460a060020a60ff0219169055600060065534156200002557600080fd5b604051602080620020298339810160405280805160008054600160a060020a033316600160a060020a03199182168117909255600280548216831790556003805490911690911790559150819050620000a660046005610e10662386f26fc100006102ee6127106113886109c4640100000000620010ec620000cd82021704565b60118054600160a060020a031916600160a060020a0392909216919091179055506200021f565b60025433600160a060020a03908116911614620000e957600080fd5b816107d011158015620000fe57506130d48211155b15156200010a57600080fd5b6113888111156200011a57600080fd5b61010060405190810160405280898152602001888152602001878152602001868152602001858152602001848152602001838152602001828152506007600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151600790910155507f80518167d3cb899e3d2b3ecca8c34435411d463d5ba5177d305cc95778de33178888888888888888604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390a15050505050505050565b611dfa806200022f6000396000f30060606040526004361061017b5763ffffffff60e060020a6000350416625b448781146101805780630519ce79146101a557806305931a3c146101d457806306fdde031461023157806317ffc320146102bb578063258a61d6146102dc5780632ba73c15146102f5578063333aed82146103145780633f4ba83a146103275780634e0a33791461033a5780634e71e0c8146103595780635654a3411461036c5780635678524f1461037f5780635c975abb146103955780636103d70b146103bc5780636352211e146103cf5780636cbc2ded146103e55780636d6bc5f5146103f857806375c14f7d146104265780638456cb5914610448578063893fb18e1461045b5780638da5cb5b1461047157806395d89b4114610484578063980d183414610497578063a6da54a3146104dc578063a9059cbb146104f5578063b047fb5014610517578063dac346741461052a578063e2982c2114610555578063e30c397814610574578063ee4d3c7f14610587578063f2fde38b1461059e575b600080fd5b341561018b57600080fd5b6101936105bd565b60405190815260200160405180910390f35b34156101b057600080fd5b6101b86105c3565b604051600160a060020a03909116815260200160405180910390f35b34156101df57600080fd5b6101ea6004356105d2565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b341561023c57600080fd5b610244610615565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610280578082015183820152602001610268565b50505050905090810190601f1680156102ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102c657600080fd5b6102da600160a060020a0360043516610656565b005b34156102e757600080fd5b61019360043560243561070a565b341561030057600080fd5b6102da600160a060020a036004351661073c565b341561031f57600080fd5b6101ea61079b565b341561033257600080fd5b6102da6107b6565b341561034557600080fd5b6102da600160a060020a0360043516610835565b341561036457600080fd5b6102da610894565b341561037757600080fd5b610193610922565b341561038a57600080fd5b610193600435610928565b34156103a057600080fd5b6103a861097d565b604051901515815260200160405180910390f35b34156103c757600080fd5b6102da61098d565b34156103da57600080fd5b6101b8600435610a22565b34156103f057600080fd5b6102da610a57565b341561040357600080fd5b61040e600435610a6c565b60405191825260208201526040908101905180910390f35b6102da6004356024351515604435606435600160a060020a0360843516610ab1565b341561045357600080fd5b6102da610b41565b6102da6004356024351515604435606435610bc5565b341561047c57600080fd5b6101b8610fef565b341561048f57600080fd5b610244610ffe565b34156104a257600080fd5b6104ad60043561103f565b604051808515151515815260200184815260200183815260200182815260200194505050505060405180910390f35b34156104e757600080fd5b6103a860043560243561106c565b341561050057600080fd5b6102da600160a060020a03600435166024356110a6565b341561052257600080fd5b6101b86110dd565b341561053557600080fd5b6102da60043560243560443560643560843560a43560c43560e4356110ec565b341561056057600080fd5b610193600160a060020a036004351661123a565b341561057f57600080fd5b6101b861124c565b6102da60048035906024803590810191013561125b565b34156105a957600080fd5b6102da600160a060020a036004351661136e565b60105481565b600254600160a060020a031681565b6004602081905260009182526040909120805460018201546002830154600384015494840154600585015460068601546007909601549496939592949192909188565b61061d611dbc565b60408051908101604052600c81527f4275726e75702054696c657300000000000000000000000000000000000000006020820152919050565b6000805433600160a060020a0390811691161461067257600080fd5b81600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156106c957600080fd5b6102c65a03f115156106da57600080fd5b50505060405180516000549092506107069150600160a060020a0384811691168363ffffffff6113b816565b5050565b6000610716838361106c565b151561072157600080fd5b50600654600090815260046020526040902060010154020190565b60005433600160a060020a0390811691161461075757600080fd5b600160a060020a038116151561076c57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754600854600954600a54600b54600c54600d54600e5488565b60005433600160a060020a039081169116146107d157600080fd5b60015460a060020a900460ff1615156107e957600080fd5b6001805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60005433600160a060020a0390811691161461085057600080fd5b600160a060020a038116151561086557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146108af57600080fd5b600154600054600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b60065481565b600066470de4df8200008210156109625761095b606461094f8460c863ffffffff61143d16565b9063ffffffff61147316565b9050610978565b61095b606461094f84609663ffffffff61143d16565b919050565b60015460a060020a900460ff1681565b33600160a060020a0381166000908152600f60205260409020548015156109b357600080fd5b600160a060020a03301631819010156109cb57600080fd5b6010546109de908263ffffffff61148a16565b601055600160a060020a0382166000818152600f60205260408082209190915582156108fc0290839051600060405180830381858888f19350505050151561070657fe5b6006546000908152600560209081526040808320848452600201909152902054600160a060020a031680151561097857600080fd5b610a5f61149c565b1515610a6a57600080fd5b565b600654600090815260046020526040812060010154819083811515610a8d57fe5b60065460009081526004602052604090206001015491900490810290930393915050565b601154600160a060020a031663bbddaca3338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515610b1257600080fd5b6102c65a03f11515610b2357600080fd5b5050506040518051905050610b3a85858585610bc5565b5050505050565b60005433600160a060020a03908116911614610b5c57600080fd5b60015460a060020a900460ff1615610b7357600080fd5b6001805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600080610bd0611dbc565b600080610bdb61149c565b5060065460009081526005602052604090205460ff161515610d615760015460a060020a900460ff1615610c0e57600080fd5b871515610c1a57600080fd5b600680546000908152600460208181526040808420600780548255600854600180840191909155600954600280850191909155600a54600380860191909155600b5485890155600c54600580870191909155600d54868c0155600e549585019590955589548952848752858920805460ff19168417905589548952858920429084018190558a54808b52878b208c0154988a905299879020805494810154938101549281015499810154968101549b810154950154600160a060020a0333169b7faf00aafaad51bd92c78f312db73964806a573e77e6433e35fd75a7561644c79f9a929998959794969395929493909290919051998a5260208a01989098526040808a01979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152610120830191909152610140909101905180910390a35b8715610d9857600654891480610d885750600654610d868a600163ffffffff61167f16565b145b1515610d9357600080fd5b610da6565b6006548914610da657600080fd5b610db0878761070a565b6006546000908152600560209081526040808320848452600201909152902054909550600160a060020a03169350831515610e2b576006546000908152600460209081526040808320600201546005909252909120600101544291610e1b919063ffffffff61167f16565b1015610e2657600080fd5b610e74565b60065460009081526004602090815260408083206002015460058352818420898552600301909252909120544291610e69919063ffffffff61167f16565b1015610e7457600080fd5b610e7d8561168e565b9250610e8a848685611843565b91503482901015610e9a57600080fd5b610ea58433876119e0565b600654600090815260056020819052604090912001859055610ec682610928565b6006805460009081526005602081815260408084208b85526004908101835281852096909655845484528282528084208b8552600301825280842042908190558554808652878452828620600201548585528387208e8852988901855283872054968290529490935295909401548a95600160a060020a0333169592947ff92d314bb0e9147818935f713961359855eff1f9e5e09e95e81e2471bca198fb948f948f949184019291905180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a481340390506000811115610fe457600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610fe457600080fd5b505050505050505050565b600054600160a060020a031681565b611006611dbc565b60408051908101604052600481527f4255524e000000000000000000000000000000000000000000000000000000006020820152919050565b6005602081905260009182526040909120805460018201549282015460069092015460ff90911692919084565b6006546000908152600460205260408120600101548310801561109f575060065460009081526004602052604090205482105b9392505050565b60015460a060020a900460ff16156110bd57600080fd5b6110c73382611a62565b15156110d257600080fd5b6107063383836119e0565b600354600160a060020a031681565b60025433600160a060020a0390811691161461110757600080fd5b816107d01115801561111b57506130d48211155b151561112657600080fd5b61138881111561113557600080fd5b61010060405190810160405280898152602001888152602001878152602001868152602001858152602001848152602001838152602001828152506007600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151600790910155507f80518167d3cb899e3d2b3ecca8c34435411d463d5ba5177d305cc95778de33178888888888888888604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390a15050505050505050565b600f6020526000908152604090205481565b600154600160a060020a031681565b61126361149c565b50600654831461127257600080fd5b60065460009081526005602052604090205460ff168061129c575060015460a060020a900460ff16155b15156112a757600080fd5b600034116112b457600080fd5b60068054600090815260056020526040902001546112d8903463ffffffff61167f16565b6006805460009081526005602052604080822083019390935581548082529083902090910154600160a060020a033316927f974f2bc8adc3d2345a4ec49db194211724c68ac2bf6ba6bd7a222c406b14512f9134918791879151848152604081018290526060602082018181529082018490526080820185858082843782019150509550505050505060405180910390a3505050565b60005433600160a060020a0390811691161461138957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561141557600080fd5b6102c65a03f1151561142657600080fd5b50505060405180519050151561143857fe5b505050565b600080831515611450576000915061146c565b5082820282848281151561146057fe5b041461146857fe5b8091505b5092915050565b600080828481151561148157fe5b04949350505050565b60008282111561149657fe5b50900390565b600654600081815260056020818152604080842080840154855260028101835290842054948452919052549091600160a060020a0316908290819060ff1615156114e95760009350611679565b600160a060020a03831615156115025760009350611679565b6006546000908152600460209081526040808320600201546005808452828520908101548552600301909252909120544291611544919063ffffffff61167f16565b106115525760009350611679565b60068054600090815260056020526040812090910154111561158d57600680546000908152600560205260409020015461158d908490611a93565b6115ae60056000600654815260200190815260200160002060050154610a6c565b600654600081815260056020818152604080842092830154600483528185206002015481865260039094019092529092205494965092945092600160a060020a038716927ff6d45987ac10f8176d0af714fb3d49ae81474640c89f5085848f22a1eb686de091879187916116279163ffffffff61167f16565b600560006006548152602001908152602001600020600601546040518085815260200184815260200183815260200182815260200194505050505060405180910390a460068054600190810190915593505b50505090565b60008282018381101561146857fe5b611696611dbc565b60008060006116a3611dbc565b60008060008060006116b3611dbc565b60006116be8d610a6c565b9a509a506000985060086040518059106116d55750595b9080825280602002602001820160405250975060001996505b600187136117d15760001995505b600186136117c65786158015611710575085155b1561171a576117bb565b6006546000908152600460205260409020600101548b880195508a870194508510158061175857506006546000908152600460205260409020548410155b15611762576117bb565b61176c858561070a565b6006546000908152600560209081526040808320848452600201909152902054909350600160a060020a0316156117bb5782888a815181106117aa57fe5b602090810290910101526001909801975b6001909501946116fc565b6001909601956116ee565b886040518059106117df5750595b90808252806020026020018201604052509150600090505b888110156118335787818151811061180b57fe5b9060200190602002015182828151811061182157fe5b602090810290910101526001016117f7565b509b9a5050505050505050505050565b6000808080808080600160a060020a038a16151561187757600654600090815260046020526040902060030154965061189a565b60065460009081526005602090815260408083208c845260040190915290205496505b60068054600090815260046020526040902001546118c890620186a09061094f908a9063ffffffff61143d16565b6006546000908152600460205260409020600701549096506118fa90620186a09061094f908a9063ffffffff61143d16565b945061192e620186a061094f600460006006548152602001908152602001600020600401548a61143d90919063ffffffff16565b60065460009081526004602052604090206005015490945061196090620186a09061094f908a9063ffffffff61143d16565b92506119968361198a61197a87600263ffffffff61143d16565b61198a8b8a63ffffffff61148a16565b9063ffffffff61148a16565b91506000885111156119c4578751868115156119ae57fe5b0490506119c1828763ffffffff61148a16565b91505b6119d38a898785858989611ac9565b5050505050509392505050565b600654600090815260056020908152604080832084845260020190915290819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03858116918217909255839290918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef905160405180910390a4505050565b6006546000908152600560209081526040808320938352600290930190522054600160a060020a0391821691161490565b600160a060020a03821681156108fc0282604051600060405180830381858888f193505050501515610706576107068282611d60565b6000808080600160a060020a038b1615611aec57611ae78b89611a93565b611aff565b611afc898963ffffffff61167f16565b98505b600093505b8951841015611b69576006546000908152600560205260408120600201908b8681518110611b2e57fe5b906020019060200201518152602081019190915260400160002054600160a060020a03169250611b5e8388611a93565b600190930192611b04565b601154600160a060020a031663d21cacdf3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611bc257600080fd5b6102c65a03f11515611bd357600080fd5b5050506040518051925050600160a060020a03821615611ca257611bf78287611a93565b601154600160a060020a031663d21cacdf8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611c5057600080fd5b6102c65a03f11515611c6157600080fd5b5050506040518051915050600160a060020a03811615611c8a57611c858187611a93565b611c9d565b611c9a898763ffffffff61167f16565b98505b611cc6565b611cc3611cb687600263ffffffff61143d16565b8a9063ffffffff61167f16565b98505b601154600160a060020a031663eb42b0cb8a6040518263ffffffff1660e060020a0281526004016000604051808303818588803b1515611d0557600080fd5b6125ee5a03f11515611d1657600080fd5b50506006805460009081526005602052604090200154611d3f925090508663ffffffff61167f16565b60068054600090815260056020526040902001555050505050505050505050565b600160a060020a0382166000908152600f6020526040902054611d89908263ffffffff61167f16565b600160a060020a0383166000908152600f6020526040902055601054611db5908263ffffffff61167f16565b6010555050565b602060405190810160405260008152905600a165627a7a72305820cad5aab23419cb8f69dcf22530b11178cdef35f5ed548d6ac5153d5ac38c226a00290000000000000000000000000e3d496adfdd94aecad610c391991b9961f5e369

Deployed Bytecode

0x60606040526004361061017b5763ffffffff60e060020a6000350416625b448781146101805780630519ce79146101a557806305931a3c146101d457806306fdde031461023157806317ffc320146102bb578063258a61d6146102dc5780632ba73c15146102f5578063333aed82146103145780633f4ba83a146103275780634e0a33791461033a5780634e71e0c8146103595780635654a3411461036c5780635678524f1461037f5780635c975abb146103955780636103d70b146103bc5780636352211e146103cf5780636cbc2ded146103e55780636d6bc5f5146103f857806375c14f7d146104265780638456cb5914610448578063893fb18e1461045b5780638da5cb5b1461047157806395d89b4114610484578063980d183414610497578063a6da54a3146104dc578063a9059cbb146104f5578063b047fb5014610517578063dac346741461052a578063e2982c2114610555578063e30c397814610574578063ee4d3c7f14610587578063f2fde38b1461059e575b600080fd5b341561018b57600080fd5b6101936105bd565b60405190815260200160405180910390f35b34156101b057600080fd5b6101b86105c3565b604051600160a060020a03909116815260200160405180910390f35b34156101df57600080fd5b6101ea6004356105d2565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b341561023c57600080fd5b610244610615565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610280578082015183820152602001610268565b50505050905090810190601f1680156102ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102c657600080fd5b6102da600160a060020a0360043516610656565b005b34156102e757600080fd5b61019360043560243561070a565b341561030057600080fd5b6102da600160a060020a036004351661073c565b341561031f57600080fd5b6101ea61079b565b341561033257600080fd5b6102da6107b6565b341561034557600080fd5b6102da600160a060020a0360043516610835565b341561036457600080fd5b6102da610894565b341561037757600080fd5b610193610922565b341561038a57600080fd5b610193600435610928565b34156103a057600080fd5b6103a861097d565b604051901515815260200160405180910390f35b34156103c757600080fd5b6102da61098d565b34156103da57600080fd5b6101b8600435610a22565b34156103f057600080fd5b6102da610a57565b341561040357600080fd5b61040e600435610a6c565b60405191825260208201526040908101905180910390f35b6102da6004356024351515604435606435600160a060020a0360843516610ab1565b341561045357600080fd5b6102da610b41565b6102da6004356024351515604435606435610bc5565b341561047c57600080fd5b6101b8610fef565b341561048f57600080fd5b610244610ffe565b34156104a257600080fd5b6104ad60043561103f565b604051808515151515815260200184815260200183815260200182815260200194505050505060405180910390f35b34156104e757600080fd5b6103a860043560243561106c565b341561050057600080fd5b6102da600160a060020a03600435166024356110a6565b341561052257600080fd5b6101b86110dd565b341561053557600080fd5b6102da60043560243560443560643560843560a43560c43560e4356110ec565b341561056057600080fd5b610193600160a060020a036004351661123a565b341561057f57600080fd5b6101b861124c565b6102da60048035906024803590810191013561125b565b34156105a957600080fd5b6102da600160a060020a036004351661136e565b60105481565b600254600160a060020a031681565b6004602081905260009182526040909120805460018201546002830154600384015494840154600585015460068601546007909601549496939592949192909188565b61061d611dbc565b60408051908101604052600c81527f4275726e75702054696c657300000000000000000000000000000000000000006020820152919050565b6000805433600160a060020a0390811691161461067257600080fd5b81600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156106c957600080fd5b6102c65a03f115156106da57600080fd5b50505060405180516000549092506107069150600160a060020a0384811691168363ffffffff6113b816565b5050565b6000610716838361106c565b151561072157600080fd5b50600654600090815260046020526040902060010154020190565b60005433600160a060020a0390811691161461075757600080fd5b600160a060020a038116151561076c57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754600854600954600a54600b54600c54600d54600e5488565b60005433600160a060020a039081169116146107d157600080fd5b60015460a060020a900460ff1615156107e957600080fd5b6001805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60005433600160a060020a0390811691161461085057600080fd5b600160a060020a038116151561086557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146108af57600080fd5b600154600054600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b60065481565b600066470de4df8200008210156109625761095b606461094f8460c863ffffffff61143d16565b9063ffffffff61147316565b9050610978565b61095b606461094f84609663ffffffff61143d16565b919050565b60015460a060020a900460ff1681565b33600160a060020a0381166000908152600f60205260409020548015156109b357600080fd5b600160a060020a03301631819010156109cb57600080fd5b6010546109de908263ffffffff61148a16565b601055600160a060020a0382166000818152600f60205260408082209190915582156108fc0290839051600060405180830381858888f19350505050151561070657fe5b6006546000908152600560209081526040808320848452600201909152902054600160a060020a031680151561097857600080fd5b610a5f61149c565b1515610a6a57600080fd5b565b600654600090815260046020526040812060010154819083811515610a8d57fe5b60065460009081526004602052604090206001015491900490810290930393915050565b601154600160a060020a031663bbddaca3338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515610b1257600080fd5b6102c65a03f11515610b2357600080fd5b5050506040518051905050610b3a85858585610bc5565b5050505050565b60005433600160a060020a03908116911614610b5c57600080fd5b60015460a060020a900460ff1615610b7357600080fd5b6001805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600080610bd0611dbc565b600080610bdb61149c565b5060065460009081526005602052604090205460ff161515610d615760015460a060020a900460ff1615610c0e57600080fd5b871515610c1a57600080fd5b600680546000908152600460208181526040808420600780548255600854600180840191909155600954600280850191909155600a54600380860191909155600b5485890155600c54600580870191909155600d54868c0155600e549585019590955589548952848752858920805460ff19168417905589548952858920429084018190558a54808b52878b208c0154988a905299879020805494810154938101549281015499810154968101549b810154950154600160a060020a0333169b7faf00aafaad51bd92c78f312db73964806a573e77e6433e35fd75a7561644c79f9a929998959794969395929493909290919051998a5260208a01989098526040808a01979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152610120830191909152610140909101905180910390a35b8715610d9857600654891480610d885750600654610d868a600163ffffffff61167f16565b145b1515610d9357600080fd5b610da6565b6006548914610da657600080fd5b610db0878761070a565b6006546000908152600560209081526040808320848452600201909152902054909550600160a060020a03169350831515610e2b576006546000908152600460209081526040808320600201546005909252909120600101544291610e1b919063ffffffff61167f16565b1015610e2657600080fd5b610e74565b60065460009081526004602090815260408083206002015460058352818420898552600301909252909120544291610e69919063ffffffff61167f16565b1015610e7457600080fd5b610e7d8561168e565b9250610e8a848685611843565b91503482901015610e9a57600080fd5b610ea58433876119e0565b600654600090815260056020819052604090912001859055610ec682610928565b6006805460009081526005602081815260408084208b85526004908101835281852096909655845484528282528084208b8552600301825280842042908190558554808652878452828620600201548585528387208e8852988901855283872054968290529490935295909401548a95600160a060020a0333169592947ff92d314bb0e9147818935f713961359855eff1f9e5e09e95e81e2471bca198fb948f948f949184019291905180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a481340390506000811115610fe457600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610fe457600080fd5b505050505050505050565b600054600160a060020a031681565b611006611dbc565b60408051908101604052600481527f4255524e000000000000000000000000000000000000000000000000000000006020820152919050565b6005602081905260009182526040909120805460018201549282015460069092015460ff90911692919084565b6006546000908152600460205260408120600101548310801561109f575060065460009081526004602052604090205482105b9392505050565b60015460a060020a900460ff16156110bd57600080fd5b6110c73382611a62565b15156110d257600080fd5b6107063383836119e0565b600354600160a060020a031681565b60025433600160a060020a0390811691161461110757600080fd5b816107d01115801561111b57506130d48211155b151561112657600080fd5b61138881111561113557600080fd5b61010060405190810160405280898152602001888152602001878152602001868152602001858152602001848152602001838152602001828152506007600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151600790910155507f80518167d3cb899e3d2b3ecca8c34435411d463d5ba5177d305cc95778de33178888888888888888604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390a15050505050505050565b600f6020526000908152604090205481565b600154600160a060020a031681565b61126361149c565b50600654831461127257600080fd5b60065460009081526005602052604090205460ff168061129c575060015460a060020a900460ff16155b15156112a757600080fd5b600034116112b457600080fd5b60068054600090815260056020526040902001546112d8903463ffffffff61167f16565b6006805460009081526005602052604080822083019390935581548082529083902090910154600160a060020a033316927f974f2bc8adc3d2345a4ec49db194211724c68ac2bf6ba6bd7a222c406b14512f9134918791879151848152604081018290526060602082018181529082018490526080820185858082843782019150509550505050505060405180910390a3505050565b60005433600160a060020a0390811691161461138957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561141557600080fd5b6102c65a03f1151561142657600080fd5b50505060405180519050151561143857fe5b505050565b600080831515611450576000915061146c565b5082820282848281151561146057fe5b041461146857fe5b8091505b5092915050565b600080828481151561148157fe5b04949350505050565b60008282111561149657fe5b50900390565b600654600081815260056020818152604080842080840154855260028101835290842054948452919052549091600160a060020a0316908290819060ff1615156114e95760009350611679565b600160a060020a03831615156115025760009350611679565b6006546000908152600460209081526040808320600201546005808452828520908101548552600301909252909120544291611544919063ffffffff61167f16565b106115525760009350611679565b60068054600090815260056020526040812090910154111561158d57600680546000908152600560205260409020015461158d908490611a93565b6115ae60056000600654815260200190815260200160002060050154610a6c565b600654600081815260056020818152604080842092830154600483528185206002015481865260039094019092529092205494965092945092600160a060020a038716927ff6d45987ac10f8176d0af714fb3d49ae81474640c89f5085848f22a1eb686de091879187916116279163ffffffff61167f16565b600560006006548152602001908152602001600020600601546040518085815260200184815260200183815260200182815260200194505050505060405180910390a460068054600190810190915593505b50505090565b60008282018381101561146857fe5b611696611dbc565b60008060006116a3611dbc565b60008060008060006116b3611dbc565b60006116be8d610a6c565b9a509a506000985060086040518059106116d55750595b9080825280602002602001820160405250975060001996505b600187136117d15760001995505b600186136117c65786158015611710575085155b1561171a576117bb565b6006546000908152600460205260409020600101548b880195508a870194508510158061175857506006546000908152600460205260409020548410155b15611762576117bb565b61176c858561070a565b6006546000908152600560209081526040808320848452600201909152902054909350600160a060020a0316156117bb5782888a815181106117aa57fe5b602090810290910101526001909801975b6001909501946116fc565b6001909601956116ee565b886040518059106117df5750595b90808252806020026020018201604052509150600090505b888110156118335787818151811061180b57fe5b9060200190602002015182828151811061182157fe5b602090810290910101526001016117f7565b509b9a5050505050505050505050565b6000808080808080600160a060020a038a16151561187757600654600090815260046020526040902060030154965061189a565b60065460009081526005602090815260408083208c845260040190915290205496505b60068054600090815260046020526040902001546118c890620186a09061094f908a9063ffffffff61143d16565b6006546000908152600460205260409020600701549096506118fa90620186a09061094f908a9063ffffffff61143d16565b945061192e620186a061094f600460006006548152602001908152602001600020600401548a61143d90919063ffffffff16565b60065460009081526004602052604090206005015490945061196090620186a09061094f908a9063ffffffff61143d16565b92506119968361198a61197a87600263ffffffff61143d16565b61198a8b8a63ffffffff61148a16565b9063ffffffff61148a16565b91506000885111156119c4578751868115156119ae57fe5b0490506119c1828763ffffffff61148a16565b91505b6119d38a898785858989611ac9565b5050505050509392505050565b600654600090815260056020908152604080832084845260020190915290819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03858116918217909255839290918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef905160405180910390a4505050565b6006546000908152600560209081526040808320938352600290930190522054600160a060020a0391821691161490565b600160a060020a03821681156108fc0282604051600060405180830381858888f193505050501515610706576107068282611d60565b6000808080600160a060020a038b1615611aec57611ae78b89611a93565b611aff565b611afc898963ffffffff61167f16565b98505b600093505b8951841015611b69576006546000908152600560205260408120600201908b8681518110611b2e57fe5b906020019060200201518152602081019190915260400160002054600160a060020a03169250611b5e8388611a93565b600190930192611b04565b601154600160a060020a031663d21cacdf3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611bc257600080fd5b6102c65a03f11515611bd357600080fd5b5050506040518051925050600160a060020a03821615611ca257611bf78287611a93565b601154600160a060020a031663d21cacdf8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611c5057600080fd5b6102c65a03f11515611c6157600080fd5b5050506040518051915050600160a060020a03811615611c8a57611c858187611a93565b611c9d565b611c9a898763ffffffff61167f16565b98505b611cc6565b611cc3611cb687600263ffffffff61143d16565b8a9063ffffffff61167f16565b98505b601154600160a060020a031663eb42b0cb8a6040518263ffffffff1660e060020a0281526004016000604051808303818588803b1515611d0557600080fd5b6125ee5a03f11515611d1657600080fd5b50506006805460009081526005602052604090200154611d3f925090508663ffffffff61167f16565b60068054600090815260056020526040902001555050505050505050505050565b600160a060020a0382166000908152600f6020526040902054611d89908263ffffffff61167f16565b600160a060020a0383166000908152600f6020526040902055601054611db5908263ffffffff61167f16565b6010555050565b602060405190810160405260008152905600a165627a7a72305820cad5aab23419cb8f69dcf22530b11178cdef35f5ed548d6ac5153d5ac38c226a0029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000e3d496adfdd94aecad610c391991b9961f5e369

-----Decoded View---------------
Arg [0] : burnupHoldingAddress (address): 0x0e3d496ADFdd94AeCaD610c391991b9961F5e369

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000e3d496adfdd94aecad610c391991b9961f5e369


Swarm Source

bzzr://cad5aab23419cb8f69dcf22530b11178cdef35f5ed548d6ac5153d5ac38c226a

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.