ETH Price: $1,960.85 (-4.80%)

Contract

0xc333228DaaB9Bde8a3866eFA3a9E616b7e1BAe51
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Pet Presell56204262018-05-15 23:13:322851 days ago1526426012IN
0xc333228D...b7e1BAe51
0.66 ETH0.0003944715.8
Pet Presell56204242018-05-15 23:13:212851 days ago1526426001IN
0xc333228D...b7e1BAe51
0.66 ETH0.000124835
Pet Presell56200622018-05-15 21:50:152851 days ago1526421015IN
0xc333228D...b7e1BAe51
0.66 ETH0.000199738
Pet Presell56200622018-05-15 21:50:152851 days ago1526421015IN
0xc333228D...b7e1BAe51
0.66 ETH0.00021978.8
Pet Presell56200532018-05-15 21:48:202851 days ago1526420900IN
0xc333228D...b7e1BAe51
0.66 ETH0.000199738
Pet Presell56200502018-05-15 21:47:342851 days ago1526420854IN
0xc333228D...b7e1BAe51
0.66 ETH0.000174767
Pet Presell56182332018-05-15 13:58:342852 days ago1526392714IN
0xc333228D...b7e1BAe51
0.66 ETH0.001432568
Pet Presell56182312018-05-15 13:58:112852 days ago1526392691IN
0xc333228D...b7e1BAe51
0.66 ETH0.001477089
Pet Presell56178852018-05-15 12:38:462852 days ago1526387926IN
0xc333228D...b7e1BAe51
0.66 ETH0.0019601110.1
Pet Presell56175332018-05-15 11:06:332852 days ago1526382393IN
0xc333228D...b7e1BAe51
0.66 ETH0.0024618115
Pet Presell56175082018-05-15 11:01:032852 days ago1526382063IN
0xc333228D...b7e1BAe51
0.66 ETH0.0024618115
Pet Presell56174622018-05-15 10:49:012852 days ago1526381341IN
0xc333228D...b7e1BAe51
0.66 ETH0.001312968
Pet Presell56172412018-05-15 9:49:122852 days ago1526377752IN
0xc333228D...b7e1BAe51
0.66 ETH0.0024618115
Pet Presell56172182018-05-15 9:43:142852 days ago1526377394IN
0xc333228D...b7e1BAe51
0.66 ETH0.0019407110
Pet Presell56172152018-05-15 9:42:092852 days ago1526377329IN
0xc333228D...b7e1BAe51
0.99 ETH0.0002496710
Pet Presell56171742018-05-15 9:34:472852 days ago1526376887IN
0xc333228D...b7e1BAe51
0.66 ETH0.0026259316
Pet Presell56166882018-05-15 7:33:412852 days ago1526369621IN
0xc333228D...b7e1BAe51
0.66 ETH0.001746639
Pet Presell56163872018-05-15 6:19:482852 days ago1526365188IN
0xc333228D...b7e1BAe51
0.66 ETH0.001378618.4
Pet Presell56161222018-05-15 5:12:272852 days ago1526361147IN
0xc333228D...b7e1BAe51
0.66 ETH0.001395028.5
Pet Presell56154922018-05-15 2:30:362852 days ago1526351436IN
0xc333228D...b7e1BAe51
0.66 ETH0.00082065
Pet Presell56153212018-05-15 1:45:192852 days ago1526348719IN
0xc333228D...b7e1BAe51
0.66 ETH0.00082065
Pet Presell56148962018-05-14 23:59:412852 days ago1526342381IN
0xc333228D...b7e1BAe51
0.66 ETH0.001164426
Pet Presell56145332018-05-14 22:27:522852 days ago1526336872IN
0xc333228D...b7e1BAe51
0.66 ETH0.0016412110
Pet Presell56145182018-05-14 22:23:222852 days ago1526336602IN
0xc333228D...b7e1BAe51
0.66 ETH0.0019407110
Pet Presell56142292018-05-14 21:12:302852 days ago1526332350IN
0xc333228D...b7e1BAe51
0.66 ETH0.001164426
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer56182332018-05-15 13:58:342852 days ago1526392714
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56182312018-05-15 13:58:112852 days ago1526392691
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56178852018-05-15 12:38:462852 days ago1526387926
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56175332018-05-15 11:06:332852 days ago1526382393
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56175082018-05-15 11:01:032852 days ago1526382063
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56174622018-05-15 10:49:012852 days ago1526381341
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56172412018-05-15 9:49:122852 days ago1526377752
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56172182018-05-15 9:43:142852 days ago1526377394
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56171742018-05-15 9:34:472852 days ago1526376887
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56166882018-05-15 7:33:412852 days ago1526369621
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56163872018-05-15 6:19:482852 days ago1526365188
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56161222018-05-15 5:12:272852 days ago1526361147
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56154922018-05-15 2:30:362852 days ago1526351436
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56153212018-05-15 1:45:192852 days ago1526348719
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56148962018-05-14 23:59:412852 days ago1526342381
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56145332018-05-14 22:27:522852 days ago1526336872
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56145182018-05-14 22:23:222852 days ago1526336602
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56142292018-05-14 21:12:302852 days ago1526332350
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56140372018-05-14 20:22:402852 days ago1526329360
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56135142018-05-14 18:05:342852 days ago1526321134
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56133852018-05-14 17:33:372853 days ago1526319217
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56129412018-05-14 15:46:432853 days ago1526312803
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56126272018-05-14 14:20:402853 days ago1526307640
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56125752018-05-14 14:06:452853 days ago1526306805
0xc333228D...b7e1BAe51
0.66 ETH
Transfer56125642018-05-14 14:04:082853 days ago1526306648
0xc333228D...b7e1BAe51
0.66 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ActionPresell

