More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 9,466 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mining One Free | 9504842 | 1635 days ago | IN | 0 ETH | 0.00127819 | ||||
Mining One Free | 9504842 | 1635 days ago | IN | 0 ETH | 0.0012777 | ||||
Mining One Free | 7777743 | 1911 days ago | IN | 0 ETH | 0.00060139 | ||||
Mining One Self | 7189499 | 2010 days ago | IN | 0.01 ETH | 0.00063668 | ||||
Mining One Self | 7189468 | 2010 days ago | IN | 0.01 ETH | 0.00063657 | ||||
Mining One Self | 6925790 | 2059 days ago | IN | 0.01 ETH | 0.00143349 | ||||
Mining Five | 6879458 | 2066 days ago | IN | 0.0475 ETH | 0.00044722 | ||||
Mining One Self | 6871765 | 2068 days ago | IN | 0.01 ETH | 0.00079563 | ||||
Mining One Self | 6860891 | 2069 days ago | IN | 0.01 ETH | 0.0006368 | ||||
Mining Ten | 6834651 | 2074 days ago | IN | 0.09 ETH | 0.00044985 | ||||
Mining Ten | 6834522 | 2074 days ago | IN | 0.09 ETH | 0.00044985 | ||||
Mining One Free | 6833115 | 2074 days ago | IN | 0 ETH | 0.00105184 | ||||
Mining One Self | 6764528 | 2085 days ago | IN | 0.01 ETH | 0.00095545 | ||||
Mining One Self | 6754254 | 2087 days ago | IN | 0.01 ETH | 0.00063678 | ||||
Mining One Self | 6743847 | 2089 days ago | IN | 0.01 ETH | 0.00063696 | ||||
Mining One Free | 6688770 | 2098 days ago | IN | 0 ETH | 0.00075137 | ||||
Mining One Free | 6688763 | 2098 days ago | IN | 0 ETH | 0.0007514 | ||||
Mining One Free | 6688760 | 2098 days ago | IN | 0 ETH | 0.00075124 | ||||
Mining One Self | 6683918 | 2099 days ago | IN | 0.01 ETH | 0.00047742 | ||||
Mining One Self | 6683905 | 2099 days ago | IN | 0.01 ETH | 0.00047763 | ||||
Mining One Self | 6680068 | 2099 days ago | IN | 0.01 ETH | 0.00031848 | ||||
Mining One Self | 6679245 | 2099 days ago | IN | 0.01 ETH | 0.00035025 | ||||
Mining One Self | 6679133 | 2099 days ago | IN | 0.01 ETH | 0.00047752 | ||||
Mining One Self | 6679127 | 2099 days ago | IN | 0.01 ETH | 0.00047751 | ||||
Mining Five | 6676778 | 2100 days ago | IN | 0.0475 ETH | 0.00035778 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
7189499 | 2010 days ago | 0.005 ETH | ||||
7189499 | 2010 days ago | 0.005 ETH | ||||
7189468 | 2010 days ago | 0.005 ETH | ||||
7189468 | 2010 days ago | 0.005 ETH | ||||
6925790 | 2059 days ago | 0.005 ETH | ||||
6925790 | 2059 days ago | 0.005 ETH | ||||
6879458 | 2066 days ago | 0.02375 ETH | ||||
6879458 | 2066 days ago | 0.02375 ETH | ||||
6871765 | 2068 days ago | 0.005 ETH | ||||
6871765 | 2068 days ago | 0.005 ETH | ||||
6860891 | 2069 days ago | 0.005 ETH | ||||
6860891 | 2069 days ago | 0.005 ETH | ||||
6834651 | 2074 days ago | 0.045 ETH | ||||
6834651 | 2074 days ago | 0.045 ETH | ||||
6834522 | 2074 days ago | 0.045 ETH | ||||
6834522 | 2074 days ago | 0.045 ETH | ||||
6764528 | 2085 days ago | 0.005 ETH | ||||
6764528 | 2085 days ago | 0.005 ETH | ||||
6754254 | 2087 days ago | 0.005 ETH | ||||
6754254 | 2087 days ago | 0.005 ETH | ||||
6743847 | 2089 days ago | 0.005 ETH | ||||
6743847 | 2089 days ago | 0.005 ETH | ||||
6683918 | 2099 days ago | 0.005 ETH | ||||
6683918 | 2099 days ago | 0.005 ETH | ||||
6683905 | 2099 days ago | 0.005 ETH |
Loading...
Loading
Contract Name:
ActionMining
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-04-26 */ /* ==================================================================== */ /* Copyright (c) 2018 The ether.online Project. All rights reserved. /* /* https://ether.online The first RPG game of blockchain /* /* authors [email protected] /* [email protected] /* ==================================================================== */ pragma solidity ^0.4.20; /// @title ERC-165 Standard Interface Detection /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md interface ERC165 { function supportsInterface(bytes4 interfaceID) external view returns (bool); } /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md contract ERC721 is ERC165 { event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; function transferFrom(address _from, address _to, uint256 _tokenId) external; function approve(address _approved, uint256 _tokenId) external; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool); } /// @title ERC-721 Non-Fungible Token Standard interface ERC721TokenReceiver { function onERC721Received(address _from, uint256 _tokenId, bytes data) external returns(bytes4); } contract AccessAdmin { bool public isPaused = false; address public addrAdmin; event AdminTransferred(address indexed preAdmin, address indexed newAdmin); function AccessAdmin() public { addrAdmin = msg.sender; } modifier onlyAdmin() { require(msg.sender == addrAdmin); _; } modifier whenNotPaused() { require(!isPaused); _; } modifier whenPaused { require(isPaused); _; } function setAdmin(address _newAdmin) external onlyAdmin { require(_newAdmin != address(0)); AdminTransferred(addrAdmin, _newAdmin); addrAdmin = _newAdmin; } function doPause() external onlyAdmin whenNotPaused { isPaused = true; } function doUnpause() external onlyAdmin whenPaused { isPaused = false; } } contract AccessService is AccessAdmin { address public addrService; address public addrFinance; modifier onlyService() { require(msg.sender == addrService); _; } modifier onlyFinance() { require(msg.sender == addrFinance); _; } function setService(address _newService) external { require(msg.sender == addrService || msg.sender == addrAdmin); require(_newService != address(0)); addrService = _newService; } function setFinance(address _newFinance) external { require(msg.sender == addrFinance || msg.sender == addrAdmin); require(_newFinance != address(0)); addrFinance = _newFinance; } function withdraw(address _target, uint256 _amount) external { require(msg.sender == addrFinance || msg.sender == addrAdmin); require(_amount > 0); address receiver = _target == address(0) ? addrFinance : _target; uint256 balance = this.balance; if (_amount < balance) { receiver.transfer(_amount); } else { receiver.transfer(this.balance); } } } interface IDataMining { function getRecommender(address _target) external view returns(address); function subFreeMineral(address _target) external returns(bool); } interface IDataEquip { function isEquiped(address _target, uint256 _tokenId) external view returns(bool); function isEquipedAny2(address _target, uint256 _tokenId1, uint256 _tokenId2) external view returns(bool); function isEquipedAny3(address _target, uint256 _tokenId1, uint256 _tokenId2, uint256 _tokenId3) external view returns(bool); } contract Random { uint256 _seed; function _rand() internal returns (uint256) { _seed = uint256(keccak256(_seed, block.blockhash(block.number - 1), block.coinbase, block.difficulty)); return _seed; } function _randBySeed(uint256 _outSeed) internal view returns (uint256) { return uint256(keccak256(_outSeed, block.blockhash(block.number - 1), block.coinbase, block.difficulty)); } } /** * @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 ActionMining is Random, AccessService { using SafeMath for uint256; event MiningOrderCreated(uint256 indexed index, address indexed miner, uint64 chestCnt); event MiningResolved(uint256 indexed index, address indexed miner, uint64 chestCnt); struct MiningOrder { address miner; uint64 chestCnt; uint64 tmCreate; uint64 tmResolve; } /// @dev Max fashion suit id uint16 maxProtoId; /// @dev If the recommender can get reward bool isRecommendOpen; /// @dev prizepool percent uint256 constant prizePoolPercent = 50; /// @dev prizepool contact address address poolContract; /// @dev WarToken(NFT) contract address WarToken public tokenContract; /// @dev DataMining contract address IDataMining public dataContract; /// @dev mining order array MiningOrder[] public ordersArray; mapping (uint16 => uint256) public protoIdToCount; function ActionMining(address _nftAddr, uint16 _maxProtoId) public { addrAdmin = msg.sender; addrService = msg.sender; addrFinance = msg.sender; tokenContract = WarToken(_nftAddr); maxProtoId = _maxProtoId; MiningOrder memory order = MiningOrder(0, 0, 1, 1); ordersArray.push(order); } function() external payable { } function getOrderCount() external view returns(uint256) { return ordersArray.length - 1; } function setDataMining(address _addr) external onlyAdmin { require(_addr != address(0)); dataContract = IDataMining(_addr); } function setPrizePool(address _addr) external onlyAdmin { require(_addr != address(0)); poolContract = _addr; } function setMaxProtoId(uint16 _maxProtoId) external onlyAdmin { require(_maxProtoId > 0 && _maxProtoId < 10000); require(_maxProtoId != maxProtoId); maxProtoId = _maxProtoId; } function setRecommendStatus(bool _isOpen) external onlyAdmin { require(_isOpen != isRecommendOpen); isRecommendOpen = _isOpen; } function setFashionSuitCount(uint16 _protoId, uint256 _cnt) external onlyAdmin { require(_protoId > 0 && _protoId <= maxProtoId); require(_cnt > 0 && _cnt <= 5); require(protoIdToCount[_protoId] != _cnt); protoIdToCount[_protoId] = _cnt; } function _getFashionParam(uint256 _seed) internal view returns(uint16[9] attrs) { uint256 curSeed = _seed; // quality uint256 rdm = curSeed % 10000; uint16 qtyParam; if (rdm < 6900) { attrs[1] = 1; qtyParam = 0; } else if (rdm < 8700) { attrs[1] = 2; qtyParam = 1; } else if (rdm < 9600) { attrs[1] = 3; qtyParam = 2; } else if (rdm < 9900) { attrs[1] = 4; qtyParam = 4; } else { attrs[1] = 5; qtyParam = 6; } // protoId curSeed /= 10000; rdm = ((curSeed % 10000) / (9999 / maxProtoId)) + 1; attrs[0] = uint16(rdm <= maxProtoId ? rdm : maxProtoId); // pos curSeed /= 10000; uint256 tmpVal = protoIdToCount[attrs[0]]; if (tmpVal == 0) { tmpVal = 5; } rdm = ((curSeed % 10000) / (9999 / tmpVal)) + 1; uint16 pos = uint16(rdm <= tmpVal ? rdm : tmpVal); attrs[2] = pos; rdm = attrs[0] % 3; curSeed /= 10000; tmpVal = (curSeed % 10000) % 21 + 90; if (rdm == 0) { if (pos == 1) { uint256 attr = (200 + qtyParam * 200) * tmpVal / 100; // +atk attrs[4] = uint16(attr * 40 / 100); attrs[5] = uint16(attr * 160 / 100); } else if (pos == 2) { attrs[6] = uint16((40 + qtyParam * 40) * tmpVal / 100); // +def } else if (pos == 3) { attrs[3] = uint16((600 + qtyParam * 600) * tmpVal / 100); // +hp } else if (pos == 4) { attrs[6] = uint16((60 + qtyParam * 60) * tmpVal / 100); // +def } else { attrs[3] = uint16((400 + qtyParam * 400) * tmpVal / 100); // +hp } } else if (rdm == 1) { if (pos == 1) { uint256 attr2 = (190 + qtyParam * 190) * tmpVal / 100; // +atk attrs[4] = uint16(attr2 * 50 / 100); attrs[5] = uint16(attr2 * 150 / 100); } else if (pos == 2) { attrs[6] = uint16((42 + qtyParam * 42) * tmpVal / 100); // +def } else if (pos == 3) { attrs[3] = uint16((630 + qtyParam * 630) * tmpVal / 100); // +hp } else if (pos == 4) { attrs[6] = uint16((63 + qtyParam * 63) * tmpVal / 100); // +def } else { attrs[3] = uint16((420 + qtyParam * 420) * tmpVal / 100); // +hp } } else { if (pos == 1) { uint256 attr3 = (210 + qtyParam * 210) * tmpVal / 100; // +atk attrs[4] = uint16(attr3 * 30 / 100); attrs[5] = uint16(attr3 * 170 / 100); } else if (pos == 2) { attrs[6] = uint16((38 + qtyParam * 38) * tmpVal / 100); // +def } else if (pos == 3) { attrs[3] = uint16((570 + qtyParam * 570) * tmpVal / 100); // +hp } else if (pos == 4) { attrs[6] = uint16((57 + qtyParam * 57) * tmpVal / 100); // +def } else { attrs[3] = uint16((380 + qtyParam * 380) * tmpVal / 100); // +hp } } attrs[8] = 0; } function _addOrder(address _miner, uint64 _chestCnt) internal { uint64 newOrderId = uint64(ordersArray.length); ordersArray.length += 1; MiningOrder storage order = ordersArray[newOrderId]; order.miner = _miner; order.chestCnt = _chestCnt; order.tmCreate = uint64(block.timestamp); MiningOrderCreated(newOrderId, _miner, _chestCnt); } function _transferHelper(uint256 ethVal) private { bool recommenderSended = false; uint256 fVal; uint256 pVal; if (isRecommendOpen) { address recommender = dataContract.getRecommender(msg.sender); if (recommender != address(0)) { uint256 rVal = ethVal.div(10); fVal = ethVal.sub(rVal).mul(prizePoolPercent).div(100); addrFinance.transfer(fVal); recommenderSended = true; recommender.transfer(rVal); pVal = ethVal.sub(rVal).sub(fVal); if (poolContract != address(0) && pVal > 0) { poolContract.transfer(pVal); } } } if (!recommenderSended) { fVal = ethVal.mul(prizePoolPercent).div(100); pVal = ethVal.sub(fVal); addrFinance.transfer(fVal); if (poolContract != address(0) && pVal > 0) { poolContract.transfer(pVal); } } } function miningOneFree() external whenNotPaused { require(dataContract != address(0)); uint256 seed = _rand(); uint16[9] memory attrs = _getFashionParam(seed); require(dataContract.subFreeMineral(msg.sender)); tokenContract.createFashion(msg.sender, attrs, 3); MiningResolved(0, msg.sender, 1); } function miningOneSelf() external payable whenNotPaused { require(msg.value >= 0.01 ether); uint256 seed = _rand(); uint16[9] memory attrs = _getFashionParam(seed); tokenContract.createFashion(msg.sender, attrs, 2); _transferHelper(0.01 ether); if (msg.value > 0.01 ether) { msg.sender.transfer(msg.value - 0.01 ether); } MiningResolved(0, msg.sender, 1); } function miningOne() external payable whenNotPaused { require(msg.value >= 0.01 ether); _addOrder(msg.sender, 1); _transferHelper(0.01 ether); if (msg.value > 0.01 ether) { msg.sender.transfer(msg.value - 0.01 ether); } } function miningThree() external payable whenNotPaused { require(msg.value >= 0.03 ether); _addOrder(msg.sender, 3); _transferHelper(0.03 ether); if (msg.value > 0.03 ether) { msg.sender.transfer(msg.value - 0.03 ether); } } function miningFive() external payable whenNotPaused { require(msg.value >= 0.0475 ether); _addOrder(msg.sender, 5); _transferHelper(0.0475 ether); if (msg.value > 0.0475 ether) { msg.sender.transfer(msg.value - 0.0475 ether); } } function miningTen() external payable whenNotPaused { require(msg.value >= 0.09 ether); _addOrder(msg.sender, 10); _transferHelper(0.09 ether); if (msg.value > 0.09 ether) { msg.sender.transfer(msg.value - 0.09 ether); } } function miningResolve(uint256 _orderIndex, uint256 _seed) external onlyService { require(_orderIndex > 0 && _orderIndex < ordersArray.length); MiningOrder storage order = ordersArray[_orderIndex]; require(order.tmResolve == 0); address miner = order.miner; require(miner != address(0)); uint64 chestCnt = order.chestCnt; require(chestCnt >= 1 && chestCnt <= 10); uint256 rdm = _seed; uint16[9] memory attrs; for (uint64 i = 0; i < chestCnt; ++i) { rdm = _randBySeed(rdm); attrs = _getFashionParam(rdm); tokenContract.createFashion(miner, attrs, 2); } order.tmResolve = uint64(block.timestamp); MiningResolved(_orderIndex, miner, chestCnt); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[],"name":"miningFive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"dataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orderIndex","type":"uint256"},{"name":"_seed","type":"uint256"}],"name":"miningResolve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint16"}],"name":"protoIdToCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"_maxProtoId","type":"uint16"}],"name":"setMaxProtoId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"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":"addrFinance","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOrderCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"miningOneFree","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_protoId","type":"uint16"},{"name":"_cnt","type":"uint256"}],"name":"setFashionSuitCount","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":"","type":"uint256"}],"name":"ordersArray","outputs":[{"name":"miner","type":"address"},{"name":"chestCnt","type":"uint64"},{"name":"tmCreate","type":"uint64"},{"name":"tmResolve","type":"uint64"}],"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":"miningOne","outputs":[],"payable":true,"stateMutability":"payable","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":false,"inputs":[],"name":"miningOneSelf","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"miningTen","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"addrService","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_isOpen","type":"bool"}],"name":"setRecommendStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setDataMining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"miningThree","outputs":[],"payable":true,"stateMutability":"payable","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":"_maxProtoId","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"index","type":"uint256"},{"indexed":true,"name":"miner","type":"address"},{"indexed":false,"name":"chestCnt","type":"uint64"}],"name":"MiningOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"index","type":"uint256"},{"indexed":true,"name":"miner","type":"address"},{"indexed":false,"name":"chestCnt","type":"uint64"}],"name":"MiningResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"preAdmin","type":"address"},{"indexed":true,"name":"newAdmin","type":"address"}],"name":"AdminTransferred","type":"event"}]
Contract Creation Code
60606040526001805460ff1916905534156200001a57600080fd5b60405160408062001e6483398101604052808051919060200180519150620000439050620001d1565b6001805461010060a860020a031990811661010033600160a060020a0390811691820292831790931690911790925560028054600160a060020a031990811684179091556003805460058054841694891694909417909355911690911760a060020a61ffff0219167401000000000000000000000000000000000000000061ffff85160217905560806040519081016040908152600080835260208301526001908201819052606082018190526007805492935091908101620001078382620001f8565b6000928352602090922083916002020181518154600160a060020a031916600160a060020a0391909116178155602082015181546001604060020a0391909116740100000000000000000000000000000000000000000260a060020a60e060020a0319909116178155604082015160018201805467ffffffffffffffff19166001604060020a039290921691909117905560608201518160010160086101000a8154816001604060020a0302191690836001604060020a0316021790555050505050505062000284565b60806040519081016040908152600080835260208301819052908201819052606082015290565b81548183558181151162000227576002028160020283600052602060002091820191016200022791906200022c565b505050565b6200028191905b808211156200027d5780547fffffffff000000000000000000000000000000000000000000000000000000001681556001810180546001608060020a031916905560020162000233565b5090565b90565b611bd080620002946000396000f3006060604052600436106101445763ffffffff60e060020a600035041662cb527f81146101465780630d6688181461014e578063216ea2391461017d578063234dfdfd1461019657806330efb8d3146101c2578063336c6d39146101d557806345e3553e146101f457806355a373d61461020e57806367d0661d14610221578063704b6c021461023457806382cb9df9146102535780638d0a5fbb146102665780639714a27c1461027957806397ce8c431461028c5780639b8d3064146102a9578063a96c879e146102c8578063b187bd261461031f578063b3f17c2014610346578063bf8bdac11461034e578063bfae2f0e1461036d578063c16c085114610380578063cc4bf6a314610388578063cdd977e014610390578063d80162fc146103a3578063dbb62f24146103bb578063ec91b550146103da578063f3fef3a3146103e2575b005b610144610404565b341561015957600080fd5b610161610490565b604051600160a060020a03909116815260200160405180910390f35b341561018857600080fd5b61014460043560243561049f565b34156101a157600080fd5b6101b061ffff600435166106ed565b60405190815260200160405180910390f35b34156101cd57600080fd5b6101446106ff565b34156101e057600080fd5b610144600160a060020a036004351661073c565b34156101ff57600080fd5b61014461ffff600435166107a0565b341561021957600080fd5b610161610834565b341561022c57600080fd5b610144610843565b341561023f57600080fd5b610144600160a060020a0360043516610881565b341561025e57600080fd5b61016161092c565b341561027157600080fd5b6101b061093b565b341561028457600080fd5b610144610946565b341561029757600080fd5b61014461ffff60043516602435610af2565b34156102b457600080fd5b610144600160a060020a0360043516610b95565b34156102d357600080fd5b6102de600435610c14565b604051600160a060020a03909416845267ffffffffffffffff9283166020850152908216604080850191909152911660608301526080909101905180910390f35b341561032a57600080fd5b610332610c6e565b604051901515815260200160405180910390f35b610144610c77565b341561035957600080fd5b610144600160a060020a0360043516610d01565b341561037857600080fd5b610161610d80565b610144610d94565b610144610f27565b341561039b57600080fd5b610161610fb5565b34156103ae57600080fd5b6101446004351515610fc4565b34156103c657600080fd5b610144600160a060020a0360043516611058565b6101446110bc565b34156103ed57600080fd5b610144600160a060020a0360043516602435611146565b60015460ff161561041457600080fd5b66a8c0ff92d4c00034101561042857600080fd5b610433336005611244565b61044366a8c0ff92d4c000611345565b66a8c0ff92d4c00034111561048e57600160a060020a03331666a8c0ff92d4bfff19340180156108fc0290604051600060405180830381858888f19350505050151561048e57600080fd5b565b600654600160a060020a031681565b6000806000806104ad611aef565b60025460009033600160a060020a039081169116146104cb57600080fd5b6000881180156104dc575060075488105b15156104e757600080fd5b60078054899081106104f557fe5b60009182526020909120600290910201600181015490965068010000000000000000900467ffffffffffffffff161561052d57600080fd5b8554600160a060020a0316945084151561054657600080fd5b855460a060020a900467ffffffffffffffff169350600184108015906105775750600a8467ffffffffffffffff1611155b151561058257600080fd5b5085915060005b8367ffffffffffffffff168167ffffffffffffffff161015610668576105ae836115d0565b92506105b983611624565b600554909250600160a060020a0316639cc477b28684600260405160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b8381101561061a578082015183820152602001610602565b505050509050018261ffff1681526020019350505050602060405180830381600087803b151561064957600080fd5b5af1151561065657600080fd5b50505060405180515050600101610589565b6001860180546fffffffffffffffff00000000000000001916680100000000000000004267ffffffffffffffff1602179055600160a060020a038516887f931def6cc112c3c517a58e0210803246f6b189e89b453503c88cf9a1e988ce2c8660405167ffffffffffffffff909116815260200160405180910390a35050505050505050565b60086020526000908152604090205481565b60015433600160a060020a03908116610100909204161461071f57600080fd5b60015460ff16151561073057600080fd5b6001805460ff19169055565b60015433600160a060020a03908116610100909204161461075c57600080fd5b600160a060020a038116151561077157600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a0390811661010090920416146107c057600080fd5b60008161ffff161180156107d957506127108161ffff16105b15156107e457600080fd5b60035461ffff82811660a060020a90920416141561080157600080fd5b6003805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b600554600160a060020a031681565b60015433600160a060020a03908116610100909204161461086357600080fd5b60015460ff161561087357600080fd5b6001805460ff191681179055565b60015433600160a060020a0390811661010090920416146108a157600080fd5b600160a060020a03811615156108b657600080fd5b600154600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360018054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600354600160a060020a031681565b600754600019015b90565b6000610950611aef565b60015460ff161561096057600080fd5b600654600160a060020a0316151561097757600080fd5b61097f611a36565b915061098a82611624565b600654909150600160a060020a031663d0946d003360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156109dd57600080fd5b5af115156109ea57600080fd5b5050506040518051905015156109ff57600080fd5b600554600160a060020a0316639cc477b23383600360405160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b83811015610a5d578082015183820152602001610a45565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1515610a8c57600080fd5b5af11515610a9957600080fd5b50505060405180515050600160a060020a03331660007f931def6cc112c3c517a58e0210803246f6b189e89b453503c88cf9a1e988ce2c600160405167ffffffffffffffff909116815260200160405180910390a35050565b60015433600160a060020a039081166101009092041614610b1257600080fd5b60008261ffff16118015610b37575060035461ffff60a060020a909104811690831611155b1515610b4257600080fd5b600081118015610b53575060058111155b1515610b5e57600080fd5b61ffff8216600090815260086020526040902054811415610b7e57600080fd5b61ffff909116600090815260086020526040902055565b60035433600160a060020a0390811691161480610bc5575060015433600160a060020a0390811661010090920416145b1515610bd057600080fd5b600160a060020a0381161515610be557600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6007805482908110610c2257fe5b600091825260209091206002909102018054600190910154600160a060020a038216925067ffffffffffffffff60a060020a909204821691818116916801000000000000000090041684565b60015460ff1681565b60015460ff1615610c8757600080fd5b662386f26fc10000341015610c9b57600080fd5b610ca6336001611244565b610cb6662386f26fc10000611345565b662386f26fc1000034111561048e57600160a060020a033316662386f26fc0ffff19340180156108fc0290604051600060405180830381858888f19350505050151561048e57600080fd5b60025433600160a060020a0390811691161480610d31575060015433600160a060020a0390811661010090920416145b1515610d3c57600080fd5b600160a060020a0381161515610d5157600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546101009004600160a060020a031681565b6000610d9e611aef565b60015460ff1615610dae57600080fd5b662386f26fc10000341015610dc257600080fd5b610dca611a36565b9150610dd582611624565b600554909150600160a060020a0316639cc477b23383600260405160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b83811015610e36578082015183820152602001610e1e565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1515610e6557600080fd5b5af11515610e7257600080fd5b5050506040518051905050610e8d662386f26fc10000611345565b662386f26fc10000341115610ed857600160a060020a033316662386f26fc0ffff19340180156108fc0290604051600060405180830381858888f193505050501515610ed857600080fd5b33600160a060020a031660007f931def6cc112c3c517a58e0210803246f6b189e89b453503c88cf9a1e988ce2c600160405167ffffffffffffffff909116815260200160405180910390a35050565b60015460ff1615610f3757600080fd5b67013fbe85edc90000341015610f4c57600080fd5b610f5733600a611244565b610f6867013fbe85edc90000611345565b67013fbe85edc9000034111561048e57600160a060020a03331667013fbe85edc8ffff19340180156108fc0290604051600060405180830381858888f19350505050151561048e57600080fd5b600254600160a060020a031681565b60015433600160a060020a039081166101009092041614610fe457600080fd5b600354760100000000000000000000000000000000000000000000900460ff161515811515141561101457600080fd5b600380549115157601000000000000000000000000000000000000000000000276ff0000000000000000000000000000000000000000000019909216919091179055565b60015433600160a060020a03908116610100909204161461107857600080fd5b600160a060020a038116151561108d57600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015460ff16156110cc57600080fd5b666a94d74f4300003410156110e057600080fd5b6110eb336003611244565b6110fb666a94d74f430000611345565b666a94d74f43000034111561048e57600160a060020a033316666a94d74f42ffff19340180156108fc0290604051600060405180830381858888f19350505050151561048e57600080fd5b600354600090819033600160a060020a039081169116148061117b575060015433600160a060020a0390811661010090920416145b151561118657600080fd5b6000831161119357600080fd5b600160a060020a038416156111a857836111b5565b600354600160a060020a03165b915050600160a060020a033016318083101561120157600160a060020a03821683156108fc0284604051600060405180830381858888f1935050505015156111fc57600080fd5b61123e565b81600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151561123e57600080fd5b50505050565b6007805490600090600183019061125b9082611b18565b506007805467ffffffffffffffff841690811061127457fe5b60009182526020909120600290910201805467ffffffffffffffff80861660a060020a027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff600160a060020a03891673ffffffffffffffffffffffffffffffffffffffff1990941684171617835560018301805442831667ffffffffffffffff199091161790559192509083167f9e5df0d8f15bc55f160926347ca09880b1297e69d68f128ea6c3f6fb04cf17be8560405167ffffffffffffffff909116815260200160405180910390a350505050565b6003546000908190819081908190760100000000000000000000000000000000000000000000900460ff161561151157600654600160a060020a031663153154fd3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156113c557600080fd5b5af115156113d257600080fd5b5050506040518051925050600160a060020a03821615611511576113fd86600a63ffffffff611a8f16565b9050611431606461142560326114198a8663ffffffff611aab16565b9063ffffffff611abd16565b9063ffffffff611a8f16565b600354909450600160a060020a031684156108fc0285604051600060405180830381858888f19350505050151561146757600080fd5b60019450600160a060020a03821681156108fc0282604051600060405180830381858888f19350505050151561149c57600080fd5b6114bc846114b0888463ffffffff611aab16565b9063ffffffff611aab16565b600454909350600160a060020a0316158015906114d95750600083115b1561151157600454600160a060020a031683156108fc0284604051600060405180830381858888f19350505050151561151157600080fd5b8415156115c85761152e606461142588603263ffffffff611abd16565b9350611540868563ffffffff611aab16565b600354909350600160a060020a031684156108fc0285604051600060405180830381858888f19350505050151561157657600080fd5b600454600160a060020a0316158015906115905750600083115b156115c857600454600160a060020a031683156108fc0284604051600060405180830381858888f1935050505015156115c857600080fd5b505050505050565b600081600143034041446040519384526020840192909252600160a060020a03166c010000000000000000000000000260408084019190915260548301919091526074909101905190819003902092915050565b61162c611aef565b81612710810660008080808080611af487101561165357600160208a0152600095506116ad565b6121fc87101561166d57600260208a0152600195506116ad565b61258087101561168757600360208a0152600295506116ad565b6126ac8710156116a157600460208a0181905295506116ad565b600560208a0152600695505b6003546127109098049760a060020a900461ffff1661270f8115156116ce57fe5b0461ffff1661271089068115156116e157fe5b046001019650600360149054906101000a900461ffff1661ffff168711156117165760035460a060020a900461ffff16611718565b865b61ffff16895261271090970496600860008a5161ffff168152602081019190915260400160002054945084151561174e57600594505b8461270f81151561175b57fe5b04612710890681151561176a57fe5b0460010196508487111561177e5784611780565b865b61ffff811660408b015293506003895161ffff1681151561179d57fe5b0661ffff16965061271088049750601561271089068115156117bb57fe5b06605a01945086600014156118ab578361ffff1660011415611817576064602860c88881020161ffff90811688028390049182028390041660808c0152935060a084025b048960055b61ffff90921660209290920201526118a6565b8361ffff166002141561183c57606461ffff6028808902011686025b04896006611804565b8361ffff166003141561186257606461ffff610258808902011686025b04896003611804565b8361ffff166004141561188257606461ffff603c80890201168602611833565b606461ffff610190808902011686025b048960035b61ffff90921660209290920201525b611a20565b8660011415611962578361ffff16600114156118ed576064603260be8881020161ffff90811688028390049182028390041660808c01529250609683026117ff565b8361ffff166002141561190d57606461ffff602a80890201168602611833565b8361ffff166003141561192e57606461ffff61027680890201168602611859565b8361ffff166004141561194e57606461ffff603f80890201168602611833565b606461ffff6101a480890201168602611892565b8361ffff166001141561199f57506064601e60d28781020161ffff90811687028390049182028390041660808b01529060aa820204896005611897565b8361ffff16600214156119c457606461ffff6026808902011686025b04896006611897565b8361ffff16600314156119e557606461ffff61023a80890201168602611892565b8361ffff1660041415611a0557606461ffff6039808902011686026119bb565b606461ffff61017c8881020181168702919091041660608a01525b5050600061010088015250949695505050505050565b60008054600143034041446040519384526020840192909252600160a060020a03166c01000000000000000000000000026040808401919091526054830191909152607490910190519081900390206000819055905090565b6000808284811515611a9d57fe5b0490508091505b5092915050565b600082821115611ab757fe5b50900390565b600080831515611ad05760009150611aa4565b50828202828482811515611ae057fe5b0414611ae857fe5b9392505050565b6101206040519081016040526009815b600081526000199091019060200181611aff5790505090565b815481835581811511611b4457600202816002028360005260206000209182019101611b449190611b49565b505050565b61094391905b80821115611ba05780547fffffffff000000000000000000000000000000000000000000000000000000001681556001810180546fffffffffffffffffffffffffffffffff19169055600201611b4f565b50905600a165627a7a72305820cbdc45b4c953770d691d66a0175ffa43b063a1ca735762fd435eef6d13d7c15e0029000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b20000000000000000000000000000000000000000000000000000000000000005
Deployed Bytecode
0x6060604052600436106101445763ffffffff60e060020a600035041662cb527f81146101465780630d6688181461014e578063216ea2391461017d578063234dfdfd1461019657806330efb8d3146101c2578063336c6d39146101d557806345e3553e146101f457806355a373d61461020e57806367d0661d14610221578063704b6c021461023457806382cb9df9146102535780638d0a5fbb146102665780639714a27c1461027957806397ce8c431461028c5780639b8d3064146102a9578063a96c879e146102c8578063b187bd261461031f578063b3f17c2014610346578063bf8bdac11461034e578063bfae2f0e1461036d578063c16c085114610380578063cc4bf6a314610388578063cdd977e014610390578063d80162fc146103a3578063dbb62f24146103bb578063ec91b550146103da578063f3fef3a3146103e2575b005b610144610404565b341561015957600080fd5b610161610490565b604051600160a060020a03909116815260200160405180910390f35b341561018857600080fd5b61014460043560243561049f565b34156101a157600080fd5b6101b061ffff600435166106ed565b60405190815260200160405180910390f35b34156101cd57600080fd5b6101446106ff565b34156101e057600080fd5b610144600160a060020a036004351661073c565b34156101ff57600080fd5b61014461ffff600435166107a0565b341561021957600080fd5b610161610834565b341561022c57600080fd5b610144610843565b341561023f57600080fd5b610144600160a060020a0360043516610881565b341561025e57600080fd5b61016161092c565b341561027157600080fd5b6101b061093b565b341561028457600080fd5b610144610946565b341561029757600080fd5b61014461ffff60043516602435610af2565b34156102b457600080fd5b610144600160a060020a0360043516610b95565b34156102d357600080fd5b6102de600435610c14565b604051600160a060020a03909416845267ffffffffffffffff9283166020850152908216604080850191909152911660608301526080909101905180910390f35b341561032a57600080fd5b610332610c6e565b604051901515815260200160405180910390f35b610144610c77565b341561035957600080fd5b610144600160a060020a0360043516610d01565b341561037857600080fd5b610161610d80565b610144610d94565b610144610f27565b341561039b57600080fd5b610161610fb5565b34156103ae57600080fd5b6101446004351515610fc4565b34156103c657600080fd5b610144600160a060020a0360043516611058565b6101446110bc565b34156103ed57600080fd5b610144600160a060020a0360043516602435611146565b60015460ff161561041457600080fd5b66a8c0ff92d4c00034101561042857600080fd5b610433336005611244565b61044366a8c0ff92d4c000611345565b66a8c0ff92d4c00034111561048e57600160a060020a03331666a8c0ff92d4bfff19340180156108fc0290604051600060405180830381858888f19350505050151561048e57600080fd5b565b600654600160a060020a031681565b6000806000806104ad611aef565b60025460009033600160a060020a039081169116146104cb57600080fd5b6000881180156104dc575060075488105b15156104e757600080fd5b60078054899081106104f557fe5b60009182526020909120600290910201600181015490965068010000000000000000900467ffffffffffffffff161561052d57600080fd5b8554600160a060020a0316945084151561054657600080fd5b855460a060020a900467ffffffffffffffff169350600184108015906105775750600a8467ffffffffffffffff1611155b151561058257600080fd5b5085915060005b8367ffffffffffffffff168167ffffffffffffffff161015610668576105ae836115d0565b92506105b983611624565b600554909250600160a060020a0316639cc477b28684600260405160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b8381101561061a578082015183820152602001610602565b505050509050018261ffff1681526020019350505050602060405180830381600087803b151561064957600080fd5b5af1151561065657600080fd5b50505060405180515050600101610589565b6001860180546fffffffffffffffff00000000000000001916680100000000000000004267ffffffffffffffff1602179055600160a060020a038516887f931def6cc112c3c517a58e0210803246f6b189e89b453503c88cf9a1e988ce2c8660405167ffffffffffffffff909116815260200160405180910390a35050505050505050565b60086020526000908152604090205481565b60015433600160a060020a03908116610100909204161461071f57600080fd5b60015460ff16151561073057600080fd5b6001805460ff19169055565b60015433600160a060020a03908116610100909204161461075c57600080fd5b600160a060020a038116151561077157600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a0390811661010090920416146107c057600080fd5b60008161ffff161180156107d957506127108161ffff16105b15156107e457600080fd5b60035461ffff82811660a060020a90920416141561080157600080fd5b6003805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b600554600160a060020a031681565b60015433600160a060020a03908116610100909204161461086357600080fd5b60015460ff161561087357600080fd5b6001805460ff191681179055565b60015433600160a060020a0390811661010090920416146108a157600080fd5b600160a060020a03811615156108b657600080fd5b600154600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360018054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600354600160a060020a031681565b600754600019015b90565b6000610950611aef565b60015460ff161561096057600080fd5b600654600160a060020a0316151561097757600080fd5b61097f611a36565b915061098a82611624565b600654909150600160a060020a031663d0946d003360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156109dd57600080fd5b5af115156109ea57600080fd5b5050506040518051905015156109ff57600080fd5b600554600160a060020a0316639cc477b23383600360405160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b83811015610a5d578082015183820152602001610a45565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1515610a8c57600080fd5b5af11515610a9957600080fd5b50505060405180515050600160a060020a03331660007f931def6cc112c3c517a58e0210803246f6b189e89b453503c88cf9a1e988ce2c600160405167ffffffffffffffff909116815260200160405180910390a35050565b60015433600160a060020a039081166101009092041614610b1257600080fd5b60008261ffff16118015610b37575060035461ffff60a060020a909104811690831611155b1515610b4257600080fd5b600081118015610b53575060058111155b1515610b5e57600080fd5b61ffff8216600090815260086020526040902054811415610b7e57600080fd5b61ffff909116600090815260086020526040902055565b60035433600160a060020a0390811691161480610bc5575060015433600160a060020a0390811661010090920416145b1515610bd057600080fd5b600160a060020a0381161515610be557600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6007805482908110610c2257fe5b600091825260209091206002909102018054600190910154600160a060020a038216925067ffffffffffffffff60a060020a909204821691818116916801000000000000000090041684565b60015460ff1681565b60015460ff1615610c8757600080fd5b662386f26fc10000341015610c9b57600080fd5b610ca6336001611244565b610cb6662386f26fc10000611345565b662386f26fc1000034111561048e57600160a060020a033316662386f26fc0ffff19340180156108fc0290604051600060405180830381858888f19350505050151561048e57600080fd5b60025433600160a060020a0390811691161480610d31575060015433600160a060020a0390811661010090920416145b1515610d3c57600080fd5b600160a060020a0381161515610d5157600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546101009004600160a060020a031681565b6000610d9e611aef565b60015460ff1615610dae57600080fd5b662386f26fc10000341015610dc257600080fd5b610dca611a36565b9150610dd582611624565b600554909150600160a060020a0316639cc477b23383600260405160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b83811015610e36578082015183820152602001610e1e565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1515610e6557600080fd5b5af11515610e7257600080fd5b5050506040518051905050610e8d662386f26fc10000611345565b662386f26fc10000341115610ed857600160a060020a033316662386f26fc0ffff19340180156108fc0290604051600060405180830381858888f193505050501515610ed857600080fd5b33600160a060020a031660007f931def6cc112c3c517a58e0210803246f6b189e89b453503c88cf9a1e988ce2c600160405167ffffffffffffffff909116815260200160405180910390a35050565b60015460ff1615610f3757600080fd5b67013fbe85edc90000341015610f4c57600080fd5b610f5733600a611244565b610f6867013fbe85edc90000611345565b67013fbe85edc9000034111561048e57600160a060020a03331667013fbe85edc8ffff19340180156108fc0290604051600060405180830381858888f19350505050151561048e57600080fd5b600254600160a060020a031681565b60015433600160a060020a039081166101009092041614610fe457600080fd5b600354760100000000000000000000000000000000000000000000900460ff161515811515141561101457600080fd5b600380549115157601000000000000000000000000000000000000000000000276ff0000000000000000000000000000000000000000000019909216919091179055565b60015433600160a060020a03908116610100909204161461107857600080fd5b600160a060020a038116151561108d57600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015460ff16156110cc57600080fd5b666a94d74f4300003410156110e057600080fd5b6110eb336003611244565b6110fb666a94d74f430000611345565b666a94d74f43000034111561048e57600160a060020a033316666a94d74f42ffff19340180156108fc0290604051600060405180830381858888f19350505050151561048e57600080fd5b600354600090819033600160a060020a039081169116148061117b575060015433600160a060020a0390811661010090920416145b151561118657600080fd5b6000831161119357600080fd5b600160a060020a038416156111a857836111b5565b600354600160a060020a03165b915050600160a060020a033016318083101561120157600160a060020a03821683156108fc0284604051600060405180830381858888f1935050505015156111fc57600080fd5b61123e565b81600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151561123e57600080fd5b50505050565b6007805490600090600183019061125b9082611b18565b506007805467ffffffffffffffff841690811061127457fe5b60009182526020909120600290910201805467ffffffffffffffff80861660a060020a027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff600160a060020a03891673ffffffffffffffffffffffffffffffffffffffff1990941684171617835560018301805442831667ffffffffffffffff199091161790559192509083167f9e5df0d8f15bc55f160926347ca09880b1297e69d68f128ea6c3f6fb04cf17be8560405167ffffffffffffffff909116815260200160405180910390a350505050565b6003546000908190819081908190760100000000000000000000000000000000000000000000900460ff161561151157600654600160a060020a031663153154fd3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156113c557600080fd5b5af115156113d257600080fd5b5050506040518051925050600160a060020a03821615611511576113fd86600a63ffffffff611a8f16565b9050611431606461142560326114198a8663ffffffff611aab16565b9063ffffffff611abd16565b9063ffffffff611a8f16565b600354909450600160a060020a031684156108fc0285604051600060405180830381858888f19350505050151561146757600080fd5b60019450600160a060020a03821681156108fc0282604051600060405180830381858888f19350505050151561149c57600080fd5b6114bc846114b0888463ffffffff611aab16565b9063ffffffff611aab16565b600454909350600160a060020a0316158015906114d95750600083115b1561151157600454600160a060020a031683156108fc0284604051600060405180830381858888f19350505050151561151157600080fd5b8415156115c85761152e606461142588603263ffffffff611abd16565b9350611540868563ffffffff611aab16565b600354909350600160a060020a031684156108fc0285604051600060405180830381858888f19350505050151561157657600080fd5b600454600160a060020a0316158015906115905750600083115b156115c857600454600160a060020a031683156108fc0284604051600060405180830381858888f1935050505015156115c857600080fd5b505050505050565b600081600143034041446040519384526020840192909252600160a060020a03166c010000000000000000000000000260408084019190915260548301919091526074909101905190819003902092915050565b61162c611aef565b81612710810660008080808080611af487101561165357600160208a0152600095506116ad565b6121fc87101561166d57600260208a0152600195506116ad565b61258087101561168757600360208a0152600295506116ad565b6126ac8710156116a157600460208a0181905295506116ad565b600560208a0152600695505b6003546127109098049760a060020a900461ffff1661270f8115156116ce57fe5b0461ffff1661271089068115156116e157fe5b046001019650600360149054906101000a900461ffff1661ffff168711156117165760035460a060020a900461ffff16611718565b865b61ffff16895261271090970496600860008a5161ffff168152602081019190915260400160002054945084151561174e57600594505b8461270f81151561175b57fe5b04612710890681151561176a57fe5b0460010196508487111561177e5784611780565b865b61ffff811660408b015293506003895161ffff1681151561179d57fe5b0661ffff16965061271088049750601561271089068115156117bb57fe5b06605a01945086600014156118ab578361ffff1660011415611817576064602860c88881020161ffff90811688028390049182028390041660808c0152935060a084025b048960055b61ffff90921660209290920201526118a6565b8361ffff166002141561183c57606461ffff6028808902011686025b04896006611804565b8361ffff166003141561186257606461ffff610258808902011686025b04896003611804565b8361ffff166004141561188257606461ffff603c80890201168602611833565b606461ffff610190808902011686025b048960035b61ffff90921660209290920201525b611a20565b8660011415611962578361ffff16600114156118ed576064603260be8881020161ffff90811688028390049182028390041660808c01529250609683026117ff565b8361ffff166002141561190d57606461ffff602a80890201168602611833565b8361ffff166003141561192e57606461ffff61027680890201168602611859565b8361ffff166004141561194e57606461ffff603f80890201168602611833565b606461ffff6101a480890201168602611892565b8361ffff166001141561199f57506064601e60d28781020161ffff90811687028390049182028390041660808b01529060aa820204896005611897565b8361ffff16600214156119c457606461ffff6026808902011686025b04896006611897565b8361ffff16600314156119e557606461ffff61023a80890201168602611892565b8361ffff1660041415611a0557606461ffff6039808902011686026119bb565b606461ffff61017c8881020181168702919091041660608a01525b5050600061010088015250949695505050505050565b60008054600143034041446040519384526020840192909252600160a060020a03166c01000000000000000000000000026040808401919091526054830191909152607490910190519081900390206000819055905090565b6000808284811515611a9d57fe5b0490508091505b5092915050565b600082821115611ab757fe5b50900390565b600080831515611ad05760009150611aa4565b50828202828482811515611ae057fe5b0414611ae857fe5b9392505050565b6101206040519081016040526009815b600081526000199091019060200181611aff5790505090565b815481835581811511611b4457600202816002028360005260206000209182019101611b449190611b49565b505050565b61094391905b80821115611ba05780547fffffffff000000000000000000000000000000000000000000000000000000001681556001810180546fffffffffffffffffffffffffffffffff19169055600201611b4f565b50905600a165627a7a72305820cbdc45b4c953770d691d66a0175ffa43b063a1ca735762fd435eef6d13d7c15e0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b20000000000000000000000000000000000000000000000000000000000000005
-----Decoded View---------------
Arg [0] : _nftAddr (address): 0xDA9c03dFd4D137F926c3cF6953cb951832Eb08b2
Arg [1] : _maxProtoId (uint16): 5
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b2
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000005
Swarm Source
bzzr://cbdc45b4c953770d691d66a0175ffa43b063a1ca735762fd435eef6d13d7c15e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,627.3 | 0.1504 | $395.03 |
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.