Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 82,677 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Bid | 15657871 | 818 days ago | IN | 0.08 ETH | 0.00083674 | ||||
Bid | 15657852 | 818 days ago | IN | 0.05 ETH | 0.00077303 | ||||
Cancel Sale | 15628950 | 822 days ago | IN | 0 ETH | 0.00213734 | ||||
Cancel Sale | 15628934 | 822 days ago | IN | 0 ETH | 0.00271153 | ||||
Cancel Sale | 15628872 | 822 days ago | IN | 0 ETH | 0.00287198 | ||||
Cancel Sale | 15628862 | 822 days ago | IN | 0 ETH | 0.00215103 | ||||
Cancel Sale | 15628829 | 822 days ago | IN | 0 ETH | 0.00223064 | ||||
Cancel Sale | 15628825 | 822 days ago | IN | 0 ETH | 0.00227832 | ||||
Cancel Sale | 15628816 | 822 days ago | IN | 0 ETH | 0.002535 | ||||
Cancel Sale | 15628810 | 822 days ago | IN | 0 ETH | 0.00238362 | ||||
Cancel Sale | 15628780 | 822 days ago | IN | 0 ETH | 0.00201521 | ||||
Cancel Sale | 15628764 | 822 days ago | IN | 0 ETH | 0.00165289 | ||||
Cancel Sale | 15628760 | 822 days ago | IN | 0 ETH | 0.00162038 | ||||
Cancel Sale | 15628753 | 822 days ago | IN | 0 ETH | 0.00184187 | ||||
Cancel Sale | 15628745 | 822 days ago | IN | 0 ETH | 0.00160167 | ||||
Cancel Sale | 15628742 | 822 days ago | IN | 0 ETH | 0.00147636 | ||||
Cancel Sale | 15628727 | 822 days ago | IN | 0 ETH | 0.00129284 | ||||
Cancel Sale | 15628655 | 822 days ago | IN | 0 ETH | 0.00161667 | ||||
Cancel Sale | 15628646 | 822 days ago | IN | 0 ETH | 0.00147033 | ||||
Batch Cancel Sal... | 15627639 | 822 days ago | IN | 0 ETH | 0.00300479 | ||||
Batch Cancel Sal... | 15615382 | 824 days ago | IN | 0 ETH | 0.00061477 | ||||
Batch Cancel Sal... | 15615378 | 824 days ago | IN | 0 ETH | 0.00061477 | ||||
Batch Cancel Sal... | 15615317 | 824 days ago | IN | 0 ETH | 0.00061472 | ||||
Batch Cancel Sal... | 15615309 | 824 days ago | IN | 0 ETH | 0.00061472 | ||||
Batch Cancel Sal... | 15615281 | 824 days ago | IN | 0 ETH | 0.00061477 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15657871 | 818 days ago | 0.076 ETH | ||||
15657852 | 818 days ago | 0.0475 ETH | ||||
15222880 | 885 days ago | 0.03325 ETH | ||||
15222850 | 885 days ago | 0.04275 ETH | ||||
15164727 | 894 days ago | 0.14155 ETH | ||||
15094899 | 905 days ago | 0.0356345 ETH | ||||
15094892 | 905 days ago | 0.0280345 ETH | ||||
14893326 | 939 days ago | 0.1481395 ETH | ||||
14817114 | 951 days ago | 0.02375 ETH | ||||
14703477 | 970 days ago | 0.0855 ETH | ||||
14676488 | 974 days ago | 0.95 ETH | ||||
14652620 | 978 days ago | 0.0285 ETH | ||||
14642014 | 979 days ago | 0.038 ETH | ||||
14618086 | 983 days ago | 0.038 ETH | ||||
14613170 | 984 days ago | 0.038 ETH | ||||
14522927 | 998 days ago | 0.095 ETH | ||||
14439739 | 1011 days ago | 0.04275 ETH | ||||
14301865 | 1032 days ago | 0.0285 ETH | ||||
14182684 | 1051 days ago | 0.08075 ETH | ||||
14182613 | 1051 days ago | 0.057 ETH | ||||
14182594 | 1051 days ago | 0.06175 ETH | ||||
14182576 | 1051 days ago | 0.0228 ETH | ||||
14182493 | 1051 days ago | 0.05225 ETH | ||||
14182461 | 1051 days ago | 0.08455 ETH | ||||
14182204 | 1051 days ago | 0.019 ETH |
Loading...
Loading
Contract Name:
SaleManager
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-08-23 */ pragma solidity ^0.4.23; /** * @title SafeMath * @dev Math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two numbers, reverts on overflow. */ function mul(uint256 _a, uint256 _b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (_a == 0) { return 0; } uint256 c = _a * _b; require(c / _a == _b); return c; } /** * @dev Integer division of two numbers truncating the quotient, reverts on division by zero. */ function div(uint256 _a, uint256 _b) internal pure returns (uint256) { require(_b > 0); // Solidity only automatically asserts when dividing by 0 uint256 c = _a / _b; // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { require(_b <= _a); uint256 c = _a - _b; return c; } /** * @dev Adds two numbers, reverts on overflow. */ function add(uint256 _a, uint256 _b) internal pure returns (uint256) { uint256 c = _a + _b; require(c >= _a); return c; } } /* Controls game play state and access rights for game functions * @title Operational Control * @author Fazri Zubair & Farhan Khwaja (Lucid Sight, Inc.) * Inspired and adapted from contract created by OpenZeppelin * Ref: https://github.com/OpenZeppelin/zeppelin-solidity/ */ contract OperationalControl { // Facilitates access & control for the game. // Roles: // -The Game Managers (Primary/Secondary): Has universal control of all game elements (No ability to withdraw) // -The Banker: The Bank can withdraw funds and adjust fees / prices. /// @dev Emited when contract is upgraded event ContractUpgrade(address newContract); mapping (address => bool) allowedAddressList; // The addresses of the accounts (or contracts) that can execute actions within each roles. address public gameManagerPrimary; address public gameManagerSecondary; address public bankManager; // @dev Keeps track whether the contract is paused. When that is true, most actions are blocked bool public paused = false; /// @dev Operation modifiers for limiting access modifier onlyGameManager() { require(msg.sender == gameManagerPrimary || msg.sender == gameManagerSecondary); _; } /// @dev Operation modifiers for limiting access to only Banker modifier onlyBanker() { require(msg.sender == bankManager); _; } /// @dev Operation modifiers for access to any Manager modifier anyOperator() { require( msg.sender == gameManagerPrimary || msg.sender == gameManagerSecondary || msg.sender == bankManager ); _; } /// @dev Assigns a new address to act as the GM. function setPrimaryGameManager(address _newGM) external onlyGameManager { require(_newGM != address(0)); gameManagerPrimary = _newGM; } /// @dev Assigns a new address to act as the GM. function setSecondaryGameManager(address _newGM) external onlyGameManager { require(_newGM != address(0)); gameManagerSecondary = _newGM; } /// @dev Assigns a new address to act as the Banker. function setBanker(address _newBK) external onlyBanker { require(_newBK != address(0)); bankManager = _newBK; } function updateAllowedAddressesList (address _newAddress, bool _value) external onlyGameManager { require (_newAddress != address(0)); allowedAddressList[_newAddress] = _value; } modifier canTransact() { require (msg.sender == gameManagerPrimary || msg.sender == gameManagerSecondary || allowedAddressList[msg.sender]); _; } /*** Pausable functionality adapted from OpenZeppelin ***/ /// @dev Modifier to allow actions only when the contract IS NOT paused modifier whenNotPaused() { require(!paused); _; } /// @dev Modifier to allow actions only when the contract IS paused modifier whenPaused { require(paused); _; } /// @dev Called by any Operator role to pause the contract. /// Used only if a bug or exploit is discovered (Here to limit losses / damage) function pause() external onlyGameManager whenNotPaused { paused = true; } /// @dev Unpauses the smart contract. Can only be called by the Game Master /// @notice This is public rather than external so it can be called by derived contracts. function unpause() public onlyGameManager whenPaused { // can't unpause if contract was upgraded paused = false; } } /* @title Interface for MLBNFT Contract * @author Fazri Zubair & Farhan Khwaja (Lucid Sight, Inc.) */ contract MLBNFT { function exists(uint256 _tokenId) public view returns (bool _exists); function ownerOf(uint256 _tokenId) public view returns (address _owner); function approve(address _to, uint256 _tokenId) public; function setApprovalForAll(address _to, bool _approved) public; function transferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom(address _from, address _to, uint256 _tokenId) public; function createPromoCollectible(uint8 _teamId, uint8 _posId, uint256 _attributes, address _owner, uint256 _gameId, uint256 _playerOverrideId, uint256 _mlbPlayerId) external returns (uint256); function createSeedCollectible(uint8 _teamId, uint8 _posId, uint256 _attributes, address _owner, uint256 _gameId, uint256 _playerOverrideId, uint256 _mlbPlayerId) public returns (uint256); function checkIsAttached(uint256 _tokenId) public view returns (uint256); function getTeamId(uint256 _tokenId) external view returns (uint256); function getPlayerId(uint256 _tokenId) external view returns (uint256 playerId); function getApproved(uint256 _tokenId) public view returns (address _operator); function isApprovedForAll(address _owner, address _operator) public view returns (bool); } /* @title Interface for ETH Escrow Contract * @author Fazri Zubair & Farhan Khwaja (Lucid Sight, Inc.) */ contract LSEscrow { function escrowTransfer(address seller, address buyer, uint256 currentPrice, uint256 marketsCut) public returns(bool); } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract ERC721Receiver { /** * @dev Magic value to be returned upon successful reception of an NFT * Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`, * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector` */ bytes4 public constant ERC721_RECEIVED = 0x150b7a02; /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safetransfer`. This function MAY throw to revert and reject the * transfer. This function MUST use 50,000 gas or less. Return of other * than the magic value MUST result in the transaction being reverted. * Note: the contract address is always the message sender. * @param _from The sending address * @param _tokenId The NFT identifier which is being transfered * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes _data ) public returns(bytes4); } contract ERC721Holder is ERC721Receiver { function onERC721Received(address,address, uint256, bytes) public returns(bytes4) { return ERC721_RECEIVED; } } /* Contains models, variables, and internal methods for the ERC-721 sales. * @title Sale Base * @author Fazri Zubair & Farhan Khwaja (Lucid Sight, Inc.) */ contract SaleBase is OperationalControl, ERC721Holder { using SafeMath for uint256; /// EVENTS event SaleCreated(uint256 tokenID, uint256 startingPrice, uint256 endingPrice, uint256 duration, uint256 startedAt); event TeamSaleCreated(uint256[9] tokenIDs, uint256 startingPrice, uint256 endingPrice, uint256 duration, uint256 startedAt); event SaleWinner(uint256 tokenID, uint256 totalPrice, address winner); event TeamSaleWinner(uint256[9] tokenIDs, uint256 totalPrice, address winner); event SaleCancelled(uint256 tokenID, address sellerAddress); event EtherWithdrawed(uint256 value); /// STORAGE /** * @dev Represents an Sale on MLB CryptoBaseball (ERC721) */ struct Sale { // Current owner of NFT (ERC721) address seller; // Price (in wei) at beginning of sale uint256 startingPrice; // Price (in wei) at end of sale uint256 endingPrice; // Duration (in seconds) of sale uint256 duration; // Time when sale started // NOTE: 0 if this sale has been concluded uint256 startedAt; // ERC721 AssetID uint256[9] tokenIds; } /** * @dev Reference to contract tracking ownership & asset details */ MLBNFT public nonFungibleContract; /** * @dev Reference to contract tracking ownership & asset details */ LSEscrow public LSEscrowContract; /** * @dev Defining a GLOBAL delay time for the auctions to start accepting bidExcess * @notice This variable is made to delay the bid process. */ uint256 public BID_DELAY_TIME = 0; // Cut owner takes on each sale, measured in basis points (1/100 of a percent). // Values 0-10,000 map to 0%-100% uint256 public ownerCut = 500; //5% // Map from token to their corresponding sale. mapping (uint256 => Sale) tokenIdToSale; /** * @dev Returns true if the claimant owns the token. * @param _claimant The claimant * @param _tokenId The token identifier */ function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) { return (nonFungibleContract.ownerOf(_tokenId) == _claimant); } /** * @dev Internal function to ESCROW * @notice Escrows the ERC721 Token, assigning ownership to this contract. Throws if the escrow fails. * @param _owner The owner * @param _tokenId The token identifier */ function _escrow(address _owner, uint256 _tokenId) internal { nonFungibleContract.safeTransferFrom(_owner, this, _tokenId); } /** * @dev Internal Transfer function * @notice Transfers an ERC721 Token owned by this contract to another address. Returns true if the transfer succeeds. * @param _owner The owner * @param _receiver The receiver * @param _tokenId The token identifier */ function _transfer(address _owner, address _receiver, uint256 _tokenId) internal { nonFungibleContract.transferFrom(_owner, _receiver, _tokenId); } /** * @dev Internal Function to add Sale, which duration check (atleast 1 min duration required) * @notice Adds an sale to the list of open sales. Also fires the SaleCreated event. * @param _tokenId The token identifier * @param _sale The sale */ function _addSale(uint256 _tokenId, Sale _sale) internal { // Require that all sales have a duration of // at least one minute. require(_sale.duration >= 1 minutes); tokenIdToSale[_tokenId] = _sale; emit SaleCreated( uint256(_tokenId), uint256(_sale.startingPrice), uint256(_sale.endingPrice), uint256(_sale.duration), uint256(_sale.startedAt) ); } /** * @dev Internal Function to add Team Sale, which duration check (atleast 1 min duration required) * @notice Adds an sale to the list of open sales. Also fires the SaleCreated event. * @param _tokenIds The token identifiers * @param _sale The sale */ function _addTeamSale(uint256[9] _tokenIds, Sale _sale) internal { // Require that all sales have a duration of // at least one minute. require(_sale.duration >= 1 minutes); for(uint ii = 0; ii < 9; ii++) { require(_tokenIds[ii] != 0); require(nonFungibleContract.exists(_tokenIds[ii])); tokenIdToSale[_tokenIds[ii]] = _sale; } emit TeamSaleCreated( _tokenIds, uint256(_sale.startingPrice), uint256(_sale.endingPrice), uint256(_sale.duration), uint256(_sale.startedAt) ); } /** * @dev Facilites Sale cancellation. Also removed the Sale from the array * @notice Cancels an sale (given the collectibleID is not 0). SaleCancelled Event * @param _tokenId The token identifier * @param _seller The seller */ function _cancelSale(uint256 _tokenId, address _seller) internal { Sale memory saleItem = tokenIdToSale[_tokenId]; //Check for team sale if(saleItem.tokenIds[1] != 0) { for(uint ii = 0; ii < 9; ii++) { _removeSale(saleItem.tokenIds[ii]); _transfer(address(this), _seller, saleItem.tokenIds[ii]); } emit SaleCancelled(_tokenId, _seller); } else { _removeSale(_tokenId); _transfer(address(this), _seller, _tokenId); emit SaleCancelled(_tokenId, _seller); } } /** * @dev Computes the price and transfers winnings. Does NOT transfer ownership of token. * @notice Internal function, helps in making the bid and transferring asset if successful * @param _tokenId The token identifier * @param _bidAmount The bid amount */ function _bid(uint256 _tokenId, uint256 _bidAmount) internal returns (uint256) { // Get a reference to the sale struct Sale storage _sale = tokenIdToSale[_tokenId]; uint256[9] memory tokenIdsStore = tokenIdToSale[_tokenId].tokenIds; // Explicitly check that this sale is currently live. require(_isOnSale(_sale)); // Check that the bid is greater than or equal to the current price uint256 price = _currentPrice(_sale); require(_bidAmount >= price); // Grab a reference to the seller before the sale struct // gets deleted. address seller = _sale.seller; // The bid is good! Remove the sale before sending the fees // to the sender so we can't have a reentrancy attack. if(tokenIdsStore[1] > 0) { for(uint ii = 0; ii < 9; ii++) { _removeSale(tokenIdsStore[ii]); } } else { _removeSale(_tokenId); } // Transfer proceeds to seller (if there are any!) if (price > 0) { // Calculate the marketplace's cut. // (NOTE: _computeCut() is guaranteed to return a // value <= price) uint256 marketsCut = _computeCut(price); uint256 sellerProceeds = price.sub(marketsCut); seller.transfer(sellerProceeds); } // Calculate any excess funds included with the bid. If the excess // is anything worth worrying about, transfer it back to bidder. uint256 bidExcess = _bidAmount.sub(price); // Return the funds. Similar to the previous transfer. msg.sender.transfer(bidExcess); // Tell the world! // uint256 assetID, uint256 totalPrice, address winner, uint16 generation if(tokenIdsStore[1] > 0) { emit TeamSaleWinner(tokenIdsStore, price, msg.sender); } else { emit SaleWinner(_tokenId, price, msg.sender); } return price; } /** * @dev Removes an sale from the list of open sales. * @notice Internal Function to remove sales * @param _tokenId The token identifier */ function _removeSale(uint256 _tokenId) internal { delete tokenIdToSale[_tokenId]; } /** * @dev Returns true if the FT (ERC721) is on sale. * @notice Internal function to check if an * @param _sale The sale */ function _isOnSale(Sale memory _sale) internal pure returns (bool) { return (_sale.startedAt > 0); } /** @dev Returns current price of an FT (ERC721) on sale. Broken into two * functions (this one, that computes the duration from the sale * structure, and the other that does the price computation) so we * can easily test that the price computation works correctly. */ function _currentPrice(Sale memory _sale) internal view returns (uint256) { uint256 secondsPassed = 0; // A bit of insurance against negative values (or wraparound). // Probably not necessary (since Ethereum guarnatees that the // now variable doesn't ever go backwards). if (now > _sale.startedAt.add(BID_DELAY_TIME)) { secondsPassed = now.sub(_sale.startedAt.add(BID_DELAY_TIME)); } return _computeCurrentPrice( _sale.startingPrice, _sale.endingPrice, _sale.duration, secondsPassed ); } /** @dev Computes the current price of an sale. Factored out * from _currentPrice so we can run extensive unit tests. * When testing, make this function public and turn on * `Current price computation` test suite. */ function _computeCurrentPrice( uint256 _startingPrice, uint256 _endingPrice, uint256 _duration, uint256 _secondsPassed ) internal pure returns (uint256) { // NOTE: We don't use SafeMath (or similar) in this function because // all of our public functions carefully cap the maximum values for // time (at 64-bits) and currency (at 128-bits). _duration is // also known to be non-zero (see the require() statement in // _addSale()) if (_secondsPassed >= _duration) { // We've reached the end of the dynamic pricing portion // of the sale, just return the end price. return _endingPrice; } else { // Starting price can be higher than ending price (and often is!), so // this delta can be negative. int256 totalPriceChange = int256(_endingPrice) - int256(_startingPrice); // This multiplication can't overflow, _secondsPassed will easily fit within // 64-bits, and totalPriceChange will easily fit within 128-bits, their product // will always fit within 256-bits. int256 currentPriceChange = totalPriceChange * int256(_secondsPassed) / int256(_duration); // currentPriceChange can be negative, but if so, will have a magnitude // less that _startingPrice. Thus, this result will always end up positive. int256 currentPrice = int256(_startingPrice) + currentPriceChange; return uint256(currentPrice); } } /** * @dev Computes owner's cut of a sale. * @param _price The price */ function _computeCut(uint256 _price) internal view returns (uint256) { return _price.mul(ownerCut).div(10000); } } /* Clock sales functions and interfaces * @title SaleManager * @author Fazri Zubair & Farhan Khwaja (Lucid Sight, Inc.) */ contract SaleManager is SaleBase { /// @dev MAPINGS mapping (uint256 => uint256[3]) public lastTeamSalePrices; mapping (uint256 => uint256) public lastSingleSalePrices; mapping (uint256 => uint256) public seedTeamSaleCount; uint256 public seedSingleSaleCount = 0; /// @dev CONSTANTS uint256 public constant SINGLE_SALE_MULTIPLIER = 35; uint256 public constant TEAM_SALE_MULTIPLIER = 12; uint256 public constant STARTING_PRICE = 10 finney; uint256 public constant SALES_DURATION = 1 days; bool public isBatchSupported = true; /** * @dev Constructor creates a reference to the MLB_NFT Sale Manager contract */ constructor() public { require(ownerCut <= 10000); // You can't collect more than 100% silly ;) require(msg.sender != address(0)); paused = true; gameManagerPrimary = msg.sender; gameManagerSecondary = msg.sender; bankManager = msg.sender; } /// @dev Override unpause so it requires all external contract addresses /// to be set before contract can be unpaused. Also, we can't have /// newContractAddress set either, because then the contract was upgraded. /// @notice This is public rather than external so we can call super.unpause /// without using an expensive CALL. function unpause() public onlyGameManager whenPaused { require(nonFungibleContract != address(0)); // Actually unpause the contract. super.unpause(); } /** @dev Remove all Ether from the contract, which is the owner's cuts * as well as any Ether sent directly to the contract address. * Always transfers to the NFT (ERC721) contract, but can be called either by * the owner or the NFT (ERC721) contract. */ function _withdrawBalance() internal { // We are using this boolean method to make sure that even if one fails it will still work bankManager.transfer(address(this).balance); } /** @dev Reject all Ether from being sent here, unless it's from one of the * contracts. (Hopefully, we can prevent user accidents.) * @notice No tipping! */ function() external payable { address nftAddress = address(nonFungibleContract); require( msg.sender == address(this) || msg.sender == gameManagerPrimary || msg.sender == gameManagerSecondary || msg.sender == bankManager || msg.sender == nftAddress || msg.sender == address(LSEscrowContract) ); } /** * @dev Creates and begins a new sale. * @param _tokenId The token identifier * @param _startingPrice The starting price * @param _endingPrice The ending price * @param _duration The duration * @param _seller The seller */ function _createSale( uint256 _tokenId, uint256 _startingPrice, uint256 _endingPrice, uint256 _duration, address _seller ) internal { Sale memory sale = Sale( _seller, _startingPrice, _endingPrice, _duration, now, [_tokenId,0,0,0,0,0,0,0,0] ); _addSale(_tokenId, sale); } /** * @dev Internal Function, helps in creating team sale * @param _tokenIds The token identifiers * @param _startingPrice The starting price * @param _endingPrice The ending price * @param _duration The duration * @param _seller The seller */ function _createTeamSale( uint256[9] _tokenIds, uint256 _startingPrice, uint256 _endingPrice, uint256 _duration, address _seller) internal { Sale memory sale = Sale( _seller, _startingPrice, _endingPrice, _duration, now, _tokenIds ); /// Add sale obj to all tokens _addTeamSale(_tokenIds, sale); } /** @dev Cancels an sale that hasn't been won yet. Returns the MLBNFT (ERC721) to original owner. * @notice This is a state-modifying function that can be called while the contract is paused. */ function cancelSale(uint256 _tokenId) external whenNotPaused { Sale memory sale = tokenIdToSale[_tokenId]; require(_isOnSale(sale)); address seller = sale.seller; require(msg.sender == seller); _cancelSale(_tokenId, seller); } /** @dev Cancels an sale that hasn't been won yet. Returns the MLBNFT (ERC721) to original owner. * @notice This is a state-modifying function that can be called while the contract is paused. Can be only called by the GameManagers */ function cancelSaleWhenPaused(uint256 _tokenId) external whenPaused onlyGameManager { Sale memory sale = tokenIdToSale[_tokenId]; require(_isOnSale(sale)); address seller = sale.seller; _cancelSale(_tokenId, seller); } /** * @dev Returns sales info for an CSLCollectibles (ERC721) on sale. * @notice Fetches the details related to the Sale * @param _tokenId ID of the token on sale */ function getSale(uint256 _tokenId) external view returns (address seller, uint256 startingPrice, uint256 endingPrice, uint256 duration, uint256 startedAt, uint256[9] tokenIds) { Sale memory sale = tokenIdToSale[_tokenId]; require(_isOnSale(sale)); return ( sale.seller, sale.startingPrice, sale.endingPrice, sale.duration, sale.startedAt, sale.tokenIds ); } /** * @dev Returns the current price of an sale. * @param _tokenId The token identifier */ function getCurrentPrice(uint256 _tokenId) external view returns (uint256) { Sale memory sale = tokenIdToSale[_tokenId]; require(_isOnSale(sale)); return _currentPrice(sale); } /** @dev Calculates the new price for Sale Item * @param _saleType Sale Type Identifier (0 - Single Sale, 1 - Team Sale) * @param _teamId Team Identifier */ function _averageSalePrice(uint256 _saleType, uint256 _teamId) internal view returns (uint256) { uint256 _price = 0; if(_saleType == 0) { for(uint256 ii = 0; ii < 10; ii++) { _price = _price.add(lastSingleSalePrices[ii]); } _price = _price.mul(SINGLE_SALE_MULTIPLIER).div(100); } else { for (uint256 i = 0; i < 3; i++) { _price = _price.add(lastTeamSalePrices[_teamId][i]); } _price = _price.mul(TEAM_SALE_MULTIPLIER).div(30); _price = _price.mul(9); } return _price; } /** * @dev Put a Collectible up for sale. Does some ownership trickery to create sale in one tx. * @param _tokenId The token identifier * @param _startingPrice The starting price * @param _endingPrice The ending price * @param _duration The duration * @param _owner Owner of the token */ function createSale(uint256 _tokenId, uint256 _startingPrice, uint256 _endingPrice, uint256 _duration, address _owner) external whenNotPaused { require(msg.sender == address(nonFungibleContract)); // Check whether the collectible is inPlay. If inPlay cant put it on Sale require(nonFungibleContract.checkIsAttached(_tokenId) == 0); _escrow(_owner, _tokenId); // Sale throws if inputs are invalid and clears // transfer and sire approval after escrowing the CSLCollectible. _createSale( _tokenId, _startingPrice, _endingPrice, _duration, _owner ); } /** * @dev Put a Collectible up for sale. Only callable, if user approved contract for 1/All Collectibles * @param _tokenId The token identifier * @param _startingPrice The starting price * @param _endingPrice The ending price * @param _duration The duration */ function userCreateSaleIfApproved (uint256 _tokenId, uint256 _startingPrice, uint256 _endingPrice, uint256 _duration) external whenNotPaused { require(nonFungibleContract.getApproved(_tokenId) == address(this) || nonFungibleContract.isApprovedForAll(msg.sender, address(this))); // Check whether the collectible is inPlay. If inPlay cant put it on Sale require(nonFungibleContract.checkIsAttached(_tokenId) == 0); _escrow(msg.sender, _tokenId); // Sale throws if inputs are invalid and clears // transfer and sire approval after escrowing the CSLCollectible. _createSale( _tokenId, _startingPrice, _endingPrice, _duration, msg.sender ); } /** * @dev Transfers the balance of the sales manager contract to the CSLCollectible contract. We use two-step withdrawal to * prevent two transfer calls in the sale bid function. */ function withdrawSaleManagerBalances() public onlyBanker { _withdrawBalance(); } /** * @dev Function to chnage the OwnerCut only accessible by the Owner of the contract * @param _newCut - Sets the ownerCut to new value */ function setOwnerCut(uint256 _newCut) external onlyBanker { require(_newCut <= 10000); ownerCut = _newCut; } /** * @dev Facilitates seed collectible auction creation. Enforces strict check on the data being passed * @notice Creates a new Collectible and creates an auction for it. * @param _teamId The team identifier * @param _posId The position identifier * @param _attributes The attributes * @param _playerOverrideId The player override identifier * @param _mlbPlayerId The mlb player identifier * @param _startPrice The start price * @param _endPrice The end price * @param _saleDuration The sale duration */ function createSingleSeedAuction( uint8 _teamId, uint8 _posId, uint256 _attributes, uint256 _playerOverrideId, uint256 _mlbPlayerId, uint256 _startPrice, uint256 _endPrice, uint256 _saleDuration) public onlyGameManager whenNotPaused { // Check to see the NFT address is not 0 require(nonFungibleContract != address(0)); require(_teamId != 0); uint256 nftId = nonFungibleContract.createSeedCollectible(_teamId,_posId,_attributes,address(this),0, _playerOverrideId, _mlbPlayerId); uint256 startPrice = 0; uint256 endPrice = 0; uint256 duration = 0; if(_startPrice == 0) { startPrice = _computeNextSeedPrice(0, _teamId); } else { startPrice = _startPrice; } if(_endPrice != 0) { endPrice = _endPrice; } else { endPrice = 0; } if(_saleDuration == 0) { duration = SALES_DURATION; } else { duration = _saleDuration; } _createSale( nftId, startPrice, endPrice, duration, address(this) ); } /** * @dev Facilitates promo collectible auction creation. Enforces strict check on the data being passed * @notice Creates a new Collectible and creates an auction for it. * @param _teamId The team identifier * @param _posId The position identifier * @param _attributes The attributes * @param _playerOverrideId The player override identifier * @param _mlbPlayerId The mlb player identifier * @param _startPrice The start price * @param _endPrice The end price * @param _saleDuration The sale duration */ function createPromoSeedAuction( uint8 _teamId, uint8 _posId, uint256 _attributes, uint256 _playerOverrideId, uint256 _mlbPlayerId, uint256 _startPrice, uint256 _endPrice, uint256 _saleDuration) public onlyGameManager whenNotPaused { // Check to see the NFT address is not 0 require(nonFungibleContract != address(0)); require(_teamId != 0); uint256 nftId = nonFungibleContract.createPromoCollectible(_teamId, _posId, _attributes, address(this), 0, _playerOverrideId, _mlbPlayerId); uint256 startPrice = 0; uint256 endPrice = 0; uint256 duration = 0; if(_startPrice == 0) { startPrice = _computeNextSeedPrice(0, _teamId); } else { startPrice = _startPrice; } if(_endPrice != 0) { endPrice = _endPrice; } else { endPrice = 0; } if(_saleDuration == 0) { duration = SALES_DURATION; } else { duration = _saleDuration; } _createSale( nftId, startPrice, endPrice, duration, address(this) ); } /** * @dev Creates Team Sale Auction * @param _teamId The team identifier * @param _tokenIds The token identifiers * @param _startPrice The start price * @param _endPrice The end price * @param _saleDuration The sale duration */ function createTeamSaleAuction( uint8 _teamId, uint256[9] _tokenIds, uint256 _startPrice, uint256 _endPrice, uint256 _saleDuration) public onlyGameManager whenNotPaused { require(_teamId != 0); // Helps in not creating sale with wrong team and player combination for(uint ii = 0; ii < _tokenIds.length; ii++){ require(nonFungibleContract.getTeamId(_tokenIds[ii]) == _teamId); } uint256 startPrice = 0; uint256 endPrice = 0; uint256 duration = 0; if(_startPrice == 0) { startPrice = _computeNextSeedPrice(1, _teamId).mul(9); } else { startPrice = _startPrice; } if(_endPrice != 0) { endPrice = _endPrice; } else { endPrice = 0; } if(_saleDuration == 0) { duration = SALES_DURATION; } else { duration = _saleDuration; } _createTeamSale( _tokenIds, startPrice, endPrice, duration, address(this) ); } /** * @dev Computes the next auction starting price * @param _saleType The sale type * @param _teamId The team identifier */ function _computeNextSeedPrice(uint256 _saleType, uint256 _teamId) internal view returns (uint256) { uint256 nextPrice = _averageSalePrice(_saleType, _teamId); // Sanity check to ensure we don't overflow arithmetic require(nextPrice == nextPrice); // We never auction for less than starting price if (nextPrice < STARTING_PRICE) { nextPrice = STARTING_PRICE; } return nextPrice; } /** * @dev Sanity check that allows us to ensure that we are pointing to the right sale call. */ bool public isSalesManager = true; /** * @dev works the same as default bid method. * @param _tokenId The token identifier */ function bid(uint256 _tokenId) public whenNotPaused payable { Sale memory sale = tokenIdToSale[_tokenId]; address seller = sale.seller; // This check is added to give all users a level playing field to think & bid on the player require (now > sale.startedAt.add(BID_DELAY_TIME)); uint256 price = _bid(_tokenId, msg.value); //If multi token sale if(sale.tokenIds[1] > 0) { for (uint256 i = 0; i < 9; i++) { _transfer(address(this), msg.sender, sale.tokenIds[i]); } // Avg price price = price.div(9); } else { _transfer(address(this), msg.sender, _tokenId); } // If not a seed, exit if (seller == address(this)) { if(sale.tokenIds[1] > 0){ uint256 _teamId = nonFungibleContract.getTeamId(_tokenId); lastTeamSalePrices[_teamId][seedTeamSaleCount[_teamId] % 3] = price; seedTeamSaleCount[_teamId]++; } else { lastSingleSalePrices[seedSingleSaleCount % 10] = price; seedSingleSaleCount++; } } } /** * @dev Sets the address for the NFT Contract * @param _nftAddress The nft address */ function setNFTContractAddress(address _nftAddress) public onlyGameManager { require (_nftAddress != address(0)); nonFungibleContract = MLBNFT(_nftAddress); } /** * @dev Added this module to allow retrieve of accidental asset transfer to contract * @param _to { parameter_description } * @param _tokenId The token identifier */ function assetTransfer(address _to, uint256 _tokenId) public onlyGameManager { require(_tokenId != 0); nonFungibleContract.transferFrom(address(this), _to, _tokenId); } /** * @dev Added this module to allow retrieve of accidental asset transfer to contract * @param _to { parameter_description } * @param _tokenIds The token identifiers */ function batchAssetTransfer(address _to, uint256[] _tokenIds) public onlyGameManager { require(isBatchSupported); require (_tokenIds.length > 0); for(uint i = 0; i < _tokenIds.length; i++){ require(_tokenIds[i] != 0); nonFungibleContract.transferFrom(address(this), _to, _tokenIds[i]); } } /** * @dev Creates new Seed Team Collectibles * @notice Creates a team and transfers all minted assets to SaleManager * @param _teamId The team identifier * @param _attributes The attributes * @param _mlbPlayerId The mlb player identifier */ function createSeedTeam(uint8 _teamId, uint256[9] _attributes, uint256[9] _mlbPlayerId) public onlyGameManager whenNotPaused { require(_teamId != 0); for(uint ii = 0; ii < 9; ii++) { nonFungibleContract.createSeedCollectible(_teamId, uint8(ii.add(1)), _attributes[ii], address(this), 0, 0, _mlbPlayerId[ii]); } } /** * @dev Cancels an sale that hasn't been won yet. Returns the MLBNFT (ERC721) to original owner. * @notice This is a state-modifying function that can be called while the contract is paused. */ function batchCancelSale(uint256[] _tokenIds) external whenNotPaused { require(isBatchSupported); require(_tokenIds.length > 0); for(uint ii = 0; ii < _tokenIds.length; ii++){ Sale memory sale = tokenIdToSale[_tokenIds[ii]]; require(_isOnSale(sale)); address seller = sale.seller; require(msg.sender == seller); _cancelSale(_tokenIds[ii], seller); } } /** * @dev Helps to toggle batch supported flag * @param _flag The flag */ function updateBatchSupport(bool _flag) public onlyGameManager { isBatchSupported = _flag; } /** * @dev Batching Operation: Creates a new Collectible and creates an auction for it. * @notice Helps in creating single seed auctions in batches * @param _teamIds The team identifier * @param _posIds The position identifier * @param _attributes The attributes * @param _playerOverrideIds The player override identifier * @param _mlbPlayerIds The mlb player identifier * @param _startPrice The start price */ function batchCreateSingleSeedAuction( uint8[] _teamIds, uint8[] _posIds, uint256[] _attributes, uint256[] _playerOverrideIds, uint256[] _mlbPlayerIds, uint256 _startPrice) public onlyGameManager whenNotPaused { require (isBatchSupported); require (_teamIds.length > 0 && _posIds.length > 0 && _attributes.length > 0 && _playerOverrideIds.length > 0 && _mlbPlayerIds.length > 0 ); // Check to see the NFT address is not 0 require(nonFungibleContract != address(0)); uint256 nftId; require (_startPrice != 0); for(uint ii = 0; ii < _mlbPlayerIds.length; ii++){ require(_teamIds[ii] != 0); nftId = nonFungibleContract.createSeedCollectible( _teamIds[ii], _posIds[ii], _attributes[ii], address(this), 0, _playerOverrideIds[ii], _mlbPlayerIds[ii]); _createSale( nftId, _startPrice, 0, SALES_DURATION, address(this) ); } } /** * @dev Helps in incrementing the delay time to start bidding for any auctions * @notice Function helps to update the delay time for bidding * @param _newDelay The new Delay time */ function updateDelayTime(uint256 _newDelay) public onlyGameManager whenNotPaused { BID_DELAY_TIME = _newDelay; } function bidTransfer(uint256 _tokenId, address _buyer, uint256 _bidAmount) public canTransact { Sale memory sale = tokenIdToSale[_tokenId]; address seller = sale.seller; // This check is added to give all users a level playing field to think & bid on the player require (now > sale.startedAt.add(BID_DELAY_TIME)); uint256[9] memory tokenIdsStore = tokenIdToSale[_tokenId].tokenIds; // Explicitly check that this sale is currently live. require(_isOnSale(sale)); // Check that the bid is greater than or equal to the current price uint256 price = _currentPrice(sale); require(_bidAmount >= price); // The bid is good! Remove the sale before sending the fees // to the sender so we can't have a reentrancy attack. if(tokenIdsStore[1] > 0) { for(uint ii = 0; ii < 9; ii++) { _removeSale(tokenIdsStore[ii]); } } else { _removeSale(_tokenId); } uint256 marketsCut = 0; uint256 sellerProceeds = 0; // Transfer proceeds to seller (if there are any!) if (price > 0) { // Calculate the marketplace's cut. // (NOTE: _computeCut() is guaranteed to return a // value <= price) marketsCut = _computeCut(price); sellerProceeds = price.sub(marketsCut); } //escrowTransfer(address seller, address buyer, uint256 currentPrice) public returns(bool); require (LSEscrowContract.escrowTransfer(seller, _buyer, sellerProceeds, marketsCut)); // Tell the world! // uint256 assetID, uint256 totalPrice, address winner, uint16 generation if(tokenIdsStore[1] > 0) { emit TeamSaleWinner(tokenIdsStore, price, _buyer); } else { emit SaleWinner(_tokenId, price, _buyer); } //If multi token sale if(sale.tokenIds[1] > 0) { for (uint256 i = 0; i < 9; i++) { _transfer(address(this), _buyer, sale.tokenIds[i]); } // Avg price price = price.div(9); } else { _transfer(address(this), _buyer, _tokenId); } // If not a seed, exit if (seller == address(this)) { if(sale.tokenIds[1] > 0) { uint256 _teamId = nonFungibleContract.getTeamId(_tokenId); lastTeamSalePrices[_teamId][seedTeamSaleCount[_teamId] % 3] = price; seedTeamSaleCount[_teamId]++; } else { lastSingleSalePrices[seedSingleSaleCount % 10] = price; seedSingleSaleCount++; } } } /** * @dev Sets the address for the LS Escrow Contract * @param _lsEscrowAddress The nft address */ function setLSEscrowContractAddress(address _lsEscrowAddress) public onlyGameManager { require (_lsEscrowAddress != address(0)); LSEscrowContract = LSEscrow(_lsEscrowAddress); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_buyer","type":"address"},{"name":"_bidAmount","type":"uint256"}],"name":"bidTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gameManagerSecondary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TEAM_SALE_MULTIPLIER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nftAddress","type":"address"}],"name":"setNFTContractAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"cancelSaleWhenPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_teamId","type":"uint8"},{"name":"_posId","type":"uint8"},{"name":"_attributes","type":"uint256"},{"name":"_playerOverrideId","type":"uint256"},{"name":"_mlbPlayerId","type":"uint256"},{"name":"_startPrice","type":"uint256"},{"name":"_endPrice","type":"uint256"},{"name":"_saleDuration","type":"uint256"}],"name":"createPromoSeedAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_flag","type":"bool"}],"name":"updateBatchSupport","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newAddress","type":"address"},{"name":"_value","type":"bool"}],"name":"updateAllowedAddressesList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"bid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"LSEscrowContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenIds","type":"uint256[]"}],"name":"batchCancelSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_teamId","type":"uint8"},{"name":"_attributes","type":"uint256[9]"},{"name":"_mlbPlayerId","type":"uint256[9]"}],"name":"createSeedTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isSalesManager","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"},{"name":"_owner","type":"address"}],"name":"createSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawSaleManagerBalances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCut","type":"uint256"}],"name":"setOwnerCut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gameManagerPrimary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newGM","type":"address"}],"name":"setSecondaryGameManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ownerCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"}],"name":"userCreateSaleIfApproved","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"seedSingleSaleCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_teamId","type":"uint8"},{"name":"_tokenIds","type":"uint256[9]"},{"name":"_startPrice","type":"uint256"},{"name":"_endPrice","type":"uint256"},{"name":"_saleDuration","type":"uint256"}],"name":"createTeamSaleAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenIds","type":"uint256[]"}],"name":"batchAssetTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_teamId","type":"uint8"},{"name":"_posId","type":"uint8"},{"name":"_attributes","type":"uint256"},{"name":"_playerOverrideId","type":"uint256"},{"name":"_mlbPlayerId","type":"uint256"},{"name":"_startPrice","type":"uint256"},{"name":"_endPrice","type":"uint256"},{"name":"_saleDuration","type":"uint256"}],"name":"createSingleSeedAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"lastTeamSalePrices","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lsEscrowAddress","type":"address"}],"name":"setLSEscrowContractAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isBatchSupported","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newGM","type":"address"}],"name":"setPrimaryGameManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_teamIds","type":"uint8[]"},{"name":"_posIds","type":"uint8[]"},{"name":"_attributes","type":"uint256[]"},{"name":"_playerOverrideIds","type":"uint256[]"},{"name":"_mlbPlayerIds","type":"uint256[]"},{"name":"_startPrice","type":"uint256"}],"name":"batchCreateSingleSeedAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"cancelSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SINGLE_SALE_MULTIPLIER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getCurrentPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STARTING_PRICE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newDelay","type":"uint256"}],"name":"updateDelayTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"lastSingleSalePrices","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getSale","outputs":[{"name":"seller","type":"address"},{"name":"startingPrice","type":"uint256"},{"name":"endingPrice","type":"uint256"},{"name":"duration","type":"uint256"},{"name":"startedAt","type":"uint256"},{"name":"tokenIds","type":"uint256[9]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nonFungibleContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"assetTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bankManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BID_DELAY_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"seedTeamSaleCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERC721_RECEIVED","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBK","type":"address"}],"name":"setBanker","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SALES_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenID","type":"uint256"},{"indexed":false,"name":"startingPrice","type":"uint256"},{"indexed":false,"name":"endingPrice","type":"uint256"},{"indexed":false,"name":"duration","type":"uint256"},{"indexed":false,"name":"startedAt","type":"uint256"}],"name":"SaleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenIDs","type":"uint256[9]"},{"indexed":false,"name":"startingPrice","type":"uint256"},{"indexed":false,"name":"endingPrice","type":"uint256"},{"indexed":false,"name":"duration","type":"uint256"},{"indexed":false,"name":"startedAt","type":"uint256"}],"name":"TeamSaleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenID","type":"uint256"},{"indexed":false,"name":"totalPrice","type":"uint256"},{"indexed":false,"name":"winner","type":"address"}],"name":"SaleWinner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenIDs","type":"uint256[9]"},{"indexed":false,"name":"totalPrice","type":"uint256"},{"indexed":false,"name":"winner","type":"address"}],"name":"TeamSaleWinner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenID","type":"uint256"},{"indexed":false,"name":"sellerAddress","type":"address"}],"name":"SaleCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"}],"name":"EtherWithdrawed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newContract","type":"address"}],"name":"ContractUpgrade","type":"event"}]
Contract Creation Code
60806040526003805460a060020a60ff0219169055600060068190556101f4600755600c55600d805461ff001960ff199091166001171661010017905534801561004857600080fd5b50600754612710101561005a57600080fd5b33151561006657600080fd5b6003805460018054600160a060020a0319908116339081179092556002805482168317905560a060020a60ff021990921674010000000000000000000000000000000000000000179190911617905561377580620000c56000396000f30060806040526004361061022c5763ffffffff60e060020a6000350416631430990a81146102b0578063150b7a02146102d95780631740b4791461037d57806319677635146103ae57806323949cd1146103d557806323edfb89146103f65780632598ab9d1461040e578063362f74e71461044157806338a6e8131461045b5780633f4ba83a14610481578063454a2ab314610496578063495b3bcc146104a1578063553ec6be146104b65780635c975abb146104d65780635da08c42146104ff5780636cfdc2421461057157806372a1b73f1461058657806374eb7c90146105b3578063757de573146105c85780637bf3f900146105e057806380373436146105f557806383b5ff8b146106165780638456cb591461062b57806384ececf2146106405780638cd6c7fa146106615780639951a2c8146106765780639a58c33d146106cd578063a29626c214610730578063a888ff6014610763578063aa54abb11461077e578063aaeaa36c1461079f578063b5a54627146107b4578063b792d022146107d5578063bd94b00514610910578063be86d99614610928578063c55d0f561461093d578063d12f702914610955578063d3f1a78c1461096a578063d72d681914610982578063d8f6d5961461099a578063dd1b7a0f14610a22578063e5d9dac414610a37578063e9e2990e14610a5b578063ebef28aa14610a70578063ec8b960814610a85578063ecc98ce414610a9d578063f1ff732b14610ab2578063f396e81b14610ad3575b600454600160a060020a0316333014806102505750600154600160a060020a031633145b806102655750600254600160a060020a031633145b8061027a5750600354600160a060020a031633145b8061028d575033600160a060020a038216145b806102a25750600554600160a060020a031633145b15156102ad57600080fd5b50005b3480156102bc57600080fd5b506102d7600435600160a060020a0360243516604435610ae8565b005b3480156102e557600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261034894600160a060020a03813581169560248035909216956044359536956084940191819084018382808284375094975061101c9650505050505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561038957600080fd5b50610392611045565b60408051600160a060020a039092168252519081900360200190f35b3480156103ba57600080fd5b506103c3611054565b60408051918252519081900360200190f35b3480156103e157600080fd5b506102d7600160a060020a0360043516611059565b34801561040257600080fd5b506102d76004356110be565b34801561041a57600080fd5b506102d760ff6004358116906024351660443560643560843560a43560c43560e4356111c2565b34801561044d57600080fd5b506102d7600435151561136f565b34801561046757600080fd5b506102d7600160a060020a036004351660243515156113b0565b34801561048d57600080fd5b506102d761141e565b6102d7600435611485565b3480156104ad57600080fd5b50610392611709565b3480156104c257600080fd5b506102d76004803560248101910135611718565b3480156104e257600080fd5b506104eb611867565b604080519115158252519081900360200190f35b34801561050b57600080fd5b50604080516101208082019092526102d7916004803560ff16923692610144919060249060099083908390808284375050604080516101208181019092529497969581810195945092506009915083908390808284375093965061187795505050505050565b34801561057d57600080fd5b506104eb6119df565b34801561059257600080fd5b506102d7600435602435604435606435600160a060020a03608435166119ed565b3480156105bf57600080fd5b506102d7611acd565b3480156105d457600080fd5b506102d7600435611aec565b3480156105ec57600080fd5b50610392611b17565b34801561060157600080fd5b506102d7600160a060020a0360043516611b26565b34801561062257600080fd5b506103c3611b8b565b34801561063757600080fd5b506102d7611b91565b34801561064c57600080fd5b506102d7600435602435604435606435611bfc565b34801561066d57600080fd5b506103c3611e0d565b34801561068257600080fd5b50604080516101208082019092526102d7916004803560ff16923692610144919060249060099083908390808284375093965050833594505050602082013591604001359050611e13565b3480156106d957600080fd5b506040805160206004602480358281013584810280870186019097528086526102d7968435600160a060020a031696369660449591949091019291829185019084908082843750949750611f989650505050505050565b34801561073c57600080fd5b506102d760ff6004358116906024351660443560643560843560a43560c43560e4356120d8565b34801561076f57600080fd5b506103c36004356024356121f9565b34801561078a57600080fd5b506102d7600160a060020a036004351661221b565b3480156107ab57600080fd5b506104eb612280565b3480156107c057600080fd5b506102d7600160a060020a0360043516612289565b3480156107e157600080fd5b50604080516020600480358082013583810280860185019096528085526102d795369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375094975050933594506122ee9350505050565b34801561091c57600080fd5b506102d7600435612537565b34801561093457600080fd5b506103c361261c565b34801561094957600080fd5b506103c3600435612621565b34801561096157600080fd5b506103c36126dc565b34801561097657600080fd5b506102d76004356126e7565b34801561098e57600080fd5b506103c3600435612731565b3480156109a657600080fd5b506109b2600435612743565b6040518087600160a060020a0316600160a060020a0316815260200186815260200185815260200184815260200183815260200182600960200280838360005b83811015610a0a5781810151838201526020016109f2565b50505050905001965050505050505060405180910390f35b348015610a2e57600080fd5b5061039261282c565b348015610a4357600080fd5b506102d7600160a060020a036004351660243561283b565b348015610a6757600080fd5b506103926128fe565b348015610a7c57600080fd5b506103c361290d565b348015610a9157600080fd5b506103c3600435612913565b348015610aa957600080fd5b50610348612925565b348015610abe57600080fd5b506102d7600160a060020a0360043516612949565b348015610adf57600080fd5b506103c3612997565b610af0613679565b6000610afa6136bf565b60015460009081908190819081908190600160a060020a0316331480610b2a5750600254600160a060020a031633145b80610b4457503360009081526020819052604090205460ff165b1515610b4f57600080fd5b60008c815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b815481526020019060010190808311610bbe57505050505081525050985088600001519750610bfc6006548a6080015161299e90919063ffffffff16565b4211610c0757600080fd5b60008c815260086020526040908190208151610120810190925260050160098282826020028201915b815481526020019060010190808311610c305750505050509650610c53896129bb565b1515610c5e57600080fd5b610c67896129c5565b9550858a1015610c7657600080fd5b602087015160001015610cba57600094505b6009851015610cb557610caa878660098110610ca057fe5b6020020151612a2c565b600190940193610c88565b610cc3565b610cc38c612a2c565b60009350600092506000861115610cf257610cdd86612a72565b9350610cef868563ffffffff612aa116565b92505b600554604080517f95955d22000000000000000000000000000000000000000000000000000000008152600160a060020a038b811660048301528e811660248301526044820187905260648201889052915191909216916395955d229160848083019260209291908290030181600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b50511515610da757600080fd5b602087015160001015610e2c577f3e26b609bdb78965c3cc474d081fd9416c228fc7f1600c1b6511c736798e4b9f87878d6040518084600960200280838360005b83811015610e00578181015183820152602001610de8565b50505050919091019384525050600160a060020a031660208201526040805191829003019150a1610e75565b604080518d815260208101889052600160a060020a038d168183015290517fe7f91fae5e362a076a229ddbcc13864728b3f5dcceefc79cf8940e64997db9859181900360600190a15b60a08901516020015160001015610ed857600091505b6009821015610ec057610eb5308c8b60a0015185600981101515610eab57fe5b6020020151612ab8565b600190910190610e8b565b610ed186600963ffffffff612b4f16565b9550610ee3565b610ee3308c8e612ab8565b600160a060020a03881630141561100e5760a08901516020015160001015610fdf5760048054604080517f794285700000000000000000000000000000000000000000000000000000000081529283018f905251600160a060020a039091169163794285709160248083019260209291908290030181600087803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b505050506040513d6020811015610f9457600080fd5b50516000818152600960209081526040808320600b9092529091205491925087916003900660038110610fc357fe5b01556000818152600b602052604090208054600101905561100e565b85600a6000600a600c54811515610ff257fe5b068152602081019190915260400160002055600c805460010190555b505050505050505050505050565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b600254600160a060020a031681565b600c81565b600154600160a060020a031633148061107c5750600254600160a060020a031633145b151561108757600080fd5b600160a060020a038116151561109c57600080fd5b60048054600160a060020a031916600160a060020a0392909216919091179055565b6110c6613679565b60035460009060a060020a900460ff1615156110e157600080fd5b600154600160a060020a03163314806111045750600254600160a060020a031633145b151561110f57600080fd5b600083815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b81548152602001906001019080831161117e5750505050508152505091506111a5826129bb565b15156111b057600080fd5b5080516111bd8382612b72565b505050565b600154600090819081908190600160a060020a03163314806111ee5750600254600160a060020a031633145b15156111f957600080fd5b60035460a060020a900460ff161561121057600080fd5b600454600160a060020a0316151561122757600080fd5b60ff8c16151561123657600080fd5b600460009054906101000a9004600160a060020a0316600160a060020a031663b7dcf6a98d8d8d3060008f8f6040518863ffffffff1660e060020a028152600401808860ff1660ff1681526020018760ff1660ff16815260200186815260200185600160a060020a0316600160a060020a03168152602001848152602001838152602001828152602001975050505050505050602060405180830381600087803b1580156112e357600080fd5b505af11580156112f7573d6000803e3d6000fd5b505050506040513d602081101561130d57600080fd5b50519350600092508291508190508615156113375761133060008d60ff16612cfa565b925061133b565b8692505b85156113495785915061134e565b600091505b84151561135f575062015180611362565b50835b61100e8484848430612d28565b600154600160a060020a03163314806113925750600254600160a060020a031633145b151561139d57600080fd5b600d805460ff1916911515919091179055565b600154600160a060020a03163314806113d35750600254600160a060020a031633145b15156113de57600080fd5b600160a060020a03821615156113f357600080fd5b600160a060020a03919091166000908152602081905260409020805460ff1916911515919091179055565b600154600160a060020a03163314806114415750600254600160a060020a031633145b151561144c57600080fd5b60035460a060020a900460ff16151561146457600080fd5b600454600160a060020a0316151561147b57600080fd5b611483612dbb565b565b61148d613679565b60035460009081908190819060a060020a900460ff16156114ad57600080fd5b600086815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b81548152602001906001019080831161151c5750505050508152505094508460000151935061155a600654866080015161299e90919063ffffffff16565b421161156557600080fd5b61156f8634612e21565b60a086015160200151909350600010156115cb57600091505b60098210156115b3576115a830338760a0015185600981101515610eab57fe5b600190910190611588565b6115c483600963ffffffff612b4f16565b92506115d6565b6115d6303388612ab8565b600160a060020a0384163014156117015760a085015160200151600010156116d25760048054604080517f7942857000000000000000000000000000000000000000000000000000000000815292830189905251600160a060020a039091169163794285709160248083019260209291908290030181600087803b15801561165d57600080fd5b505af1158015611671573d6000803e3d6000fd5b505050506040513d602081101561168757600080fd5b50516000818152600960209081526040808320600b90925290912054919250849160039006600381106116b657fe5b01556000818152600b6020526040902080546001019055611701565b82600a6000600a600c548115156116e557fe5b068152602081019190915260400160002055600c805460010190555b505050505050565b600554600160a060020a031681565b6000611722613679565b60035460009060a060020a900460ff161561173c57600080fd5b600d5460ff16151561174d57600080fd5b6000841161175a57600080fd5b600092505b83831015611860576008600086868681811061177757fe5b60209081029290920135835250818101929092526040908101600020815160c0810183528154600160a060020a0316815260018201549381019390935260028101548383015260038101546060840152600481015460808401528151610120810192839052909160a084019190600584019060099082845b8154815260200190600101908083116117ef575050505050815250509150611816826129bb565b151561182157600080fd5b50805133600160a060020a0382161461183957600080fd5b61185585858581811061184857fe5b9050602002013582612b72565b60019092019161175f565b5050505050565b60035460a060020a900460ff1681565b600154600090600160a060020a031633148061189d5750600254600160a060020a031633145b15156118a857600080fd5b60035460a060020a900460ff16156118bf57600080fd5b60ff841615156118ce57600080fd5b5060005b60098110156119d957600454600160a060020a0316634f6d04e7856118fe84600163ffffffff61299e16565b86856009811061190a57fe5b60200201513060008089896009811061191f57fe5b60200201516040518863ffffffff1660e060020a028152600401808860ff1660ff1681526020018760ff1660ff16815260200186815260200185600160a060020a0316600160a060020a03168152602001848152602001838152602001828152602001975050505050505050602060405180830381600087803b1580156119a557600080fd5b505af11580156119b9573d6000803e3d6000fd5b505050506040513d60208110156119cf57600080fd5b50506001016118d2565b50505050565b600d54610100900460ff1681565b60035460a060020a900460ff1615611a0457600080fd5b600454600160a060020a03163314611a1b57600080fd5b60048054604080517f5265440c00000000000000000000000000000000000000000000000000000000815292830188905251600160a060020a0390911691635265440c9160248083019260209291908290030181600087803b158015611a8057600080fd5b505af1158015611a94573d6000803e3d6000fd5b505050506040513d6020811015611aaa57600080fd5b505115611ab657600080fd5b611ac0818661315d565b6118608585858585612d28565b600354600160a060020a03163314611ae457600080fd5b6114836131d5565b600354600160a060020a03163314611b0357600080fd5b612710811115611b1257600080fd5b600755565b600154600160a060020a031681565b600154600160a060020a0316331480611b495750600254600160a060020a031633145b1515611b5457600080fd5b600160a060020a0381161515611b6957600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60075481565b600154600160a060020a0316331480611bb45750600254600160a060020a031633145b1515611bbf57600080fd5b60035460a060020a900460ff1615611bd657600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a179055565b60035460a060020a900460ff1615611c1357600080fd5b60048054604080517f081812fc000000000000000000000000000000000000000000000000000000008152928301879052513092600160a060020a039092169163081812fc9160248083019260209291908290030181600087803b158015611c7a57600080fd5b505af1158015611c8e573d6000803e3d6000fd5b505050506040513d6020811015611ca457600080fd5b5051600160a060020a03161480611d50575060048054604080517fe985e9c5000000000000000000000000000000000000000000000000000000008152339381019390935230602484015251600160a060020a039091169163e985e9c59160448083019260209291908290030181600087803b158015611d2357600080fd5b505af1158015611d37573d6000803e3d6000fd5b505050506040513d6020811015611d4d57600080fd5b50515b1515611d5b57600080fd5b60048054604080517f5265440c00000000000000000000000000000000000000000000000000000000815292830187905251600160a060020a0390911691635265440c9160248083019260209291908290030181600087803b158015611dc057600080fd5b505af1158015611dd4573d6000803e3d6000fd5b505050506040513d6020811015611dea57600080fd5b505115611df657600080fd5b611e00338561315d565b6119d98484848433612d28565b600c5481565b600154600090819081908190600160a060020a0316331480611e3f5750600254600160a060020a031633145b1515611e4a57600080fd5b60035460a060020a900460ff1615611e6157600080fd5b60ff89161515611e7057600080fd5b600093505b6009841015611f1f5760045460ff8a1690600160a060020a031663794285708a8760098110611ea057fe5b60200201516040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015611ede57600080fd5b505af1158015611ef2573d6000803e3d6000fd5b505050506040513d6020811015611f0857600080fd5b505114611f1457600080fd5b600190930192611e75565b506000915081905080861515611f5557611f4e6009611f4260018c60ff16612cfa565b9063ffffffff61321216565b9250611f59565b8692505b8515611f6757859150611f6c565b600091505b841515611f7d575062015180611f80565b50835b611f8d8884848430613240565b505050505050505050565b600154600090600160a060020a0316331480611fbe5750600254600160a060020a031633145b1515611fc957600080fd5b600d5460ff161515611fda57600080fd5b8151600010611fe857600080fd5b5060005b81518110156111bd57818181518110151561200357fe5b60209081029091010151151561201857600080fd5b6004548251600160a060020a03909116906323b872dd903090869086908690811061203f57fe5b906020019060200201516040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050600060405180830381600087803b1580156120b457600080fd5b505af11580156120c8573d6000803e3d6000fd5b505060019092019150611fec9050565b600154600090819081908190600160a060020a03163314806121045750600254600160a060020a031633145b151561210f57600080fd5b60035460a060020a900460ff161561212657600080fd5b600454600160a060020a0316151561213d57600080fd5b60ff8c16151561214c57600080fd5b600460009054906101000a9004600160a060020a0316600160a060020a0316634f6d04e78d8d8d3060008f8f6040518863ffffffff1660e060020a028152600401808860ff1660ff1681526020018760ff1660ff16815260200186815260200185600160a060020a0316600160a060020a03168152602001848152602001838152602001828152602001975050505050505050602060405180830381600087803b1580156112e357600080fd5b6009602052600082815260409020816003811061221257fe5b01549150829050565b600154600160a060020a031633148061223e5750600254600160a060020a031633145b151561224957600080fd5b600160a060020a038116151561225e57600080fd5b60058054600160a060020a031916600160a060020a0392909216919091179055565b600d5460ff1681565b600154600160a060020a03163314806122ac5750600254600160a060020a031633145b15156122b757600080fd5b600160a060020a03811615156122cc57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b6001546000908190600160a060020a03163314806123165750600254600160a060020a031633145b151561232157600080fd5b60035460a060020a900460ff161561233857600080fd5b600d5460ff16151561234957600080fd5b6000885111801561235b575060008751115b8015612368575060008651115b8015612375575060008551115b8015612382575060008451115b151561238d57600080fd5b600454600160a060020a031615156123a457600080fd5b8215156123b057600080fd5b5060005b835181101561252d5787818151811015156123cb57fe5b6020908102909101015160ff1615156123e357600080fd5b6004548851600160a060020a0390911690634f6d04e7908a908490811061240657fe5b90602001906020020151898481518110151561241e57fe5b90602001906020020151898581518110151561243657fe5b906020019060200201513060008b8881518110151561245157fe5b906020019060200201518b8981518110151561246957fe5b60209081029091018101516040805160e060020a63ffffffff8c1602815260ff998a1660048201529790981660248801526044870195909552600160a060020a039093166064860152608485019190915260a484015260c4830191909152915160e480830193928290030181600087803b1580156124e657600080fd5b505af11580156124fa573d6000803e3d6000fd5b505050506040513d602081101561251057600080fd5b50519150612525828460006201518030612d28565b6001016123b4565b5050505050505050565b61253f613679565b60035460009060a060020a900460ff161561255957600080fd5b600083815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b8154815260200190600101908083116125c85750505050508152505091506125ef826129bb565b15156125fa57600080fd5b50805133600160a060020a0382161461261257600080fd5b6111bd8382612b72565b602381565b600061262b613679565b600083815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b81548152602001906001019080831161269a5750505050508152505090506126c1816129bb565b15156126cc57600080fd5b6126d5816129c5565b9392505050565b662386f26fc1000081565b600154600160a060020a031633148061270a5750600254600160a060020a031633145b151561271557600080fd5b60035460a060020a900460ff161561272c57600080fd5b600655565b600a6020526000908152604090205481565b60008060008060006127536136bf565b61275b613679565b600088815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b8154815260200190600101908083116127ca5750505050508152505090506127f1816129bb565b15156127fc57600080fd5b8051602082015160408301516060840151608085015160a090950151939c929b5090995097509195509350915050565b600454600160a060020a031681565b600154600160a060020a031633148061285e5750600254600160a060020a031633145b151561286957600080fd5b80151561287557600080fd5b60048054604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523093810193909352600160a060020a0385811660248501526044840185905290519116916323b872dd91606480830192600092919082900301818387803b1580156128ea57600080fd5b505af1158015611701573d6000803e3d6000fd5b600354600160a060020a031681565b60065481565b600b6020526000908152604090205481565b7f150b7a020000000000000000000000000000000000000000000000000000000081565b600354600160a060020a0316331461296057600080fd5b600160a060020a038116151561297557600080fd5b60038054600160a060020a031916600160a060020a0392909216919091179055565b6201518081565b6000828201838110156129b057600080fd5b8091505b5092915050565b6080015160001090565b600654608082015160009182916129e19163ffffffff61299e16565b421115612a1457612a11612a04600654856080015161299e90919063ffffffff16565b429063ffffffff612aa116565b90505b6126d58360200151846040015185606001518461328b565b60008181526008602052604081208054600160a060020a031916815560018101829055600281018290556003810182905560048101829055906111bd60058301826136df565b6000612a9b612710612a8f6007548561321290919063ffffffff16565b9063ffffffff612b4f16565b92915050565b60008083831115612ab157600080fd5b5050900390565b60048054604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0387811694820194909452858416602482015260448101859052905192909116916323b872dd9160648082019260009290919082900301818387803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b50505050505050565b600080808311612b5e57600080fd5b8284811515612b6957fe5b04949350505050565b612b7a613679565b6000838152600860209081526040808320815160c0810183528154600160a060020a0316815260018201549381019390935260028101548383015260038101546060840152600481015460808401528151610120810192839052909160a084019190600584019060099082845b815481526020019060010190808311612be7575050509190925250505060a08101516020015190925015612c9d575060005b6009811015612c555760a0820151612c36908260098110610ca057fe5b612c4d30848460a0015184600981101515610eab57fe5b600101612c19565b60408051858152600160a060020a038516602082015281517fd9e530acb8429c8e5337d9d3230e4cc7d742e32c2fc8d76608c19f2e1701ed04929181900390910190a16119d9565b612ca684612a2c565b612cb1308486612ab8565b60408051858152600160a060020a038516602082015281517fd9e530acb8429c8e5337d9d3230e4cc7d742e32c2fc8d76608c19f2e1701ed04929181900390910190a150505050565b600080612d0784846132c8565b9050662386f26fc100008110156129b05750662386f26fc100009392505050565b612d30613679565b60c06040519081016040528083600160a060020a0316815260200186815260200185815260200184815260200142815260200161012060405190810160405280898152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250815250905061170186826133a5565b600154600160a060020a0316331480612dde5750600254600160a060020a031633145b1515612de957600080fd5b60035460a060020a900460ff161515612e0157600080fd5b6003805474ff000000000000000000000000000000000000000019169055565b600080612e2c6136bf565b60008581526008602052604080822081516101208101928390529094508291829182918291829160058a019060099082845b815481526020019060010190808311612e5e5750506040805160c0810182528d54600160a060020a0316815260018e0154602082015260028e01548183015260038e0154606082015260048e015460808201528151610120810192839052959c50612efc959094508d935060a08501925090600584019060099082845b815481526020019060010190808311612edb575050505050815250506129bb565b1515612f0757600080fd5b6040805160c0810182528954600160a060020a0316815260018a0154602082015260028a01548183015260038a0154606082015260048a015460808201528151610120810192839052612f87928b9160a0840191600584019060099082845b815481526020019060010190808311612f66575050505050815250506129c5565b9550858a1015612f9657600080fd5b8754600160a060020a03169450600087600160200201511115612fe057600093505b6009841015612fdb57612fd0878560098110610ca057fe5b600190930192612fb8565b612fe9565b612fe98b612a2c565b600086111561304857612ffb86612a72565b925061300d868463ffffffff612aa116565b604051909250600160a060020a0386169083156108fc029084906000818181858888f19350505050158015613046573d6000803e3d6000fd5b505b6130588a8763ffffffff612aa116565b604051909150339082156108fc029083906000818181858888f19350505050158015613088573d6000803e3d6000fd5b5060208701516000101561310e577f3e26b609bdb78965c3cc474d081fd9416c228fc7f1600c1b6511c736798e4b9f8787336040518084600960200280838360005b838110156130e25781810151838201526020016130ca565b50505050919091019384525050600160a060020a031660208201526040805191829003019150a161314e565b604080518c815260208101889052338183015290517fe7f91fae5e362a076a229ddbcc13864728b3f5dcceefc79cf8940e64997db9859181900360600190a15b50939998505050505050505050565b60048054604080517f42842e0e000000000000000000000000000000000000000000000000000000008152600160a060020a038681169482019490945230602482015260448101859052905192909116916342842e0e9160648082019260009290919082900301818387803b1580156128ea57600080fd5b600354604051600160a060020a0390911690303180156108fc02916000818181858888f1935050505015801561320f573d6000803e3d6000fd5b50565b60008083151561322557600091506129b4565b5082820282848281151561323557fe5b04146129b057600080fd5b613248613679565b60c06040519081016040528083600160a060020a03168152602001868152602001858152602001848152602001428152602001878152509050611701868261348a565b600080808085851061329f578693506132bd565b8787039250858584028115156132b157fe5b05915081880190508093505b505050949350505050565b600080808085151561332c57600091505b600a82101561330f576000828152600a602052604090205461330290849063ffffffff61299e16565b92506001909101906132d9565b6133256064612a8f85602363ffffffff61321216565b925061339b565b5060005b600381101561336f57600085815260096020526040902061336590826003811061335657fe5b0154849063ffffffff61299e16565b9250600101613330565b613385601e612a8f85600c63ffffffff61321216565b925061339883600963ffffffff61321216565b92505b5090949350505050565b6060810151603c11156133b757600080fd5b60008281526008602090815260409182902083518154600160a060020a031916600160a060020a03909116178155908301516001820155908201516002820155606082015160038201556080820151600482015560a082015182919061342390600583019060096136ee565b50505060208082015160408084015160608086015160808088015185518a8152978801969096528685019390935290850152830191909152517f6688114a9b77bcf97076216092c6794f7c541749631612664980599eaff1f5329181900360a00190a15050565b6000603c8260600151101515156134a057600080fd5b5060005b60098110156135e8578281600981106134b957fe5b602002015115156134c957600080fd5b600454600160a060020a0316634f558e798483600981106134e657fe5b60200201516040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561352457600080fd5b505af1158015613538573d6000803e3d6000fd5b505050506040513d602081101561354e57600080fd5b5051151561355b57600080fd5b816008600085846009811061356c57fe5b60209081029190910151825281810192909252604090810160002083518154600160a060020a031916600160a060020a039091161781559183015160018301558201516002820155606082015160038201556080820151600482015560a08201516135dd90600583019060096136ee565b5050506001016134a4565b7f67296fd73b6bfd01e6b0ad1dc90e93fd5018a084590dc8aa4634e01290a45c348383602001518460400151856060015186608001516040518086600960200280838360005b8381101561364657818101518382015260200161362e565b505050509050018581526020018481526020018381526020018281526020019550505050505060405180910390a1505050565b6101c0604051908101604052806000600160a060020a03168152602001600081526020016000815260200160008152602001600081526020016136ba6136bf565b905290565b610120604051908101604052806009906020820280388339509192915050565b5061320f90600981019061372c565b826009810192821561371c579160200282015b8281111561371c578251825591602001919060010190613701565b5061372892915061372c565b5090565b61374691905b808211156137285760008155600101613732565b905600a165627a7a723058203408577a17c8dea00c33371e52dbd014003d4cb6986631dcb591ca03e0c953080029
Deployed Bytecode
0x60806040526004361061022c5763ffffffff60e060020a6000350416631430990a81146102b0578063150b7a02146102d95780631740b4791461037d57806319677635146103ae57806323949cd1146103d557806323edfb89146103f65780632598ab9d1461040e578063362f74e71461044157806338a6e8131461045b5780633f4ba83a14610481578063454a2ab314610496578063495b3bcc146104a1578063553ec6be146104b65780635c975abb146104d65780635da08c42146104ff5780636cfdc2421461057157806372a1b73f1461058657806374eb7c90146105b3578063757de573146105c85780637bf3f900146105e057806380373436146105f557806383b5ff8b146106165780638456cb591461062b57806384ececf2146106405780638cd6c7fa146106615780639951a2c8146106765780639a58c33d146106cd578063a29626c214610730578063a888ff6014610763578063aa54abb11461077e578063aaeaa36c1461079f578063b5a54627146107b4578063b792d022146107d5578063bd94b00514610910578063be86d99614610928578063c55d0f561461093d578063d12f702914610955578063d3f1a78c1461096a578063d72d681914610982578063d8f6d5961461099a578063dd1b7a0f14610a22578063e5d9dac414610a37578063e9e2990e14610a5b578063ebef28aa14610a70578063ec8b960814610a85578063ecc98ce414610a9d578063f1ff732b14610ab2578063f396e81b14610ad3575b600454600160a060020a0316333014806102505750600154600160a060020a031633145b806102655750600254600160a060020a031633145b8061027a5750600354600160a060020a031633145b8061028d575033600160a060020a038216145b806102a25750600554600160a060020a031633145b15156102ad57600080fd5b50005b3480156102bc57600080fd5b506102d7600435600160a060020a0360243516604435610ae8565b005b3480156102e557600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261034894600160a060020a03813581169560248035909216956044359536956084940191819084018382808284375094975061101c9650505050505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561038957600080fd5b50610392611045565b60408051600160a060020a039092168252519081900360200190f35b3480156103ba57600080fd5b506103c3611054565b60408051918252519081900360200190f35b3480156103e157600080fd5b506102d7600160a060020a0360043516611059565b34801561040257600080fd5b506102d76004356110be565b34801561041a57600080fd5b506102d760ff6004358116906024351660443560643560843560a43560c43560e4356111c2565b34801561044d57600080fd5b506102d7600435151561136f565b34801561046757600080fd5b506102d7600160a060020a036004351660243515156113b0565b34801561048d57600080fd5b506102d761141e565b6102d7600435611485565b3480156104ad57600080fd5b50610392611709565b3480156104c257600080fd5b506102d76004803560248101910135611718565b3480156104e257600080fd5b506104eb611867565b604080519115158252519081900360200190f35b34801561050b57600080fd5b50604080516101208082019092526102d7916004803560ff16923692610144919060249060099083908390808284375050604080516101208181019092529497969581810195945092506009915083908390808284375093965061187795505050505050565b34801561057d57600080fd5b506104eb6119df565b34801561059257600080fd5b506102d7600435602435604435606435600160a060020a03608435166119ed565b3480156105bf57600080fd5b506102d7611acd565b3480156105d457600080fd5b506102d7600435611aec565b3480156105ec57600080fd5b50610392611b17565b34801561060157600080fd5b506102d7600160a060020a0360043516611b26565b34801561062257600080fd5b506103c3611b8b565b34801561063757600080fd5b506102d7611b91565b34801561064c57600080fd5b506102d7600435602435604435606435611bfc565b34801561066d57600080fd5b506103c3611e0d565b34801561068257600080fd5b50604080516101208082019092526102d7916004803560ff16923692610144919060249060099083908390808284375093965050833594505050602082013591604001359050611e13565b3480156106d957600080fd5b506040805160206004602480358281013584810280870186019097528086526102d7968435600160a060020a031696369660449591949091019291829185019084908082843750949750611f989650505050505050565b34801561073c57600080fd5b506102d760ff6004358116906024351660443560643560843560a43560c43560e4356120d8565b34801561076f57600080fd5b506103c36004356024356121f9565b34801561078a57600080fd5b506102d7600160a060020a036004351661221b565b3480156107ab57600080fd5b506104eb612280565b3480156107c057600080fd5b506102d7600160a060020a0360043516612289565b3480156107e157600080fd5b50604080516020600480358082013583810280860185019096528085526102d795369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375094975050933594506122ee9350505050565b34801561091c57600080fd5b506102d7600435612537565b34801561093457600080fd5b506103c361261c565b34801561094957600080fd5b506103c3600435612621565b34801561096157600080fd5b506103c36126dc565b34801561097657600080fd5b506102d76004356126e7565b34801561098e57600080fd5b506103c3600435612731565b3480156109a657600080fd5b506109b2600435612743565b6040518087600160a060020a0316600160a060020a0316815260200186815260200185815260200184815260200183815260200182600960200280838360005b83811015610a0a5781810151838201526020016109f2565b50505050905001965050505050505060405180910390f35b348015610a2e57600080fd5b5061039261282c565b348015610a4357600080fd5b506102d7600160a060020a036004351660243561283b565b348015610a6757600080fd5b506103926128fe565b348015610a7c57600080fd5b506103c361290d565b348015610a9157600080fd5b506103c3600435612913565b348015610aa957600080fd5b50610348612925565b348015610abe57600080fd5b506102d7600160a060020a0360043516612949565b348015610adf57600080fd5b506103c3612997565b610af0613679565b6000610afa6136bf565b60015460009081908190819081908190600160a060020a0316331480610b2a5750600254600160a060020a031633145b80610b4457503360009081526020819052604090205460ff165b1515610b4f57600080fd5b60008c815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b815481526020019060010190808311610bbe57505050505081525050985088600001519750610bfc6006548a6080015161299e90919063ffffffff16565b4211610c0757600080fd5b60008c815260086020526040908190208151610120810190925260050160098282826020028201915b815481526020019060010190808311610c305750505050509650610c53896129bb565b1515610c5e57600080fd5b610c67896129c5565b9550858a1015610c7657600080fd5b602087015160001015610cba57600094505b6009851015610cb557610caa878660098110610ca057fe5b6020020151612a2c565b600190940193610c88565b610cc3565b610cc38c612a2c565b60009350600092506000861115610cf257610cdd86612a72565b9350610cef868563ffffffff612aa116565b92505b600554604080517f95955d22000000000000000000000000000000000000000000000000000000008152600160a060020a038b811660048301528e811660248301526044820187905260648201889052915191909216916395955d229160848083019260209291908290030181600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b50511515610da757600080fd5b602087015160001015610e2c577f3e26b609bdb78965c3cc474d081fd9416c228fc7f1600c1b6511c736798e4b9f87878d6040518084600960200280838360005b83811015610e00578181015183820152602001610de8565b50505050919091019384525050600160a060020a031660208201526040805191829003019150a1610e75565b604080518d815260208101889052600160a060020a038d168183015290517fe7f91fae5e362a076a229ddbcc13864728b3f5dcceefc79cf8940e64997db9859181900360600190a15b60a08901516020015160001015610ed857600091505b6009821015610ec057610eb5308c8b60a0015185600981101515610eab57fe5b6020020151612ab8565b600190910190610e8b565b610ed186600963ffffffff612b4f16565b9550610ee3565b610ee3308c8e612ab8565b600160a060020a03881630141561100e5760a08901516020015160001015610fdf5760048054604080517f794285700000000000000000000000000000000000000000000000000000000081529283018f905251600160a060020a039091169163794285709160248083019260209291908290030181600087803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b505050506040513d6020811015610f9457600080fd5b50516000818152600960209081526040808320600b9092529091205491925087916003900660038110610fc357fe5b01556000818152600b602052604090208054600101905561100e565b85600a6000600a600c54811515610ff257fe5b068152602081019190915260400160002055600c805460010190555b505050505050505050505050565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b600254600160a060020a031681565b600c81565b600154600160a060020a031633148061107c5750600254600160a060020a031633145b151561108757600080fd5b600160a060020a038116151561109c57600080fd5b60048054600160a060020a031916600160a060020a0392909216919091179055565b6110c6613679565b60035460009060a060020a900460ff1615156110e157600080fd5b600154600160a060020a03163314806111045750600254600160a060020a031633145b151561110f57600080fd5b600083815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b81548152602001906001019080831161117e5750505050508152505091506111a5826129bb565b15156111b057600080fd5b5080516111bd8382612b72565b505050565b600154600090819081908190600160a060020a03163314806111ee5750600254600160a060020a031633145b15156111f957600080fd5b60035460a060020a900460ff161561121057600080fd5b600454600160a060020a0316151561122757600080fd5b60ff8c16151561123657600080fd5b600460009054906101000a9004600160a060020a0316600160a060020a031663b7dcf6a98d8d8d3060008f8f6040518863ffffffff1660e060020a028152600401808860ff1660ff1681526020018760ff1660ff16815260200186815260200185600160a060020a0316600160a060020a03168152602001848152602001838152602001828152602001975050505050505050602060405180830381600087803b1580156112e357600080fd5b505af11580156112f7573d6000803e3d6000fd5b505050506040513d602081101561130d57600080fd5b50519350600092508291508190508615156113375761133060008d60ff16612cfa565b925061133b565b8692505b85156113495785915061134e565b600091505b84151561135f575062015180611362565b50835b61100e8484848430612d28565b600154600160a060020a03163314806113925750600254600160a060020a031633145b151561139d57600080fd5b600d805460ff1916911515919091179055565b600154600160a060020a03163314806113d35750600254600160a060020a031633145b15156113de57600080fd5b600160a060020a03821615156113f357600080fd5b600160a060020a03919091166000908152602081905260409020805460ff1916911515919091179055565b600154600160a060020a03163314806114415750600254600160a060020a031633145b151561144c57600080fd5b60035460a060020a900460ff16151561146457600080fd5b600454600160a060020a0316151561147b57600080fd5b611483612dbb565b565b61148d613679565b60035460009081908190819060a060020a900460ff16156114ad57600080fd5b600086815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b81548152602001906001019080831161151c5750505050508152505094508460000151935061155a600654866080015161299e90919063ffffffff16565b421161156557600080fd5b61156f8634612e21565b60a086015160200151909350600010156115cb57600091505b60098210156115b3576115a830338760a0015185600981101515610eab57fe5b600190910190611588565b6115c483600963ffffffff612b4f16565b92506115d6565b6115d6303388612ab8565b600160a060020a0384163014156117015760a085015160200151600010156116d25760048054604080517f7942857000000000000000000000000000000000000000000000000000000000815292830189905251600160a060020a039091169163794285709160248083019260209291908290030181600087803b15801561165d57600080fd5b505af1158015611671573d6000803e3d6000fd5b505050506040513d602081101561168757600080fd5b50516000818152600960209081526040808320600b90925290912054919250849160039006600381106116b657fe5b01556000818152600b6020526040902080546001019055611701565b82600a6000600a600c548115156116e557fe5b068152602081019190915260400160002055600c805460010190555b505050505050565b600554600160a060020a031681565b6000611722613679565b60035460009060a060020a900460ff161561173c57600080fd5b600d5460ff16151561174d57600080fd5b6000841161175a57600080fd5b600092505b83831015611860576008600086868681811061177757fe5b60209081029290920135835250818101929092526040908101600020815160c0810183528154600160a060020a0316815260018201549381019390935260028101548383015260038101546060840152600481015460808401528151610120810192839052909160a084019190600584019060099082845b8154815260200190600101908083116117ef575050505050815250509150611816826129bb565b151561182157600080fd5b50805133600160a060020a0382161461183957600080fd5b61185585858581811061184857fe5b9050602002013582612b72565b60019092019161175f565b5050505050565b60035460a060020a900460ff1681565b600154600090600160a060020a031633148061189d5750600254600160a060020a031633145b15156118a857600080fd5b60035460a060020a900460ff16156118bf57600080fd5b60ff841615156118ce57600080fd5b5060005b60098110156119d957600454600160a060020a0316634f6d04e7856118fe84600163ffffffff61299e16565b86856009811061190a57fe5b60200201513060008089896009811061191f57fe5b60200201516040518863ffffffff1660e060020a028152600401808860ff1660ff1681526020018760ff1660ff16815260200186815260200185600160a060020a0316600160a060020a03168152602001848152602001838152602001828152602001975050505050505050602060405180830381600087803b1580156119a557600080fd5b505af11580156119b9573d6000803e3d6000fd5b505050506040513d60208110156119cf57600080fd5b50506001016118d2565b50505050565b600d54610100900460ff1681565b60035460a060020a900460ff1615611a0457600080fd5b600454600160a060020a03163314611a1b57600080fd5b60048054604080517f5265440c00000000000000000000000000000000000000000000000000000000815292830188905251600160a060020a0390911691635265440c9160248083019260209291908290030181600087803b158015611a8057600080fd5b505af1158015611a94573d6000803e3d6000fd5b505050506040513d6020811015611aaa57600080fd5b505115611ab657600080fd5b611ac0818661315d565b6118608585858585612d28565b600354600160a060020a03163314611ae457600080fd5b6114836131d5565b600354600160a060020a03163314611b0357600080fd5b612710811115611b1257600080fd5b600755565b600154600160a060020a031681565b600154600160a060020a0316331480611b495750600254600160a060020a031633145b1515611b5457600080fd5b600160a060020a0381161515611b6957600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60075481565b600154600160a060020a0316331480611bb45750600254600160a060020a031633145b1515611bbf57600080fd5b60035460a060020a900460ff1615611bd657600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a179055565b60035460a060020a900460ff1615611c1357600080fd5b60048054604080517f081812fc000000000000000000000000000000000000000000000000000000008152928301879052513092600160a060020a039092169163081812fc9160248083019260209291908290030181600087803b158015611c7a57600080fd5b505af1158015611c8e573d6000803e3d6000fd5b505050506040513d6020811015611ca457600080fd5b5051600160a060020a03161480611d50575060048054604080517fe985e9c5000000000000000000000000000000000000000000000000000000008152339381019390935230602484015251600160a060020a039091169163e985e9c59160448083019260209291908290030181600087803b158015611d2357600080fd5b505af1158015611d37573d6000803e3d6000fd5b505050506040513d6020811015611d4d57600080fd5b50515b1515611d5b57600080fd5b60048054604080517f5265440c00000000000000000000000000000000000000000000000000000000815292830187905251600160a060020a0390911691635265440c9160248083019260209291908290030181600087803b158015611dc057600080fd5b505af1158015611dd4573d6000803e3d6000fd5b505050506040513d6020811015611dea57600080fd5b505115611df657600080fd5b611e00338561315d565b6119d98484848433612d28565b600c5481565b600154600090819081908190600160a060020a0316331480611e3f5750600254600160a060020a031633145b1515611e4a57600080fd5b60035460a060020a900460ff1615611e6157600080fd5b60ff89161515611e7057600080fd5b600093505b6009841015611f1f5760045460ff8a1690600160a060020a031663794285708a8760098110611ea057fe5b60200201516040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015611ede57600080fd5b505af1158015611ef2573d6000803e3d6000fd5b505050506040513d6020811015611f0857600080fd5b505114611f1457600080fd5b600190930192611e75565b506000915081905080861515611f5557611f4e6009611f4260018c60ff16612cfa565b9063ffffffff61321216565b9250611f59565b8692505b8515611f6757859150611f6c565b600091505b841515611f7d575062015180611f80565b50835b611f8d8884848430613240565b505050505050505050565b600154600090600160a060020a0316331480611fbe5750600254600160a060020a031633145b1515611fc957600080fd5b600d5460ff161515611fda57600080fd5b8151600010611fe857600080fd5b5060005b81518110156111bd57818181518110151561200357fe5b60209081029091010151151561201857600080fd5b6004548251600160a060020a03909116906323b872dd903090869086908690811061203f57fe5b906020019060200201516040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050600060405180830381600087803b1580156120b457600080fd5b505af11580156120c8573d6000803e3d6000fd5b505060019092019150611fec9050565b600154600090819081908190600160a060020a03163314806121045750600254600160a060020a031633145b151561210f57600080fd5b60035460a060020a900460ff161561212657600080fd5b600454600160a060020a0316151561213d57600080fd5b60ff8c16151561214c57600080fd5b600460009054906101000a9004600160a060020a0316600160a060020a0316634f6d04e78d8d8d3060008f8f6040518863ffffffff1660e060020a028152600401808860ff1660ff1681526020018760ff1660ff16815260200186815260200185600160a060020a0316600160a060020a03168152602001848152602001838152602001828152602001975050505050505050602060405180830381600087803b1580156112e357600080fd5b6009602052600082815260409020816003811061221257fe5b01549150829050565b600154600160a060020a031633148061223e5750600254600160a060020a031633145b151561224957600080fd5b600160a060020a038116151561225e57600080fd5b60058054600160a060020a031916600160a060020a0392909216919091179055565b600d5460ff1681565b600154600160a060020a03163314806122ac5750600254600160a060020a031633145b15156122b757600080fd5b600160a060020a03811615156122cc57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b6001546000908190600160a060020a03163314806123165750600254600160a060020a031633145b151561232157600080fd5b60035460a060020a900460ff161561233857600080fd5b600d5460ff16151561234957600080fd5b6000885111801561235b575060008751115b8015612368575060008651115b8015612375575060008551115b8015612382575060008451115b151561238d57600080fd5b600454600160a060020a031615156123a457600080fd5b8215156123b057600080fd5b5060005b835181101561252d5787818151811015156123cb57fe5b6020908102909101015160ff1615156123e357600080fd5b6004548851600160a060020a0390911690634f6d04e7908a908490811061240657fe5b90602001906020020151898481518110151561241e57fe5b90602001906020020151898581518110151561243657fe5b906020019060200201513060008b8881518110151561245157fe5b906020019060200201518b8981518110151561246957fe5b60209081029091018101516040805160e060020a63ffffffff8c1602815260ff998a1660048201529790981660248801526044870195909552600160a060020a039093166064860152608485019190915260a484015260c4830191909152915160e480830193928290030181600087803b1580156124e657600080fd5b505af11580156124fa573d6000803e3d6000fd5b505050506040513d602081101561251057600080fd5b50519150612525828460006201518030612d28565b6001016123b4565b5050505050505050565b61253f613679565b60035460009060a060020a900460ff161561255957600080fd5b600083815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b8154815260200190600101908083116125c85750505050508152505091506125ef826129bb565b15156125fa57600080fd5b50805133600160a060020a0382161461261257600080fd5b6111bd8382612b72565b602381565b600061262b613679565b600083815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b81548152602001906001019080831161269a5750505050508152505090506126c1816129bb565b15156126cc57600080fd5b6126d5816129c5565b9392505050565b662386f26fc1000081565b600154600160a060020a031633148061270a5750600254600160a060020a031633145b151561271557600080fd5b60035460a060020a900460ff161561272c57600080fd5b600655565b600a6020526000908152604090205481565b60008060008060006127536136bf565b61275b613679565b600088815260086020908152604091829020825160c0810184528154600160a060020a03168152600182015492810192909252600281015482840152600381015460608301526004810154608083015282516101208101938490529192909160a0840191600584019060099082845b8154815260200190600101908083116127ca5750505050508152505090506127f1816129bb565b15156127fc57600080fd5b8051602082015160408301516060840151608085015160a090950151939c929b5090995097509195509350915050565b600454600160a060020a031681565b600154600160a060020a031633148061285e5750600254600160a060020a031633145b151561286957600080fd5b80151561287557600080fd5b60048054604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523093810193909352600160a060020a0385811660248501526044840185905290519116916323b872dd91606480830192600092919082900301818387803b1580156128ea57600080fd5b505af1158015611701573d6000803e3d6000fd5b600354600160a060020a031681565b60065481565b600b6020526000908152604090205481565b7f150b7a020000000000000000000000000000000000000000000000000000000081565b600354600160a060020a0316331461296057600080fd5b600160a060020a038116151561297557600080fd5b60038054600160a060020a031916600160a060020a0392909216919091179055565b6201518081565b6000828201838110156129b057600080fd5b8091505b5092915050565b6080015160001090565b600654608082015160009182916129e19163ffffffff61299e16565b421115612a1457612a11612a04600654856080015161299e90919063ffffffff16565b429063ffffffff612aa116565b90505b6126d58360200151846040015185606001518461328b565b60008181526008602052604081208054600160a060020a031916815560018101829055600281018290556003810182905560048101829055906111bd60058301826136df565b6000612a9b612710612a8f6007548561321290919063ffffffff16565b9063ffffffff612b4f16565b92915050565b60008083831115612ab157600080fd5b5050900390565b60048054604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0387811694820194909452858416602482015260448101859052905192909116916323b872dd9160648082019260009290919082900301818387803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b50505050505050565b600080808311612b5e57600080fd5b8284811515612b6957fe5b04949350505050565b612b7a613679565b6000838152600860209081526040808320815160c0810183528154600160a060020a0316815260018201549381019390935260028101548383015260038101546060840152600481015460808401528151610120810192839052909160a084019190600584019060099082845b815481526020019060010190808311612be7575050509190925250505060a08101516020015190925015612c9d575060005b6009811015612c555760a0820151612c36908260098110610ca057fe5b612c4d30848460a0015184600981101515610eab57fe5b600101612c19565b60408051858152600160a060020a038516602082015281517fd9e530acb8429c8e5337d9d3230e4cc7d742e32c2fc8d76608c19f2e1701ed04929181900390910190a16119d9565b612ca684612a2c565b612cb1308486612ab8565b60408051858152600160a060020a038516602082015281517fd9e530acb8429c8e5337d9d3230e4cc7d742e32c2fc8d76608c19f2e1701ed04929181900390910190a150505050565b600080612d0784846132c8565b9050662386f26fc100008110156129b05750662386f26fc100009392505050565b612d30613679565b60c06040519081016040528083600160a060020a0316815260200186815260200185815260200184815260200142815260200161012060405190810160405280898152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250815250905061170186826133a5565b600154600160a060020a0316331480612dde5750600254600160a060020a031633145b1515612de957600080fd5b60035460a060020a900460ff161515612e0157600080fd5b6003805474ff000000000000000000000000000000000000000019169055565b600080612e2c6136bf565b60008581526008602052604080822081516101208101928390529094508291829182918291829160058a019060099082845b815481526020019060010190808311612e5e5750506040805160c0810182528d54600160a060020a0316815260018e0154602082015260028e01548183015260038e0154606082015260048e015460808201528151610120810192839052959c50612efc959094508d935060a08501925090600584019060099082845b815481526020019060010190808311612edb575050505050815250506129bb565b1515612f0757600080fd5b6040805160c0810182528954600160a060020a0316815260018a0154602082015260028a01548183015260038a0154606082015260048a015460808201528151610120810192839052612f87928b9160a0840191600584019060099082845b815481526020019060010190808311612f66575050505050815250506129c5565b9550858a1015612f9657600080fd5b8754600160a060020a03169450600087600160200201511115612fe057600093505b6009841015612fdb57612fd0878560098110610ca057fe5b600190930192612fb8565b612fe9565b612fe98b612a2c565b600086111561304857612ffb86612a72565b925061300d868463ffffffff612aa116565b604051909250600160a060020a0386169083156108fc029084906000818181858888f19350505050158015613046573d6000803e3d6000fd5b505b6130588a8763ffffffff612aa116565b604051909150339082156108fc029083906000818181858888f19350505050158015613088573d6000803e3d6000fd5b5060208701516000101561310e577f3e26b609bdb78965c3cc474d081fd9416c228fc7f1600c1b6511c736798e4b9f8787336040518084600960200280838360005b838110156130e25781810151838201526020016130ca565b50505050919091019384525050600160a060020a031660208201526040805191829003019150a161314e565b604080518c815260208101889052338183015290517fe7f91fae5e362a076a229ddbcc13864728b3f5dcceefc79cf8940e64997db9859181900360600190a15b50939998505050505050505050565b60048054604080517f42842e0e000000000000000000000000000000000000000000000000000000008152600160a060020a038681169482019490945230602482015260448101859052905192909116916342842e0e9160648082019260009290919082900301818387803b1580156128ea57600080fd5b600354604051600160a060020a0390911690303180156108fc02916000818181858888f1935050505015801561320f573d6000803e3d6000fd5b50565b60008083151561322557600091506129b4565b5082820282848281151561323557fe5b04146129b057600080fd5b613248613679565b60c06040519081016040528083600160a060020a03168152602001868152602001858152602001848152602001428152602001878152509050611701868261348a565b600080808085851061329f578693506132bd565b8787039250858584028115156132b157fe5b05915081880190508093505b505050949350505050565b600080808085151561332c57600091505b600a82101561330f576000828152600a602052604090205461330290849063ffffffff61299e16565b92506001909101906132d9565b6133256064612a8f85602363ffffffff61321216565b925061339b565b5060005b600381101561336f57600085815260096020526040902061336590826003811061335657fe5b0154849063ffffffff61299e16565b9250600101613330565b613385601e612a8f85600c63ffffffff61321216565b925061339883600963ffffffff61321216565b92505b5090949350505050565b6060810151603c11156133b757600080fd5b60008281526008602090815260409182902083518154600160a060020a031916600160a060020a03909116178155908301516001820155908201516002820155606082015160038201556080820151600482015560a082015182919061342390600583019060096136ee565b50505060208082015160408084015160608086015160808088015185518a8152978801969096528685019390935290850152830191909152517f6688114a9b77bcf97076216092c6794f7c541749631612664980599eaff1f5329181900360a00190a15050565b6000603c8260600151101515156134a057600080fd5b5060005b60098110156135e8578281600981106134b957fe5b602002015115156134c957600080fd5b600454600160a060020a0316634f558e798483600981106134e657fe5b60200201516040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561352457600080fd5b505af1158015613538573d6000803e3d6000fd5b505050506040513d602081101561354e57600080fd5b5051151561355b57600080fd5b816008600085846009811061356c57fe5b60209081029190910151825281810192909252604090810160002083518154600160a060020a031916600160a060020a039091161781559183015160018301558201516002820155606082015160038201556080820151600482015560a08201516135dd90600583019060096136ee565b5050506001016134a4565b7f67296fd73b6bfd01e6b0ad1dc90e93fd5018a084590dc8aa4634e01290a45c348383602001518460400151856060015186608001516040518086600960200280838360005b8381101561364657818101518382015260200161362e565b505050509050018581526020018481526020018381526020018281526020019550505050505060405180910390a1505050565b6101c0604051908101604052806000600160a060020a03168152602001600081526020016000815260200160008152602001600081526020016136ba6136bf565b905290565b610120604051908101604052806009906020820280388339509192915050565b5061320f90600981019061372c565b826009810192821561371c579160200282015b8281111561371c578251825591602001919060010190613701565b5061372892915061372c565b5090565b61374691905b808211156137285760008155600101613732565b905600a165627a7a723058203408577a17c8dea00c33371e52dbd014003d4cb6986631dcb591ca03e0c953080029
Swarm Source
bzzr://3408577a17c8dea00c33371e52dbd014003d4cb6986631dcb591ca03e0c95308
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,338.33 | 0.0213 | $71.11 |
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.