Compiler Version
v0.4.21+commit.dfe3193c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-04-10
*/

/* ==================================================================== */
/* Copyright (c) 2018 The ether.online Project.  All rights reserved.
/* 
/* https://ether.online  The first RPG game of blockchain                 
/* ==================================================================== */
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;
    }
}

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 ActionPresell is AccessService {
    WarToken tokenContract;
    mapping (uint16 => uint16) petPresellCounter;
    mapping (address => uint16[]) presellLimit;

    event PetPreSelled(address indexed buyer, uint16 protoId);

    function ActionPresell(address _nftAddr) public {
        addrAdmin = msg.sender;
        addrService = msg.sender;
        addrFinance = msg.sender;

        tokenContract = WarToken(_nftAddr);

        petPresellCounter[10001] = 50;
        petPresellCounter[10002] = 30;
        petPresellCounter[10003] = 50;
        petPresellCounter[10004] = 30;
        petPresellCounter[10005] = 30;
    }

    function() external payable {

    }

    function setWarTokenAddr(address _nftAddr) external onlyAdmin {
        tokenContract = WarToken(_nftAddr);
    }

    function petPresell(uint16 _protoId) 
        external
        payable
        whenNotPaused 
    {
        uint16 curSupply = petPresellCounter[_protoId];
        require(curSupply > 0);
        uint16[] storage buyArray = presellLimit[msg.sender];
        uint256 curBuyCnt = buyArray.length;
        require(curBuyCnt < 10);

        uint256 payBack = 0;
        if (_protoId == 10001) {
            require(msg.value >= 0.66 ether);
            payBack = (msg.value - 0.66 ether);
            uint16[9] memory param1 = [10001, 5, 9, 40, 0, 0, 0, 0, 1];       // hp +40%
            tokenContract.createFashion(msg.sender, param1, 1);
            buyArray.push(10001);
        } else if(_protoId == 10002) {
            require(msg.value >= 0.99 ether);
            payBack = (msg.value - 0.99 ether);
            uint16[9] memory param2 = [10002, 5, 9, 0, 30, 30, 0, 0, 1];       // atk +30%
            tokenContract.createFashion(msg.sender, param2, 1);
            buyArray.push(10002);
        } else if(_protoId == 10003) {
            require(msg.value >= 0.66 ether);
            payBack = (msg.value - 0.66 ether);
            uint16[9] memory param3 = [10003, 5, 9, 0, 0, 0, 40, 0, 1];        // def +40%
            tokenContract.createFashion(msg.sender, param3, 1);
            buyArray.push(10003);
        } else if(_protoId == 10004) {
            require(msg.value >= 0.99 ether);
            payBack = (msg.value - 0.99 ether);
            uint16[9] memory param4 = [10004, 5, 9, 0, 0, 0, 0, 30, 1];        // crit +50%
            tokenContract.createFashion(msg.sender, param4, 1);
            buyArray.push(10004);
        } else {
            require(msg.value >= 0.99 ether);
            payBack = (msg.value - 0.99 ether);
            uint16[9] memory param5 = [10005, 5, 9, 20, 10, 10, 20, 0, 1];      // hp +20%, atk +10%, def +20%
            tokenContract.createFashion(msg.sender, param5, 1);
            buyArray.push(10005);
        }

        petPresellCounter[_protoId] = (curSupply - 1);

        PetPreSelled(msg.sender, _protoId);

        addrFinance.transfer(msg.value - payBack);        // need 2300 gas -_-!
        if (payBack > 0) {
            msg.sender.transfer(payBack);
        }
    }

    function withdraw() 
        external 
    {
        require(msg.sender == addrFinance || msg.sender == addrAdmin);
        addrFinance.transfer(this.balance);
    }

    function getPetCanPresellCount() external view returns (uint16[5] cntArray) {
        cntArray[0] = petPresellCounter[10001];
        cntArray[1] = petPresellCounter[10002];
        cntArray[2] = petPresellCounter[10003];
        cntArray[3] = petPresellCounter[10004];
        cntArray[4] = petPresellCounter[10005];   
    }

    function getBuyCount(address _owner) external view returns (uint32) {
        return uint32(presellLimit[_owner].length);
    }

    function getBuyArray(address _owner) external view returns (uint16[]) {
        uint16[] storage buyArray = presellLimit[_owner];
        return buyArray;
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"_protoId","type":"uint16"}],"name":"petPresell","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"doUnpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"name":"_nftAddr","type":"address"}],"name":"setWarTokenAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getPetCanPresellCount","outputs":[{"name":"cntArray","type":"uint16[5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"addrFinance","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_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":"_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":"addrService","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getBuyCount","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getBuyArray","outputs":[{"name":"","type":"uint16[]"}],"payable":false,"stateMutability":"view","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":"buyer","type":"address"},{"indexed":false,"name":"protoId","type":"uint16"}],"name":"PetPreSelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"preAdmin","type":"address"},{"indexed":true,"name":"newAdmin","type":"address"}],"name":"AdminTransferred","type":"event"}]

