Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 20 from a total of 20 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| New Auction | 5732958 | 2748 days ago | IN | 0 ETH | 0.0001163 | ||||
| New Auction | 5730082 | 2749 days ago | IN | 0 ETH | 0.00023306 | ||||
| Do Pause | 5690623 | 2756 days ago | IN | 0 ETH | 0.00032913 | ||||
| Change Price | 5679304 | 2758 days ago | IN | 0 ETH | 0.00013685 | ||||
| New Auction | 5671460 | 2759 days ago | IN | 0 ETH | 0.0007012 | ||||
| New Auction | 5651576 | 2763 days ago | IN | 0 ETH | 0.0010518 | ||||
| New Auction | 5650755 | 2763 days ago | IN | 0 ETH | 0.00081806 | ||||
| Change Price | 5647939 | 2763 days ago | IN | 0 ETH | 0.00017429 | ||||
| Change Price | 5639098 | 2765 days ago | IN | 0 ETH | 0.00034858 | ||||
| New Auction | 5639076 | 2765 days ago | IN | 0 ETH | 0.00115577 | ||||
| New Auction | 5638582 | 2765 days ago | IN | 0 ETH | 0.00127134 | ||||
| Change Price | 5636200 | 2765 days ago | IN | 0 ETH | 0.00041906 | ||||
| Change Price | 5636200 | 2765 days ago | IN | 0 ETH | 0.00041906 | ||||
| New Auction | 5630119 | 2766 days ago | IN | 0 ETH | 0.00127205 | ||||
| New Auction | 5629591 | 2767 days ago | IN | 0 ETH | 0.00115641 | ||||
| New Auction | 5629587 | 2767 days ago | IN | 0 ETH | 0.00115641 | ||||
| Set Service | 5628375 | 2767 days ago | IN | 0 ETH | 0.00034986 | ||||
| Set Finance | 5628374 | 2767 days ago | IN | 0 ETH | 0.0003475 | ||||
| Set Eth Auction | 5628372 | 2767 days ago | IN | 0 ETH | 0.00052575 | ||||
| Set Data Equip | 5628369 | 2767 days ago | IN | 0 ETH | 0.00052918 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ActionAuctionPlat
Compiler Version
v0.4.21+commit.dfe3193c
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-05-17 */ /* ==================================================================== */ /* Copyright (c) 2018 The ether.online Project. All rights reserved. /* /* https://ether.online The first RPG game of blockchain /* /* authors [email protected] /* [email protected] /* ==================================================================== */ pragma solidity ^0.4.20; /// @title ERC-165 Standard Interface Detection /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md interface ERC165 { function supportsInterface(bytes4 interfaceID) external view returns (bool); } /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md contract ERC721 is ERC165 { event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; function transferFrom(address _from, address _to, uint256 _tokenId) external; function approve(address _approved, uint256 _tokenId) external; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool); } /// @title ERC-721 Non-Fungible Token Standard interface ERC721TokenReceiver { function onERC721Received(address _from, uint256 _tokenId, bytes data) external returns(bytes4); } contract AccessAdmin { bool public isPaused = false; address public addrAdmin; event AdminTransferred(address indexed preAdmin, address indexed newAdmin); function AccessAdmin() public { addrAdmin = msg.sender; } modifier onlyAdmin() { require(msg.sender == addrAdmin); _; } modifier whenNotPaused() { require(!isPaused); _; } modifier whenPaused { require(isPaused); _; } function setAdmin(address _newAdmin) external onlyAdmin { require(_newAdmin != address(0)); AdminTransferred(addrAdmin, _newAdmin); addrAdmin = _newAdmin; } function doPause() external onlyAdmin whenNotPaused { isPaused = true; } function doUnpause() external onlyAdmin whenPaused { isPaused = false; } } contract AccessService is AccessAdmin { address public addrService; address public addrFinance; modifier onlyService() { require(msg.sender == addrService); _; } modifier onlyFinance() { require(msg.sender == addrFinance); _; } function setService(address _newService) external { require(msg.sender == addrService || msg.sender == addrAdmin); require(_newService != address(0)); addrService = _newService; } function setFinance(address _newFinance) external { require(msg.sender == addrFinance || msg.sender == addrAdmin); require(_newFinance != address(0)); addrFinance = _newFinance; } function withdraw(address _target, uint256 _amount) external { require(msg.sender == addrFinance || msg.sender == addrAdmin); require(_amount > 0); address receiver = _target == address(0) ? addrFinance : _target; uint256 balance = this.balance; if (_amount < balance) { receiver.transfer(_amount); } else { receiver.transfer(this.balance); } } } interface IDataMining { function getRecommender(address _target) external view returns(address); function subFreeMineral(address _target) external returns(bool); } interface IDataEquip { function isEquiped(address _target, uint256 _tokenId) external view returns(bool); function isEquipedAny2(address _target, uint256 _tokenId1, uint256 _tokenId2) external view returns(bool); function isEquipedAny3(address _target, uint256 _tokenId1, uint256 _tokenId2, uint256 _tokenId3) external view returns(bool); } interface IDataAuction { function isOnSale(uint256 _tokenId) external view returns(bool); function isOnSaleAny2(uint256 _tokenId1, uint256 _tokenId2) external view returns(bool); function isOnSaleAny3(uint256 _tokenId1, uint256 _tokenId2, uint256 _tokenId3) external view returns(bool); } interface IBitGuildToken { function transfer(address _to, uint256 _value) external; function transferFrom(address _from, address _to, uint256 _value) external returns (bool); function approve(address _spender, uint256 _value) external; function approveAndCall(address _spender, uint256 _value, bytes _extraData) external returns (bool); function balanceOf(address _from) external view returns(uint256); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract WarToken is ERC721, AccessAdmin { /// @dev The equipment info struct Fashion { uint16 protoId; // 0 Equipment ID uint16 quality; // 1 Rarity: 1 Coarse/2 Good/3 Rare/4 Epic/5 Legendary uint16 pos; // 2 Slots: 1 Weapon/2 Hat/3 Cloth/4 Pant/5 Shoes/9 Pets uint16 health; // 3 Health uint16 atkMin; // 4 Min attack uint16 atkMax; // 5 Max attack uint16 defence; // 6 Defennse uint16 crit; // 7 Critical rate uint16 isPercent; // 8 Attr value type uint16 attrExt1; // 9 future stat 1 uint16 attrExt2; // 10 future stat 2 uint16 attrExt3; // 11 future stat 3 } /// @dev All equipments tokenArray (not exceeding 2^32-1) Fashion[] public fashionArray; /// @dev Amount of tokens destroyed uint256 destroyFashionCount; /// @dev Equipment token ID vs owner address mapping (uint256 => address) fashionIdToOwner; /// @dev Equipments owner by the owner (array) mapping (address => uint256[]) ownerToFashionArray; /// @dev Equipment token ID search in owner array mapping (uint256 => uint256) fashionIdToOwnerIndex; /// @dev The authorized address for each WAR mapping (uint256 => address) fashionIdToApprovals; /// @dev The authorized operators for each address mapping (address => mapping (address => bool)) operatorToApprovals; /// @dev Trust contract mapping (address => bool) actionContracts; function setActionContract(address _actionAddr, bool _useful) external onlyAdmin { actionContracts[_actionAddr] = _useful; } function getActionContract(address _actionAddr) external view onlyAdmin returns(bool) { return actionContracts[_actionAddr]; } /// @dev This emits when the approved address for an WAR is changed or reaffirmed. event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @dev This emits when the equipment ownership changed event Transfer(address indexed from, address indexed to, uint256 tokenId); /// @dev This emits when the equipment created event CreateFashion(address indexed owner, uint256 tokenId, uint16 protoId, uint16 quality, uint16 pos, uint16 createType); /// @dev This emits when the equipment's attributes changed event ChangeFashion(address indexed owner, uint256 tokenId, uint16 changeType); /// @dev This emits when the equipment destroyed event DeleteFashion(address indexed owner, uint256 tokenId, uint16 deleteType); function WarToken() public { addrAdmin = msg.sender; fashionArray.length += 1; } // modifier /// @dev Check if token ID is valid modifier isValidToken(uint256 _tokenId) { require(_tokenId >= 1 && _tokenId <= fashionArray.length); require(fashionIdToOwner[_tokenId] != address(0)); _; } modifier canTransfer(uint256 _tokenId) { address owner = fashionIdToOwner[_tokenId]; require(msg.sender == owner || msg.sender == fashionIdToApprovals[_tokenId] || operatorToApprovals[owner][msg.sender]); _; } // ERC721 function supportsInterface(bytes4 _interfaceId) external view returns(bool) { // ERC165 || ERC721 || ERC165^ERC721 return (_interfaceId == 0x01ffc9a7 || _interfaceId == 0x80ac58cd || _interfaceId == 0x8153916a) && (_interfaceId != 0xffffffff); } function name() public pure returns(string) { return "WAR Token"; } function symbol() public pure returns(string) { return "WAR"; } /// @dev Search for token quantity address /// @param _owner Address that needs to be searched /// @return Returns token quantity function balanceOf(address _owner) external view returns(uint256) { require(_owner != address(0)); return ownerToFashionArray[_owner].length; } /// @dev Find the owner of an WAR /// @param _tokenId The tokenId of WAR /// @return Give The address of the owner of this WAR function ownerOf(uint256 _tokenId) external view /*isValidToken(_tokenId)*/ returns (address owner) { return fashionIdToOwner[_tokenId]; } /// @dev Transfers the ownership of an WAR from one address to another address /// @param _from The current owner of the WAR /// @param _to The new owner /// @param _tokenId The WAR to transfer /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external whenNotPaused { _safeTransferFrom(_from, _to, _tokenId, data); } /// @dev Transfers the ownership of an WAR from one address to another address /// @param _from The current owner of the WAR /// @param _to The new owner /// @param _tokenId The WAR to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external whenNotPaused { _safeTransferFrom(_from, _to, _tokenId, ""); } /// @dev Transfer ownership of an WAR, '_to' must be a vaild address, or the WAR will lost /// @param _from The current owner of the WAR /// @param _to The new owner /// @param _tokenId The WAR to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external whenNotPaused isValidToken(_tokenId) canTransfer(_tokenId) { address owner = fashionIdToOwner[_tokenId]; require(owner != address(0)); require(_to != address(0)); require(owner == _from); _transfer(_from, _to, _tokenId); } /// @dev Set or reaffirm the approved address for an WAR /// @param _approved The new approved WAR controller /// @param _tokenId The WAR to approve function approve(address _approved, uint256 _tokenId) external whenNotPaused { address owner = fashionIdToOwner[_tokenId]; require(owner != address(0)); require(msg.sender == owner || operatorToApprovals[owner][msg.sender]); fashionIdToApprovals[_tokenId] = _approved; Approval(owner, _approved, _tokenId); } /// @dev Enable or disable approval for a third party ("operator") to manage all your asset. /// @param _operator Address to add to the set of authorized operators. /// @param _approved True if the operators is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external whenNotPaused { operatorToApprovals[msg.sender][_operator] = _approved; ApprovalForAll(msg.sender, _operator, _approved); } /// @dev Get the approved address for a single WAR /// @param _tokenId The WAR to find the approved address for /// @return The approved address for this WAR, or the zero address if there is none function getApproved(uint256 _tokenId) external view isValidToken(_tokenId) returns (address) { return fashionIdToApprovals[_tokenId]; } /// @dev Query if an address is an authorized operator for another address /// @param _owner The address that owns the WARs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool) { return operatorToApprovals[_owner][_operator]; } /// @dev Count WARs tracked by this contract /// @return A count of valid WARs tracked by this contract, where each one of /// them has an assigned and queryable owner not equal to the zero address function totalSupply() external view returns (uint256) { return fashionArray.length - destroyFashionCount - 1; } /// @dev Do the real transfer with out any condition checking /// @param _from The old owner of this WAR(If created: 0x0) /// @param _to The new owner of this WAR /// @param _tokenId The tokenId of the WAR function _transfer(address _from, address _to, uint256 _tokenId) internal { if (_from != address(0)) { uint256 indexFrom = fashionIdToOwnerIndex[_tokenId]; uint256[] storage fsArray = ownerToFashionArray[_from]; require(fsArray[indexFrom] == _tokenId); // If the WAR is not the element of array, change it to with the last if (indexFrom != fsArray.length - 1) { uint256 lastTokenId = fsArray[fsArray.length - 1]; fsArray[indexFrom] = lastTokenId; fashionIdToOwnerIndex[lastTokenId] = indexFrom; } fsArray.length -= 1; if (fashionIdToApprovals[_tokenId] != address(0)) { delete fashionIdToApprovals[_tokenId]; } } // Give the WAR to '_to' fashionIdToOwner[_tokenId] = _to; ownerToFashionArray[_to].push(_tokenId); fashionIdToOwnerIndex[_tokenId] = ownerToFashionArray[_to].length - 1; Transfer(_from != address(0) ? _from : this, _to, _tokenId); } /// @dev Actually perform the safeTransferFrom function _safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) internal isValidToken(_tokenId) canTransfer(_tokenId) { address owner = fashionIdToOwner[_tokenId]; require(owner != address(0)); require(_to != address(0)); require(owner == _from); _transfer(_from, _to, _tokenId); // Do the callback after everything is done to avoid reentrancy attack uint256 codeSize; assembly { codeSize := extcodesize(_to) } if (codeSize == 0) { return; } bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(_from, _tokenId, data); // bytes4(keccak256("onERC721Received(address,uint256,bytes)")) = 0xf0b9e5ba; require(retval == 0xf0b9e5ba); } //---------------------------------------------------------------------------------------------------------- /// @dev Equipment creation /// @param _owner Owner of the equipment created /// @param _attrs Attributes of the equipment created /// @return Token ID of the equipment created function createFashion(address _owner, uint16[9] _attrs, uint16 _createType) external whenNotPaused returns(uint256) { require(actionContracts[msg.sender]); require(_owner != address(0)); uint256 newFashionId = fashionArray.length; require(newFashionId < 4294967296); fashionArray.length += 1; Fashion storage fs = fashionArray[newFashionId]; fs.protoId = _attrs[0]; fs.quality = _attrs[1]; fs.pos = _attrs[2]; if (_attrs[3] != 0) { fs.health = _attrs[3]; } if (_attrs[4] != 0) { fs.atkMin = _attrs[4]; fs.atkMax = _attrs[5]; } if (_attrs[6] != 0) { fs.defence = _attrs[6]; } if (_attrs[7] != 0) { fs.crit = _attrs[7]; } if (_attrs[8] != 0) { fs.isPercent = _attrs[8]; } _transfer(0, _owner, newFashionId); CreateFashion(_owner, newFashionId, _attrs[0], _attrs[1], _attrs[2], _createType); return newFashionId; } /// @dev One specific attribute of the equipment modified function _changeAttrByIndex(Fashion storage _fs, uint16 _index, uint16 _val) internal { if (_index == 3) { _fs.health = _val; } else if(_index == 4) { _fs.atkMin = _val; } else if(_index == 5) { _fs.atkMax = _val; } else if(_index == 6) { _fs.defence = _val; } else if(_index == 7) { _fs.crit = _val; } else if(_index == 9) { _fs.attrExt1 = _val; } else if(_index == 10) { _fs.attrExt2 = _val; } else if(_index == 11) { _fs.attrExt3 = _val; } } /// @dev Equiment attributes modified (max 4 stats modified) /// @param _tokenId Equipment Token ID /// @param _idxArray Stats order that must be modified /// @param _params Stat value that must be modified /// @param _changeType Modification type such as enhance, socket, etc. function changeFashionAttr(uint256 _tokenId, uint16[4] _idxArray, uint16[4] _params, uint16 _changeType) external whenNotPaused isValidToken(_tokenId) { require(actionContracts[msg.sender]); Fashion storage fs = fashionArray[_tokenId]; if (_idxArray[0] > 0) { _changeAttrByIndex(fs, _idxArray[0], _params[0]); } if (_idxArray[1] > 0) { _changeAttrByIndex(fs, _idxArray[1], _params[1]); } if (_idxArray[2] > 0) { _changeAttrByIndex(fs, _idxArray[2], _params[2]); } if (_idxArray[3] > 0) { _changeAttrByIndex(fs, _idxArray[3], _params[3]); } ChangeFashion(fashionIdToOwner[_tokenId], _tokenId, _changeType); } /// @dev Equipment destruction /// @param _tokenId Equipment Token ID /// @param _deleteType Destruction type, such as craft function destroyFashion(uint256 _tokenId, uint16 _deleteType) external whenNotPaused isValidToken(_tokenId) { require(actionContracts[msg.sender]); address _from = fashionIdToOwner[_tokenId]; uint256 indexFrom = fashionIdToOwnerIndex[_tokenId]; uint256[] storage fsArray = ownerToFashionArray[_from]; require(fsArray[indexFrom] == _tokenId); if (indexFrom != fsArray.length - 1) { uint256 lastTokenId = fsArray[fsArray.length - 1]; fsArray[indexFrom] = lastTokenId; fashionIdToOwnerIndex[lastTokenId] = indexFrom; } fsArray.length -= 1; fashionIdToOwner[_tokenId] = address(0); delete fashionIdToOwnerIndex[_tokenId]; destroyFashionCount += 1; Transfer(_from, 0, _tokenId); DeleteFashion(_from, _tokenId, _deleteType); } /// @dev Safe transfer by trust contracts function safeTransferByContract(uint256 _tokenId, address _to) external whenNotPaused { require(actionContracts[msg.sender]); require(_tokenId >= 1 && _tokenId <= fashionArray.length); address owner = fashionIdToOwner[_tokenId]; require(owner != address(0)); require(_to != address(0)); require(owner != _to); _transfer(owner, _to, _tokenId); } //---------------------------------------------------------------------------------------------------------- /// @dev Get fashion attrs by tokenId function getFashion(uint256 _tokenId) external view isValidToken(_tokenId) returns (uint16[12] datas) { Fashion storage fs = fashionArray[_tokenId]; datas[0] = fs.protoId; datas[1] = fs.quality; datas[2] = fs.pos; datas[3] = fs.health; datas[4] = fs.atkMin; datas[5] = fs.atkMax; datas[6] = fs.defence; datas[7] = fs.crit; datas[8] = fs.isPercent; datas[9] = fs.attrExt1; datas[10] = fs.attrExt2; datas[11] = fs.attrExt3; } /// @dev Get tokenIds and flags by owner function getOwnFashions(address _owner) external view returns(uint256[] tokens, uint32[] flags) { require(_owner != address(0)); uint256[] storage fsArray = ownerToFashionArray[_owner]; uint256 length = fsArray.length; tokens = new uint256[](length); flags = new uint32[](length); for (uint256 i = 0; i < length; ++i) { tokens[i] = fsArray[i]; Fashion storage fs = fashionArray[fsArray[i]]; flags[i] = uint32(uint32(fs.protoId) * 100 + uint32(fs.quality) * 10 + fs.pos); } } /// @dev WAR token info returned based on Token ID transfered (64 at most) function getFashionsAttrs(uint256[] _tokens) external view returns(uint16[] attrs) { uint256 length = _tokens.length; require(length <= 64); attrs = new uint16[](length * 11); uint256 tokenId; uint256 index; for (uint256 i = 0; i < length; ++i) { tokenId = _tokens[i]; if (fashionIdToOwner[tokenId] != address(0)) { index = i * 11; Fashion storage fs = fashionArray[tokenId]; attrs[index] = fs.health; attrs[index + 1] = fs.atkMin; attrs[index + 2] = fs.atkMax; attrs[index + 3] = fs.defence; attrs[index + 4] = fs.crit; attrs[index + 5] = fs.isPercent; attrs[index + 6] = fs.attrExt1; attrs[index + 7] = fs.attrExt2; attrs[index + 8] = fs.attrExt3; } } } } contract ActionAuctionPlat is AccessService { using SafeMath for uint256; event AuctionPlatCreate(uint256 indexed index, address indexed seller, uint256 tokenId); event AuctionPlatSold(uint256 indexed index, address indexed seller, address indexed buyer, uint256 tokenId, uint256 price); event AuctionPlatCancel(uint256 indexed index, address indexed seller, uint256 tokenId); event AuctionPlatPriceChange(uint256 indexed index, address indexed seller, uint256 tokenId, uint64 platVal); struct Auction { address seller; // Current owner uint64 tokenId; // WarToken Id uint64 price; // Sale price(PLAT) uint64 tmStart; // Sale start time(unixtime) uint64 tmSell; // Sale out time(unixtime) } /// @dev Auction Array Auction[] public auctionArray; /// @dev Latest auction index by tokenId mapping(uint256 => uint256) public latestAction; /// @dev WarToken(NFT) contract address WarToken public tokenContract; /// @dev DataEquip contract address IDataEquip public equipContract; /// @dev BitGuildToken address IBitGuildToken public bitGuildContract; /// @dev Plat Auction address IDataAuction public ethAuction; /// @dev Binary search start index uint64 public searchStartIndex; /// @dev Auction order lifetime(sec) uint64 public auctionDuration = 172800; /// @dev Trade sum(Gwei) uint64 public auctionSumPlat; function ActionAuctionPlat(address _nftAddr, address _platAddr) public { addrAdmin = msg.sender; addrService = msg.sender; addrFinance = msg.sender; tokenContract = WarToken(_nftAddr); Auction memory order = Auction(0, 0, 0, 1, 1); auctionArray.push(order); bitGuildContract = IBitGuildToken(_platAddr); } function() external {} function setDataEquip(address _addr) external onlyAdmin { require(_addr != address(0)); equipContract = IDataEquip(_addr); } function setEthAuction(address _addr) external onlyAdmin { require(_addr != address(0)); ethAuction = IDataAuction(_addr); } function setDuration(uint64 _duration) external onlyAdmin { require(_duration >= 300 && _duration <= 8640000); auctionDuration = _duration; } function newAuction(uint256 _tokenId, uint64 _pricePlat) external whenNotPaused { require(tokenContract.ownerOf(_tokenId) == msg.sender); require(!equipContract.isEquiped(msg.sender, _tokenId)); require(_pricePlat >= 1 && _pricePlat <= 999999); uint16[12] memory fashion = tokenContract.getFashion(_tokenId); require(fashion[1] > 1); uint64 tmNow = uint64(block.timestamp); uint256 lastIndex = latestAction[_tokenId]; if (lastIndex > 0) { Auction memory oldOrder = auctionArray[lastIndex]; require((oldOrder.tmStart + auctionDuration) <= tmNow || oldOrder.tmSell > 0); } if (address(ethAuction) != address(0)) { require(!ethAuction.isOnSale(_tokenId)); } uint256 newAuctionIndex = auctionArray.length; auctionArray.length += 1; Auction storage order = auctionArray[newAuctionIndex]; order.seller = msg.sender; order.tokenId = uint64(_tokenId); order.price = _pricePlat; uint64 lastActionStart = auctionArray[newAuctionIndex - 1].tmStart; if (tmNow >= lastActionStart) { order.tmStart = tmNow; } else { order.tmStart = lastActionStart; } latestAction[_tokenId] = newAuctionIndex; AuctionPlatCreate(newAuctionIndex, msg.sender, _tokenId); } function cancelAuction(uint256 _tokenId) external whenNotPaused { require(tokenContract.ownerOf(_tokenId) == msg.sender); uint256 lastIndex = latestAction[_tokenId]; require(lastIndex > 0); Auction storage order = auctionArray[lastIndex]; require(order.seller == msg.sender); require(order.tmSell == 0); order.tmSell = 1; AuctionPlatCancel(lastIndex, msg.sender, _tokenId); } function changePrice(uint256 _tokenId, uint64 _pricePlat) external whenNotPaused { require(tokenContract.ownerOf(_tokenId) == msg.sender); uint256 lastIndex = latestAction[_tokenId]; require(lastIndex > 0); Auction storage order = auctionArray[lastIndex]; require(order.seller == msg.sender); require(order.tmSell == 0); uint64 tmNow = uint64(block.timestamp); require(order.tmStart + auctionDuration > tmNow); require(_pricePlat >= 1 && _pricePlat <= 999999); order.price = _pricePlat; AuctionPlatPriceChange(lastIndex, msg.sender, _tokenId, _pricePlat); } function _bid(address _sender, uint256 _platVal, uint256 _tokenId) internal { uint256 lastIndex = latestAction[_tokenId]; require(lastIndex > 0); Auction storage order = auctionArray[lastIndex]; uint64 tmNow = uint64(block.timestamp); require(order.tmStart + auctionDuration > tmNow); require(order.tmSell == 0); address realOwner = tokenContract.ownerOf(_tokenId); require(realOwner == order.seller); require(realOwner != _sender); uint256 price = (uint256(order.price)).mul(1000000000000000000); require(price == _platVal); require(bitGuildContract.transferFrom(_sender, address(this), _platVal)); order.tmSell = tmNow; auctionSumPlat += order.price; uint256 sellerProceeds = price.mul(9).div(10); tokenContract.safeTransferByContract(_tokenId, _sender); bitGuildContract.transfer(realOwner, sellerProceeds); AuctionPlatSold(lastIndex, realOwner, _sender, _tokenId, price); } function _getTokenIdFromBytes(bytes _extraData) internal pure returns(uint256) { uint256 val = 0; uint256 index = 0; uint256 length = _extraData.length; while (index < length) { val += (uint256(_extraData[index]) * (256 ** (length - index - 1))); index += 1; } return val; } function receiveApproval(address _sender, uint256 _value, address _tokenContract, bytes _extraData) external whenNotPaused { require(msg.sender == address(bitGuildContract)); require(_extraData.length <= 8); uint256 tokenId = _getTokenIdFromBytes(_extraData); _bid(_sender, _value, tokenId); } function _getStartIndex(uint64 startIndex) internal view returns(uint64) { // use low_bound uint64 tmFind = uint64(block.timestamp) - auctionDuration; uint64 first = startIndex; uint64 middle; uint64 half; uint64 len = uint64(auctionArray.length - startIndex); while(len > 0) { half = len / 2; middle = first + half; if (auctionArray[middle].tmStart < tmFind) { first = middle + 1; len = len - half - 1; } else { len = half; } } return first; } function resetSearchStartIndex () internal { searchStartIndex = _getStartIndex(searchStartIndex); } function _getAuctionIdArray(uint64 _startIndex, uint64 _count) internal view returns(uint64[]) { uint64 tmFind = uint64(block.timestamp) - auctionDuration; uint64 start = _startIndex > 0 ? _startIndex : _getStartIndex(0); uint256 length = auctionArray.length; uint256 maxLen = _count > 0 ? _count : length - start; if (maxLen == 0) { maxLen = 1; } uint64[] memory auctionIdArray = new uint64[](maxLen); uint64 counter = 0; for (uint64 i = start; i < length; ++i) { if (auctionArray[i].tmStart > tmFind && auctionArray[i].tmSell == 0) { auctionIdArray[counter++] = i; if (_count > 0 && counter == _count) { break; } } } if (counter == auctionIdArray.length) { return auctionIdArray; } else { uint64[] memory realIdArray = new uint64[](counter); for (uint256 j = 0; j < counter; ++j) { realIdArray[j] = auctionIdArray[j]; } return realIdArray; } } function getAuctionIdArray(uint64 _startIndex, uint64 _count) external view returns(uint64[]) { return _getAuctionIdArray(_startIndex, _count); } function getAuctionArray(uint64 _startIndex, uint64 _count) external view returns( uint64[] auctionIdArray, address[] sellerArray, uint64[] tokenIdArray, uint64[] priceArray, uint64[] tmStartArray) { auctionIdArray = _getAuctionIdArray(_startIndex, _count); uint256 length = auctionIdArray.length; sellerArray = new address[](length); tokenIdArray = new uint64[](length); priceArray = new uint64[](length); tmStartArray = new uint64[](length); for (uint256 i = 0; i < length; ++i) { Auction storage tmpAuction = auctionArray[auctionIdArray[i]]; sellerArray[i] = tmpAuction.seller; tokenIdArray[i] = tmpAuction.tokenId; priceArray[i] = tmpAuction.price; tmStartArray[i] = tmpAuction.tmStart; } } function getAuction(uint64 auctionId) external view returns( address seller, uint64 tokenId, uint64 price, uint64 tmStart, uint64 tmSell) { require (auctionId < auctionArray.length); Auction memory auction = auctionArray[auctionId]; seller = auction.seller; tokenId = auction.tokenId; price = auction.price; tmStart = auction.tmStart; tmSell = auction.tmSell; } function getAuctionTotal() external view returns(uint256) { return auctionArray.length; } function getStartIndex(uint64 _startIndex) external view returns(uint256) { require (_startIndex < auctionArray.length); return _getStartIndex(_startIndex); } function isOnSale(uint256 _tokenId) external view returns(bool) { uint256 lastIndex = latestAction[_tokenId]; if (lastIndex > 0) { Auction storage order = auctionArray[lastIndex]; uint64 tmNow = uint64(block.timestamp); if ((order.tmStart + auctionDuration > tmNow) && order.tmSell == 0) { return true; } } return false; } function isOnSaleAny2(uint256 _tokenId1, uint256 _tokenId2) external view returns(bool) { uint256 lastIndex = latestAction[_tokenId1]; uint64 tmNow = uint64(block.timestamp); if (lastIndex > 0) { Auction storage order1 = auctionArray[lastIndex]; if ((order1.tmStart + auctionDuration > tmNow) && order1.tmSell == 0) { return true; } } lastIndex = latestAction[_tokenId2]; if (lastIndex > 0) { Auction storage order2 = auctionArray[lastIndex]; if ((order2.tmStart + auctionDuration > tmNow) && order2.tmSell == 0) { return true; } } return false; } function isOnSaleAny3(uint256 _tokenId1, uint256 _tokenId2, uint256 _tokenId3) external view returns(bool) { uint256 lastIndex = latestAction[_tokenId1]; uint64 tmNow = uint64(block.timestamp); if (lastIndex > 0) { Auction storage order1 = auctionArray[lastIndex]; if ((order1.tmStart + auctionDuration > tmNow) && order1.tmSell == 0) { return true; } } lastIndex = latestAction[_tokenId2]; if (lastIndex > 0) { Auction storage order2 = auctionArray[lastIndex]; if ((order2.tmStart + auctionDuration > tmNow) && order2.tmSell == 0) { return true; } } lastIndex = latestAction[_tokenId3]; if (lastIndex > 0) { Auction storage order3 = auctionArray[lastIndex]; if ((order3.tmStart + auctionDuration > tmNow) && order3.tmSell == 0) { return true; } } return false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"auctionDuration","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_pricePlat","type":"uint64"}],"name":"changePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_pricePlat","type":"uint64"}],"name":"newAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"searchStartIndex","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"doUnpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_duration","type":"uint64"}],"name":"setDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setEthAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"latestAction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"doPause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"auctionSumPlat","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"addrFinance","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_tokenContract","type":"address"},{"name":"_extraData","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"cancelAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newFinance","type":"address"}],"name":"setFinance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId1","type":"uint256"},{"name":"_tokenId2","type":"uint256"}],"name":"isOnSaleAny2","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bitGuildContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isPaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setDataEquip","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"auctionId","type":"uint64"}],"name":"getAuction","outputs":[{"name":"seller","type":"address"},{"name":"tokenId","type":"uint64"},{"name":"price","type":"uint64"},{"name":"tmStart","type":"uint64"},{"name":"tmSell","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newService","type":"address"}],"name":"setService","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"addrAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"equipContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethAuction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"addrService","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAuctionTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_startIndex","type":"uint64"}],"name":"getStartIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_startIndex","type":"uint64"},{"name":"_count","type":"uint64"}],"name":"getAuctionIdArray","outputs":[{"name":"","type":"uint64[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"isOnSale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_startIndex","type":"uint64"},{"name":"_count","type":"uint64"}],"name":"getAuctionArray","outputs":[{"name":"auctionIdArray","type":"uint64[]"},{"name":"sellerArray","type":"address[]"},{"name":"tokenIdArray","type":"uint64[]"},{"name":"priceArray","type":"uint64[]"},{"name":"tmStartArray","type":"uint64[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"auctionArray","outputs":[{"name":"seller","type":"address"},{"name":"tokenId","type":"uint64"},{"name":"price","type":"uint64"},{"name":"tmStart","type":"uint64"},{"name":"tmSell","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId1","type":"uint256"},{"name":"_tokenId2","type":"uint256"},{"name":"_tokenId3","type":"uint256"}],"name":"isOnSaleAny3","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_nftAddr","type":"address"},{"name":"_platAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"index","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"AuctionPlatCreate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"index","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"AuctionPlatSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"index","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"AuctionPlatCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"index","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"platVal","type":"uint64"}],"name":"AuctionPlatPriceChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"preAdmin","type":"address"},{"indexed":true,"name":"newAdmin","type":"address"}],"name":"AdminTransferred","type":"event"}]Contract Creation Code
60606040526000805460ff19169055600980546001604060020a0319166202a30017905534156200002f57600080fd5b6040516040806200286e8339810160405280805191906020018051915062000058905062000223565b6000805461010060a860020a031990811661010033600160a060020a0390811691820292831790931690911790925560018054600160a060020a031990811684179091556002805482169093179092556005805490921690851617905560a0604051908101604090815260008083526020830181905290820152600160608201819052608082018190526003805492935091908101620000f9838262000251565b6000928352602090922083916002020181518154600160a060020a031916600160a060020a0391909116178155602082015181546001604060020a0391909116740100000000000000000000000000000000000000000260a060020a60e060020a031990911617815560408201516001820180546001604060020a0319166001604060020a039290921691909117905560608201518160010160086101000a8154816001604060020a0302191690836001604060020a031602179055506080820151600190910180546001604060020a039290921670010000000000000000000000000000000002608060020a60c060020a0319909216919091179055505060078054600160a060020a03909316600160a060020a03199093169290921790915550620002dd9050565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b815481835581811511620002805760020281600202836000526020600020918201910162000280919062000285565b505050565b620002da91905b80821115620002d65780547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018054600160c060020a03191690556002016200028c565b5090565b90565b61258180620002ed6000396000f3006060604052600436106101925763ffffffff60e060020a6000350416630cbf54c8811461019f5780630cf7f3b5146101ce5780630f3de489146101f057806320ec75c21461021257806330efb8d3146102255780634b852c0314610238578063535c69b61461025757806355a373d614610276578063609e4427146102a557806367d0661d146102cd578063704b6c02146102e0578063789cf5e2146102ff57806382cb9df9146103125780638f4ffcb11461032557806396b5a7551461035b5780639b8d306414610371578063a5c464b314610390578063b0d997d9146103bd578063b187bd26146103d0578063ba112d50146103e3578063bc12e3d714610402578063bf8bdac114610469578063bfae2f0e14610488578063c11b22521461049b578063c95acadd146104ae578063cdd977e0146104c1578063d9ac9a88146104d4578063e3f61948146104e7578063eeef9d5514610506578063f0f2805f1461057e578063f149607014610594578063f16332db14610721578063f3b42c4014610737578063f3fef3a314610753575b341561019d57600080fd5b005b34156101aa57600080fd5b6101b2610775565b6040516001604060020a03909116815260200160405180910390f35b34156101d957600080fd5b61019d6004356001604060020a0360243516610784565b34156101fb57600080fd5b61019d6004356001604060020a0360243516610962565b341561021d57600080fd5b6101b2610e3b565b341561023057600080fd5b61019d610e51565b341561024357600080fd5b61019d6001604060020a0360043516610e8e565b341561026257600080fd5b61019d600160a060020a0360043516610f03565b341561028157600080fd5b610289610f67565b604051600160a060020a03909116815260200160405180910390f35b34156102b057600080fd5b6102bb600435610f76565b60405190815260200160405180910390f35b34156102d857600080fd5b61019d610f88565b34156102eb57600080fd5b61019d600160a060020a0360043516610fc7565b341561030a57600080fd5b6101b2611072565b341561031d57600080fd5b61028961108d565b341561033057600080fd5b61019d60048035600160a060020a03908116916024803592604435169160643591820191013561109c565b341561036657600080fd5b61019d600435611123565b341561037c57600080fd5b61019d600160a060020a0360043516611290565b341561039b57600080fd5b6103a960043560243561130f565b604051901515815260200160405180910390f35b34156103c857600080fd5b61028961146a565b34156103db57600080fd5b6103a9611479565b34156103ee57600080fd5b61019d600160a060020a0360043516611482565b341561040d57600080fd5b6104216001604060020a03600435166114e6565b604051600160a060020a0390951685526001604060020a03938416602086015291831660408086019190915290831660608501529116608083015260a0909101905180910390f35b341561047457600080fd5b61019d600160a060020a03600435166115c2565b341561049357600080fd5b610289611641565b34156104a657600080fd5b610289611655565b34156104b957600080fd5b610289611664565b34156104cc57600080fd5b610289611673565b34156104df57600080fd5b6102bb611682565b34156104f257600080fd5b6102bb6001604060020a0360043516611689565b341561051157600080fd5b61052b6001604060020a03600435811690602435166116bb565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561056a578082015183820152602001610552565b505050509050019250505060405180910390f35b341561058957600080fd5b6103a96004356116d4565b341561059f57600080fd5b6105b96001604060020a036004358116906024351661178a565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b838110156106095780820151838201526020016105f1565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b83811015610648578082015183820152602001610630565b50505050905001868103845289818151815260200191508051906020019060200280838360005b8381101561068757808201518382015260200161066f565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156106c65780820151838201526020016106ae565b50505050905001868103825287818151815260200191508051906020019060200280838360005b838110156107055780820151838201526020016106ed565b505050509050019a505050505050505050505060405180910390f35b341561072c57600080fd5b61042160043561196e565b341561074257600080fd5b6103a96004356024356044356119d2565b341561075e57600080fd5b61019d600160a060020a0360043516602435611bd5565b6009546001604060020a031681565b600080548190819060ff161561079957600080fd5b600554600160a060020a033381169116636352211e8760405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156107e557600080fd5b5af115156107f257600080fd5b50505060405180519050600160a060020a031614151561081157600080fd5b6000858152600460205260408120549350831161082d57600080fd5b600380548490811061083b57fe5b60009182526020909120600290910201805490925033600160a060020a0390811691161461086857600080fd5b6001820154608060020a90046001604060020a03161561088757600080fd5b50600954600182015442916001604060020a038084166801000000000000000090930481169181169190910116116108be57600080fd5b6001846001604060020a0316101580156108e45750620f423f846001604060020a031611155b15156108ef57600080fd5b60018201805467ffffffffffffffff19166001604060020a03861617905533600160a060020a0316837fe87817898c8d35d94ba66dede60e4a76272a3353f85c3291bd1a98de565e5dc687876040519182526001604060020a031660208201526040908101905180910390a35050505050565b61096a612458565b600080610975612481565b600080548190819060ff161561098a57600080fd5b600554600160a060020a033381169116636352211e8b60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156109d657600080fd5b5af115156109e357600080fd5b50505060405180519050600160a060020a0316141515610a0257600080fd5b600654600160a060020a031663f761720a338b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a5857600080fd5b5af11515610a6557600080fd5b5050506040518051159050610a7957600080fd5b6001886001604060020a031610158015610a9f5750620f423f886001604060020a031611155b1515610aaa57600080fd5b600554600160a060020a031663425189e08a60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b1515610af357600080fd5b5af11515610b0057600080fd5b505050604051610180810160405296506001602088015161ffff1611610b2557600080fd5b6000898152600460205260408120544297509550851115610c01576003805486908110610b4e57fe5b906000526020600020906002020160a060405190810160409081528254600160a060020a03811683526001604060020a0360a060020a9091048116602084015260019093015480841691830191909152680100000000000000008104831660608301908152608060020a9091048316608083015260095491965088831692919091169051016001604060020a0316111580610bf65750600084608001516001604060020a0316115b1515610c0157600080fd5b600854600160a060020a031615610c7b57600854600160a060020a031663f0f2805f8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610c5a57600080fd5b5af11515610c6757600080fd5b5050506040518051159050610c7b57600080fd5b6003805493506001840190610c9090826124af565b506003805484908110610c9f57fe5b60009182526020909120600290910201805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a0316177fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a6001604060020a038c81169190910291909117825560018201805467ffffffffffffffff1916918b1691909117905560038054919350906000198501908110610d3f57fe5b60009182526020909120600160029092020101546001604060020a0368010000000000000000909104811691508616819010610dab576001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a03891602179055610ddd565b6001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a038416021790555b60008981526004602052604090819020849055600160a060020a0333169084907fc1d216ccef269f8b3a6b1259100ee87a3d906db2eff416243a2cd5fa925fc6e6908c905190815260200160405180910390a3505050505050505050565b60085460a060020a90046001604060020a031681565b60005433600160a060020a039081166101009092041614610e7157600080fd5b60005460ff161515610e8257600080fd5b6000805460ff19169055565b60005433600160a060020a039081166101009092041614610eae57600080fd5b61012c816001604060020a031610158015610ed557506283d600816001604060020a031611155b1515610ee057600080fd5b6009805467ffffffffffffffff19166001604060020a0392909216919091179055565b60005433600160a060020a039081166101009092041614610f2357600080fd5b600160a060020a0381161515610f3857600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600554600160a060020a031681565b60046020526000908152604090205481565b60005433600160a060020a039081166101009092041614610fa857600080fd5b60005460ff1615610fb857600080fd5b6000805460ff19166001179055565b60005433600160a060020a039081166101009092041614610fe757600080fd5b600160a060020a0381161515610ffc57600080fd5b600054600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360008054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6009546801000000000000000090046001604060020a031681565b600254600160a060020a031681565b6000805460ff16156110ad57600080fd5b60075433600160a060020a039081169116146110c857600080fd5b60088211156110d657600080fd5b61110e83838080601f016020809104026020016040519081016040528181529291906020840183838082843750611cd3945050505050565b905061111b868683611d2d565b505050505050565b60008054819060ff161561113657600080fd5b600554600160a060020a033381169116636352211e8560405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561118257600080fd5b5af1151561118f57600080fd5b50505060405180519050600160a060020a03161415156111ae57600080fd5b600083815260046020526040812054925082116111ca57600080fd5b60038054839081106111d857fe5b60009182526020909120600290910201805490915033600160a060020a0390811691161461120557600080fd5b6001810154608060020a90046001604060020a03161561122457600080fd5b60018101805477ffffffffffffffff000000000000000000000000000000001916608060020a179055600160a060020a033316827fcdb71aeb448b31793e3483f9d7f902e28c1a418e0fea9aa871e19dd0f791a79a8560405190815260200160405180910390a3505050565b60025433600160a060020a03908116911614806112c0575060005433600160a060020a0390811661010090920416145b15156112cb57600080fd5b600160a060020a03811615156112e057600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600082815260046020526040812054428280808411156113b657600380548590811061133757fe5b90600052602060002090600202019150826001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a03161180156113a857506001820154608060020a90046001604060020a0316155b156113b65760019450611460565b600086815260046020526040812054945084111561145b5760038054859081106113dc57fe5b90600052602060002090600202019050826001604060020a0316600960009054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a031611801561144d57506001810154608060020a90046001604060020a0316155b1561145b5760019450611460565b600094505b5050505092915050565b600754600160a060020a031681565b60005460ff1681565b60005433600160a060020a0390811661010090920416146114a257600080fd5b600160a060020a03811615156114b757600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008060008060006114f6612481565b6003546001604060020a0388161061150d57600080fd5b600380546001604060020a03891690811061152457fe5b906000526020600020906002020160a060405190810160409081528254600160a060020a03811683526001604060020a0360a060020a909104811660208401526001909301548084169183019190915268010000000000000000810483166060830152608060020a90049091166080820152905080519550806020015194508060400151935080606001519250806080015191505091939590929450565b60015433600160a060020a03908116911614806115f2575060005433600160a060020a0390811661010090920416145b15156115fd57600080fd5b600160a060020a038116151561161257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000546101009004600160a060020a031681565b600654600160a060020a031681565b600854600160a060020a031681565b600154600160a060020a031681565b6003545b90565b6003546000906001604060020a038316106116a357600080fd5b6116ac826120d4565b6001604060020a031692915050565b6116c36124e0565b6116cd8383612192565b9392505050565b60008181526004602052604081205481808083111561177d5760038054849081106116fb57fe5b90600052602060002090600202019150429050806001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a031611801561176f57506001820154608060020a90046001604060020a0316155b1561177d5760019350611782565b600093505b505050919050565b6117926124e0565b61179a6124e0565b6117a26124e0565b6117aa6124e0565b6117b26124e0565b60008060006117c18a8a612192565b975087519250826040518059106117d55750595b90808252806020026020018201604052509650826040518059106117f65750595b90808252806020026020018201604052509550826040518059106118175750595b90808252806020026020018201604052509450826040518059106118385750595b90808252806020026020018201604052509350600091505b8282101561196157600388838151811061186657fe5b906020019060200201516001604060020a031681548110151561188557fe5b600091825260209091206002909102018054909150600160a060020a03168783815181106118af57fe5b600160a060020a0390921660209283029091019091015280546001604060020a0360a060020a909104168683815181106118e557fe5b6001604060020a039283166020918202909201015260018201541685838151811061190c57fe5b6001604060020a039283166020918202909201015260018201546801000000000000000090041684838151811061193f57fe5b6001604060020a03909216602092830290910190910152600190910190611850565b5050509295509295909350565b600380548290811061197c57fe5b600091825260209091206002909102018054600190910154600160a060020a03821692506001604060020a0360a060020a90920482169181811691680100000000000000008104821691608060020a9091041685565b6000838152600460205260408120544282808080851115611a7a5760038054869081106119fb57fe5b90600052602060002090600202019250836001604060020a0316600960009054906101000a90046001604060020a03168460010160089054906101000a90046001604060020a0316016001604060020a0316118015611a6c57506001830154608060020a90046001604060020a0316155b15611a7a5760019550611bc9565b6000888152600460205260408120549550851115611b1f576003805486908110611aa057fe5b90600052602060002090600202019150836001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a0316118015611b1157506001820154608060020a90046001604060020a0316155b15611b1f5760019550611bc9565b6000878152600460205260408120549550851115611bc4576003805486908110611b4557fe5b90600052602060002090600202019050836001604060020a0316600960009054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a0316118015611bb657506001810154608060020a90046001604060020a0316155b15611bc45760019550611bc9565b600095505b50505050509392505050565b600254600090819033600160a060020a0390811691161480611c0a575060005433600160a060020a0390811661010090920416145b1515611c1557600080fd5b60008311611c2257600080fd5b600160a060020a03841615611c375783611c44565b600254600160a060020a03165b915050600160a060020a0330163180831015611c9057600160a060020a03821683156108fc0284604051600060405180830381858888f193505050501515611c8b57600080fd5b611ccd565b81600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f193505050501515611ccd57600080fd5b50505050565b6000808080845190505b80821015611d24576001828203036101000a858381518110611cfb57fe5b016020015160f860020a900460f860020a0260f860020a90040283019250600182019150611cdd565b50909392505050565b6000818152600460205260408120549080808080808611611d4d57600080fd5b6003805487908110611d5b57fe5b6000918252602090912060095460029092020160018101549096504295506001604060020a03808716928116680100000000000000009092048116919091011611611da557600080fd5b6001850154608060020a90046001604060020a031615611dc457600080fd5b600554600160a060020a0316636352211e8860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611e0c57600080fd5b5af11515611e1957600080fd5b50505060405180518654909450600160a060020a038086169116149050611e3f57600080fd5b600160a060020a03838116908a161415611e5857600080fd5b6001850154611e7e906001604060020a0316670de0b6b3a764000063ffffffff61240b16565b9150878214611e8c57600080fd5b600754600160a060020a03166323b872dd8a308b60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611eef57600080fd5b5af11515611efc57600080fd5b505050604051805190501515611f1157600080fd5b6001850180546001604060020a03808716608060020a0277ffffffffffffffff0000000000000000000000000000000019909216919091179182905560098054680100000000000000008082048416948416949094019092169092026fffffffffffffffff000000000000000019909116178155611fa990600a90611f9d90859063ffffffff61240b16565b9063ffffffff61244116565b600554909150600160a060020a03166318ad052b888b60405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561200357600080fd5b5af1151561201057600080fd5b5050600754600160a060020a0316905063a9059cbb848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561206a57600080fd5b5af1151561207757600080fd5b50505088600160a060020a031683600160a060020a0316877f45e9d235b5fac5014a75c840aad21eae15af2aef787f467e4c835ea44806a4d08a8660405191825260208201526040908101905180910390a4505050505050505050565b6009546003546000916001604060020a03908116420391849184918291841690035b6000816001604060020a031611156121875760026001604060020a0382160491508184019250846001604060020a03166003846001604060020a031681548110151561213e57fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a0316101561217f5760018301935081900360001901612182565b50805b6120f6565b509195945050505050565b61219a6124e0565b6000806000806121a86124e0565b6000806121b36124e0565b6009546001604060020a03908116420398506000908c168190116121e0576121db60006120d4565b6121e2565b8b5b600354909850965060006001604060020a038c161161220c57876001604060020a03168703612217565b8a6001604060020a03165b955085151561222557600195505b856040518059106122335750595b90808252806020026020018201604052509450600093508792505b86836001604060020a0316101561235d57886001604060020a03166003846001604060020a031681548110151561228157fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a03161180156122ef5750600380546001604060020a0385169081106122c957fe5b6000918252602090912060029091020160010154608060020a90046001604060020a0316155b15612352578285858060010196506001604060020a03168151811061231057fe5b6001604060020a03928316602091820290920101526000908c1611801561234857508a6001604060020a0316846001604060020a0316145b156123525761235d565b82600101925061224e565b8451846001604060020a03161415612377578499506123fc565b836001604060020a031660405180591061238e5750595b90808252806020026020018201604052509150600090505b836001604060020a03168110156123f8578481815181106123c357fe5b906020019060200201518282815181106123d957fe5b6001604060020a039092166020928302909101909101526001016123a6565b8199505b50505050505050505092915050565b60008083151561241e576000915061243a565b5082820282848281151561242e57fe5b041461243657fe5b8091505b5092915050565b600080828481151561244f57fe5b04949350505050565b610180604051908101604052600c815b6000815260001990910190602001816124685790505090565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b8154818355818115116124db576002028160020283600052602060002091820191016124db91906124f2565b505050565b60206040519081016040526000815290565b61168691905b808211156125515780547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101805477ffffffffffffffffffffffffffffffffffffffffffffffff191690556002016124f8565b50905600a165627a7a7230582057a3cc6db84ed28ef41daf619026fb842f52feb11c0df0c05c3b991af0d0e1d30029000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b20000000000000000000000007e43581b19ab509bcf9397a2efd1ab10233f27de
Deployed Bytecode
0x6060604052600436106101925763ffffffff60e060020a6000350416630cbf54c8811461019f5780630cf7f3b5146101ce5780630f3de489146101f057806320ec75c21461021257806330efb8d3146102255780634b852c0314610238578063535c69b61461025757806355a373d614610276578063609e4427146102a557806367d0661d146102cd578063704b6c02146102e0578063789cf5e2146102ff57806382cb9df9146103125780638f4ffcb11461032557806396b5a7551461035b5780639b8d306414610371578063a5c464b314610390578063b0d997d9146103bd578063b187bd26146103d0578063ba112d50146103e3578063bc12e3d714610402578063bf8bdac114610469578063bfae2f0e14610488578063c11b22521461049b578063c95acadd146104ae578063cdd977e0146104c1578063d9ac9a88146104d4578063e3f61948146104e7578063eeef9d5514610506578063f0f2805f1461057e578063f149607014610594578063f16332db14610721578063f3b42c4014610737578063f3fef3a314610753575b341561019d57600080fd5b005b34156101aa57600080fd5b6101b2610775565b6040516001604060020a03909116815260200160405180910390f35b34156101d957600080fd5b61019d6004356001604060020a0360243516610784565b34156101fb57600080fd5b61019d6004356001604060020a0360243516610962565b341561021d57600080fd5b6101b2610e3b565b341561023057600080fd5b61019d610e51565b341561024357600080fd5b61019d6001604060020a0360043516610e8e565b341561026257600080fd5b61019d600160a060020a0360043516610f03565b341561028157600080fd5b610289610f67565b604051600160a060020a03909116815260200160405180910390f35b34156102b057600080fd5b6102bb600435610f76565b60405190815260200160405180910390f35b34156102d857600080fd5b61019d610f88565b34156102eb57600080fd5b61019d600160a060020a0360043516610fc7565b341561030a57600080fd5b6101b2611072565b341561031d57600080fd5b61028961108d565b341561033057600080fd5b61019d60048035600160a060020a03908116916024803592604435169160643591820191013561109c565b341561036657600080fd5b61019d600435611123565b341561037c57600080fd5b61019d600160a060020a0360043516611290565b341561039b57600080fd5b6103a960043560243561130f565b604051901515815260200160405180910390f35b34156103c857600080fd5b61028961146a565b34156103db57600080fd5b6103a9611479565b34156103ee57600080fd5b61019d600160a060020a0360043516611482565b341561040d57600080fd5b6104216001604060020a03600435166114e6565b604051600160a060020a0390951685526001604060020a03938416602086015291831660408086019190915290831660608501529116608083015260a0909101905180910390f35b341561047457600080fd5b61019d600160a060020a03600435166115c2565b341561049357600080fd5b610289611641565b34156104a657600080fd5b610289611655565b34156104b957600080fd5b610289611664565b34156104cc57600080fd5b610289611673565b34156104df57600080fd5b6102bb611682565b34156104f257600080fd5b6102bb6001604060020a0360043516611689565b341561051157600080fd5b61052b6001604060020a03600435811690602435166116bb565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561056a578082015183820152602001610552565b505050509050019250505060405180910390f35b341561058957600080fd5b6103a96004356116d4565b341561059f57600080fd5b6105b96001604060020a036004358116906024351661178a565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b838110156106095780820151838201526020016105f1565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b83811015610648578082015183820152602001610630565b50505050905001868103845289818151815260200191508051906020019060200280838360005b8381101561068757808201518382015260200161066f565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156106c65780820151838201526020016106ae565b50505050905001868103825287818151815260200191508051906020019060200280838360005b838110156107055780820151838201526020016106ed565b505050509050019a505050505050505050505060405180910390f35b341561072c57600080fd5b61042160043561196e565b341561074257600080fd5b6103a96004356024356044356119d2565b341561075e57600080fd5b61019d600160a060020a0360043516602435611bd5565b6009546001604060020a031681565b600080548190819060ff161561079957600080fd5b600554600160a060020a033381169116636352211e8760405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156107e557600080fd5b5af115156107f257600080fd5b50505060405180519050600160a060020a031614151561081157600080fd5b6000858152600460205260408120549350831161082d57600080fd5b600380548490811061083b57fe5b60009182526020909120600290910201805490925033600160a060020a0390811691161461086857600080fd5b6001820154608060020a90046001604060020a03161561088757600080fd5b50600954600182015442916001604060020a038084166801000000000000000090930481169181169190910116116108be57600080fd5b6001846001604060020a0316101580156108e45750620f423f846001604060020a031611155b15156108ef57600080fd5b60018201805467ffffffffffffffff19166001604060020a03861617905533600160a060020a0316837fe87817898c8d35d94ba66dede60e4a76272a3353f85c3291bd1a98de565e5dc687876040519182526001604060020a031660208201526040908101905180910390a35050505050565b61096a612458565b600080610975612481565b600080548190819060ff161561098a57600080fd5b600554600160a060020a033381169116636352211e8b60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156109d657600080fd5b5af115156109e357600080fd5b50505060405180519050600160a060020a0316141515610a0257600080fd5b600654600160a060020a031663f761720a338b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a5857600080fd5b5af11515610a6557600080fd5b5050506040518051159050610a7957600080fd5b6001886001604060020a031610158015610a9f5750620f423f886001604060020a031611155b1515610aaa57600080fd5b600554600160a060020a031663425189e08a60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b1515610af357600080fd5b5af11515610b0057600080fd5b505050604051610180810160405296506001602088015161ffff1611610b2557600080fd5b6000898152600460205260408120544297509550851115610c01576003805486908110610b4e57fe5b906000526020600020906002020160a060405190810160409081528254600160a060020a03811683526001604060020a0360a060020a9091048116602084015260019093015480841691830191909152680100000000000000008104831660608301908152608060020a9091048316608083015260095491965088831692919091169051016001604060020a0316111580610bf65750600084608001516001604060020a0316115b1515610c0157600080fd5b600854600160a060020a031615610c7b57600854600160a060020a031663f0f2805f8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610c5a57600080fd5b5af11515610c6757600080fd5b5050506040518051159050610c7b57600080fd5b6003805493506001840190610c9090826124af565b506003805484908110610c9f57fe5b60009182526020909120600290910201805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a0316177fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a6001604060020a038c81169190910291909117825560018201805467ffffffffffffffff1916918b1691909117905560038054919350906000198501908110610d3f57fe5b60009182526020909120600160029092020101546001604060020a0368010000000000000000909104811691508616819010610dab576001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a03891602179055610ddd565b6001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a038416021790555b60008981526004602052604090819020849055600160a060020a0333169084907fc1d216ccef269f8b3a6b1259100ee87a3d906db2eff416243a2cd5fa925fc6e6908c905190815260200160405180910390a3505050505050505050565b60085460a060020a90046001604060020a031681565b60005433600160a060020a039081166101009092041614610e7157600080fd5b60005460ff161515610e8257600080fd5b6000805460ff19169055565b60005433600160a060020a039081166101009092041614610eae57600080fd5b61012c816001604060020a031610158015610ed557506283d600816001604060020a031611155b1515610ee057600080fd5b6009805467ffffffffffffffff19166001604060020a0392909216919091179055565b60005433600160a060020a039081166101009092041614610f2357600080fd5b600160a060020a0381161515610f3857600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600554600160a060020a031681565b60046020526000908152604090205481565b60005433600160a060020a039081166101009092041614610fa857600080fd5b60005460ff1615610fb857600080fd5b6000805460ff19166001179055565b60005433600160a060020a039081166101009092041614610fe757600080fd5b600160a060020a0381161515610ffc57600080fd5b600054600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360008054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6009546801000000000000000090046001604060020a031681565b600254600160a060020a031681565b6000805460ff16156110ad57600080fd5b60075433600160a060020a039081169116146110c857600080fd5b60088211156110d657600080fd5b61110e83838080601f016020809104026020016040519081016040528181529291906020840183838082843750611cd3945050505050565b905061111b868683611d2d565b505050505050565b60008054819060ff161561113657600080fd5b600554600160a060020a033381169116636352211e8560405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561118257600080fd5b5af1151561118f57600080fd5b50505060405180519050600160a060020a03161415156111ae57600080fd5b600083815260046020526040812054925082116111ca57600080fd5b60038054839081106111d857fe5b60009182526020909120600290910201805490915033600160a060020a0390811691161461120557600080fd5b6001810154608060020a90046001604060020a03161561122457600080fd5b60018101805477ffffffffffffffff000000000000000000000000000000001916608060020a179055600160a060020a033316827fcdb71aeb448b31793e3483f9d7f902e28c1a418e0fea9aa871e19dd0f791a79a8560405190815260200160405180910390a3505050565b60025433600160a060020a03908116911614806112c0575060005433600160a060020a0390811661010090920416145b15156112cb57600080fd5b600160a060020a03811615156112e057600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600082815260046020526040812054428280808411156113b657600380548590811061133757fe5b90600052602060002090600202019150826001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a03161180156113a857506001820154608060020a90046001604060020a0316155b156113b65760019450611460565b600086815260046020526040812054945084111561145b5760038054859081106113dc57fe5b90600052602060002090600202019050826001604060020a0316600960009054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a031611801561144d57506001810154608060020a90046001604060020a0316155b1561145b5760019450611460565b600094505b5050505092915050565b600754600160a060020a031681565b60005460ff1681565b60005433600160a060020a0390811661010090920416146114a257600080fd5b600160a060020a03811615156114b757600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008060008060006114f6612481565b6003546001604060020a0388161061150d57600080fd5b600380546001604060020a03891690811061152457fe5b906000526020600020906002020160a060405190810160409081528254600160a060020a03811683526001604060020a0360a060020a909104811660208401526001909301548084169183019190915268010000000000000000810483166060830152608060020a90049091166080820152905080519550806020015194508060400151935080606001519250806080015191505091939590929450565b60015433600160a060020a03908116911614806115f2575060005433600160a060020a0390811661010090920416145b15156115fd57600080fd5b600160a060020a038116151561161257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000546101009004600160a060020a031681565b600654600160a060020a031681565b600854600160a060020a031681565b600154600160a060020a031681565b6003545b90565b6003546000906001604060020a038316106116a357600080fd5b6116ac826120d4565b6001604060020a031692915050565b6116c36124e0565b6116cd8383612192565b9392505050565b60008181526004602052604081205481808083111561177d5760038054849081106116fb57fe5b90600052602060002090600202019150429050806001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a031611801561176f57506001820154608060020a90046001604060020a0316155b1561177d5760019350611782565b600093505b505050919050565b6117926124e0565b61179a6124e0565b6117a26124e0565b6117aa6124e0565b6117b26124e0565b60008060006117c18a8a612192565b975087519250826040518059106117d55750595b90808252806020026020018201604052509650826040518059106117f65750595b90808252806020026020018201604052509550826040518059106118175750595b90808252806020026020018201604052509450826040518059106118385750595b90808252806020026020018201604052509350600091505b8282101561196157600388838151811061186657fe5b906020019060200201516001604060020a031681548110151561188557fe5b600091825260209091206002909102018054909150600160a060020a03168783815181106118af57fe5b600160a060020a0390921660209283029091019091015280546001604060020a0360a060020a909104168683815181106118e557fe5b6001604060020a039283166020918202909201015260018201541685838151811061190c57fe5b6001604060020a039283166020918202909201015260018201546801000000000000000090041684838151811061193f57fe5b6001604060020a03909216602092830290910190910152600190910190611850565b5050509295509295909350565b600380548290811061197c57fe5b600091825260209091206002909102018054600190910154600160a060020a03821692506001604060020a0360a060020a90920482169181811691680100000000000000008104821691608060020a9091041685565b6000838152600460205260408120544282808080851115611a7a5760038054869081106119fb57fe5b90600052602060002090600202019250836001604060020a0316600960009054906101000a90046001604060020a03168460010160089054906101000a90046001604060020a0316016001604060020a0316118015611a6c57506001830154608060020a90046001604060020a0316155b15611a7a5760019550611bc9565b6000888152600460205260408120549550851115611b1f576003805486908110611aa057fe5b90600052602060002090600202019150836001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a0316118015611b1157506001820154608060020a90046001604060020a0316155b15611b1f5760019550611bc9565b6000878152600460205260408120549550851115611bc4576003805486908110611b4557fe5b90600052602060002090600202019050836001604060020a0316600960009054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a0316118015611bb657506001810154608060020a90046001604060020a0316155b15611bc45760019550611bc9565b600095505b50505050509392505050565b600254600090819033600160a060020a0390811691161480611c0a575060005433600160a060020a0390811661010090920416145b1515611c1557600080fd5b60008311611c2257600080fd5b600160a060020a03841615611c375783611c44565b600254600160a060020a03165b915050600160a060020a0330163180831015611c9057600160a060020a03821683156108fc0284604051600060405180830381858888f193505050501515611c8b57600080fd5b611ccd565b81600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f193505050501515611ccd57600080fd5b50505050565b6000808080845190505b80821015611d24576001828203036101000a858381518110611cfb57fe5b016020015160f860020a900460f860020a0260f860020a90040283019250600182019150611cdd565b50909392505050565b6000818152600460205260408120549080808080808611611d4d57600080fd5b6003805487908110611d5b57fe5b6000918252602090912060095460029092020160018101549096504295506001604060020a03808716928116680100000000000000009092048116919091011611611da557600080fd5b6001850154608060020a90046001604060020a031615611dc457600080fd5b600554600160a060020a0316636352211e8860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611e0c57600080fd5b5af11515611e1957600080fd5b50505060405180518654909450600160a060020a038086169116149050611e3f57600080fd5b600160a060020a03838116908a161415611e5857600080fd5b6001850154611e7e906001604060020a0316670de0b6b3a764000063ffffffff61240b16565b9150878214611e8c57600080fd5b600754600160a060020a03166323b872dd8a308b60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611eef57600080fd5b5af11515611efc57600080fd5b505050604051805190501515611f1157600080fd5b6001850180546001604060020a03808716608060020a0277ffffffffffffffff0000000000000000000000000000000019909216919091179182905560098054680100000000000000008082048416948416949094019092169092026fffffffffffffffff000000000000000019909116178155611fa990600a90611f9d90859063ffffffff61240b16565b9063ffffffff61244116565b600554909150600160a060020a03166318ad052b888b60405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561200357600080fd5b5af1151561201057600080fd5b5050600754600160a060020a0316905063a9059cbb848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561206a57600080fd5b5af1151561207757600080fd5b50505088600160a060020a031683600160a060020a0316877f45e9d235b5fac5014a75c840aad21eae15af2aef787f467e4c835ea44806a4d08a8660405191825260208201526040908101905180910390a4505050505050505050565b6009546003546000916001604060020a03908116420391849184918291841690035b6000816001604060020a031611156121875760026001604060020a0382160491508184019250846001604060020a03166003846001604060020a031681548110151561213e57fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a0316101561217f5760018301935081900360001901612182565b50805b6120f6565b509195945050505050565b61219a6124e0565b6000806000806121a86124e0565b6000806121b36124e0565b6009546001604060020a03908116420398506000908c168190116121e0576121db60006120d4565b6121e2565b8b5b600354909850965060006001604060020a038c161161220c57876001604060020a03168703612217565b8a6001604060020a03165b955085151561222557600195505b856040518059106122335750595b90808252806020026020018201604052509450600093508792505b86836001604060020a0316101561235d57886001604060020a03166003846001604060020a031681548110151561228157fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a03161180156122ef5750600380546001604060020a0385169081106122c957fe5b6000918252602090912060029091020160010154608060020a90046001604060020a0316155b15612352578285858060010196506001604060020a03168151811061231057fe5b6001604060020a03928316602091820290920101526000908c1611801561234857508a6001604060020a0316846001604060020a0316145b156123525761235d565b82600101925061224e565b8451846001604060020a03161415612377578499506123fc565b836001604060020a031660405180591061238e5750595b90808252806020026020018201604052509150600090505b836001604060020a03168110156123f8578481815181106123c357fe5b906020019060200201518282815181106123d957fe5b6001604060020a039092166020928302909101909101526001016123a6565b8199505b50505050505050505092915050565b60008083151561241e576000915061243a565b5082820282848281151561242e57fe5b041461243657fe5b8091505b5092915050565b600080828481151561244f57fe5b04949350505050565b610180604051908101604052600c815b6000815260001990910190602001816124685790505090565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b8154818355818115116124db576002028160020283600052602060002091820191016124db91906124f2565b505050565b60206040519081016040526000815290565b61168691905b808211156125515780547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101805477ffffffffffffffffffffffffffffffffffffffffffffffff191690556002016124f8565b50905600a165627a7a7230582057a3cc6db84ed28ef41daf619026fb842f52feb11c0df0c05c3b991af0d0e1d30029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b20000000000000000000000007e43581b19ab509bcf9397a2efd1ab10233f27de
-----Decoded View---------------
Arg [0] : _nftAddr (address): 0xDA9c03dFd4D137F926c3cF6953cb951832Eb08b2
Arg [1] : _platAddr (address): 0x7E43581b19ab509BCF9397a2eFd1ab10233f27dE
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b2
Arg [1] : 0000000000000000000000007e43581b19ab509bcf9397a2efd1ab10233f27de
Swarm Source
bzzr://57a3cc6db84ed28ef41daf619026fb842f52feb11c0df0c05c3b991af0d0e1d3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.