Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 22 from a total of 22 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| New Auction | 6447832 | 2623 days ago | IN | 0 ETH | 0.00023128 | ||||
| New Auction | 6447771 | 2623 days ago | IN | 0 ETH | 0.00046256 | ||||
| New Auction | 6282853 | 2651 days ago | IN | 0 ETH | 0.00051085 | ||||
| New Auction | 6265977 | 2653 days ago | IN | 0 ETH | 0.00027985 | ||||
| New Auction | 6250649 | 2656 days ago | IN | 0 ETH | 0.00030463 | ||||
| New Auction | 6209640 | 2663 days ago | IN | 0 ETH | 0.00025696 | ||||
| New Auction | 6106254 | 2680 days ago | IN | 0 ETH | 0.00060064 | ||||
| New Auction | 6106216 | 2680 days ago | IN | 0 ETH | 0.0115577 | ||||
| New Auction | 6032085 | 2693 days ago | IN | 0 ETH | 0.0004623 | ||||
| New Auction | 5900176 | 2715 days ago | IN | 0 ETH | 0.00304855 | ||||
| New Auction | 5835835 | 2726 days ago | IN | 0 ETH | 0.0001168 | ||||
| New Auction | 5819369 | 2729 days ago | IN | 0 ETH | 0.00051698 | ||||
| New Auction | 5747243 | 2742 days ago | IN | 0 ETH | 0.00093056 | ||||
| New Auction | 5732963 | 2744 days ago | IN | 0 ETH | 0.00074503 | ||||
| New Auction | 5732961 | 2744 days ago | IN | 0 ETH | 0.00035106 | ||||
| New Auction | 5732959 | 2744 days ago | IN | 0 ETH | 0.00116867 | ||||
| New Auction | 5726634 | 2745 days ago | IN | 0 ETH | 0.00069346 | ||||
| New Auction | 5704725 | 2749 days ago | IN | 0 ETH | 0.00138692 | ||||
| Set Service | 5684355 | 2753 days ago | IN | 0 ETH | 0.00011679 | ||||
| Set Finance | 5684355 | 2753 days ago | IN | 0 ETH | 0.00011601 | ||||
| Set Eth Auction | 5684354 | 2753 days ago | IN | 0 ETH | 0.00017542 | ||||
| Set Data Equip | 5684341 | 2753 days ago | IN | 0 ETH | 0.00013242 |
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-28 */ /* ==================================================================== */ /* 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); } /// @title ERC-721 Non-Fungible Token Standard, optional metadata extension interface ERC721Metadata /* is ERC721 */ { function name() external pure returns (string _name); function symbol() external pure returns (string _symbol); function tokenURI(uint256 _tokenId) external view returns (string); } /// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension interface ERC721Enumerable /* is ERC721 */ { function totalSupply() external view returns (uint256); function tokenByIndex(uint256 _index) external view returns (uint256); function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256); } 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); } } } 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; } } } } /** * @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; } } 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); } 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 getPlatBalance() external view returns(uint256) { return bitGuildContract.balanceOf(this); } function withdrawPlat() external { require(msg.sender == addrFinance || msg.sender == addrAdmin); uint256 balance = bitGuildContract.balanceOf(this); require(balance > 0); bitGuildContract.transfer(addrFinance, balance); } 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":"getPlatBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"withdrawPlat","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
60606040526000805460ff19169055600980546001604060020a0319166202a30017905534156200002f57600080fd5b60405160408062002a358339810160405280805191906020018051915062000058905062000223565b6000805461010060a860020a031990811661010033600160a060020a0390811691820292831790931690911790925560018054600160a060020a031990811684179091556002805482169093179092556005805490921690851617905560a0604051908101604090815260008083526020830181905290820152600160608201819052608082018190526003805492935091908101620000f9838262000251565b6000928352602090922083916002020181518154600160a060020a031916600160a060020a0391909116178155602082015181546001604060020a0391909116740100000000000000000000000000000000000000000260a060020a60e060020a031990911617815560408201516001820180546001604060020a0319166001604060020a039290921691909117905560608201518160010160086101000a8154816001604060020a0302191690836001604060020a031602179055506080820151600190910180546001604060020a039290921670010000000000000000000000000000000002608060020a60c060020a0319909216919091179055505060078054600160a060020a03909316600160a060020a03199093169290921790915550620002dd9050565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b815481835581811511620002805760020281600202836000526020600020918201910162000280919062000285565b505050565b620002da91905b80821115620002d65780547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018054600160c060020a03191690556002016200028c565b5090565b90565b61274880620002ed6000396000f3006060604052600436106101a85763ffffffff60e060020a6000350416630cbf54c881146101b55780630cf7f3b5146101e45780630f3de489146102065780631a3ae67a1461022857806320ec75c21461024d57806330efb8d3146102605780634b852c031461027357806351784a7514610292578063535c69b6146102a557806355a373d6146102c4578063609e4427146102f357806367d0661d14610309578063704b6c021461031c578063789cf5e21461033b57806382cb9df91461034e5780638f4ffcb11461036157806396b5a755146103975780639b8d3064146103ad578063a5c464b3146103cc578063b0d997d9146103f9578063b187bd261461040c578063ba112d501461041f578063bc12e3d71461043e578063bf8bdac1146104a5578063bfae2f0e146104c4578063c11b2252146104d7578063c95acadd146104ea578063cdd977e0146104fd578063d9ac9a8814610510578063e3f6194814610523578063eeef9d5514610542578063f0f2805f146105ba578063f1496070146105d0578063f16332db1461075d578063f3b42c4014610773578063f3fef3a31461078f575b34156101b357600080fd5b005b34156101c057600080fd5b6101c86107b1565b6040516001604060020a03909116815260200160405180910390f35b34156101ef57600080fd5b6101b36004356001604060020a03602435166107c0565b341561021157600080fd5b6101b36004356001604060020a036024351661099e565b341561023357600080fd5b61023b610e77565b60405190815260200160405180910390f35b341561025857600080fd5b6101c8610ee6565b341561026b57600080fd5b6101b3610efc565b341561027e57600080fd5b6101b36001604060020a0360043516610f39565b341561029d57600080fd5b6101b3610fae565b34156102b057600080fd5b6101b3600160a060020a03600435166110d1565b34156102cf57600080fd5b6102d7611135565b604051600160a060020a03909116815260200160405180910390f35b34156102fe57600080fd5b61023b600435611144565b341561031457600080fd5b6101b3611156565b341561032757600080fd5b6101b3600160a060020a0360043516611195565b341561034657600080fd5b6101c8611240565b341561035957600080fd5b6102d761125b565b341561036c57600080fd5b6101b360048035600160a060020a03908116916024803592604435169160643591820191013561126a565b34156103a257600080fd5b6101b36004356112f1565b34156103b857600080fd5b6101b3600160a060020a036004351661145e565b34156103d757600080fd5b6103e56004356024356114dd565b604051901515815260200160405180910390f35b341561040457600080fd5b6102d7611638565b341561041757600080fd5b6103e5611647565b341561042a57600080fd5b6101b3600160a060020a0360043516611650565b341561044957600080fd5b61045d6001604060020a03600435166116b4565b604051600160a060020a0390951685526001604060020a03938416602086015291831660408086019190915290831660608501529116608083015260a0909101905180910390f35b34156104b057600080fd5b6101b3600160a060020a0360043516611790565b34156104cf57600080fd5b6102d761180f565b34156104e257600080fd5b6102d7611823565b34156104f557600080fd5b6102d7611832565b341561050857600080fd5b6102d7611841565b341561051b57600080fd5b61023b611850565b341561052e57600080fd5b61023b6001604060020a0360043516611856565b341561054d57600080fd5b6105676001604060020a0360043581169060243516611888565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156105a657808201518382015260200161058e565b505050509050019250505060405180910390f35b34156105c557600080fd5b6103e56004356118a1565b34156105db57600080fd5b6105f56001604060020a0360043581169060243516611957565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b8381101561064557808201518382015260200161062d565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b8381101561068457808201518382015260200161066c565b50505050905001868103845289818151815260200191508051906020019060200280838360005b838110156106c35780820151838201526020016106ab565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156107025780820151838201526020016106ea565b50505050905001868103825287818151815260200191508051906020019060200280838360005b83811015610741578082015183820152602001610729565b505050509050019a505050505050505050505060405180910390f35b341561076857600080fd5b61045d600435611b3b565b341561077e57600080fd5b6103e5600435602435604435611b9f565b341561079a57600080fd5b6101b3600160a060020a0360043516602435611da2565b6009546001604060020a031681565b600080548190819060ff16156107d557600080fd5b600554600160a060020a033381169116636352211e8760405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561082157600080fd5b5af1151561082e57600080fd5b50505060405180519050600160a060020a031614151561084d57600080fd5b6000858152600460205260408120549350831161086957600080fd5b600380548490811061087757fe5b60009182526020909120600290910201805490925033600160a060020a039081169116146108a457600080fd5b6001820154608060020a90046001604060020a0316156108c357600080fd5b50600954600182015442916001604060020a038084166801000000000000000090930481169181169190910116116108fa57600080fd5b6001846001604060020a0316101580156109205750620f423f846001604060020a031611155b151561092b57600080fd5b60018201805467ffffffffffffffff19166001604060020a03861617905533600160a060020a0316837fe87817898c8d35d94ba66dede60e4a76272a3353f85c3291bd1a98de565e5dc687876040519182526001604060020a031660208201526040908101905180910390a35050505050565b6109a661261f565b6000806109b1612648565b600080548190819060ff16156109c657600080fd5b600554600160a060020a033381169116636352211e8b60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610a1257600080fd5b5af11515610a1f57600080fd5b50505060405180519050600160a060020a0316141515610a3e57600080fd5b600654600160a060020a031663f761720a338b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a9457600080fd5b5af11515610aa157600080fd5b5050506040518051159050610ab557600080fd5b6001886001604060020a031610158015610adb5750620f423f886001604060020a031611155b1515610ae657600080fd5b600554600160a060020a031663425189e08a60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b1515610b2f57600080fd5b5af11515610b3c57600080fd5b505050604051610180810160405296506001602088015161ffff1611610b6157600080fd5b6000898152600460205260408120544297509550851115610c3d576003805486908110610b8a57fe5b906000526020600020906002020160a060405190810160409081528254600160a060020a03811683526001604060020a0360a060020a9091048116602084015260019093015480841691830191909152680100000000000000008104831660608301908152608060020a9091048316608083015260095491965088831692919091169051016001604060020a0316111580610c325750600084608001516001604060020a0316115b1515610c3d57600080fd5b600854600160a060020a031615610cb757600854600160a060020a031663f0f2805f8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610c9657600080fd5b5af11515610ca357600080fd5b5050506040518051159050610cb757600080fd5b6003805493506001840190610ccc9082612676565b506003805484908110610cdb57fe5b60009182526020909120600290910201805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a0316177fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a6001604060020a038c81169190910291909117825560018201805467ffffffffffffffff1916918b1691909117905560038054919350906000198501908110610d7b57fe5b60009182526020909120600160029092020101546001604060020a0368010000000000000000909104811691508616819010610de7576001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a03891602179055610e19565b6001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a038416021790555b60008981526004602052604090819020849055600160a060020a0333169084907fc1d216ccef269f8b3a6b1259100ee87a3d906db2eff416243a2cd5fa925fc6e6908c905190815260200160405180910390a3505050505050505050565b600754600090600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610eca57600080fd5b5af11515610ed757600080fd5b50505060405180519150505b90565b60085460a060020a90046001604060020a031681565b60005433600160a060020a039081166101009092041614610f1c57600080fd5b60005460ff161515610f2d57600080fd5b6000805460ff19169055565b60005433600160a060020a039081166101009092041614610f5957600080fd5b61012c816001604060020a031610158015610f8057506283d600816001604060020a031611155b1515610f8b57600080fd5b6009805467ffffffffffffffff19166001604060020a0392909216919091179055565b60025460009033600160a060020a0390811691161480610fe1575060005433600160a060020a0390811661010090920416145b1515610fec57600080fd5b600754600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561103c57600080fd5b5af1151561104957600080fd5b50505060405180519150506000811161106157600080fd5b600754600254600160a060020a039182169163a9059cbb91168360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156110be57600080fd5b5af115156110cb57600080fd5b50505050565b60005433600160a060020a0390811661010090920416146110f157600080fd5b600160a060020a038116151561110657600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600554600160a060020a031681565b60046020526000908152604090205481565b60005433600160a060020a03908116610100909204161461117657600080fd5b60005460ff161561118657600080fd5b6000805460ff19166001179055565b60005433600160a060020a0390811661010090920416146111b557600080fd5b600160a060020a03811615156111ca57600080fd5b600054600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360008054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6009546801000000000000000090046001604060020a031681565b600254600160a060020a031681565b6000805460ff161561127b57600080fd5b60075433600160a060020a0390811691161461129657600080fd5b60088211156112a457600080fd5b6112dc83838080601f016020809104026020016040519081016040528181529291906020840183838082843750611e9a945050505050565b90506112e9868683611ef4565b505050505050565b60008054819060ff161561130457600080fd5b600554600160a060020a033381169116636352211e8560405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561135057600080fd5b5af1151561135d57600080fd5b50505060405180519050600160a060020a031614151561137c57600080fd5b6000838152600460205260408120549250821161139857600080fd5b60038054839081106113a657fe5b60009182526020909120600290910201805490915033600160a060020a039081169116146113d357600080fd5b6001810154608060020a90046001604060020a0316156113f257600080fd5b60018101805477ffffffffffffffff000000000000000000000000000000001916608060020a179055600160a060020a033316827fcdb71aeb448b31793e3483f9d7f902e28c1a418e0fea9aa871e19dd0f791a79a8560405190815260200160405180910390a3505050565b60025433600160a060020a039081169116148061148e575060005433600160a060020a0390811661010090920416145b151561149957600080fd5b600160a060020a03811615156114ae57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000828152600460205260408120544282808084111561158457600380548590811061150557fe5b90600052602060002090600202019150826001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a031611801561157657506001820154608060020a90046001604060020a0316155b15611584576001945061162e565b60008681526004602052604081205494508411156116295760038054859081106115aa57fe5b90600052602060002090600202019050826001604060020a0316600960009054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a031611801561161b57506001810154608060020a90046001604060020a0316155b15611629576001945061162e565b600094505b5050505092915050565b600754600160a060020a031681565b60005460ff1681565b60005433600160a060020a03908116610100909204161461167057600080fd5b600160a060020a038116151561168557600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008060008060006116c4612648565b6003546001604060020a038816106116db57600080fd5b600380546001604060020a0389169081106116f257fe5b906000526020600020906002020160a060405190810160409081528254600160a060020a03811683526001604060020a0360a060020a909104811660208401526001909301548084169183019190915268010000000000000000810483166060830152608060020a90049091166080820152905080519550806020015194508060400151935080606001519250806080015191505091939590929450565b60015433600160a060020a03908116911614806117c0575060005433600160a060020a0390811661010090920416145b15156117cb57600080fd5b600160a060020a03811615156117e057600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000546101009004600160a060020a031681565b600654600160a060020a031681565b600854600160a060020a031681565b600154600160a060020a031681565b60035490565b6003546000906001604060020a0383161061187057600080fd5b6118798261229b565b6001604060020a031692915050565b6118906126a7565b61189a8383612359565b9392505050565b60008181526004602052604081205481808083111561194a5760038054849081106118c857fe5b90600052602060002090600202019150429050806001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a031611801561193c57506001820154608060020a90046001604060020a0316155b1561194a576001935061194f565b600093505b505050919050565b61195f6126a7565b6119676126a7565b61196f6126a7565b6119776126a7565b61197f6126a7565b600080600061198e8a8a612359565b975087519250826040518059106119a25750595b90808252806020026020018201604052509650826040518059106119c35750595b90808252806020026020018201604052509550826040518059106119e45750595b9080825280602002602001820160405250945082604051805910611a055750595b90808252806020026020018201604052509350600091505b82821015611b2e576003888381518110611a3357fe5b906020019060200201516001604060020a0316815481101515611a5257fe5b600091825260209091206002909102018054909150600160a060020a0316878381518110611a7c57fe5b600160a060020a0390921660209283029091019091015280546001604060020a0360a060020a90910416868381518110611ab257fe5b6001604060020a0392831660209182029092010152600182015416858381518110611ad957fe5b6001604060020a0392831660209182029092010152600182015468010000000000000000900416848381518110611b0c57fe5b6001604060020a03909216602092830290910190910152600190910190611a1d565b5050509295509295909350565b6003805482908110611b4957fe5b600091825260209091206002909102018054600190910154600160a060020a03821692506001604060020a0360a060020a90920482169181811691680100000000000000008104821691608060020a9091041685565b6000838152600460205260408120544282808080851115611c47576003805486908110611bc857fe5b90600052602060002090600202019250836001604060020a0316600960009054906101000a90046001604060020a03168460010160089054906101000a90046001604060020a0316016001604060020a0316118015611c3957506001830154608060020a90046001604060020a0316155b15611c475760019550611d96565b6000888152600460205260408120549550851115611cec576003805486908110611c6d57fe5b90600052602060002090600202019150836001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a0316118015611cde57506001820154608060020a90046001604060020a0316155b15611cec5760019550611d96565b6000878152600460205260408120549550851115611d91576003805486908110611d1257fe5b90600052602060002090600202019050836001604060020a0316600960009054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a0316118015611d8357506001810154608060020a90046001604060020a0316155b15611d915760019550611d96565b600095505b50505050509392505050565b600254600090819033600160a060020a0390811691161480611dd7575060005433600160a060020a0390811661010090920416145b1515611de257600080fd5b60008311611def57600080fd5b600160a060020a03841615611e045783611e11565b600254600160a060020a03165b915050600160a060020a0330163180831015611e5d57600160a060020a03821683156108fc0284604051600060405180830381858888f193505050501515611e5857600080fd5b6110cb565b81600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f1935050505015156110cb57600080fd5b6000808080845190505b80821015611eeb576001828203036101000a858381518110611ec257fe5b016020015160f860020a900460f860020a0260f860020a90040283019250600182019150611ea4565b50909392505050565b6000818152600460205260408120549080808080808611611f1457600080fd5b6003805487908110611f2257fe5b6000918252602090912060095460029092020160018101549096504295506001604060020a03808716928116680100000000000000009092048116919091011611611f6c57600080fd5b6001850154608060020a90046001604060020a031615611f8b57600080fd5b600554600160a060020a0316636352211e8860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611fd357600080fd5b5af11515611fe057600080fd5b50505060405180518654909450600160a060020a03808616911614905061200657600080fd5b600160a060020a03838116908a16141561201f57600080fd5b6001850154612045906001604060020a0316670de0b6b3a764000063ffffffff6125d216565b915087821461205357600080fd5b600754600160a060020a03166323b872dd8a308b60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156120b657600080fd5b5af115156120c357600080fd5b5050506040518051905015156120d857600080fd5b6001850180546001604060020a03808716608060020a0277ffffffffffffffff0000000000000000000000000000000019909216919091179182905560098054680100000000000000008082048416948416949094019092169092026fffffffffffffffff00000000000000001990911617815561217090600a9061216490859063ffffffff6125d216565b9063ffffffff61260816565b600554909150600160a060020a03166318ad052b888b60405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b15156121ca57600080fd5b5af115156121d757600080fd5b5050600754600160a060020a0316905063a9059cbb848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561223157600080fd5b5af1151561223e57600080fd5b50505088600160a060020a031683600160a060020a0316877f45e9d235b5fac5014a75c840aad21eae15af2aef787f467e4c835ea44806a4d08a8660405191825260208201526040908101905180910390a4505050505050505050565b6009546003546000916001604060020a03908116420391849184918291841690035b6000816001604060020a0316111561234e5760026001604060020a0382160491508184019250846001604060020a03166003846001604060020a031681548110151561230557fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a031610156123465760018301935081900360001901612349565b50805b6122bd565b509195945050505050565b6123616126a7565b60008060008061236f6126a7565b60008061237a6126a7565b6009546001604060020a03908116420398506000908c168190116123a7576123a2600061229b565b6123a9565b8b5b600354909850965060006001604060020a038c16116123d357876001604060020a031687036123de565b8a6001604060020a03165b95508515156123ec57600195505b856040518059106123fa5750595b90808252806020026020018201604052509450600093508792505b86836001604060020a0316101561252457886001604060020a03166003846001604060020a031681548110151561244857fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a03161180156124b65750600380546001604060020a03851690811061249057fe5b6000918252602090912060029091020160010154608060020a90046001604060020a0316155b15612519578285858060010196506001604060020a0316815181106124d757fe5b6001604060020a03928316602091820290920101526000908c1611801561250f57508a6001604060020a0316846001604060020a0316145b1561251957612524565b826001019250612415565b8451846001604060020a0316141561253e578499506125c3565b836001604060020a03166040518059106125555750595b90808252806020026020018201604052509150600090505b836001604060020a03168110156125bf5784818151811061258a57fe5b906020019060200201518282815181106125a057fe5b6001604060020a0390921660209283029091019091015260010161256d565b8199505b50505050505050505092915050565b6000808315156125e55760009150612601565b508282028284828115156125f557fe5b04146125fd57fe5b8091505b5092915050565b600080828481151561261657fe5b04949350505050565b610180604051908101604052600c815b60008152600019909101906020018161262f5790505090565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b8154818355818115116126a2576002028160020283600052602060002091820191016126a291906126b9565b505050565b60206040519081016040526000815290565b610ee391905b808211156127185780547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101805477ffffffffffffffffffffffffffffffffffffffffffffffff191690556002016126bf565b50905600a165627a7a7230582021ab59ba768fef567fb184fcca9b7eea8e59dc3e79da8b87803c514e63dfd2820029000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b20000000000000000000000007e43581b19ab509bcf9397a2efd1ab10233f27de
Deployed Bytecode
0x6060604052600436106101a85763ffffffff60e060020a6000350416630cbf54c881146101b55780630cf7f3b5146101e45780630f3de489146102065780631a3ae67a1461022857806320ec75c21461024d57806330efb8d3146102605780634b852c031461027357806351784a7514610292578063535c69b6146102a557806355a373d6146102c4578063609e4427146102f357806367d0661d14610309578063704b6c021461031c578063789cf5e21461033b57806382cb9df91461034e5780638f4ffcb11461036157806396b5a755146103975780639b8d3064146103ad578063a5c464b3146103cc578063b0d997d9146103f9578063b187bd261461040c578063ba112d501461041f578063bc12e3d71461043e578063bf8bdac1146104a5578063bfae2f0e146104c4578063c11b2252146104d7578063c95acadd146104ea578063cdd977e0146104fd578063d9ac9a8814610510578063e3f6194814610523578063eeef9d5514610542578063f0f2805f146105ba578063f1496070146105d0578063f16332db1461075d578063f3b42c4014610773578063f3fef3a31461078f575b34156101b357600080fd5b005b34156101c057600080fd5b6101c86107b1565b6040516001604060020a03909116815260200160405180910390f35b34156101ef57600080fd5b6101b36004356001604060020a03602435166107c0565b341561021157600080fd5b6101b36004356001604060020a036024351661099e565b341561023357600080fd5b61023b610e77565b60405190815260200160405180910390f35b341561025857600080fd5b6101c8610ee6565b341561026b57600080fd5b6101b3610efc565b341561027e57600080fd5b6101b36001604060020a0360043516610f39565b341561029d57600080fd5b6101b3610fae565b34156102b057600080fd5b6101b3600160a060020a03600435166110d1565b34156102cf57600080fd5b6102d7611135565b604051600160a060020a03909116815260200160405180910390f35b34156102fe57600080fd5b61023b600435611144565b341561031457600080fd5b6101b3611156565b341561032757600080fd5b6101b3600160a060020a0360043516611195565b341561034657600080fd5b6101c8611240565b341561035957600080fd5b6102d761125b565b341561036c57600080fd5b6101b360048035600160a060020a03908116916024803592604435169160643591820191013561126a565b34156103a257600080fd5b6101b36004356112f1565b34156103b857600080fd5b6101b3600160a060020a036004351661145e565b34156103d757600080fd5b6103e56004356024356114dd565b604051901515815260200160405180910390f35b341561040457600080fd5b6102d7611638565b341561041757600080fd5b6103e5611647565b341561042a57600080fd5b6101b3600160a060020a0360043516611650565b341561044957600080fd5b61045d6001604060020a03600435166116b4565b604051600160a060020a0390951685526001604060020a03938416602086015291831660408086019190915290831660608501529116608083015260a0909101905180910390f35b34156104b057600080fd5b6101b3600160a060020a0360043516611790565b34156104cf57600080fd5b6102d761180f565b34156104e257600080fd5b6102d7611823565b34156104f557600080fd5b6102d7611832565b341561050857600080fd5b6102d7611841565b341561051b57600080fd5b61023b611850565b341561052e57600080fd5b61023b6001604060020a0360043516611856565b341561054d57600080fd5b6105676001604060020a0360043581169060243516611888565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156105a657808201518382015260200161058e565b505050509050019250505060405180910390f35b34156105c557600080fd5b6103e56004356118a1565b34156105db57600080fd5b6105f56001604060020a0360043581169060243516611957565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b8381101561064557808201518382015260200161062d565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b8381101561068457808201518382015260200161066c565b50505050905001868103845289818151815260200191508051906020019060200280838360005b838110156106c35780820151838201526020016106ab565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156107025780820151838201526020016106ea565b50505050905001868103825287818151815260200191508051906020019060200280838360005b83811015610741578082015183820152602001610729565b505050509050019a505050505050505050505060405180910390f35b341561076857600080fd5b61045d600435611b3b565b341561077e57600080fd5b6103e5600435602435604435611b9f565b341561079a57600080fd5b6101b3600160a060020a0360043516602435611da2565b6009546001604060020a031681565b600080548190819060ff16156107d557600080fd5b600554600160a060020a033381169116636352211e8760405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561082157600080fd5b5af1151561082e57600080fd5b50505060405180519050600160a060020a031614151561084d57600080fd5b6000858152600460205260408120549350831161086957600080fd5b600380548490811061087757fe5b60009182526020909120600290910201805490925033600160a060020a039081169116146108a457600080fd5b6001820154608060020a90046001604060020a0316156108c357600080fd5b50600954600182015442916001604060020a038084166801000000000000000090930481169181169190910116116108fa57600080fd5b6001846001604060020a0316101580156109205750620f423f846001604060020a031611155b151561092b57600080fd5b60018201805467ffffffffffffffff19166001604060020a03861617905533600160a060020a0316837fe87817898c8d35d94ba66dede60e4a76272a3353f85c3291bd1a98de565e5dc687876040519182526001604060020a031660208201526040908101905180910390a35050505050565b6109a661261f565b6000806109b1612648565b600080548190819060ff16156109c657600080fd5b600554600160a060020a033381169116636352211e8b60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610a1257600080fd5b5af11515610a1f57600080fd5b50505060405180519050600160a060020a0316141515610a3e57600080fd5b600654600160a060020a031663f761720a338b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a9457600080fd5b5af11515610aa157600080fd5b5050506040518051159050610ab557600080fd5b6001886001604060020a031610158015610adb5750620f423f886001604060020a031611155b1515610ae657600080fd5b600554600160a060020a031663425189e08a60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b1515610b2f57600080fd5b5af11515610b3c57600080fd5b505050604051610180810160405296506001602088015161ffff1611610b6157600080fd5b6000898152600460205260408120544297509550851115610c3d576003805486908110610b8a57fe5b906000526020600020906002020160a060405190810160409081528254600160a060020a03811683526001604060020a0360a060020a9091048116602084015260019093015480841691830191909152680100000000000000008104831660608301908152608060020a9091048316608083015260095491965088831692919091169051016001604060020a0316111580610c325750600084608001516001604060020a0316115b1515610c3d57600080fd5b600854600160a060020a031615610cb757600854600160a060020a031663f0f2805f8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610c9657600080fd5b5af11515610ca357600080fd5b5050506040518051159050610cb757600080fd5b6003805493506001840190610ccc9082612676565b506003805484908110610cdb57fe5b60009182526020909120600290910201805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a0316177fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a6001604060020a038c81169190910291909117825560018201805467ffffffffffffffff1916918b1691909117905560038054919350906000198501908110610d7b57fe5b60009182526020909120600160029092020101546001604060020a0368010000000000000000909104811691508616819010610de7576001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a03891602179055610e19565b6001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a038416021790555b60008981526004602052604090819020849055600160a060020a0333169084907fc1d216ccef269f8b3a6b1259100ee87a3d906db2eff416243a2cd5fa925fc6e6908c905190815260200160405180910390a3505050505050505050565b600754600090600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610eca57600080fd5b5af11515610ed757600080fd5b50505060405180519150505b90565b60085460a060020a90046001604060020a031681565b60005433600160a060020a039081166101009092041614610f1c57600080fd5b60005460ff161515610f2d57600080fd5b6000805460ff19169055565b60005433600160a060020a039081166101009092041614610f5957600080fd5b61012c816001604060020a031610158015610f8057506283d600816001604060020a031611155b1515610f8b57600080fd5b6009805467ffffffffffffffff19166001604060020a0392909216919091179055565b60025460009033600160a060020a0390811691161480610fe1575060005433600160a060020a0390811661010090920416145b1515610fec57600080fd5b600754600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561103c57600080fd5b5af1151561104957600080fd5b50505060405180519150506000811161106157600080fd5b600754600254600160a060020a039182169163a9059cbb91168360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156110be57600080fd5b5af115156110cb57600080fd5b50505050565b60005433600160a060020a0390811661010090920416146110f157600080fd5b600160a060020a038116151561110657600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600554600160a060020a031681565b60046020526000908152604090205481565b60005433600160a060020a03908116610100909204161461117657600080fd5b60005460ff161561118657600080fd5b6000805460ff19166001179055565b60005433600160a060020a0390811661010090920416146111b557600080fd5b600160a060020a03811615156111ca57600080fd5b600054600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360008054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6009546801000000000000000090046001604060020a031681565b600254600160a060020a031681565b6000805460ff161561127b57600080fd5b60075433600160a060020a0390811691161461129657600080fd5b60088211156112a457600080fd5b6112dc83838080601f016020809104026020016040519081016040528181529291906020840183838082843750611e9a945050505050565b90506112e9868683611ef4565b505050505050565b60008054819060ff161561130457600080fd5b600554600160a060020a033381169116636352211e8560405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561135057600080fd5b5af1151561135d57600080fd5b50505060405180519050600160a060020a031614151561137c57600080fd5b6000838152600460205260408120549250821161139857600080fd5b60038054839081106113a657fe5b60009182526020909120600290910201805490915033600160a060020a039081169116146113d357600080fd5b6001810154608060020a90046001604060020a0316156113f257600080fd5b60018101805477ffffffffffffffff000000000000000000000000000000001916608060020a179055600160a060020a033316827fcdb71aeb448b31793e3483f9d7f902e28c1a418e0fea9aa871e19dd0f791a79a8560405190815260200160405180910390a3505050565b60025433600160a060020a039081169116148061148e575060005433600160a060020a0390811661010090920416145b151561149957600080fd5b600160a060020a03811615156114ae57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000828152600460205260408120544282808084111561158457600380548590811061150557fe5b90600052602060002090600202019150826001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a031611801561157657506001820154608060020a90046001604060020a0316155b15611584576001945061162e565b60008681526004602052604081205494508411156116295760038054859081106115aa57fe5b90600052602060002090600202019050826001604060020a0316600960009054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a031611801561161b57506001810154608060020a90046001604060020a0316155b15611629576001945061162e565b600094505b5050505092915050565b600754600160a060020a031681565b60005460ff1681565b60005433600160a060020a03908116610100909204161461167057600080fd5b600160a060020a038116151561168557600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008060008060006116c4612648565b6003546001604060020a038816106116db57600080fd5b600380546001604060020a0389169081106116f257fe5b906000526020600020906002020160a060405190810160409081528254600160a060020a03811683526001604060020a0360a060020a909104811660208401526001909301548084169183019190915268010000000000000000810483166060830152608060020a90049091166080820152905080519550806020015194508060400151935080606001519250806080015191505091939590929450565b60015433600160a060020a03908116911614806117c0575060005433600160a060020a0390811661010090920416145b15156117cb57600080fd5b600160a060020a03811615156117e057600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000546101009004600160a060020a031681565b600654600160a060020a031681565b600854600160a060020a031681565b600154600160a060020a031681565b60035490565b6003546000906001604060020a0383161061187057600080fd5b6118798261229b565b6001604060020a031692915050565b6118906126a7565b61189a8383612359565b9392505050565b60008181526004602052604081205481808083111561194a5760038054849081106118c857fe5b90600052602060002090600202019150429050806001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a031611801561193c57506001820154608060020a90046001604060020a0316155b1561194a576001935061194f565b600093505b505050919050565b61195f6126a7565b6119676126a7565b61196f6126a7565b6119776126a7565b61197f6126a7565b600080600061198e8a8a612359565b975087519250826040518059106119a25750595b90808252806020026020018201604052509650826040518059106119c35750595b90808252806020026020018201604052509550826040518059106119e45750595b9080825280602002602001820160405250945082604051805910611a055750595b90808252806020026020018201604052509350600091505b82821015611b2e576003888381518110611a3357fe5b906020019060200201516001604060020a0316815481101515611a5257fe5b600091825260209091206002909102018054909150600160a060020a0316878381518110611a7c57fe5b600160a060020a0390921660209283029091019091015280546001604060020a0360a060020a90910416868381518110611ab257fe5b6001604060020a0392831660209182029092010152600182015416858381518110611ad957fe5b6001604060020a0392831660209182029092010152600182015468010000000000000000900416848381518110611b0c57fe5b6001604060020a03909216602092830290910190910152600190910190611a1d565b5050509295509295909350565b6003805482908110611b4957fe5b600091825260209091206002909102018054600190910154600160a060020a03821692506001604060020a0360a060020a90920482169181811691680100000000000000008104821691608060020a9091041685565b6000838152600460205260408120544282808080851115611c47576003805486908110611bc857fe5b90600052602060002090600202019250836001604060020a0316600960009054906101000a90046001604060020a03168460010160089054906101000a90046001604060020a0316016001604060020a0316118015611c3957506001830154608060020a90046001604060020a0316155b15611c475760019550611d96565b6000888152600460205260408120549550851115611cec576003805486908110611c6d57fe5b90600052602060002090600202019150836001604060020a0316600960009054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a0316118015611cde57506001820154608060020a90046001604060020a0316155b15611cec5760019550611d96565b6000878152600460205260408120549550851115611d91576003805486908110611d1257fe5b90600052602060002090600202019050836001604060020a0316600960009054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a0316118015611d8357506001810154608060020a90046001604060020a0316155b15611d915760019550611d96565b600095505b50505050509392505050565b600254600090819033600160a060020a0390811691161480611dd7575060005433600160a060020a0390811661010090920416145b1515611de257600080fd5b60008311611def57600080fd5b600160a060020a03841615611e045783611e11565b600254600160a060020a03165b915050600160a060020a0330163180831015611e5d57600160a060020a03821683156108fc0284604051600060405180830381858888f193505050501515611e5857600080fd5b6110cb565b81600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f1935050505015156110cb57600080fd5b6000808080845190505b80821015611eeb576001828203036101000a858381518110611ec257fe5b016020015160f860020a900460f860020a0260f860020a90040283019250600182019150611ea4565b50909392505050565b6000818152600460205260408120549080808080808611611f1457600080fd5b6003805487908110611f2257fe5b6000918252602090912060095460029092020160018101549096504295506001604060020a03808716928116680100000000000000009092048116919091011611611f6c57600080fd5b6001850154608060020a90046001604060020a031615611f8b57600080fd5b600554600160a060020a0316636352211e8860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611fd357600080fd5b5af11515611fe057600080fd5b50505060405180518654909450600160a060020a03808616911614905061200657600080fd5b600160a060020a03838116908a16141561201f57600080fd5b6001850154612045906001604060020a0316670de0b6b3a764000063ffffffff6125d216565b915087821461205357600080fd5b600754600160a060020a03166323b872dd8a308b60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156120b657600080fd5b5af115156120c357600080fd5b5050506040518051905015156120d857600080fd5b6001850180546001604060020a03808716608060020a0277ffffffffffffffff0000000000000000000000000000000019909216919091179182905560098054680100000000000000008082048416948416949094019092169092026fffffffffffffffff00000000000000001990911617815561217090600a9061216490859063ffffffff6125d216565b9063ffffffff61260816565b600554909150600160a060020a03166318ad052b888b60405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b15156121ca57600080fd5b5af115156121d757600080fd5b5050600754600160a060020a0316905063a9059cbb848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561223157600080fd5b5af1151561223e57600080fd5b50505088600160a060020a031683600160a060020a0316877f45e9d235b5fac5014a75c840aad21eae15af2aef787f467e4c835ea44806a4d08a8660405191825260208201526040908101905180910390a4505050505050505050565b6009546003546000916001604060020a03908116420391849184918291841690035b6000816001604060020a0316111561234e5760026001604060020a0382160491508184019250846001604060020a03166003846001604060020a031681548110151561230557fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a031610156123465760018301935081900360001901612349565b50805b6122bd565b509195945050505050565b6123616126a7565b60008060008061236f6126a7565b60008061237a6126a7565b6009546001604060020a03908116420398506000908c168190116123a7576123a2600061229b565b6123a9565b8b5b600354909850965060006001604060020a038c16116123d357876001604060020a031687036123de565b8a6001604060020a03165b95508515156123ec57600195505b856040518059106123fa5750595b90808252806020026020018201604052509450600093508792505b86836001604060020a0316101561252457886001604060020a03166003846001604060020a031681548110151561244857fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a03161180156124b65750600380546001604060020a03851690811061249057fe5b6000918252602090912060029091020160010154608060020a90046001604060020a0316155b15612519578285858060010196506001604060020a0316815181106124d757fe5b6001604060020a03928316602091820290920101526000908c1611801561250f57508a6001604060020a0316846001604060020a0316145b1561251957612524565b826001019250612415565b8451846001604060020a0316141561253e578499506125c3565b836001604060020a03166040518059106125555750595b90808252806020026020018201604052509150600090505b836001604060020a03168110156125bf5784818151811061258a57fe5b906020019060200201518282815181106125a057fe5b6001604060020a0390921660209283029091019091015260010161256d565b8199505b50505050505050505092915050565b6000808315156125e55760009150612601565b508282028284828115156125f557fe5b04146125fd57fe5b8091505b5092915050565b600080828481151561261657fe5b04949350505050565b610180604051908101604052600c815b60008152600019909101906020018161262f5790505090565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b8154818355818115116126a2576002028160020283600052602060002091820191016126a291906126b9565b505050565b60206040519081016040526000815290565b610ee391905b808211156127185780547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101805477ffffffffffffffffffffffffffffffffffffffffffffffff191690556002016126bf565b50905600a165627a7a7230582021ab59ba768fef567fb184fcca9b7eea8e59dc3e79da8b87803c514e63dfd2820029
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://21ab59ba768fef567fb184fcca9b7eea8e59dc3e79da8b87803c514e63dfd282
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.