60606040526000805460ff19169055341561001957600080fd5b6040516020806112cb8339810160405280805160008054600160a060020a03338116610100810261010060a860020a03199384168117909316909217835560018054600160a060020a03199081168417909155600280548216909317909255600380549190941691161790915560046020527fd46743c2fa65df9b432f3be9771b67177cb202675d04f7d17146b12c68053d0f805461ffff1990811660329081179092557f21e0fcdea931fab45b080ed0027d4fdf8c9cd2b45394db36e13c82ca4e92da0280548216601e9081179091557fbc6c806d14996990b6fee39bf95cbc6f69b49c8178cb10842dcb20c01ad7d383805483169093179092557fb0ea0a6272ae45b32a24b6de30c67aefdbe5b6bd07ff2086866f616f478c505b80548216831790556127159092527f4a09a05d2362d42bb0eb42dbcde818d16b4ec6f481618534a2b97c4d9cb8180d8054909216179055505061114d8061017e6000396000f3006060604052600436106100c15763ffffffff60e060020a60003504166306b16a6c81146100c357806330efb8d3146100d25780633ccfd60b146100e557806367d0661d146100f8578063704b6c021461010b57806372c691b21461012a578063821919fd1461014957806382cb9df9146101945780639b8d3064146101c3578063b187bd26146101e2578063bf8bdac114610209578063bfae2f0e14610228578063cdd977e01461023b578063d489c0bf1461024e578063e5d3d9d714610286575b005b6100c161ffff600435166102f8565b34156100dd57600080fd5b6100c1610ba9565b34156100f057600080fd5b6100c1610be6565b341561010357600080fd5b6100c1610c5c565b341561011657600080fd5b6100c1600160a060020a0360043516610c9b565b341561013557600080fd5b6100c1600160a060020a0360043516610d46565b341561015457600080fd5b61015c610d95565b604051808260a080838360005b83811015610181578082015183820152602001610169565b5050505090500191505060405180910390f35b341561019f57600080fd5b6101a7610e7b565b604051600160a060020a03909116815260200160405180910390f35b34156101ce57600080fd5b6100c1600160a060020a0360043516610e8a565b34156101ed57600080fd5b6101f5610f09565b604051901515815260200160405180910390f35b341561021457600080fd5b6100c1600160a060020a0360043516610f12565b341561023357600080fd5b6101a7610f91565b341561024657600080fd5b6101a7610fa5565b341561025957600080fd5b61026d600160a060020a0360043516610fb4565b60405163ffffffff909116815260200160405180910390f35b341561029157600080fd5b6102a5600160a060020a0360043516610fcf565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102e45780820151838201526020016102cc565b505050509050019250505060405180910390f35b600080600080610306611072565b61030e611072565b610316611072565b61031e611072565b610326611072565b60005460ff161561033657600080fd5b61ffff808b166000908152600460205260408120549091169950891161035b57600080fd5b600160a060020a033316600090815260056020526040902080549098509650600a871061038757600080fd5b600095508961ffff1661271114156104ff57670928ca80cfc200003410156103ae57600080fd5b670928ca80cfc200003403955061012060405190810160409081526127118252600560208301526009818301526028606083015260006080830181905260a0830181905260c0830181905260e083015260016101008301819052600354929750600160a060020a0390921691639cc477b291339189915160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b8381101561046b578082015183820152602001610453565b505050509050018261ffff1681526020019350505050602060405180830381600087803b151561049a57600080fd5b5af115156104a757600080fd5b5050506040518051505087548890600181016104c3838261109b565b9160005260206000209060109182820401919006600202612711909190916101000a81548161ffff021916908361ffff16021790555050610abd565b8961ffff16612712141561067357670dbd2fc137a3000034101561052257600080fd5b670dbd2fc137a30000340395506101206040519081016040908152612712825260056020830152600981830152600060608301819052601e6080840181905260a084015260c0830181905260e083015260016101008301819052600354929650600160a060020a0390921691639cc477b291339188915160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b838110156105df5780820151838201526020016105c7565b505050509050018261ffff1681526020019350505050602060405180830381600087803b151561060e57600080fd5b5af1151561061b57600080fd5b505050604051805150508754889060018101610637838261109b565b9160005260206000209060109182820401919006600202612712909190916101000a81548161ffff021916908361ffff16021790555050610abd565b8961ffff1661271314156107e757670928ca80cfc2000034101561069657600080fd5b670928ca80cfc200003403955061012060405190810160409081526127138252600560208301526009818301526000606083018190526080830181905260a08301819052602860c084015260e083015260016101008301819052600354929550600160a060020a0390921691639cc477b291339187915160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b8381101561075357808201518382015260200161073b565b505050509050018261ffff1681526020019350505050602060405180830381600087803b151561078257600080fd5b5af1151561078f57600080fd5b5050506040518051505087548890600181016107ab838261109b565b9160005260206000209060109182820401919006600202612713909190916101000a81548161ffff021916908361ffff16021790555050610abd565b8961ffff16612714141561095b57670dbd2fc137a3000034101561080a57600080fd5b670dbd2fc137a300003403955061012060405190810160409081526127148252600560208301526009818301526000606083018190526080830181905260a0830181905260c0830152601e60e083015260016101008301819052600354929450600160a060020a0390921691639cc477b291339186915160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b838110156108c75780820151838201526020016108af565b505050509050018261ffff1681526020019350505050602060405180830381600087803b15156108f657600080fd5b5af1151561090357600080fd5b50505060405180515050875488906001810161091f838261109b565b9160005260206000209060109182820401919006600202612714909190916101000a81548161ffff021916908361ffff16021790555050610abd565b670dbd2fc137a3000034101561097057600080fd5b670dbd2fc137a30000340395506101206040519081016040908152612715825260056020830152600981830152601460608301819052600a6080840181905260a084015260c0830152600060e083015260016101008301819052600354929350600160a060020a0390921691639cc477b291339185915160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b83811015610a2d578082015183820152602001610a15565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1515610a5c57600080fd5b5af11515610a6957600080fd5b505050604051805150508754889060018101610a85838261109b565b9160005260206000209060109182820401919006600202612715909190916101000a81548161ffff021916908361ffff160217905550505b61ffff8a811660009081526004602052604090819020805461ffff19166000198d019093169290921790915533600160a060020a0316907f3fe14c4b035f23907f7e97114b5e33083128a0dd22077eebd1266dec0d152a9f908c905161ffff909116815260200160405180910390a2600254600160a060020a03163487900380156108fc0290604051600060405180830381858888f193505050501515610b6357600080fd5b6000861115610b9d57600160a060020a03331686156108fc0287604051600060405180830381858888f193505050501515610b9d57600080fd5b50505050505050505050565b60005433600160a060020a039081166101009092041614610bc957600080fd5b60005460ff161515610bda57600080fd5b6000805460ff19169055565b60025433600160a060020a0390811691161480610c16575060005433600160a060020a0390811661010090920416145b1515610c2157600080fd5b600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610c5a57600080fd5b565b60005433600160a060020a039081166101009092041614610c7c57600080fd5b60005460ff1615610c8c57600080fd5b6000805460ff19166001179055565b60005433600160a060020a039081166101009092041614610cbb57600080fd5b600160a060020a0381161515610cd057600080fd5b600054600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360008054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60005433600160a060020a039081166101009092041614610d6657600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610d9d6110d4565b7fd46743c2fa65df9b432f3be9771b67177cb202675d04f7d17146b12c68053d0f5461ffff90811682527f21e0fcdea931fab45b080ed0027d4fdf8c9cd2b45394db36e13c82ca4e92da025481166020838101919091527fbc6c806d14996990b6fee39bf95cbc6f69b49c8178cb10842dcb20c01ad7d38354821660408401527fb0ea0a6272ae45b32a24b6de30c67aefdbe5b6bd07ff2086866f616f478c505b5482166060840152612715600052600490527f4a09a05d2362d42bb0eb42dbcde818d16b4ec6f481618534a2b97c4d9cb8180d5416608082015290565b600254600160a060020a031681565b60025433600160a060020a0390811691161480610eba575060005433600160a060020a0390811661010090920416145b1515610ec557600080fd5b600160a060020a0381161515610eda57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005460ff1681565b60015433600160a060020a0390811691161480610f42575060005433600160a060020a0390811661010090920416145b1515610f4d57600080fd5b600160a060020a0381161515610f6257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000546101009004600160a060020a031681565b600154600160a060020a031681565b600160a060020a031660009081526005602052604090205490565b610fd76110ee565b600160a060020a03821660009081526005602090815260409182902080549092839282810201905190810160405280929190818152602001828054801561106557602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161102c5790505b5050505050915050919050565b6101206040519081016040526009815b6000815260001990910190602001816110825790505090565b8154818355818115116110cf57600f016010900481600f016010900483600052602060002091820191016110cf9190611100565b505050565b60a060405190810160405260008152600460208201611082565b60206040519081016040526000815290565b61111e91905b8082111561111a5760008155600101611106565b5090565b905600a165627a7a72305820a1124ba7f27f40e8634c2c73650cf4e886c7f448920784961ad5ee9661ffa71a0029000000000000000000000000da9c03dfd4d137f926c3cf6953cb951832eb08b2

