ERC-20
Overview
Max Total Supply
0 BURN
Holders
0
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.