Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 20,780 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Low Compose | 6675630 | 2643 days ago | IN | 0 ETH | 0.00008388 | ||||
| Low Compose | 6638470 | 2649 days ago | IN | 0 ETH | 0.00005866 | ||||
| Low Compose | 6638468 | 2649 days ago | IN | 0 ETH | 0.00036355 | ||||
| Low Compose | 6638463 | 2649 days ago | IN | 0 ETH | 0.00038752 | ||||
| Low Compose | 6638435 | 2649 days ago | IN | 0 ETH | 0.00038752 | ||||
| Low Compose | 6638378 | 2649 days ago | IN | 0 ETH | 0.00038762 | ||||
| Low Compose | 6638350 | 2649 days ago | IN | 0 ETH | 0.00038753 | ||||
| Low Compose | 6638350 | 2649 days ago | IN | 0 ETH | 0.00038759 | ||||
| Low Compose | 6638331 | 2649 days ago | IN | 0 ETH | 0.00038754 | ||||
| Low Compose | 6638330 | 2649 days ago | IN | 0 ETH | 0.00005866 | ||||
| Low Compose | 6638327 | 2649 days ago | IN | 0 ETH | 0.00038746 | ||||
| Low Compose | 6638327 | 2649 days ago | IN | 0 ETH | 0.00038751 | ||||
| Low Compose | 6638325 | 2649 days ago | IN | 0 ETH | 0.00038742 | ||||
| Low Compose | 6638322 | 2649 days ago | IN | 0 ETH | 0.00038742 | ||||
| Low Compose | 6638319 | 2649 days ago | IN | 0 ETH | 0.00038768 | ||||
| Low Compose | 6638319 | 2649 days ago | IN | 0 ETH | 0.00038766 | ||||
| Low Compose | 6638319 | 2649 days ago | IN | 0 ETH | 0.00038758 | ||||
| Low Compose | 6638315 | 2649 days ago | IN | 0 ETH | 0.00038768 | ||||
| Low Compose | 6632298 | 2650 days ago | IN | 0 ETH | 0.00037011 | ||||
| Low Compose | 6632292 | 2650 days ago | IN | 0 ETH | 0.00037004 | ||||
| Low Compose | 6632292 | 2650 days ago | IN | 0 ETH | 0.00037009 | ||||
| Low Compose | 6632292 | 2650 days ago | IN | 0 ETH | 0.00036985 | ||||
| Low Compose | 6632283 | 2650 days ago | IN | 0 ETH | 0.00036989 | ||||
| Low Compose | 6632252 | 2650 days ago | IN | 0 ETH | 0.00036991 | ||||
| Low Compose | 6632248 | 2650 days ago | IN | 0 ETH | 0.00036998 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ActionCompose
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-08
*/
pragma solidity ^0.4.20;
/// @title ERC-165 Standard Interface Detection
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
interface ERC165 {
function supportsInterface(bytes4 interfaceID) external view returns (bool);
}
/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
contract ERC721 is ERC165 {
event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
function balanceOf(address _owner) external view returns (uint256);
function ownerOf(uint256 _tokenId) external view returns (address);
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external;
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external;
function transferFrom(address _from, address _to, uint256 _tokenId) external;
function approve(address _approved, uint256 _tokenId) external;
function setApprovalForAll(address _operator, bool _approved) external;
function getApproved(uint256 _tokenId) external view returns (address);
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}
/// @title ERC-721 Non-Fungible Token Standard
interface ERC721TokenReceiver {
function onERC721Received(address _from, uint256 _tokenId, bytes data) external returns(bytes4);
}
/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
interface ERC721Metadata /* is ERC721 */ {
function name() external pure returns (string _name);
function symbol() external pure returns (string _symbol);
function tokenURI(uint256 _tokenId) external view returns (string);
}
/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
interface ERC721Enumerable /* is ERC721 */ {
function totalSupply() external view returns (uint256);
function tokenByIndex(uint256 _index) external view returns (uint256);
function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
}
contract AccessAdmin {
bool public isPaused = false;
address public addrAdmin;
event AdminTransferred(address indexed preAdmin, address indexed newAdmin);
function AccessAdmin() public {
addrAdmin = msg.sender;
}
modifier onlyAdmin() {
require(msg.sender == addrAdmin);
_;
}
modifier whenNotPaused() {
require(!isPaused);
_;
}
modifier whenPaused {
require(isPaused);
_;
}
function setAdmin(address _newAdmin) external onlyAdmin {
require(_newAdmin != address(0));
AdminTransferred(addrAdmin, _newAdmin);
addrAdmin = _newAdmin;
}
function doPause() external onlyAdmin whenNotPaused {
isPaused = true;
}
function doUnpause() external onlyAdmin whenPaused {
isPaused = false;
}
}
contract AccessService is AccessAdmin {
address public addrService;
address public addrFinance;
modifier onlyService() {
require(msg.sender == addrService);
_;
}
modifier onlyFinance() {
require(msg.sender == addrFinance);
_;
}
function setService(address _newService) external {
require(msg.sender == addrService || msg.sender == addrAdmin);
require(_newService != address(0));
addrService = _newService;
}
function setFinance(address _newFinance) external {
require(msg.sender == addrFinance || msg.sender == addrAdmin);
require(_newFinance != address(0));
addrFinance = _newFinance;
}
function withdraw(address _target, uint256 _amount)
external
{
require(msg.sender == addrFinance || msg.sender == addrAdmin);
require(_amount > 0);
address receiver = _target == address(0) ? addrFinance : _target;
uint256 balance = this.balance;
if (_amount < balance) {
receiver.transfer(_amount);
} else {
receiver.transfer(this.balance);
}
}
}
contract WarToken is ERC721, AccessAdmin {
/// @dev The equipment info
struct Fashion {
uint16 protoId; // 0 Equipment ID
uint16 quality; // 1 Rarity: 1 Coarse/2 Good/3 Rare/4 Epic/5 Legendary
uint16 pos; // 2 Slots: 1 Weapon/2 Hat/3 Cloth/4 Pant/5 Shoes/9 Pets
uint16 health; // 3 Health
uint16 atkMin; // 4 Min attack
uint16 atkMax; // 5 Max attack
uint16 defence; // 6 Defennse
uint16 crit; // 7 Critical rate
uint16 isPercent; // 8 Attr value type
uint16 attrExt1; // 9 future stat 1
uint16 attrExt2; // 10 future stat 2
uint16 attrExt3; // 11 future stat 3
}
/// @dev All equipments tokenArray (not exceeding 2^32-1)
Fashion[] public fashionArray;
/// @dev Amount of tokens destroyed
uint256 destroyFashionCount;
/// @dev Equipment token ID vs owner address
mapping (uint256 => address) fashionIdToOwner;
/// @dev Equipments owner by the owner (array)
mapping (address => uint256[]) ownerToFashionArray;
/// @dev Equipment token ID search in owner array
mapping (uint256 => uint256) fashionIdToOwnerIndex;
/// @dev The authorized address for each WAR
mapping (uint256 => address) fashionIdToApprovals;
/// @dev The authorized operators for each address
mapping (address => mapping (address => bool)) operatorToApprovals;
/// @dev Trust contract
mapping (address => bool) actionContracts;
function setActionContract(address _actionAddr, bool _useful) external onlyAdmin {
actionContracts[_actionAddr] = _useful;
}
function getActionContract(address _actionAddr) external view onlyAdmin returns(bool) {
return actionContracts[_actionAddr];
}
/// @dev This emits when the approved address for an WAR is changed or reaffirmed.
event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
/// @dev This emits when an operator is enabled or disabled for an owner.
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
/// @dev This emits when the equipment ownership changed
event Transfer(address indexed from, address indexed to, uint256 tokenId);
/// @dev This emits when the equipment created
event CreateFashion(address indexed owner, uint256 tokenId, uint16 protoId, uint16 quality, uint16 pos, uint16 createType);
/// @dev This emits when the equipment's attributes changed
event ChangeFashion(address indexed owner, uint256 tokenId, uint16 changeType);
/// @dev This emits when the equipment destroyed
event DeleteFashion(address indexed owner, uint256 tokenId, uint16 deleteType);
function WarToken() public {
addrAdmin = msg.sender;
fashionArray.length += 1;
}
// modifier
/// @dev Check if token ID is valid
modifier isValidToken(uint256 _tokenId) {
require(_tokenId >= 1 && _tokenId <= fashionArray.length);
require(fashionIdToOwner[_tokenId] != address(0));
_;
}
modifier canTransfer(uint256 _tokenId) {
address owner = fashionIdToOwner[_tokenId];
require(msg.sender == owner || msg.sender == fashionIdToApprovals[_tokenId] || operatorToApprovals[owner][msg.sender]);
_;
}
// ERC721
function supportsInterface(bytes4 _interfaceId) external view returns(bool) {
// ERC165 || ERC721 || ERC165^ERC721
return (_interfaceId == 0x01ffc9a7 || _interfaceId == 0x80ac58cd || _interfaceId == 0x8153916a) && (_interfaceId != 0xffffffff);
}
function name() public pure returns(string) {
return "WAR Token";
}
function symbol() public pure returns(string) {
return "WAR";
}
/// @dev Search for token quantity address
/// @param _owner Address that needs to be searched
/// @return Returns token quantity
function balanceOf(address _owner) external view returns(uint256) {
require(_owner != address(0));
return ownerToFashionArray[_owner].length;
}
/// @dev Find the owner of an WAR
/// @param _tokenId The tokenId of WAR
/// @return Give The address of the owner of this WAR
function ownerOf(uint256 _tokenId) external view /*isValidToken(_tokenId)*/ returns (address owner) {
return fashionIdToOwner[_tokenId];
}
/// @dev Transfers the ownership of an WAR from one address to another address
/// @param _from The current owner of the WAR
/// @param _to The new owner
/// @param _tokenId The WAR to transfer
/// @param data Additional data with no specified format, sent in call to `_to`
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data)
external
whenNotPaused
{
_safeTransferFrom(_from, _to, _tokenId, data);
}
/// @dev Transfers the ownership of an WAR from one address to another address
/// @param _from The current owner of the WAR
/// @param _to The new owner
/// @param _tokenId The WAR to transfer
function safeTransferFrom(address _from, address _to, uint256 _tokenId)
external
whenNotPaused
{
_safeTransferFrom(_from, _to, _tokenId, "");
}
/// @dev Transfer ownership of an WAR, '_to' must be a vaild address, or the WAR will lost
/// @param _from The current owner of the WAR
/// @param _to The new owner
/// @param _tokenId The WAR to transfer
function transferFrom(address _from, address _to, uint256 _tokenId)
external
whenNotPaused
isValidToken(_tokenId)
canTransfer(_tokenId)
{
address owner = fashionIdToOwner[_tokenId];
require(owner != address(0));
require(_to != address(0));
require(owner == _from);
_transfer(_from, _to, _tokenId);
}
/// @dev Set or reaffirm the approved address for an WAR
/// @param _approved The new approved WAR controller
/// @param _tokenId The WAR to approve
function approve(address _approved, uint256 _tokenId)
external
whenNotPaused
{
address owner = fashionIdToOwner[_tokenId];
require(owner != address(0));
require(msg.sender == owner || operatorToApprovals[owner][msg.sender]);
fashionIdToApprovals[_tokenId] = _approved;
Approval(owner, _approved, _tokenId);
}
/// @dev Enable or disable approval for a third party ("operator") to manage all your asset.
/// @param _operator Address to add to the set of authorized operators.
/// @param _approved True if the operators is approved, false to revoke approval
function setApprovalForAll(address _operator, bool _approved)
external
whenNotPaused
{
operatorToApprovals[msg.sender][_operator] = _approved;
ApprovalForAll(msg.sender, _operator, _approved);
}
/// @dev Get the approved address for a single WAR
/// @param _tokenId The WAR to find the approved address for
/// @return The approved address for this WAR, or the zero address if there is none
function getApproved(uint256 _tokenId) external view isValidToken(_tokenId) returns (address) {
return fashionIdToApprovals[_tokenId];
}
/// @dev Query if an address is an authorized operator for another address
/// @param _owner The address that owns the WARs
/// @param _operator The address that acts on behalf of the owner
/// @return True if `_operator` is an approved operator for `_owner`, false otherwise
function isApprovedForAll(address _owner, address _operator) external view returns (bool) {
return operatorToApprovals[_owner][_operator];
}
/// @dev Count WARs tracked by this contract
/// @return A count of valid WARs tracked by this contract, where each one of
/// them has an assigned and queryable owner not equal to the zero address
function totalSupply() external view returns (uint256) {
return fashionArray.length - destroyFashionCount - 1;
}
/// @dev Do the real transfer with out any condition checking
/// @param _from The old owner of this WAR(If created: 0x0)
/// @param _to The new owner of this WAR
/// @param _tokenId The tokenId of the WAR
function _transfer(address _from, address _to, uint256 _tokenId) internal {
if (_from != address(0)) {
uint256 indexFrom = fashionIdToOwnerIndex[_tokenId];
uint256[] storage fsArray = ownerToFashionArray[_from];
require(fsArray[indexFrom] == _tokenId);
// If the WAR is not the element of array, change it to with the last
if (indexFrom != fsArray.length - 1) {
uint256 lastTokenId = fsArray[fsArray.length - 1];
fsArray[indexFrom] = lastTokenId;
fashionIdToOwnerIndex[lastTokenId] = indexFrom;
}
fsArray.length -= 1;
if (fashionIdToApprovals[_tokenId] != address(0)) {
delete fashionIdToApprovals[_tokenId];
}
}
// Give the WAR to '_to'
fashionIdToOwner[_tokenId] = _to;
ownerToFashionArray[_to].push(_tokenId);
fashionIdToOwnerIndex[_tokenId] = ownerToFashionArray[_to].length - 1;
Transfer(_from != address(0) ? _from : this, _to, _tokenId);
}
/// @dev Actually perform the safeTransferFrom
function _safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data)
internal
isValidToken(_tokenId)
canTransfer(_tokenId)
{
address owner = fashionIdToOwner[_tokenId];
require(owner != address(0));
require(_to != address(0));
require(owner == _from);
_transfer(_from, _to, _tokenId);
// Do the callback after everything is done to avoid reentrancy attack
uint256 codeSize;
assembly { codeSize := extcodesize(_to) }
if (codeSize == 0) {
return;
}
bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(_from, _tokenId, data);
// bytes4(keccak256("onERC721Received(address,uint256,bytes)")) = 0xf0b9e5ba;
require(retval == 0xf0b9e5ba);
}
//----------------------------------------------------------------------------------------------------------
/// @dev Equipment creation
/// @param _owner Owner of the equipment created
/// @param _attrs Attributes of the equipment created
/// @return Token ID of the equipment created
function createFashion(address _owner, uint16[9] _attrs, uint16 _createType)
external
whenNotPaused
returns(uint256)
{
require(actionContracts[msg.sender]);
require(_owner != address(0));
uint256 newFashionId = fashionArray.length;
require(newFashionId < 4294967296);
fashionArray.length += 1;
Fashion storage fs = fashionArray[newFashionId];
fs.protoId = _attrs[0];
fs.quality = _attrs[1];
fs.pos = _attrs[2];
if (_attrs[3] != 0) {
fs.health = _attrs[3];
}
if (_attrs[4] != 0) {
fs.atkMin = _attrs[4];
fs.atkMax = _attrs[5];
}
if (_attrs[6] != 0) {
fs.defence = _attrs[6];
}
if (_attrs[7] != 0) {
fs.crit = _attrs[7];
}
if (_attrs[8] != 0) {
fs.isPercent = _attrs[8];
}
_transfer(0, _owner, newFashionId);
CreateFashion(_owner, newFashionId, _attrs[0], _attrs[1], _attrs[2], _createType);
return newFashionId;
}
/// @dev One specific attribute of the equipment modified
function _changeAttrByIndex(Fashion storage _fs, uint16 _index, uint16 _val) internal {
if (_index == 3) {
_fs.health = _val;
} else if(_index == 4) {
_fs.atkMin = _val;
} else if(_index == 5) {
_fs.atkMax = _val;
} else if(_index == 6) {
_fs.defence = _val;
} else if(_index == 7) {
_fs.crit = _val;
} else if(_index == 9) {
_fs.attrExt1 = _val;
} else if(_index == 10) {
_fs.attrExt2 = _val;
} else if(_index == 11) {
_fs.attrExt3 = _val;
}
}
/// @dev Equiment attributes modified (max 4 stats modified)
/// @param _tokenId Equipment Token ID
/// @param _idxArray Stats order that must be modified
/// @param _params Stat value that must be modified
/// @param _changeType Modification type such as enhance, socket, etc.
function changeFashionAttr(uint256 _tokenId, uint16[4] _idxArray, uint16[4] _params, uint16 _changeType)
external
whenNotPaused
isValidToken(_tokenId)
{
require(actionContracts[msg.sender]);
Fashion storage fs = fashionArray[_tokenId];
if (_idxArray[0] > 0) {
_changeAttrByIndex(fs, _idxArray[0], _params[0]);
}
if (_idxArray[1] > 0) {
_changeAttrByIndex(fs, _idxArray[1], _params[1]);
}
if (_idxArray[2] > 0) {
_changeAttrByIndex(fs, _idxArray[2], _params[2]);
}
if (_idxArray[3] > 0) {
_changeAttrByIndex(fs, _idxArray[3], _params[3]);
}
ChangeFashion(fashionIdToOwner[_tokenId], _tokenId, _changeType);
}
/// @dev Equipment destruction
/// @param _tokenId Equipment Token ID
/// @param _deleteType Destruction type, such as craft
function destroyFashion(uint256 _tokenId, uint16 _deleteType)
external
whenNotPaused
isValidToken(_tokenId)
{
require(actionContracts[msg.sender]);
address _from = fashionIdToOwner[_tokenId];
uint256 indexFrom = fashionIdToOwnerIndex[_tokenId];
uint256[] storage fsArray = ownerToFashionArray[_from];
require(fsArray[indexFrom] == _tokenId);
if (indexFrom != fsArray.length - 1) {
uint256 lastTokenId = fsArray[fsArray.length - 1];
fsArray[indexFrom] = lastTokenId;
fashionIdToOwnerIndex[lastTokenId] = indexFrom;
}
fsArray.length -= 1;
fashionIdToOwner[_tokenId] = address(0);
delete fashionIdToOwnerIndex[_tokenId];
destroyFashionCount += 1;
Transfer(_from, 0, _tokenId);
DeleteFashion(_from, _tokenId, _deleteType);
}
/// @dev Safe transfer by trust contracts
function safeTransferByContract(uint256 _tokenId, address _to)
external
whenNotPaused
{
require(actionContracts[msg.sender]);
require(_tokenId >= 1 && _tokenId <= fashionArray.length);
address owner = fashionIdToOwner[_tokenId];
require(owner != address(0));
require(_to != address(0));
require(owner != _to);
_transfer(owner, _to, _tokenId);
}
//----------------------------------------------------------------------------------------------------------
/// @dev Get fashion attrs by tokenId
function getFashion(uint256 _tokenId) external view isValidToken(_tokenId) returns (uint16[12] datas) {
Fashion storage fs = fashionArray[_tokenId];
datas[0] = fs.protoId;
datas[1] = fs.quality;
datas[2] = fs.pos;
datas[3] = fs.health;
datas[4] = fs.atkMin;
datas[5] = fs.atkMax;
datas[6] = fs.defence;
datas[7] = fs.crit;
datas[8] = fs.isPercent;
datas[9] = fs.attrExt1;
datas[10] = fs.attrExt2;
datas[11] = fs.attrExt3;
}
/// @dev Get tokenIds and flags by owner
function getOwnFashions(address _owner) external view returns(uint256[] tokens, uint32[] flags) {
require(_owner != address(0));
uint256[] storage fsArray = ownerToFashionArray[_owner];
uint256 length = fsArray.length;
tokens = new uint256[](length);
flags = new uint32[](length);
for (uint256 i = 0; i < length; ++i) {
tokens[i] = fsArray[i];
Fashion storage fs = fashionArray[fsArray[i]];
flags[i] = uint32(uint32(fs.protoId) * 100 + uint32(fs.quality) * 10 + fs.pos);
}
}
/// @dev WAR token info returned based on Token ID transfered (64 at most)
function getFashionsAttrs(uint256[] _tokens) external view returns(uint16[] attrs) {
uint256 length = _tokens.length;
require(length <= 64);
attrs = new uint16[](length * 11);
uint256 tokenId;
uint256 index;
for (uint256 i = 0; i < length; ++i) {
tokenId = _tokens[i];
if (fashionIdToOwner[tokenId] != address(0)) {
index = i * 11;
Fashion storage fs = fashionArray[tokenId];
attrs[index] = fs.health;
attrs[index + 1] = fs.atkMin;
attrs[index + 2] = fs.atkMax;
attrs[index + 3] = fs.defence;
attrs[index + 4] = fs.crit;
attrs[index + 5] = fs.isPercent;
attrs[index + 6] = fs.attrExt1;
attrs[index + 7] = fs.attrExt2;
attrs[index + 8] = fs.attrExt3;
}
}
}
}
/// This Random is inspired by https://github.com/axiomzen/eth-random
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));
}
/*
function _randByRange(uint256 _min, uint256 _max) internal returns (uint256) {
if (_min >= _max) {
return _min;
}
return (_rand() % (_max - _min)) + _min;
}
function _rankByNumber(uint256 _max) internal returns (uint256) {
return _rand() % _max;
}
*/
}
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 isOnSaleAny2(uint256 _tokenId1, uint256 _tokenId2) external view returns(bool);
function isOnSaleAny3(uint256 _tokenId1, uint256 _tokenId2, uint256 _tokenId3) external view returns(bool);
}
/**
* @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 ActionCompose is Random, AccessService {
using SafeMath for uint256;
event ComposeSuccess(address indexed owner, uint256 tokenId, uint16 protoId, uint16 quality, uint16 pos);
/// @dev If the recommender can get reward
bool isRecommendOpen;
/// @dev Auction contract address
IDataAuction public auctionContract;
/// @dev DataEquip contract address
IDataEquip public equipContract;
/// @dev WarToken(NFT) contract address
WarToken public tokenContract;
function ActionCompose(address _nftAddr) public {
addrAdmin = msg.sender;
addrService = msg.sender;
addrFinance = msg.sender;
tokenContract = WarToken(_nftAddr);
}
function() external payable {
}
function setRecommendStatus(bool _isOpen) external onlyAdmin {
require(_isOpen != isRecommendOpen);
isRecommendOpen = _isOpen;
}
function setDataAuction(address _addr) external onlyAdmin {
require(_addr != address(0));
auctionContract = IDataAuction(_addr);
}
function setDataEquip(address _addr) external onlyAdmin {
require(_addr != address(0));
equipContract = IDataEquip(_addr);
}
function _getFashionParam(uint256 _seed, uint16 _protoId, uint16 _quality, uint16 _pos) internal pure returns(uint16[9] attrs) {
uint256 curSeed = _seed;
attrs[0] = _protoId;
attrs[1] = _quality;
attrs[2] = _pos;
uint16 qtyParam = 0;
if (_quality <= 3) {
qtyParam = _quality - 1;
} else if (_quality == 4) {
qtyParam = 4;
} else if (_quality == 5) {
qtyParam = 6;
}
// 生成属性
uint256 rdm = _protoId % 3;
curSeed /= 10000;
uint256 tmpVal = (curSeed % 10000) % 21 + 90;
// 武器1/帽子2/衣服3/裤子4/鞋子5
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;
}
// gas 210019
function lowCompose(uint256 token1, uint256 token2)
external
whenNotPaused
{
require(tokenContract.ownerOf(token1) == msg.sender);
require(tokenContract.ownerOf(token2) == msg.sender);
require(!equipContract.isEquipedAny2(msg.sender, token1, token2));
if (address(auctionContract) != address(0)) {
require(!auctionContract.isOnSaleAny2(token1, token2));
}
tokenContract.ownerOf(token1);
uint16 protoId;
uint16 quality;
uint16 pos;
uint16[12] memory fashionData = tokenContract.getFashion(token1);
protoId = fashionData[0];
quality = fashionData[1];
pos = fashionData[2];
require(quality == 1 || quality == 2);
fashionData = tokenContract.getFashion(token2);
require(protoId == fashionData[0]);
require(quality == fashionData[1]);
require(pos == fashionData[2]);
uint256 seed = _rand();
uint16[9] memory attrs = _getFashionParam(seed, protoId, quality + 1, pos);
tokenContract.destroyFashion(token1, 1);
tokenContract.destroyFashion(token2, 1);
uint256 newTokenId = tokenContract.createFashion(msg.sender, attrs, 3);
ComposeSuccess(msg.sender, newTokenId, attrs[0], attrs[1], attrs[2]);
}
// gas 198125
function highCompose(uint256 token1, uint256 token2, uint256 token3)
external
whenNotPaused
{
require(tokenContract.ownerOf(token1) == msg.sender);
require(tokenContract.ownerOf(token2) == msg.sender);
require(tokenContract.ownerOf(token3) == msg.sender);
require(!equipContract.isEquipedAny3(msg.sender, token1, token2, token3));
if (address(auctionContract) != address(0)) {
require(!auctionContract.isOnSaleAny3(token1, token2, token3));
}
uint16 protoId;
uint16 quality;
uint16 pos;
uint16[12] memory fashionData = tokenContract.getFashion(token1);
protoId = fashionData[0];
quality = fashionData[1];
pos = fashionData[2];
require(quality == 3 || quality == 4);
fashionData = tokenContract.getFashion(token2);
require(protoId == fashionData[0]);
require(quality == fashionData[1]);
require(pos == fashionData[2]);
fashionData = tokenContract.getFashion(token3);
require(protoId == fashionData[0]);
require(quality == fashionData[1]);
require(pos == fashionData[2]);
uint256 seed = _rand();
uint16[9] memory attrs = _getFashionParam(seed, protoId, quality + 1, pos);
tokenContract.destroyFashion(token1, 1);
tokenContract.destroyFashion(token2, 1);
tokenContract.destroyFashion(token3, 1);
uint256 newTokenId = tokenContract.createFashion(msg.sender, attrs, 4);
ComposeSuccess(msg.sender, newTokenId, attrs[0], attrs[1], attrs[2]);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"auctionContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setDataAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"doUnpause","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":false,"inputs":[{"name":"token1","type":"uint256"},{"name":"token2","type":"uint256"},{"name":"token3","type":"uint256"}],"name":"highCompose","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token1","type":"uint256"},{"name":"token2","type":"uint256"}],"name":"lowCompose","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":"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":false,"inputs":[{"name":"_newService","type":"address"}],"name":"setService","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"addrAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"equipContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"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":"_target","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_nftAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"protoId","type":"uint16"},{"indexed":false,"name":"quality","type":"uint16"},{"indexed":false,"name":"pos","type":"uint16"}],"name":"ComposeSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"preAdmin","type":"address"},{"indexed":true,"name":"newAdmin","type":"address"}],"name":"AdminTransferred","type":"event"}]Contract Creation Code
60606040526001805460ff19169055341561001957600080fd5b6040516020806118ba8339810160405280805160018054600160a060020a03338116610100810261010060a860020a0319938416811790931690921790925560028054600160a060020a03199081168317909155600380548216909217909155600680549290931691161790555050611823806100976000396000f3006060604052600436106100e25763ffffffff60e060020a6000350416630ab8afac81146100e4578063245a30ec1461011357806330efb8d31461013257806355a373d61461014557806367d0661d14610158578063704b6c021461016b57806382cb9df91461018a57806391702ddc1461019d578063976f37fd146101b95780639b8d3064146101d2578063b187bd26146101f1578063ba112d5014610218578063bf8bdac114610237578063bfae2f0e14610256578063c11b225214610269578063cdd977e01461027c578063d80162fc1461028f578063f3fef3a3146102a7575b005b34156100ef57600080fd5b6100f76102c9565b604051600160a060020a03909116815260200160405180910390f35b341561011e57600080fd5b6100e2600160a060020a03600435166102d8565b341561013d57600080fd5b6100e261033c565b341561015057600080fd5b6100f7610379565b341561016357600080fd5b6100e2610388565b341561017657600080fd5b6100e2600160a060020a03600435166103c6565b341561019557600080fd5b6100f7610471565b34156101a857600080fd5b6100e2600435602435604435610480565b34156101c457600080fd5b6100e2600435602435610b6c565b34156101dd57600080fd5b6100e2600160a060020a0360043516611123565b34156101fc57600080fd5b6102046111a2565b604051901515815260200160405180910390f35b341561022357600080fd5b6100e2600160a060020a03600435166111ab565b341561024257600080fd5b6100e2600160a060020a036004351661120f565b341561026157600080fd5b6100f761128e565b341561027457600080fd5b6100f76112a2565b341561028757600080fd5b6100f76112b1565b341561029a57600080fd5b6100e260043515156112c0565b34156102b257600080fd5b6100e2600160a060020a036004351660243561134e565b600454600160a060020a031681565b60015433600160a060020a0390811661010090920416146102f857600080fd5b600160a060020a038116151561030d57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a03908116610100909204161461035c57600080fd5b60015460ff16151561036d57600080fd5b6001805460ff19169055565b600654600160a060020a031681565b60015433600160a060020a0390811661010090920416146103a857600080fd5b60015460ff16156103b857600080fd5b6001805460ff191681179055565b60015433600160a060020a0390811661010090920416146103e657600080fd5b600160a060020a03811615156103fb57600080fd5b600154600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360018054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600354600160a060020a031681565b600080600061048d6117b3565b60006104976117dc565b60015460009060ff16156104aa57600080fd5b600654600160a060020a033381169116636352211e8c60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156104f657600080fd5b5af1151561050357600080fd5b50505060405180519050600160a060020a031614151561052257600080fd5b600654600160a060020a033381169116636352211e8b60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561056e57600080fd5b5af1151561057b57600080fd5b50505060405180519050600160a060020a031614151561059a57600080fd5b600654600160a060020a033381169116636352211e8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156105e657600080fd5b5af115156105f357600080fd5b50505060405180519050600160a060020a031614151561061257600080fd5b600554600160a060020a031663f9c71f79338c8c8c60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401602060405180830381600087803b151561067757600080fd5b5af1151561068457600080fd5b505050604051805115905061069857600080fd5b600454600160a060020a03161561072157600454600160a060020a031663f3b42c408b8b8b60405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401602060405180830381600087803b151561070057600080fd5b5af1151561070d57600080fd5b505050604051805115905061072157600080fd5b600654600160a060020a031663425189e08b60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b151561076a57600080fd5b5af1151561077757600080fd5b505050604051610180810160405293508351965060208401519550604084015194508561ffff16600314806107b057508561ffff166004145b15156107bb57600080fd5b600654600160a060020a031663425189e08a60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b151561080457600080fd5b5af1151561081157600080fd5b50505060405161018081016040529350835161ffff88811691161461083557600080fd5b602084015161ffff87811691161461084c57600080fd5b604084015161ffff86811691161461086357600080fd5b600654600160a060020a031663425189e08960405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b15156108ac57600080fd5b5af115156108b957600080fd5b50505060405161018081016040529350835161ffff8881169116146108dd57600080fd5b602084015161ffff8781169116146108f457600080fd5b604084015161ffff86811691161461090b57600080fd5b61091361144c565b9250610924838888600101886114a5565b600654909250600160a060020a0316630378f83f8b600160405160e060020a63ffffffff8516028152600481019290925261ffff166024820152604401600060405180830381600087803b151561097a57600080fd5b5af1151561098757600080fd5b5050600654600160a060020a03169050630378f83f8a600160405160e060020a63ffffffff8516028152600481019290925261ffff166024820152604401600060405180830381600087803b15156109de57600080fd5b5af115156109eb57600080fd5b5050600654600160a060020a03169050630378f83f89600160405160e060020a63ffffffff8516028152600481019290925261ffff166024820152604401600060405180830381600087803b1515610a4257600080fd5b5af11515610a4f57600080fd5b5050600654600160a060020a03169050639cc477b23384600460405160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b83811015610ab1578082015183820152602001610a99565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1515610ae057600080fd5b5af11515610aed57600080fd5b505050604051805191505033600160a060020a03167fb8f93b6ee7a79dc8fb386209ef989a56e4f51f5735e63135fbbdf10c6e15383c8284516020860151604087015160405193845261ffff9283166020850152908216604080850191909152911660608301526080909101905180910390a250505050505050505050565b6000806000610b796117b3565b6000610b836117dc565b60015460009060ff1615610b9657600080fd5b600654600160a060020a033381169116636352211e8b60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610be257600080fd5b5af11515610bef57600080fd5b50505060405180519050600160a060020a0316141515610c0e57600080fd5b600654600160a060020a033381169116636352211e8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610c5a57600080fd5b5af11515610c6757600080fd5b50505060405180519050600160a060020a0316141515610c8657600080fd5b600554600160a060020a03166348e06300338b8b60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610ce557600080fd5b5af11515610cf257600080fd5b5050506040518051159050610d0657600080fd5b600454600160a060020a031615610d8657600454600160a060020a031663a5c464b38a8a60405160e060020a63ffffffff851602815260048101929092526024820152604401602060405180830381600087803b1515610d6557600080fd5b5af11515610d7257600080fd5b5050506040518051159050610d8657600080fd5b600654600160a060020a0316636352211e8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610dce57600080fd5b5af11515610ddb57600080fd5b50505060405180515050600654600160a060020a031663425189e08a60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b1515610e2e57600080fd5b5af11515610e3b57600080fd5b505050604051610180810160405293508351965060208401519550604084015194508561ffff1660011480610e7457508561ffff166002145b1515610e7f57600080fd5b600654600160a060020a031663425189e08960405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b1515610ec857600080fd5b5af11515610ed557600080fd5b50505060405161018081016040529350835161ffff888116911614610ef957600080fd5b602084015161ffff878116911614610f1057600080fd5b604084015161ffff868116911614610f2757600080fd5b610f2f61144c565b9250610f40838888600101886114a5565b600654909250600160a060020a0316630378f83f8a600160405160e060020a63ffffffff8516028152600481019290925261ffff166024820152604401600060405180830381600087803b1515610f9657600080fd5b5af11515610fa357600080fd5b5050600654600160a060020a03169050630378f83f89600160405160e060020a63ffffffff8516028152600481019290925261ffff166024820152604401600060405180830381600087803b1515610ffa57600080fd5b5af1151561100757600080fd5b5050600654600160a060020a03169050639cc477b23384600360405160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b83811015611069578082015183820152602001611051565b505050509050018261ffff1681526020019350505050602060405180830381600087803b151561109857600080fd5b5af115156110a557600080fd5b505050604051805191505033600160a060020a03167fb8f93b6ee7a79dc8fb386209ef989a56e4f51f5735e63135fbbdf10c6e15383c8284516020860151604087015160405193845261ffff9283166020850152908216604080850191909152911660608301526080909101905180910390a2505050505050505050565b60035433600160a060020a0390811691161480611153575060015433600160a060020a0390811661010090920416145b151561115e57600080fd5b600160a060020a038116151561117357600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015460ff1681565b60015433600160a060020a0390811661010090920416146111cb57600080fd5b600160a060020a03811615156111e057600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025433600160a060020a039081169116148061123f575060015433600160a060020a0390811661010090920416145b151561124a57600080fd5b600160a060020a038116151561125f57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546101009004600160a060020a031681565b600554600160a060020a031681565b600254600160a060020a031681565b60015433600160a060020a0390811661010090920416146112e057600080fd5b60035474010000000000000000000000000000000000000000900460ff161515811515141561130e57600080fd5b60038054911515740100000000000000000000000000000000000000000274ff000000000000000000000000000000000000000019909216919091179055565b600354600090819033600160a060020a0390811691161480611383575060015433600160a060020a0390811661010090920416145b151561138e57600080fd5b6000831161139b57600080fd5b600160a060020a038416156113b057836113bd565b600354600160a060020a03165b915050600160a060020a033016318083101561140957600160a060020a03821683156108fc0284604051600060405180830381858888f19350505050151561140457600080fd5b611446565b81600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151561144657600080fd5b50505050565b60008054600143034041446040519384526020840192909252600160a060020a03166c01000000000000000000000000026040808401919091526054830191909152607490910190519081900390206000819055905090565b6114ad6117dc565b61ffff8085168252838116602083018190529083166040830152859060009081908190819081908190600390116114e95760018a039550611511565b8961ffff16600414156114ff5760049550611511565b8961ffff166005141561151157600695505b600361ffff8c160661ffff169450612710870496506015612710880681151561153657fe5b06605a0193508460001415611626578861ffff1660011415611592576064602860c88881020161ffff90811687028390049182028390041660808b0152935060a084025b048860055b61ffff9092166020929092020152611621565b8861ffff16600214156115b757606461ffff6028808902011685025b0488600661157f565b8861ffff16600314156115dd57606461ffff610258808902011685025b0488600361157f565b8861ffff16600414156115fd57606461ffff603c808902011685026115ae565b606461ffff610190808902011685025b048860035b61ffff90921660209290920201525b61179b565b84600114156116dd578861ffff1660011415611668576064603260be8881020161ffff90811687028390049182028390041660808b015292506096830261157a565b8861ffff166002141561168857606461ffff602a808902011685026115ae565b8861ffff16600314156116a957606461ffff610276808902011685026115d4565b8861ffff16600414156116c957606461ffff603f808902011685026115ae565b606461ffff6101a48089020116850261160d565b8861ffff166001141561171a57506064601e60d28781020161ffff90811686028390049182028390041660808a01529060aa820204886005611612565b8861ffff166002141561173f57606461ffff6026808902011685025b04886006611612565b8861ffff166003141561176057606461ffff61023a8089020116850261160d565b8861ffff166004141561178057606461ffff603980890201168502611736565b606461ffff61017c8881020181168602919091041660608901525b50506000610100870152509398975050505050505050565b610180604051908101604052600c815b6000815260001990910190602001816117c35790505090565b610120604051908101604052600081526008602082016117c35600a165627a7a72305820870d4f8b38cb094d4a112a1723daaccbdaa9341fb183085efc03ad05d34b73b40029000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b2
Deployed Bytecode
0x6060604052600436106100e25763ffffffff60e060020a6000350416630ab8afac81146100e4578063245a30ec1461011357806330efb8d31461013257806355a373d61461014557806367d0661d14610158578063704b6c021461016b57806382cb9df91461018a57806391702ddc1461019d578063976f37fd146101b95780639b8d3064146101d2578063b187bd26146101f1578063ba112d5014610218578063bf8bdac114610237578063bfae2f0e14610256578063c11b225214610269578063cdd977e01461027c578063d80162fc1461028f578063f3fef3a3146102a7575b005b34156100ef57600080fd5b6100f76102c9565b604051600160a060020a03909116815260200160405180910390f35b341561011e57600080fd5b6100e2600160a060020a03600435166102d8565b341561013d57600080fd5b6100e261033c565b341561015057600080fd5b6100f7610379565b341561016357600080fd5b6100e2610388565b341561017657600080fd5b6100e2600160a060020a03600435166103c6565b341561019557600080fd5b6100f7610471565b34156101a857600080fd5b6100e2600435602435604435610480565b34156101c457600080fd5b6100e2600435602435610b6c565b34156101dd57600080fd5b6100e2600160a060020a0360043516611123565b34156101fc57600080fd5b6102046111a2565b604051901515815260200160405180910390f35b341561022357600080fd5b6100e2600160a060020a03600435166111ab565b341561024257600080fd5b6100e2600160a060020a036004351661120f565b341561026157600080fd5b6100f761128e565b341561027457600080fd5b6100f76112a2565b341561028757600080fd5b6100f76112b1565b341561029a57600080fd5b6100e260043515156112c0565b34156102b257600080fd5b6100e2600160a060020a036004351660243561134e565b600454600160a060020a031681565b60015433600160a060020a0390811661010090920416146102f857600080fd5b600160a060020a038116151561030d57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a03908116610100909204161461035c57600080fd5b60015460ff16151561036d57600080fd5b6001805460ff19169055565b600654600160a060020a031681565b60015433600160a060020a0390811661010090920416146103a857600080fd5b60015460ff16156103b857600080fd5b6001805460ff191681179055565b60015433600160a060020a0390811661010090920416146103e657600080fd5b600160a060020a03811615156103fb57600080fd5b600154600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360018054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600354600160a060020a031681565b600080600061048d6117b3565b60006104976117dc565b60015460009060ff16156104aa57600080fd5b600654600160a060020a033381169116636352211e8c60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156104f657600080fd5b5af1151561050357600080fd5b50505060405180519050600160a060020a031614151561052257600080fd5b600654600160a060020a033381169116636352211e8b60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561056e57600080fd5b5af1151561057b57600080fd5b50505060405180519050600160a060020a031614151561059a57600080fd5b600654600160a060020a033381169116636352211e8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156105e657600080fd5b5af115156105f357600080fd5b50505060405180519050600160a060020a031614151561061257600080fd5b600554600160a060020a031663f9c71f79338c8c8c60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401602060405180830381600087803b151561067757600080fd5b5af1151561068457600080fd5b505050604051805115905061069857600080fd5b600454600160a060020a03161561072157600454600160a060020a031663f3b42c408b8b8b60405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401602060405180830381600087803b151561070057600080fd5b5af1151561070d57600080fd5b505050604051805115905061072157600080fd5b600654600160a060020a031663425189e08b60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b151561076a57600080fd5b5af1151561077757600080fd5b505050604051610180810160405293508351965060208401519550604084015194508561ffff16600314806107b057508561ffff166004145b15156107bb57600080fd5b600654600160a060020a031663425189e08a60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b151561080457600080fd5b5af1151561081157600080fd5b50505060405161018081016040529350835161ffff88811691161461083557600080fd5b602084015161ffff87811691161461084c57600080fd5b604084015161ffff86811691161461086357600080fd5b600654600160a060020a031663425189e08960405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b15156108ac57600080fd5b5af115156108b957600080fd5b50505060405161018081016040529350835161ffff8881169116146108dd57600080fd5b602084015161ffff8781169116146108f457600080fd5b604084015161ffff86811691161461090b57600080fd5b61091361144c565b9250610924838888600101886114a5565b600654909250600160a060020a0316630378f83f8b600160405160e060020a63ffffffff8516028152600481019290925261ffff166024820152604401600060405180830381600087803b151561097a57600080fd5b5af1151561098757600080fd5b5050600654600160a060020a03169050630378f83f8a600160405160e060020a63ffffffff8516028152600481019290925261ffff166024820152604401600060405180830381600087803b15156109de57600080fd5b5af115156109eb57600080fd5b5050600654600160a060020a03169050630378f83f89600160405160e060020a63ffffffff8516028152600481019290925261ffff166024820152604401600060405180830381600087803b1515610a4257600080fd5b5af11515610a4f57600080fd5b5050600654600160a060020a03169050639cc477b23384600460405160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b83811015610ab1578082015183820152602001610a99565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1515610ae057600080fd5b5af11515610aed57600080fd5b505050604051805191505033600160a060020a03167fb8f93b6ee7a79dc8fb386209ef989a56e4f51f5735e63135fbbdf10c6e15383c8284516020860151604087015160405193845261ffff9283166020850152908216604080850191909152911660608301526080909101905180910390a250505050505050505050565b6000806000610b796117b3565b6000610b836117dc565b60015460009060ff1615610b9657600080fd5b600654600160a060020a033381169116636352211e8b60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610be257600080fd5b5af11515610bef57600080fd5b50505060405180519050600160a060020a0316141515610c0e57600080fd5b600654600160a060020a033381169116636352211e8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610c5a57600080fd5b5af11515610c6757600080fd5b50505060405180519050600160a060020a0316141515610c8657600080fd5b600554600160a060020a03166348e06300338b8b60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610ce557600080fd5b5af11515610cf257600080fd5b5050506040518051159050610d0657600080fd5b600454600160a060020a031615610d8657600454600160a060020a031663a5c464b38a8a60405160e060020a63ffffffff851602815260048101929092526024820152604401602060405180830381600087803b1515610d6557600080fd5b5af11515610d7257600080fd5b5050506040518051159050610d8657600080fd5b600654600160a060020a0316636352211e8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610dce57600080fd5b5af11515610ddb57600080fd5b50505060405180515050600654600160a060020a031663425189e08a60405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b1515610e2e57600080fd5b5af11515610e3b57600080fd5b505050604051610180810160405293508351965060208401519550604084015194508561ffff1660011480610e7457508561ffff166002145b1515610e7f57600080fd5b600654600160a060020a031663425189e08960405160e060020a63ffffffff8416028152600481019190915260240161018060405180830381600087803b1515610ec857600080fd5b5af11515610ed557600080fd5b50505060405161018081016040529350835161ffff888116911614610ef957600080fd5b602084015161ffff878116911614610f1057600080fd5b604084015161ffff868116911614610f2757600080fd5b610f2f61144c565b9250610f40838888600101886114a5565b600654909250600160a060020a0316630378f83f8a600160405160e060020a63ffffffff8516028152600481019290925261ffff166024820152604401600060405180830381600087803b1515610f9657600080fd5b5af11515610fa357600080fd5b5050600654600160a060020a03169050630378f83f89600160405160e060020a63ffffffff8516028152600481019290925261ffff166024820152604401600060405180830381600087803b1515610ffa57600080fd5b5af1151561100757600080fd5b5050600654600160a060020a03169050639cc477b23384600360405160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b83811015611069578082015183820152602001611051565b505050509050018261ffff1681526020019350505050602060405180830381600087803b151561109857600080fd5b5af115156110a557600080fd5b505050604051805191505033600160a060020a03167fb8f93b6ee7a79dc8fb386209ef989a56e4f51f5735e63135fbbdf10c6e15383c8284516020860151604087015160405193845261ffff9283166020850152908216604080850191909152911660608301526080909101905180910390a2505050505050505050565b60035433600160a060020a0390811691161480611153575060015433600160a060020a0390811661010090920416145b151561115e57600080fd5b600160a060020a038116151561117357600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015460ff1681565b60015433600160a060020a0390811661010090920416146111cb57600080fd5b600160a060020a03811615156111e057600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025433600160a060020a039081169116148061123f575060015433600160a060020a0390811661010090920416145b151561124a57600080fd5b600160a060020a038116151561125f57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546101009004600160a060020a031681565b600554600160a060020a031681565b600254600160a060020a031681565b60015433600160a060020a0390811661010090920416146112e057600080fd5b60035474010000000000000000000000000000000000000000900460ff161515811515141561130e57600080fd5b60038054911515740100000000000000000000000000000000000000000274ff000000000000000000000000000000000000000019909216919091179055565b600354600090819033600160a060020a0390811691161480611383575060015433600160a060020a0390811661010090920416145b151561138e57600080fd5b6000831161139b57600080fd5b600160a060020a038416156113b057836113bd565b600354600160a060020a03165b915050600160a060020a033016318083101561140957600160a060020a03821683156108fc0284604051600060405180830381858888f19350505050151561140457600080fd5b611446565b81600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151561144657600080fd5b50505050565b60008054600143034041446040519384526020840192909252600160a060020a03166c01000000000000000000000000026040808401919091526054830191909152607490910190519081900390206000819055905090565b6114ad6117dc565b61ffff8085168252838116602083018190529083166040830152859060009081908190819081908190600390116114e95760018a039550611511565b8961ffff16600414156114ff5760049550611511565b8961ffff166005141561151157600695505b600361ffff8c160661ffff169450612710870496506015612710880681151561153657fe5b06605a0193508460001415611626578861ffff1660011415611592576064602860c88881020161ffff90811687028390049182028390041660808b0152935060a084025b048860055b61ffff9092166020929092020152611621565b8861ffff16600214156115b757606461ffff6028808902011685025b0488600661157f565b8861ffff16600314156115dd57606461ffff610258808902011685025b0488600361157f565b8861ffff16600414156115fd57606461ffff603c808902011685026115ae565b606461ffff610190808902011685025b048860035b61ffff90921660209290920201525b61179b565b84600114156116dd578861ffff1660011415611668576064603260be8881020161ffff90811687028390049182028390041660808b015292506096830261157a565b8861ffff166002141561168857606461ffff602a808902011685026115ae565b8861ffff16600314156116a957606461ffff610276808902011685026115d4565b8861ffff16600414156116c957606461ffff603f808902011685026115ae565b606461ffff6101a48089020116850261160d565b8861ffff166001141561171a57506064601e60d28781020161ffff90811686028390049182028390041660808a01529060aa820204886005611612565b8861ffff166002141561173f57606461ffff6026808902011685025b04886006611612565b8861ffff166003141561176057606461ffff61023a8089020116850261160d565b8861ffff166004141561178057606461ffff603980890201168502611736565b606461ffff61017c8881020181168602919091041660608901525b50506000610100870152509398975050505050505050565b610180604051908101604052600c815b6000815260001990910190602001816117c35790505090565b610120604051908101604052600081526008602082016117c35600a165627a7a72305820870d4f8b38cb094d4a112a1723daaccbdaa9341fb183085efc03ad05d34b73b40029
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://870d4f8b38cb094d4a112a1723daaccbdaa9341fb183085efc03ad05d34b73b4
Loading...
Loading
Loading...
Loading
Net Worth in USD
$2.26
Net Worth in ETH
0.001
Token Allocations
ETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,256.62 | 0.001 | $2.26 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.