Source Code
Latest 25 from a total of 11,927 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Share Withdraw | 18522428 | 766 days ago | IN | 0 ETH | 0.00207936 | ||||
| New Auction | 7027432 | 2531 days ago | IN | 0 ETH | 0.00030492 | ||||
| New Auction | 7025291 | 2532 days ago | IN | 0 ETH | 0.00020328 | ||||
| New Auction | 6926174 | 2549 days ago | IN | 0 ETH | 0.00057742 | ||||
| New Auction | 6860898 | 2560 days ago | IN | 0 ETH | 0.00050821 | ||||
| New Auction | 6705230 | 2585 days ago | IN | 0 ETH | 0.00050821 | ||||
| Change Price | 6695206 | 2587 days ago | IN | 0 ETH | 0.0001381 | ||||
| New Auction | 6688529 | 2588 days ago | IN | 0 ETH | 0.00025406 | ||||
| New Auction | 6688525 | 2588 days ago | IN | 0 ETH | 0.00025406 | ||||
| New Auction | 6688523 | 2588 days ago | IN | 0 ETH | 0.00022375 | ||||
| New Auction | 6688515 | 2588 days ago | IN | 0 ETH | 0.00022375 | ||||
| New Auction | 6684050 | 2589 days ago | IN | 0 ETH | 0.00034645 | ||||
| New Auction | 6675588 | 2590 days ago | IN | 0 ETH | 0.00050821 | ||||
| New Auction | 6675582 | 2590 days ago | IN | 0 ETH | 0.0005771 | ||||
| New Auction | 6632928 | 2597 days ago | IN | 0 ETH | 0.00036954 | ||||
| New Auction | 6632918 | 2597 days ago | IN | 0 ETH | 0.00036954 | ||||
| Share Withdraw | 6622798 | 2599 days ago | IN | 0 ETH | 0.00024578 | ||||
| New Auction | 6613406 | 2600 days ago | IN | 0 ETH | 0.00030492 | ||||
| New Auction | 6613402 | 2600 days ago | IN | 0 ETH | 0.00030492 | ||||
| New Auction | 6613402 | 2600 days ago | IN | 0 ETH | 0.00030492 | ||||
| New Auction | 6613400 | 2600 days ago | IN | 0 ETH | 0.00030492 | ||||
| New Auction | 6613396 | 2600 days ago | IN | 0 ETH | 0.00030492 | ||||
| New Auction | 6613396 | 2600 days ago | IN | 0 ETH | 0.00030492 | ||||
| New Auction | 6613396 | 2600 days ago | IN | 0 ETH | 0.00030492 | ||||
| New Auction | 6613394 | 2600 days ago | IN | 0 ETH | 0.00030492 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 23223853 | 109 days ago | 0.00118181 ETH | ||||
| Transfer | 18522428 | 766 days ago | 0.00738969 ETH | ||||
| Transfer | 6622798 | 2599 days ago | 0.85754978 ETH | ||||
| Transfer | 6611070 | 2601 days ago | 0.00121818 ETH | ||||
| Transfer | 6444046 | 2628 days ago | 0.0045 ETH | ||||
| Transfer | 6444046 | 2628 days ago | 0.0001 ETH | ||||
| Transfer | 6444046 | 2628 days ago | 0.0001 ETH | ||||
| Transfer | 6444046 | 2628 days ago | 0.0045 ETH | ||||
| Transfer | 6444046 | 2628 days ago | 0.0001 ETH | ||||
| Transfer | 6444046 | 2628 days ago | 0.0001 ETH | ||||
| Transfer | 6427294 | 2631 days ago | 0.009 ETH | ||||
| Transfer | 6427294 | 2631 days ago | 0.0002 ETH | ||||
| Transfer | 6427294 | 2631 days ago | 0.0002 ETH | ||||
| Transfer | 6282833 | 2655 days ago | 0.072 ETH | ||||
| Transfer | 6282833 | 2655 days ago | 0.0016 ETH | ||||
| Transfer | 6282833 | 2655 days ago | 0.0016 ETH | ||||
| Transfer | 6265953 | 2657 days ago | 0.009 ETH | ||||
| Transfer | 6265953 | 2657 days ago | 0.0002 ETH | ||||
| Transfer | 6265953 | 2657 days ago | 0.0002 ETH | ||||
| Transfer | 6265942 | 2657 days ago | 0.0099 ETH | ||||
| Transfer | 6265942 | 2657 days ago | 0.00022 ETH | ||||
| Transfer | 6265942 | 2657 days ago | 0.00022 ETH | ||||
| Transfer | 6250480 | 2660 days ago | 0.0063 ETH | ||||
| Transfer | 6250480 | 2660 days ago | 0.00014 ETH | ||||
| Transfer | 6250480 | 2660 days ago | 0.00014 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ActionAuction
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 AccessNoWithdraw is AccessAdmin { address public addrService; address public addrFinance; modifier onlyService() { require(msg.sender == addrService); _; } modifier onlyFinance() { require(msg.sender == addrFinance); _; } modifier onlyManager() { require(msg.sender == addrService || msg.sender == addrAdmin || 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; } } 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 IEOMarketToken { 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); function totalSupply() external view returns(uint256); function totalSold() external view returns(uint256); function getShareholders() external view returns(address[100] addrArray, uint256[100] amountArray, uint256 soldAmount); } /** * @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 ActionAuction is AccessNoWithdraw { using SafeMath for uint256; event AuctionCreate(uint256 indexed index, address indexed seller, uint256 tokenId); event AuctionSold(uint256 indexed index, address indexed seller, address indexed buyer, uint256 tokenId, uint256 price); event AuctionCancel(uint256 indexed index, address indexed seller, uint256 tokenId); event AuctionPriceChange(uint256 indexed index, address indexed seller, uint256 tokenId, uint64 newGwei); struct Auction { address seller; // Current owner uint64 tokenId; // WarToken Id uint64 price; // Sale price(Gwei) 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 EOST token address IEOMarketToken public eostContract; /// @dev Plat Auction address IDataAuction public platAuction; /// @dev prizepool contact address address public poolContract; /// @dev share balance mapping(address => uint256) public shareBalances; /// @dev share holder withdraw history mapping(address => uint256) public shareHistory; /// @dev Auction fee have not alloted uint256 public accumulateFee; /// @dev Binary search start index uint64 public searchStartIndex; /// @dev Auction order lifetime(sec) uint64 public auctionDuration = 172800; /// @dev Trade sum(Gwei) uint64 public auctionSumGwei; function ActionAuction(address _nftAddr) 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); } function() external {} function setDataEquip(address _addr) external onlyAdmin { require(_addr != address(0)); equipContract = IDataEquip(_addr); } function setEOMarketToken(address _addr) external onlyAdmin { require(_addr != address(0)); eostContract = IEOMarketToken(_addr); } function setPlatAuction(address _addr) external onlyAdmin { require(_addr != address(0)); platAuction = IDataAuction(_addr); } function setPrizePool(address _addr) external onlyAdmin { require(_addr != address(0)); poolContract = _addr; } function setDuration(uint64 _duration) external onlyAdmin { require(_duration >= 300 && _duration <= 8640000); auctionDuration = _duration; } function newAuction(uint256 _tokenId, uint64 _priceGwei) external whenNotPaused { require(tokenContract.ownerOf(_tokenId) == msg.sender); require(!equipContract.isEquiped(msg.sender, _tokenId)); require(_priceGwei >= 1000000 && _priceGwei <= 999000000000); uint16[12] memory fashion = tokenContract.getFashion(_tokenId); require(fashion[1] > 1); uint64 tmNow = uint64(block.timestamp); uint256 lastIndex = latestAction[_tokenId]; // still on selling? if (lastIndex > 0) { Auction storage oldOrder = auctionArray[lastIndex]; require((oldOrder.tmStart + auctionDuration) <= tmNow || oldOrder.tmSell > 0); } if (address(platAuction) != address(0)) { require(!platAuction.isOnSale(_tokenId)); } uint256 newAuctionIndex = auctionArray.length; auctionArray.length += 1; Auction storage order = auctionArray[newAuctionIndex]; order.seller = msg.sender; order.tokenId = uint64(_tokenId); order.price = _priceGwei; uint64 lastActionStart = auctionArray[newAuctionIndex - 1].tmStart; // Make the arry is sorted by tmStart if (tmNow >= lastActionStart) { order.tmStart = tmNow; } else { order.tmStart = lastActionStart; } latestAction[_tokenId] = newAuctionIndex; AuctionCreate(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; AuctionCancel(lastIndex, msg.sender, _tokenId); } function changePrice(uint256 _tokenId, uint64 _priceGwei) 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(_priceGwei >= 1000000 && _priceGwei <= 999000000000); order.price = _priceGwei; AuctionPriceChange(lastIndex, msg.sender, _tokenId, _priceGwei); } function _shareDevCut(uint256 val) internal { uint256 shareVal = val.mul(6).div(10); uint256 leftVal = val.sub(shareVal); uint256 devVal = leftVal.div(2); accumulateFee = accumulateFee.add(shareVal); addrFinance.transfer(devVal); if (poolContract != address(0)) { poolContract.transfer(leftVal.sub(devVal)); } else { accumulateFee = accumulateFee.add(leftVal.sub(devVal)); } } function bid(uint256 _tokenId) external payable whenNotPaused { 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 != msg.sender); uint256 price = order.price * 1000000000; require(msg.value == price); order.tmSell = tmNow; auctionSumGwei += order.price; uint256 sellerProceeds = price.mul(9).div(10); uint256 devCut = price.sub(sellerProceeds); tokenContract.safeTransferByContract(_tokenId, msg.sender); _shareDevCut(devCut); realOwner.transfer(sellerProceeds); AuctionSold(lastIndex, realOwner, msg.sender, _tokenId, price); } function updateShares() external /*onlyManager*/ { uint256 currentFee = accumulateFee; var (addrArray, amountArray, soldAmount) = eostContract.getShareholders(); require(soldAmount > 0); uint256 avg = currentFee.div(soldAmount); uint256 shareVal; address addrZero = address(0); address addrHolder; for (uint64 i = 0; i < 100; ++i) { addrHolder = addrArray[i]; if (addrHolder == addrZero) { break; } shareVal = avg.mul(amountArray[i]); uint256 oldBalance = shareBalances[addrHolder]; shareBalances[addrHolder] = oldBalance.add(shareVal); currentFee = currentFee.sub(shareVal); } assert(currentFee <= 100); accumulateFee = currentFee; } /// @dev For EOST holders withdraw function shareWithdraw() external { address holder = msg.sender; uint256 sBalance = shareBalances[holder]; require (sBalance > 0); assert (sBalance <= this.balance); shareBalances[holder] = 0; // Must before transfer shareHistory[holder] += sBalance; holder.transfer(sBalance); } /// @dev deposit bonus for EOST holders function depositBonus () external payable { require (msg.value > 0); accumulateFee.add(msg.value); } 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 - 1; } 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":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setEOMarketToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setPlatAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"auctionDuration","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_priceGwei","type":"uint64"}],"name":"changePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_priceGwei","type":"uint64"}],"name":"newAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"accumulateFee","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":"updateShares","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"doUnpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setPrizePool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"bid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_duration","type":"uint64"}],"name":"setDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"depositBonus","outputs":[],"payable":true,"stateMutability":"payable","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":"eostContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"addrFinance","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"poolContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"auctionSumGwei","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"platAuction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"shareHistory","outputs":[{"name":"","type":"uint256"}],"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":false,"inputs":[],"name":"shareWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","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":true,"inputs":[{"name":"","type":"address"}],"name":"shareBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_nftAddr","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":"AuctionCreate","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":"AuctionSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"index","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"AuctionCancel","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":"newGwei","type":"uint64"}],"name":"AuctionPriceChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"preAdmin","type":"address"},{"indexed":true,"name":"newAdmin","type":"address"}],"name":"AdminTransferred","type":"event"}]Contract Creation Code
60606040526000805460ff19169055600d8054604060020a608060020a0319166a02a300000000000000000017905534156200003a57600080fd5b60405160208062002b6a8339810160405280805191506200005c9050620001f3565b6000805461010060a860020a031990811661010033600160a060020a0390811691820292831790931690911790925560018054600160a060020a031990811684179091556002805482169093179092556005805490921690841617905560a0604051908101604090815260008083526020830181905290820152600160608201819052608082018190526003805492935091908101620000fd838262000221565b6000928352602090922083916002020181518154600160a060020a031916600160a060020a0391909116178155602082015181546001604060020a0391909116740100000000000000000000000000000000000000000260a060020a60e060020a0319909116178155604082015160018201805467ffffffffffffffff19166001604060020a039290921691909117905560608201518160010160086101000a8154816001604060020a0302191690836001604060020a0316021790555060808201518160010160106101000a8154816001604060020a0302191690836001604060020a031602179055505050505050620002ad565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b815481835581811511620002505760020281600202836000526020600020918201910162000250919062000255565b505050565b620002aa91905b80821115620002a65780547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018054600160c060020a03191690556002016200025c565b5090565b90565b6128ad80620002bd6000396000f3006060604052600436106101ea5763ffffffff60e060020a60003504166302bb5d6e81146101f75780630ac313e0146102165780630cbf54c8146102355780630cf7f3b5146102645780630f3de489146102865780631155d042146102a857806320ec75c2146102cd5780632a410068146102e057806330efb8d3146102f3578063336c6d3914610306578063454a2ab3146103255780634b852c03146103305780634f0c563f1461034f57806355a373d614610357578063609e44271461038657806367d0661d1461039c578063704b6c02146103af57806373f9d5a0146103ce57806382cb9df9146103e157806388d52ef7146103f457806396b5a755146104075780639b8d30641461041d578063a5c464b31461043c578063a71b4c2614610469578063a9615f591461047c578063ab01f6681461048f578063b187bd26146104ae578063ba112d50146104c1578063bc12e3d7146104e0578063bf8bdac114610547578063bfae2f0e14610566578063c11b225214610579578063c6e994d71461058c578063cdd977e01461059f578063d9ac9a88146105b2578063e3f61948146105c5578063eeef9d55146105e4578063f0f2805f1461065c578063f149607014610672578063f16332db146107ff578063f3b42c4014610815578063f656ba5114610831575b34156101f557600080fd5b005b341561020257600080fd5b6101f5600160a060020a0360043516610850565b341561022157600080fd5b6101f5600160a060020a03600435166108a7565b341561024057600080fd5b6102486108fe565b6040516001604060020a03909116815260200160405180910390f35b341561026f57600080fd5b6101f56004356001604060020a0360243516610919565b341561029157600080fd5b6101f56004356001604060020a0360243516610aff565b34156102b357600080fd5b6102bb610fa7565b60405190815260200160405180910390f35b34156102d857600080fd5b610248610fad565b34156102eb57600080fd5b6101f5610fbc565b34156102fe57600080fd5b6101f5611170565b341561031157600080fd5b6101f5600160a060020a03600435166111ad565b6101f5600435611204565b341561033b57600080fd5b6101f56001604060020a0360043516611516565b6101f561159f565b341561036257600080fd5b61036a6115c2565b604051600160a060020a03909116815260200160405180910390f35b341561039157600080fd5b6102bb6004356115d1565b34156103a757600080fd5b6101f56115e3565b34156103ba57600080fd5b6101f5600160a060020a0360043516611622565b34156103d957600080fd5b61036a6116cd565b34156103ec57600080fd5b61036a6116dc565b34156103ff57600080fd5b61036a6116eb565b341561041257600080fd5b6101f56004356116fa565b341561042857600080fd5b6101f5600160a060020a0360043516611867565b341561044757600080fd5b6104556004356024356118d9565b604051901515815260200160405180910390f35b341561047457600080fd5b610248611a34565b341561048757600080fd5b61036a611a4a565b341561049a57600080fd5b6102bb600160a060020a0360043516611a59565b34156104b957600080fd5b610455611a6b565b34156104cc57600080fd5b6101f5600160a060020a0360043516611a74565b34156104eb57600080fd5b6104ff6001604060020a0360043516611acb565b604051600160a060020a0390951685526001604060020a03938416602086015291831660408086019190915290831660608501529116608083015260a0909101905180910390f35b341561055257600080fd5b6101f5600160a060020a0360043516611bb8565b341561057157600080fd5b61036a611c2a565b341561058457600080fd5b61036a611c3e565b341561059757600080fd5b6101f5611c4d565b34156105aa57600080fd5b61036a611cdf565b34156105bd57600080fd5b6102bb611cee565b34156105d057600080fd5b6102bb6001604060020a0360043516611cf9565b34156105ef57600080fd5b6106096001604060020a0360043581169060243516611d2b565b60405160208082528190810183818151815260200191508051906020019060200280838360005b83811015610648578082015183820152602001610630565b505050509050019250505060405180910390f35b341561066757600080fd5b610455600435611d44565b341561067d57600080fd5b6106976001604060020a0360043581169060243516611dfa565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b838110156106e75780820151838201526020016106cf565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b8381101561072657808201518382015260200161070e565b50505050905001868103845289818151815260200191508051906020019060200280838360005b8381101561076557808201518382015260200161074d565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156107a457808201518382015260200161078c565b50505050905001868103825287818151815260200191508051906020019060200280838360005b838110156107e35780820151838201526020016107cb565b505050509050019a505050505050505050505060405180910390f35b341561080a57600080fd5b6104ff600435611fef565b341561082057600080fd5b610455600435602435604435612064565b341561083c57600080fd5b6102bb600160a060020a0360043516612267565b60005433600160a060020a03908116610100909204161461087057600080fd5b600160a060020a038116151561088557600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a0390811661010090920416146108c757600080fd5b600160a060020a03811615156108dc57600080fd5b60088054600160a060020a031916600160a060020a0392909216919091179055565b600d546801000000000000000090046001604060020a031681565b600080548190819060ff161561092e57600080fd5b600554600160a060020a033381169116636352211e8760405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561097a57600080fd5b5af1151561098757600080fd5b50505060405180519050600160a060020a03161415156109a657600080fd5b600085815260046020526040812054935083116109c257600080fd5b60038054849081106109d057fe5b60009182526020909120600290910201805490925033600160a060020a039081169116146109fd57600080fd5b6001820154608060020a90046001604060020a031615610a1c57600080fd5b50600d54600182015442916001604060020a0380841668010000000000000000928390048216929093048116919091011611610a5757600080fd5b620f4240846001604060020a031610158015610a81575064e8990a4600846001604060020a031611155b1515610a8c57600080fd5b60018201805467ffffffffffffffff19166001604060020a03861617905533600160a060020a0316837f9f297c706489b220981530945df5bcaca282e88f0ba6b299a6130ce96892a73f87876040519182526001604060020a031660208201526040908101905180910390a35050505050565b610b07612741565b600080548190819081908190819060ff1615610b2257600080fd5b600554600160a060020a033381169116636352211e8b60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610b6e57600080fd5b5af11515610b7b57600080fd5b50505060405180519050600160a060020a0316141515610b9a57600080fd5b600654600160a060020a031663f761720a338b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610bf057600080fd5b5af11515610bfd57600080fd5b5050506040518051159050610c1157600080fd5b620f4240886001604060020a031610158015610c3b575064e8990a4600886001604060020a031611155b1515610c4657600080fd5b600554600160a060020a031663425189e08a60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b1515610c8f57600080fd5b5af11515610c9c57600080fd5b505050604051610180810160405296506001602088015161ffff1611610cc157600080fd5b6000898152600460205260408120544297509550851115610d69576003805486908110610cea57fe5b90600052602060002090600202019350856001604060020a0316600d60089054906101000a90046001604060020a03168560010160089054906101000a90046001604060020a0316016001604060020a0316111580610d5e575060018401546000608060020a9091046001604060020a0316115b1515610d6957600080fd5b600854600160a060020a031615610de357600854600160a060020a031663f0f2805f8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610dc257600080fd5b5af11515610dcf57600080fd5b5050506040518051159050610de357600080fd5b6003805493506001840190610df8908261276a565b506003805484908110610e0757fe5b600091825260209091206002909102018054600160a060020a03191633600160a060020a0316177fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006001604060020a038c81169190910291909117825560018201805467ffffffffffffffff1916918b1691909117905560038054919350906000198501908110610eab57fe5b60009182526020909120600160029092020101546001604060020a0368010000000000000000909104811691508616819010610f17576001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a03891602179055610f49565b6001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a038416021790555b60008981526004602052604090819020849055600160a060020a0333169084907fe793ffbd8d1d9749a0cdd9b308cea8716ce980a0fd4c6d3ff797fee30b6b8d36908c905190815260200160405180910390a3505050505050505050565b600c5481565b600d546001604060020a031681565b6000610fc661279b565b610fce6127b6565b600c54600754909350600090819081908190819081908190600160a060020a03166341ca641e6040518163ffffffff1660e060020a02815260040161192060405180830381600087803b151561102357600080fd5b5af1151561103057600080fd5b50505060405180610c800180610c800180519060200160405298509850985060008711151561105e57600080fd5b61106e8a8863ffffffff61227916565b955060009350600091505b6064826001604060020a0316101561115457886001604060020a038316606481106110a057fe5b6020020151925083600160a060020a031683600160a060020a031614156110c657611154565b6110f0886001604060020a038416606481106110de57fe5b6020020151879063ffffffff61229516565b600160a060020a0384166000908152600a6020526040902054909550905061111e818663ffffffff6122c016565b600160a060020a0384166000908152600a60205260409020556111478a8663ffffffff6122cf16565b9950816001019150611079565b60648a111561115f57fe5b505050600c96909655505050505050565b60005433600160a060020a03908116610100909204161461119057600080fd5b60005460ff1615156111a157600080fd5b6000805460ff19169055565b60005433600160a060020a0390811661010090920416146111cd57600080fd5b600160a060020a03811615156111e257600080fd5b60098054600160a060020a031916600160a060020a0392909216919091179055565b6000805481908190819081908190819060ff161561122157600080fd5b6000888152600460205260408120549750871161123d57600080fd5b600380548890811061124b57fe5b90600052602060002090600202019550429450846001604060020a0316600d60089054906101000a90046001604060020a03168760010160089054906101000a90046001604060020a0316016001604060020a03161115156112ac57600080fd5b6001860154608060020a90046001604060020a0316156112cb57600080fd5b600554600160a060020a0316636352211e8960405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561131357600080fd5b5af1151561132057600080fd5b50505060405180518754909550600160a060020a03808716911614905061134657600080fd5b33600160a060020a031684600160a060020a03161415151561136757600080fd5b6001860154633b9aca006001604060020a039182160216925034831461138c57600080fd5b6001860180546001604060020a03808816608060020a90810277ffffffffffffffff00000000000000000000000000000000199384161793849055600d80548281048416958416959095019092160292909116919091179055611407600a6113fb85600963ffffffff61229516565b9063ffffffff61227916565b9150611419838363ffffffff6122cf16565b600554909150600160a060020a03166318ad052b893360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561147357600080fd5b5af1151561148057600080fd5b50505061148c816122e1565b600160a060020a03841682156108fc0283604051600060405180830381858888f1935050505015156114bd57600080fd5b33600160a060020a031684600160a060020a0316887f0d259704f0a3fdb5a78e979b1b2d94ad960184f4a9b79fdd4781596c9816949a8b8760405191825260208201526040908101905180910390a45050505050505050565b60005433600160a060020a03908116610100909204161461153657600080fd5b61012c816001604060020a03161015801561155d57506283d600816001604060020a031611155b151561156857600080fd5b600d80546001604060020a0390921668010000000000000000026fffffffffffffffff000000000000000019909216919091179055565b600034116115ac57600080fd5b600c546115bf903463ffffffff6122c016565b50565b600554600160a060020a031681565b60046020526000908152604090205481565b60005433600160a060020a03908116610100909204161461160357600080fd5b60005460ff161561161357600080fd5b6000805460ff19166001179055565b60005433600160a060020a03908116610100909204161461164257600080fd5b600160a060020a038116151561165757600080fd5b600054600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360008054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600754600160a060020a031681565b600254600160a060020a031681565b600954600160a060020a031681565b60008054819060ff161561170d57600080fd5b600554600160a060020a033381169116636352211e8560405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561175957600080fd5b5af1151561176657600080fd5b50505060405180519050600160a060020a031614151561178557600080fd5b600083815260046020526040812054925082116117a157600080fd5b60038054839081106117af57fe5b60009182526020909120600290910201805490915033600160a060020a039081169116146117dc57600080fd5b6001810154608060020a90046001604060020a0316156117fb57600080fd5b60018101805477ffffffffffffffff000000000000000000000000000000001916608060020a179055600160a060020a033316827fcfe2451676906fa3f3adb56a50efd88ebe9b61a1b7e55aef1995f2f7f08edd848560405190815260200160405180910390a3505050565b60025433600160a060020a0390811691161480611897575060005433600160a060020a0390811661010090920416145b15156118a257600080fd5b600160a060020a03811615156118b757600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b6000828152600460205260408120544282808084111561198057600380548590811061190157fe5b90600052602060002090600202019150826001604060020a0316600d60089054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a031611801561197257506001820154608060020a90046001604060020a0316155b156119805760019450611a2a565b6000868152600460205260408120549450841115611a255760038054859081106119a657fe5b90600052602060002090600202019050826001604060020a0316600d60089054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a0316118015611a1757506001810154608060020a90046001604060020a0316155b15611a255760019450611a2a565b600094505b5050505092915050565b600d54608060020a90046001604060020a031681565b600854600160a060020a031681565b600b6020526000908152604090205481565b60005460ff1681565b60005433600160a060020a039081166101009092041614611a9457600080fd5b600160a060020a0381161515611aa957600080fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b6000806000806000611adb6127de565b6003546001604060020a03881610611af257600080fd5b600380546001604060020a038916908110611b0957fe5b906000526020600020906002020160a060405190810160409081528254600160a060020a03811683526001604060020a0374010000000000000000000000000000000000000000909104811660208401526001909301548084169183019190915268010000000000000000810483166060830152608060020a90049091166080820152905080519550806020015194508060400151935080606001519250806080015191505091939590929450565b60015433600160a060020a0390811691161480611be8575060005433600160a060020a0390811661010090920416145b1515611bf357600080fd5b600160a060020a0381161515611c0857600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b6000546101009004600160a060020a031681565b600654600160a060020a031681565b33600160a060020a0381166000908152600a6020526040812054908111611c7357600080fd5b600160a060020a03301631811115611c8757fe5b600160a060020a0382166000818152600a60209081526040808320839055600b9091529081902080548401905582156108fc0290839051600060405180830381858888f193505050501515611cdb57600080fd5b5050565b600154600160a060020a031681565b600354600019015b90565b6003546000906001604060020a03831610611d1357600080fd5b611d1c826123f2565b6001604060020a031692915050565b611d3361280c565b611d3d83836124bc565b9392505050565b600081815260046020526040812054818080831115611ded576003805484908110611d6b57fe5b90600052602060002090600202019150429050806001604060020a0316600d60089054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a0316118015611ddf57506001820154608060020a90046001604060020a0316155b15611ded5760019350611df2565b600093505b505050919050565b611e0261280c565b611e0a61280c565b611e1261280c565b611e1a61280c565b611e2261280c565b6000806000611e318a8a6124bc565b97508751925082604051805910611e455750595b9080825280602002602001820160405250965082604051805910611e665750595b9080825280602002602001820160405250955082604051805910611e875750595b9080825280602002602001820160405250945082604051805910611ea85750595b90808252806020026020018201604052509350600091505b82821015611fe2576003888381518110611ed657fe5b906020019060200201516001604060020a0316815481101515611ef557fe5b600091825260209091206002909102018054909150600160a060020a0316878381518110611f1f57fe5b600160a060020a0390921660209283029091019091015280546001604060020a037401000000000000000000000000000000000000000090910416868381518110611f6657fe5b6001604060020a0392831660209182029092010152600182015416858381518110611f8d57fe5b6001604060020a0392831660209182029092010152600182015468010000000000000000900416848381518110611fc057fe5b6001604060020a03909216602092830290910190910152600190910190611ec0565b5050509295509295909350565b6003805482908110611ffd57fe5b600091825260209091206002909102018054600190910154600160a060020a03821692506001604060020a037401000000000000000000000000000000000000000090920482169181811691680100000000000000008104821691608060020a9091041685565b600083815260046020526040812054428280808085111561210c57600380548690811061208d57fe5b90600052602060002090600202019250836001604060020a0316600d60089054906101000a90046001604060020a03168460010160089054906101000a90046001604060020a0316016001604060020a03161180156120fe57506001830154608060020a90046001604060020a0316155b1561210c576001955061225b565b60008881526004602052604081205495508511156121b157600380548690811061213257fe5b90600052602060002090600202019150836001604060020a0316600d60089054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a03161180156121a357506001820154608060020a90046001604060020a0316155b156121b1576001955061225b565b60008781526004602052604081205495508511156122565760038054869081106121d757fe5b90600052602060002090600202019050836001604060020a0316600d60089054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a031611801561224857506001810154608060020a90046001604060020a0316155b15612256576001955061225b565b600095505b50505050509392505050565b600a6020526000908152604090205481565b600080828481151561228757fe5b0490508091505b5092915050565b6000808315156122a8576000915061228e565b508282028284828115156122b857fe5b0414611d3d57fe5b600082820183811015611d3d57fe5b6000828211156122db57fe5b50900390565b600080806122fb600a6113fb86600663ffffffff61229516565b925061230d848463ffffffff6122cf16565b915061232082600263ffffffff61227916565b600c54909150612336908463ffffffff6122c016565b600c55600254600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151561236c57600080fd5b600954600160a060020a0316156123c657600954600160a060020a03166108fc61239c848463ffffffff6122cf16565b9081150290604051600060405180830381858888f1935050505015156123c157600080fd5b6123ec565b6123e86123d9838363ffffffff6122cf16565b600c549063ffffffff6122c016565b600c555b50505050565b600d546003546000916001604060020a03680100000000000000009091048116420391849184918291841690035b6000816001604060020a031611156124b15760026001604060020a0382160491508184019250846001604060020a03166003846001604060020a031681548110151561246857fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a031610156124a957600183019350819003600019016124ac565b50805b612420565b509195945050505050565b6124c461280c565b6000806000806124d261280c565b6000806124dd61280c565b600d546001604060020a03680100000000000000009091048116420398506000908c168190116125165761251160006123f2565b612518565b8b5b600354909850965060006001604060020a038c161161254257876001604060020a0316870361254d565b8a6001604060020a03165b955085151561255b57600195505b856040518059106125695750595b90808252806020026020018201604052509450600093508792505b86836001604060020a0316101561269357886001604060020a03166003846001604060020a03168154811015156125b757fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a03161180156126255750600380546001604060020a0385169081106125ff57fe5b6000918252602090912060029091020160010154608060020a90046001604060020a0316155b15612688578285858060010196506001604060020a03168151811061264657fe5b6001604060020a03928316602091820290920101526000908c1611801561267e57508a6001604060020a0316846001604060020a0316145b1561268857612693565b826001019250612584565b8451846001604060020a031614156126ad57849950612732565b836001604060020a03166040518059106126c45750595b90808252806020026020018201604052509150600090505b836001604060020a031681101561272e578481815181106126f957fe5b9060200190602002015182828151811061270f57fe5b6001604060020a039092166020928302909101909101526001016126dc565b8199505b50505050505050505092915050565b610180604051908101604052600c815b6000815260001990910190602001816127515790505090565b81548183558181151161279657600202816002028360005260206000209182019101612796919061281e565b505050565b610c8060405190810160405260008152606360208201612751565b610c806040519081016040526064815b60008152602001906001900390816127c65790505090565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b60206040519081016040526000815290565b611cf691905b8082111561287d5780547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101805477ffffffffffffffffffffffffffffffffffffffffffffffff19169055600201612824565b50905600a165627a7a7230582023070814de4324bbf78b394cdded32525007211ea8ab90a35d2ed6a784a557a50029000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b2
Deployed Bytecode
0x6060604052600436106101ea5763ffffffff60e060020a60003504166302bb5d6e81146101f75780630ac313e0146102165780630cbf54c8146102355780630cf7f3b5146102645780630f3de489146102865780631155d042146102a857806320ec75c2146102cd5780632a410068146102e057806330efb8d3146102f3578063336c6d3914610306578063454a2ab3146103255780634b852c03146103305780634f0c563f1461034f57806355a373d614610357578063609e44271461038657806367d0661d1461039c578063704b6c02146103af57806373f9d5a0146103ce57806382cb9df9146103e157806388d52ef7146103f457806396b5a755146104075780639b8d30641461041d578063a5c464b31461043c578063a71b4c2614610469578063a9615f591461047c578063ab01f6681461048f578063b187bd26146104ae578063ba112d50146104c1578063bc12e3d7146104e0578063bf8bdac114610547578063bfae2f0e14610566578063c11b225214610579578063c6e994d71461058c578063cdd977e01461059f578063d9ac9a88146105b2578063e3f61948146105c5578063eeef9d55146105e4578063f0f2805f1461065c578063f149607014610672578063f16332db146107ff578063f3b42c4014610815578063f656ba5114610831575b34156101f557600080fd5b005b341561020257600080fd5b6101f5600160a060020a0360043516610850565b341561022157600080fd5b6101f5600160a060020a03600435166108a7565b341561024057600080fd5b6102486108fe565b6040516001604060020a03909116815260200160405180910390f35b341561026f57600080fd5b6101f56004356001604060020a0360243516610919565b341561029157600080fd5b6101f56004356001604060020a0360243516610aff565b34156102b357600080fd5b6102bb610fa7565b60405190815260200160405180910390f35b34156102d857600080fd5b610248610fad565b34156102eb57600080fd5b6101f5610fbc565b34156102fe57600080fd5b6101f5611170565b341561031157600080fd5b6101f5600160a060020a03600435166111ad565b6101f5600435611204565b341561033b57600080fd5b6101f56001604060020a0360043516611516565b6101f561159f565b341561036257600080fd5b61036a6115c2565b604051600160a060020a03909116815260200160405180910390f35b341561039157600080fd5b6102bb6004356115d1565b34156103a757600080fd5b6101f56115e3565b34156103ba57600080fd5b6101f5600160a060020a0360043516611622565b34156103d957600080fd5b61036a6116cd565b34156103ec57600080fd5b61036a6116dc565b34156103ff57600080fd5b61036a6116eb565b341561041257600080fd5b6101f56004356116fa565b341561042857600080fd5b6101f5600160a060020a0360043516611867565b341561044757600080fd5b6104556004356024356118d9565b604051901515815260200160405180910390f35b341561047457600080fd5b610248611a34565b341561048757600080fd5b61036a611a4a565b341561049a57600080fd5b6102bb600160a060020a0360043516611a59565b34156104b957600080fd5b610455611a6b565b34156104cc57600080fd5b6101f5600160a060020a0360043516611a74565b34156104eb57600080fd5b6104ff6001604060020a0360043516611acb565b604051600160a060020a0390951685526001604060020a03938416602086015291831660408086019190915290831660608501529116608083015260a0909101905180910390f35b341561055257600080fd5b6101f5600160a060020a0360043516611bb8565b341561057157600080fd5b61036a611c2a565b341561058457600080fd5b61036a611c3e565b341561059757600080fd5b6101f5611c4d565b34156105aa57600080fd5b61036a611cdf565b34156105bd57600080fd5b6102bb611cee565b34156105d057600080fd5b6102bb6001604060020a0360043516611cf9565b34156105ef57600080fd5b6106096001604060020a0360043581169060243516611d2b565b60405160208082528190810183818151815260200191508051906020019060200280838360005b83811015610648578082015183820152602001610630565b505050509050019250505060405180910390f35b341561066757600080fd5b610455600435611d44565b341561067d57600080fd5b6106976001604060020a0360043581169060243516611dfa565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b838110156106e75780820151838201526020016106cf565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b8381101561072657808201518382015260200161070e565b50505050905001868103845289818151815260200191508051906020019060200280838360005b8381101561076557808201518382015260200161074d565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156107a457808201518382015260200161078c565b50505050905001868103825287818151815260200191508051906020019060200280838360005b838110156107e35780820151838201526020016107cb565b505050509050019a505050505050505050505060405180910390f35b341561080a57600080fd5b6104ff600435611fef565b341561082057600080fd5b610455600435602435604435612064565b341561083c57600080fd5b6102bb600160a060020a0360043516612267565b60005433600160a060020a03908116610100909204161461087057600080fd5b600160a060020a038116151561088557600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a0390811661010090920416146108c757600080fd5b600160a060020a03811615156108dc57600080fd5b60088054600160a060020a031916600160a060020a0392909216919091179055565b600d546801000000000000000090046001604060020a031681565b600080548190819060ff161561092e57600080fd5b600554600160a060020a033381169116636352211e8760405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561097a57600080fd5b5af1151561098757600080fd5b50505060405180519050600160a060020a03161415156109a657600080fd5b600085815260046020526040812054935083116109c257600080fd5b60038054849081106109d057fe5b60009182526020909120600290910201805490925033600160a060020a039081169116146109fd57600080fd5b6001820154608060020a90046001604060020a031615610a1c57600080fd5b50600d54600182015442916001604060020a0380841668010000000000000000928390048216929093048116919091011611610a5757600080fd5b620f4240846001604060020a031610158015610a81575064e8990a4600846001604060020a031611155b1515610a8c57600080fd5b60018201805467ffffffffffffffff19166001604060020a03861617905533600160a060020a0316837f9f297c706489b220981530945df5bcaca282e88f0ba6b299a6130ce96892a73f87876040519182526001604060020a031660208201526040908101905180910390a35050505050565b610b07612741565b600080548190819081908190819060ff1615610b2257600080fd5b600554600160a060020a033381169116636352211e8b60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610b6e57600080fd5b5af11515610b7b57600080fd5b50505060405180519050600160a060020a0316141515610b9a57600080fd5b600654600160a060020a031663f761720a338b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610bf057600080fd5b5af11515610bfd57600080fd5b5050506040518051159050610c1157600080fd5b620f4240886001604060020a031610158015610c3b575064e8990a4600886001604060020a031611155b1515610c4657600080fd5b600554600160a060020a031663425189e08a60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b1515610c8f57600080fd5b5af11515610c9c57600080fd5b505050604051610180810160405296506001602088015161ffff1611610cc157600080fd5b6000898152600460205260408120544297509550851115610d69576003805486908110610cea57fe5b90600052602060002090600202019350856001604060020a0316600d60089054906101000a90046001604060020a03168560010160089054906101000a90046001604060020a0316016001604060020a0316111580610d5e575060018401546000608060020a9091046001604060020a0316115b1515610d6957600080fd5b600854600160a060020a031615610de357600854600160a060020a031663f0f2805f8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610dc257600080fd5b5af11515610dcf57600080fd5b5050506040518051159050610de357600080fd5b6003805493506001840190610df8908261276a565b506003805484908110610e0757fe5b600091825260209091206002909102018054600160a060020a03191633600160a060020a0316177fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006001604060020a038c81169190910291909117825560018201805467ffffffffffffffff1916918b1691909117905560038054919350906000198501908110610eab57fe5b60009182526020909120600160029092020101546001604060020a0368010000000000000000909104811691508616819010610f17576001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a03891602179055610f49565b6001820180546fffffffffffffffff00000000000000001916680100000000000000006001604060020a038416021790555b60008981526004602052604090819020849055600160a060020a0333169084907fe793ffbd8d1d9749a0cdd9b308cea8716ce980a0fd4c6d3ff797fee30b6b8d36908c905190815260200160405180910390a3505050505050505050565b600c5481565b600d546001604060020a031681565b6000610fc661279b565b610fce6127b6565b600c54600754909350600090819081908190819081908190600160a060020a03166341ca641e6040518163ffffffff1660e060020a02815260040161192060405180830381600087803b151561102357600080fd5b5af1151561103057600080fd5b50505060405180610c800180610c800180519060200160405298509850985060008711151561105e57600080fd5b61106e8a8863ffffffff61227916565b955060009350600091505b6064826001604060020a0316101561115457886001604060020a038316606481106110a057fe5b6020020151925083600160a060020a031683600160a060020a031614156110c657611154565b6110f0886001604060020a038416606481106110de57fe5b6020020151879063ffffffff61229516565b600160a060020a0384166000908152600a6020526040902054909550905061111e818663ffffffff6122c016565b600160a060020a0384166000908152600a60205260409020556111478a8663ffffffff6122cf16565b9950816001019150611079565b60648a111561115f57fe5b505050600c96909655505050505050565b60005433600160a060020a03908116610100909204161461119057600080fd5b60005460ff1615156111a157600080fd5b6000805460ff19169055565b60005433600160a060020a0390811661010090920416146111cd57600080fd5b600160a060020a03811615156111e257600080fd5b60098054600160a060020a031916600160a060020a0392909216919091179055565b6000805481908190819081908190819060ff161561122157600080fd5b6000888152600460205260408120549750871161123d57600080fd5b600380548890811061124b57fe5b90600052602060002090600202019550429450846001604060020a0316600d60089054906101000a90046001604060020a03168760010160089054906101000a90046001604060020a0316016001604060020a03161115156112ac57600080fd5b6001860154608060020a90046001604060020a0316156112cb57600080fd5b600554600160a060020a0316636352211e8960405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561131357600080fd5b5af1151561132057600080fd5b50505060405180518754909550600160a060020a03808716911614905061134657600080fd5b33600160a060020a031684600160a060020a03161415151561136757600080fd5b6001860154633b9aca006001604060020a039182160216925034831461138c57600080fd5b6001860180546001604060020a03808816608060020a90810277ffffffffffffffff00000000000000000000000000000000199384161793849055600d80548281048416958416959095019092160292909116919091179055611407600a6113fb85600963ffffffff61229516565b9063ffffffff61227916565b9150611419838363ffffffff6122cf16565b600554909150600160a060020a03166318ad052b893360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561147357600080fd5b5af1151561148057600080fd5b50505061148c816122e1565b600160a060020a03841682156108fc0283604051600060405180830381858888f1935050505015156114bd57600080fd5b33600160a060020a031684600160a060020a0316887f0d259704f0a3fdb5a78e979b1b2d94ad960184f4a9b79fdd4781596c9816949a8b8760405191825260208201526040908101905180910390a45050505050505050565b60005433600160a060020a03908116610100909204161461153657600080fd5b61012c816001604060020a03161015801561155d57506283d600816001604060020a031611155b151561156857600080fd5b600d80546001604060020a0390921668010000000000000000026fffffffffffffffff000000000000000019909216919091179055565b600034116115ac57600080fd5b600c546115bf903463ffffffff6122c016565b50565b600554600160a060020a031681565b60046020526000908152604090205481565b60005433600160a060020a03908116610100909204161461160357600080fd5b60005460ff161561161357600080fd5b6000805460ff19166001179055565b60005433600160a060020a03908116610100909204161461164257600080fd5b600160a060020a038116151561165757600080fd5b600054600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360008054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600754600160a060020a031681565b600254600160a060020a031681565b600954600160a060020a031681565b60008054819060ff161561170d57600080fd5b600554600160a060020a033381169116636352211e8560405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561175957600080fd5b5af1151561176657600080fd5b50505060405180519050600160a060020a031614151561178557600080fd5b600083815260046020526040812054925082116117a157600080fd5b60038054839081106117af57fe5b60009182526020909120600290910201805490915033600160a060020a039081169116146117dc57600080fd5b6001810154608060020a90046001604060020a0316156117fb57600080fd5b60018101805477ffffffffffffffff000000000000000000000000000000001916608060020a179055600160a060020a033316827fcfe2451676906fa3f3adb56a50efd88ebe9b61a1b7e55aef1995f2f7f08edd848560405190815260200160405180910390a3505050565b60025433600160a060020a0390811691161480611897575060005433600160a060020a0390811661010090920416145b15156118a257600080fd5b600160a060020a03811615156118b757600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b6000828152600460205260408120544282808084111561198057600380548590811061190157fe5b90600052602060002090600202019150826001604060020a0316600d60089054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a031611801561197257506001820154608060020a90046001604060020a0316155b156119805760019450611a2a565b6000868152600460205260408120549450841115611a255760038054859081106119a657fe5b90600052602060002090600202019050826001604060020a0316600d60089054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a0316118015611a1757506001810154608060020a90046001604060020a0316155b15611a255760019450611a2a565b600094505b5050505092915050565b600d54608060020a90046001604060020a031681565b600854600160a060020a031681565b600b6020526000908152604090205481565b60005460ff1681565b60005433600160a060020a039081166101009092041614611a9457600080fd5b600160a060020a0381161515611aa957600080fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b6000806000806000611adb6127de565b6003546001604060020a03881610611af257600080fd5b600380546001604060020a038916908110611b0957fe5b906000526020600020906002020160a060405190810160409081528254600160a060020a03811683526001604060020a0374010000000000000000000000000000000000000000909104811660208401526001909301548084169183019190915268010000000000000000810483166060830152608060020a90049091166080820152905080519550806020015194508060400151935080606001519250806080015191505091939590929450565b60015433600160a060020a0390811691161480611be8575060005433600160a060020a0390811661010090920416145b1515611bf357600080fd5b600160a060020a0381161515611c0857600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b6000546101009004600160a060020a031681565b600654600160a060020a031681565b33600160a060020a0381166000908152600a6020526040812054908111611c7357600080fd5b600160a060020a03301631811115611c8757fe5b600160a060020a0382166000818152600a60209081526040808320839055600b9091529081902080548401905582156108fc0290839051600060405180830381858888f193505050501515611cdb57600080fd5b5050565b600154600160a060020a031681565b600354600019015b90565b6003546000906001604060020a03831610611d1357600080fd5b611d1c826123f2565b6001604060020a031692915050565b611d3361280c565b611d3d83836124bc565b9392505050565b600081815260046020526040812054818080831115611ded576003805484908110611d6b57fe5b90600052602060002090600202019150429050806001604060020a0316600d60089054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a0316118015611ddf57506001820154608060020a90046001604060020a0316155b15611ded5760019350611df2565b600093505b505050919050565b611e0261280c565b611e0a61280c565b611e1261280c565b611e1a61280c565b611e2261280c565b6000806000611e318a8a6124bc565b97508751925082604051805910611e455750595b9080825280602002602001820160405250965082604051805910611e665750595b9080825280602002602001820160405250955082604051805910611e875750595b9080825280602002602001820160405250945082604051805910611ea85750595b90808252806020026020018201604052509350600091505b82821015611fe2576003888381518110611ed657fe5b906020019060200201516001604060020a0316815481101515611ef557fe5b600091825260209091206002909102018054909150600160a060020a0316878381518110611f1f57fe5b600160a060020a0390921660209283029091019091015280546001604060020a037401000000000000000000000000000000000000000090910416868381518110611f6657fe5b6001604060020a0392831660209182029092010152600182015416858381518110611f8d57fe5b6001604060020a0392831660209182029092010152600182015468010000000000000000900416848381518110611fc057fe5b6001604060020a03909216602092830290910190910152600190910190611ec0565b5050509295509295909350565b6003805482908110611ffd57fe5b600091825260209091206002909102018054600190910154600160a060020a03821692506001604060020a037401000000000000000000000000000000000000000090920482169181811691680100000000000000008104821691608060020a9091041685565b600083815260046020526040812054428280808085111561210c57600380548690811061208d57fe5b90600052602060002090600202019250836001604060020a0316600d60089054906101000a90046001604060020a03168460010160089054906101000a90046001604060020a0316016001604060020a03161180156120fe57506001830154608060020a90046001604060020a0316155b1561210c576001955061225b565b60008881526004602052604081205495508511156121b157600380548690811061213257fe5b90600052602060002090600202019150836001604060020a0316600d60089054906101000a90046001604060020a03168360010160089054906101000a90046001604060020a0316016001604060020a03161180156121a357506001820154608060020a90046001604060020a0316155b156121b1576001955061225b565b60008781526004602052604081205495508511156122565760038054869081106121d757fe5b90600052602060002090600202019050836001604060020a0316600d60089054906101000a90046001604060020a03168260010160089054906101000a90046001604060020a0316016001604060020a031611801561224857506001810154608060020a90046001604060020a0316155b15612256576001955061225b565b600095505b50505050509392505050565b600a6020526000908152604090205481565b600080828481151561228757fe5b0490508091505b5092915050565b6000808315156122a8576000915061228e565b508282028284828115156122b857fe5b0414611d3d57fe5b600082820183811015611d3d57fe5b6000828211156122db57fe5b50900390565b600080806122fb600a6113fb86600663ffffffff61229516565b925061230d848463ffffffff6122cf16565b915061232082600263ffffffff61227916565b600c54909150612336908463ffffffff6122c016565b600c55600254600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151561236c57600080fd5b600954600160a060020a0316156123c657600954600160a060020a03166108fc61239c848463ffffffff6122cf16565b9081150290604051600060405180830381858888f1935050505015156123c157600080fd5b6123ec565b6123e86123d9838363ffffffff6122cf16565b600c549063ffffffff6122c016565b600c555b50505050565b600d546003546000916001604060020a03680100000000000000009091048116420391849184918291841690035b6000816001604060020a031611156124b15760026001604060020a0382160491508184019250846001604060020a03166003846001604060020a031681548110151561246857fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a031610156124a957600183019350819003600019016124ac565b50805b612420565b509195945050505050565b6124c461280c565b6000806000806124d261280c565b6000806124dd61280c565b600d546001604060020a03680100000000000000009091048116420398506000908c168190116125165761251160006123f2565b612518565b8b5b600354909850965060006001604060020a038c161161254257876001604060020a0316870361254d565b8a6001604060020a03165b955085151561255b57600195505b856040518059106125695750595b90808252806020026020018201604052509450600093508792505b86836001604060020a0316101561269357886001604060020a03166003846001604060020a03168154811015156125b757fe5b60009182526020909120600290910201600101546801000000000000000090046001604060020a03161180156126255750600380546001604060020a0385169081106125ff57fe5b6000918252602090912060029091020160010154608060020a90046001604060020a0316155b15612688578285858060010196506001604060020a03168151811061264657fe5b6001604060020a03928316602091820290920101526000908c1611801561267e57508a6001604060020a0316846001604060020a0316145b1561268857612693565b826001019250612584565b8451846001604060020a031614156126ad57849950612732565b836001604060020a03166040518059106126c45750595b90808252806020026020018201604052509150600090505b836001604060020a031681101561272e578481815181106126f957fe5b9060200190602002015182828151811061270f57fe5b6001604060020a039092166020928302909101909101526001016126dc565b8199505b50505050505050505092915050565b610180604051908101604052600c815b6000815260001990910190602001816127515790505090565b81548183558181151161279657600202816002028360005260206000209182019101612796919061281e565b505050565b610c8060405190810160405260008152606360208201612751565b610c806040519081016040526064815b60008152602001906001900390816127c65790505090565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b60206040519081016040526000815290565b611cf691905b8082111561287d5780547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101805477ffffffffffffffffffffffffffffffffffffffffffffffff19169055600201612824565b50905600a165627a7a7230582023070814de4324bbf78b394cdded32525007211ea8ab90a35d2ed6a784a557a50029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b2
-----Decoded View---------------
Arg [0] : _nftAddr (address): 0xDA9c03dFd4D137F926c3cF6953cb951832Eb08b2
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b2
Swarm Source
bzzr://23070814de4324bbf78b394cdded32525007211ea8ab90a35d2ed6a784a557a5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $3,117.48 | 0.4452 | $1,387.95 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.