Deployed Bytecode

0x6060604052600436106100c15763ffffffff60e060020a60003504166306b16a6c81146100c357806330efb8d3146100d25780633ccfd60b146100e557806367d0661d146100f8578063704b6c021461010b57806372c691b21461012a578063821919fd1461014957806382cb9df9146101945780639b8d3064146101c3578063b187bd26146101e2578063bf8bdac114610209578063bfae2f0e14610228578063cdd977e01461023b578063d489c0bf1461024e578063e5d3d9d714610286575b005b6100c161ffff600435166102f8565b34156100dd57600080fd5b6100c1610ba9565b34156100f057600080fd5b6100c1610be6565b341561010357600080fd5b6100c1610c5c565b341561011657600080fd5b6100c1600160a060020a0360043516610c9b565b341561013557600080fd5b6100c1600160a060020a0360043516610d46565b341561015457600080fd5b61015c610d95565b604051808260a080838360005b83811015610181578082015183820152602001610169565b5050505090500191505060405180910390f35b341561019f57600080fd5b6101a7610e7b565b604051600160a060020a03909116815260200160405180910390f35b34156101ce57600080fd5b6100c1600160a060020a0360043516610e8a565b34156101ed57600080fd5b6101f5610f09565b604051901515815260200160405180910390f35b341561021457600080fd5b6100c1600160a060020a0360043516610f12565b341561023357600080fd5b6101a7610f91565b341561024657600080fd5b6101a7610fa5565b341561025957600080fd5b61026d600160a060020a0360043516610fb4565b60405163ffffffff909116815260200160405180910390f35b341561029157600080fd5b6102a5600160a060020a0360043516610fcf565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102e45780820151838201526020016102cc565b505050509050019250505060405180910390f35b600080600080610306611072565b61030e611072565b610316611072565b61031e611072565b610326611072565b60005460ff161561033657600080fd5b61ffff808b166000908152600460205260408120549091169950891161035b57600080fd5b600160a060020a033316600090815260056020526040902080549098509650600a871061038757600080fd5b600095508961ffff1661271114156104ff57670928ca80cfc200003410156103ae57600080fd5b670928ca80cfc200003403955061012060405190810160409081526127118252600560208301526009818301526028606083015260006080830181905260a0830181905260c0830181905260e083015260016101008301819052600354929750600160a060020a0390921691639cc477b291339189915160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b8381101561046b578082015183820152602001610453565b505050509050018261ffff1681526020019350505050602060405180830381600087803b151561049a57600080fd5b5af115156104a757600080fd5b5050506040518051505087548890600181016104c3838261109b565b9160005260206000209060109182820401919006600202612711909190916101000a81548161ffff021916908361ffff16021790555050610abd565b8961ffff16612712141561067357670dbd2fc137a3000034101561052257600080fd5b670dbd2fc137a30000340395506101206040519081016040908152612712825260056020830152600981830152600060608301819052601e6080840181905260a084015260c0830181905260e083015260016101008301819052600354929650600160a060020a0390921691639cc477b291339188915160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b838110156105df5780820151838201526020016105c7565b505050509050018261ffff1681526020019350505050602060405180830381600087803b151561060e57600080fd5b5af1151561061b57600080fd5b505050604051805150508754889060018101610637838261109b565b9160005260206000209060109182820401919006600202612712909190916101000a81548161ffff021916908361ffff16021790555050610abd565b8961ffff1661271314156107e757670928ca80cfc2000034101561069657600080fd5b670928ca80cfc200003403955061012060405190810160409081526127138252600560208301526009818301526000606083018190526080830181905260a08301819052602860c084015260e083015260016101008301819052600354929550600160a060020a0390921691639cc477b291339187915160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b8381101561075357808201518382015260200161073b565b505050509050018261ffff1681526020019350505050602060405180830381600087803b151561078257600080fd5b5af1151561078f57600080fd5b5050506040518051505087548890600181016107ab838261109b565b9160005260206000209060109182820401919006600202612713909190916101000a81548161ffff021916908361ffff16021790555050610abd565b8961ffff16612714141561095b57670dbd2fc137a3000034101561080a57600080fd5b670dbd2fc137a300003403955061012060405190810160409081526127148252600560208301526009818301526000606083018190526080830181905260a0830181905260c0830152601e60e083015260016101008301819052600354929450600160a060020a0390921691639cc477b291339186915160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b838110156108c75780820151838201526020016108af565b505050509050018261ffff1681526020019350505050602060405180830381600087803b15156108f657600080fd5b5af1151561090357600080fd5b50505060405180515050875488906001810161091f838261109b565b9160005260206000209060109182820401919006600202612714909190916101000a81548161ffff021916908361ffff16021790555050610abd565b670dbd2fc137a3000034101561097057600080fd5b670dbd2fc137a30000340395506101206040519081016040908152612715825260056020830152600981830152601460608301819052600a6080840181905260a084015260c0830152600060e083015260016101008301819052600354929350600160a060020a0390921691639cc477b291339185915160e060020a63ffffffff8616028152600160a060020a03841660048201908152906024018361012080838360005b83811015610a2d578082015183820152602001610a15565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1515610a5c57600080fd5b5af11515610a6957600080fd5b505050604051805150508754889060018101610a85838261109b565b9160005260206000209060109182820401919006600202612715909190916101000a81548161ffff021916908361ffff160217905550505b61ffff8a811660009081526004602052604090819020805461ffff19166000198d019093169290921790915533600160a060020a0316907f3fe14c4b035f23907f7e97114b5e33083128a0dd22077eebd1266dec0d152a9f908c905161ffff909116815260200160405180910390a2600254600160a060020a03163487900380156108fc0290604051600060405180830381858888f193505050501515610b6357600080fd5b6000861115610b9d57600160a060020a03331686156108fc0287604051600060405180830381858888f193505050501515610b9d57600080fd5b50505050505050505050565b60005433600160a060020a039081166101009092041614610bc957600080fd5b60005460ff161515610bda57600080fd5b6000805460ff19169055565b60025433600160a060020a0390811691161480610c16575060005433600160a060020a0390811661010090920416145b1515610c2157600080fd5b600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610c5a57600080fd5b565b60005433600160a060020a039081166101009092041614610c7c57600080fd5b60005460ff1615610c8c57600080fd5b6000805460ff19166001179055565b60005433600160a060020a039081166101009092041614610cbb57600080fd5b600160a060020a0381161515610cd057600080fd5b600054600160a060020a03808316916101009004167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360008054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60005433600160a060020a039081166101009092041614610d6657600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610d9d6110d4565b7fd46743c2fa65df9b432f3be9771b67177cb202675d04f7d17146b12c68053d0f5461ffff90811682527f21e0fcdea931fab45b080ed0027d4fdf8c9cd2b45394db36e13c82ca4e92da025481166020838101919091527fbc6c806d14996990b6fee39bf95cbc6f69b49c8178cb10842dcb20c01ad7d38354821660408401527fb0ea0a6272ae45b32a24b6de30c67aefdbe5b6bd07ff2086866f616f478c505b5482166060840152612715600052600490527f4a09a05d2362d42bb0eb42dbcde818d16b4ec6f481618534a2b97c4d9cb8180d5416608082015290565b600254600160a060020a031681565b60025433600160a060020a0390811691161480610eba575060005433600160a060020a0390811661010090920416145b1515610ec557600080fd5b600160a060020a0381161515610eda57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005460ff1681565b60015433600160a060020a0390811691161480610f42575060005433600160a060020a0390811661010090920416145b1515610f4d57600080fd5b600160a060020a0381161515610f6257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000546101009004600160a060020a031681565b600154600160a060020a031681565b600160a060020a031660009081526005602052604090205490565b610fd76110ee565b600160a060020a03821660009081526005602090815260409182902080549092839282810201905190810160405280929190818152602001828054801561106557602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161102c5790505b5050505050915050919050565b6101206040519081016040526009815b6000815260001990910190602001816110825790505090565b8154818355818115116110cf57600f016010900481600f016010900483600052602060002091820191016110cf9190611100565b505050565b60a060405190810160405260008152600460208201611082565b60206040519081016040526000815290565b61111e91905b8082111561111a5760008155600101611106565b5090565b905600a165627a7a72305820a1124ba7f27f40e8634c2c73650cf4e886c7f448920784961ad5ee9661ffa71a0029

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://a1124ba7f27f40e8634c2c73650cf4e886c7f448920784961ad5ee9661ffa71a

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.