Token

Overview [ERC-20]

Max Total Supply:
2

Holders:
2

Profile Summary

 
Contract:
0xfc382e31fee6ee4e2f6eb8a24cdbee7b6a1ded7e0xfc382E31fEE6ee4E2F6eb8a24CdBEE7b6a1dED7e

Decimals:
0
Balance
1
0x0000000000000000000000000000000000000001
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AppToken

Compiler Version
v0.5.7+commit.6da8b019

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-03-28
*/

/// @author robinjoo1015 & njw1204

pragma solidity ^0.5.0;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address internal _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     * @notice Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
     * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
     * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

contract BaseTokenInterface {
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);

  function balanceOf(address _owner) public view returns (uint256 _balance);
  function ownerOf(uint256 _tokenId) public view returns (address _owner);
  function transfer(address _to, uint256 _tokenId) public;
}

contract ExtraTokenInterface is BaseTokenInterface {
    struct App {
        uint256 tokenId;
        string name;
        string comment;
        string url;
        uint256 validTime;
        address seller;
    }

    uint256 public totalSupply = 0; // total app count
    mapping (uint256 => App) public app; // store all apps based on tokenId

    mapping (uint256 => address) internal ownerOfApp; // store the app's owner
    mapping (address => uint256) internal ownerAppCount; // store the number of the owner's apps
    mapping (address => uint256[]) public appsOfOwner; // store the owner's apps
    mapping (address => mapping (uint256 => uint256)) internal appsOfOwnerIndex;

    mapping (address => uint256) public sellerAppCount;
    mapping (address => uint256[]) public appsOfSeller; // store the seller's apps
    mapping (address => mapping (uint256 => uint256)) internal appsOfSellerIndex;

    function transferToMarket(address _from, uint256 _tokenId) public;
    function sellerOf(uint256 _tokenId) public view returns (address _seller);
    function createApp(string memory _name, string memory _comment, string memory _url, uint256 _validTime) public;
    function changeSeller(address _to, uint256 _tokenId) public;
    function changeValidTime(uint256 _tokenId, uint256 _newValidTime) public;
    function changeName(uint256 _tokenId, string memory _newName) public;
    function changeComment(uint256 _tokenId, string memory _newComment) public;
    function changeUrl(uint256 _tokenId, string memory _newUrl) public;
}

contract AppToken is ExtraTokenInterface, Ownable {
    using SafeMath for uint256;

    address public marketAddress = address(0);

    event ChangeSeller(uint256 indexed tokenId, address from, address to);
    event ChangeValidTime(uint256 indexed tokenId, uint256 newValidTime);

    function balanceOf(address _owner) public view returns (uint256 _balance) {
        return ownerAppCount[_owner];
    }

    function ownerOf(uint256 _tokenId) public view returns (address _owner) {
        return ownerOfApp[_tokenId];
    }

    function sellerOf(uint256 _tokenId) public view returns (address _seller) {
        return app[_tokenId].seller;
    }

    function createApp(string memory _name, string memory _comment, string memory _url, uint256 _validTime) public {
        uint256 _tokenId = totalSupply.add(1);

        app[_tokenId] = App(_tokenId, _name, _comment, _url, _validTime, msg.sender); // create new app
        sellerAppCount[msg.sender] = sellerAppCount[msg.sender].add(1);
        // push to array of seller's apps
        appsOfSellerIndex[msg.sender][_tokenId] = appsOfSeller[msg.sender].length;
        appsOfSeller[msg.sender].push(_tokenId);
        _transfer(address(0), msg.sender, _tokenId); // transfer created app from 0 to msg.sender
    }

    function _transfer(address _from, address _to, uint256 _tokenId) private {
        require(_from != _to && _to != address(0));

        if (_from != address(0)) {
            ownerAppCount[_from] = ownerAppCount[_from].sub(1);
            // remove element (set 0) at array of owner's apps
            delete appsOfOwner[_from][appsOfOwnerIndex[_from][_tokenId]];
            delete appsOfOwnerIndex[_from][_tokenId];
        }
        else {
            // create new app
            totalSupply = totalSupply.add(1);
        }

        ownerOfApp[_tokenId] = _to;
        ownerAppCount[_to] = ownerAppCount[_to].add(1);
        // push to array of owner's apps
        appsOfOwnerIndex[_to][_tokenId] = appsOfOwner[_to].length;
        appsOfOwner[_to].push(_tokenId);
        emit Transfer(_from, _to, _tokenId);
    }

    function transfer(address _to, uint256 _tokenId) public {
        require(msg.sender == ownerOf(_tokenId));
        _transfer(msg.sender, _to, _tokenId);
    }

    function transferToMarket(address _from, uint256 _tokenId) public {
        require(_from == ownerOf(_tokenId) && msg.sender == marketAddress);
        _transfer(_from, marketAddress, _tokenId);
    }

    function changeSeller(address _to, uint256 _tokenId) public {
        require(msg.sender == sellerOf(_tokenId) && _to != address(0));

        sellerAppCount[msg.sender] = sellerAppCount[msg.sender].sub(1);
        // remove element (set 0) at array of seller's apps
        delete appsOfSeller[msg.sender][appsOfSellerIndex[msg.sender][_tokenId]];
        delete appsOfSellerIndex[msg.sender][_tokenId];

        app[_tokenId].seller = _to;
        sellerAppCount[_to] = sellerAppCount[_to].add(1);
        // push to array of seller's apps
        appsOfSellerIndex[_to][_tokenId] = appsOfSeller[_to].length;
        appsOfSeller[_to].push(_tokenId);
        emit ChangeSeller(_tokenId, msg.sender, _to);
    }

    function changeValidTime(uint256 _tokenId, uint256 _newValidTime) public {
        require(msg.sender == sellerOf(_tokenId));
        app[_tokenId].validTime = _newValidTime;
        emit ChangeValidTime(_tokenId, _newValidTime);
    }

    function changeName(uint256 _tokenId, string memory _newName) public {
        require(msg.sender == sellerOf(_tokenId));
        app[_tokenId].name = _newName;
    }

    function changeComment(uint256 _tokenId, string memory _newComment) public {
        require(msg.sender == sellerOf(_tokenId));
        app[_tokenId].comment = _newComment;
    }

    function changeUrl(uint256 _tokenId, string memory _newUrl) public {
        require(msg.sender == sellerOf(_tokenId));
        app[_tokenId].url = _newUrl;
    }

    function changeMarketAddress(address _market) external onlyOwner {
        marketAddress = _market;
    }
}

Contract ABI

[{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"appsOfSeller","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"app","outputs":[{"name":"tokenId","type":"uint256"},{"name":"name","type":"string"},{"name":"comment","type":"string"},{"name":"url","type":"string"},{"name":"validTime","type":"uint256"},{"name":"seller","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_market","type":"address"}],"name":"changeMarketAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_newComment","type":"string"}],"name":"changeComment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_comment","type":"string"},{"name":"_url","type":"string"},{"name":"_validTime","type":"uint256"}],"name":"createApp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_newUrl","type":"string"}],"name":"changeUrl","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"marketAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_newValidTime","type":"uint256"}],"name":"changeValidTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_newName","type":"string"}],"name":"changeName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"sellerAppCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferToMarket","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"sellerOf","outputs":[{"name":"_seller","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"changeSeller","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"appsOfOwner","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"}],"name":"ChangeSeller","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"newValidTime","type":"uint256"}],"name":"ChangeValidTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"}]

608060408190526000808055600a80546001600160a01b0319908116909155600980549091163317908190556001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3611409806100696000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806391132d8b116100b8578063c8883daf1161007c578063c8883daf146107d0578063e03e2d02146107f6578063e05c5a8314610822578063e107a2691461083f578063e90cbf9e1461086b578063f2fde38b1461089757610142565b806391132d8b1461062357806395623641146106ce578063a9059cbb146106d6578063bf86c7d314610702578063c39cbef11461072557610142565b80634b0ec5ae1161010a5780634b0ec5ae146103e85780636352211e1461059857806370a08231146105d1578063715018a6146105f75780638da5cb5b146105ff5780638f32d59b1461060757610142565b806310231b361461014757806318160ddd1461018557806333e466ae1461018d57806335aed778146103155780633e8a23e71461033d575b600080fd5b6101736004803603604081101561015d57600080fd5b506001600160a01b0381351690602001356108bd565b60408051918252519081900360200190f35b6101736108eb565b6101aa600480360360208110156101a357600080fd5b50356108f1565b60405180878152602001806020018060200180602001868152602001856001600160a01b03166001600160a01b03168152602001848103845289818151815260200191508051906020019080838360005b838110156102135781810151838201526020016101fb565b50505050905090810190601f1680156102405780820380516001836020036101000a031916815260200191505b5084810383528851815288516020918201918a019080838360005b8381101561027357818101518382015260200161025b565b50505050905090810190601f1680156102a05780820380516001836020036101000a031916815260200191505b50848103825287518152875160209182019189019080838360005b838110156102d35781810151838201526020016102bb565b50505050905090810190601f1680156103005780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b61033b6004803603602081101561032b57600080fd5b50356001600160a01b0316610acf565b005b61033b6004803603604081101561035357600080fd5b81359190810190604081016020820135600160201b81111561037457600080fd5b82018360208201111561038657600080fd5b803590602001918460018302840111600160201b831117156103a757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b02945050505050565b61033b600480360360808110156103fe57600080fd5b810190602081018135600160201b81111561041857600080fd5b82018360208201111561042a57600080fd5b803590602001918460018302840111600160201b8311171561044b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561049d57600080fd5b8201836020820111156104af57600080fd5b803590602001918460018302840111600160201b831117156104d057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561052257600080fd5b82018360208201111561053457600080fd5b803590602001918460018302840111600160201b8311171561055557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610b52915050565b6105b5600480360360208110156105ae57600080fd5b5035610c9e565b604080516001600160a01b039092168252519081900360200190f35b610173600480360360208110156105e757600080fd5b50356001600160a01b0316610cb9565b61033b610cd4565b6105b5610d2f565b61060f610d3f565b604080519115158252519081900360200190f35b61033b6004803603604081101561063957600080fd5b81359190810190604081016020820135600160201b81111561065a57600080fd5b82018360208201111561066c57600080fd5b803590602001918460018302840111600160201b8311171561068d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d50945050505050565b6105b5610d9b565b61033b600480360360408110156106ec57600080fd5b506001600160a01b038135169060200135610daa565b61033b6004803603604081101561071857600080fd5b5080359060200135610ddf565b61033b6004803603604081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460018302840111600160201b8311171561078f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e53945050505050565b610173600480360360208110156107e657600080fd5b50356001600160a01b0316610e9e565b61033b6004803603604081101561080c57600080fd5b506001600160a01b038135169060200135610eb0565b6105b56004803603602081101561083857600080fd5b5035610f04565b61033b6004803603604081101561085557600080fd5b506001600160a01b038135169060200135610f22565b6101736004803603604081101561088157600080fd5b506001600160a01b0381351690602001356110aa565b61033b600480360360208110156108ad57600080fd5b50356001600160a01b03166110c3565b600760205281600052604060002081815481106108d657fe5b90600052602060002001600091509150505481565b60005481565b600160208181526000928352604092839020805481840180548651600296821615610100026000190190911695909504601f8101859004850286018501909652858552909491939290919083018282801561098d5780601f106109625761010080835404028352916020019161098d565b820191906000526020600020905b81548152906001019060200180831161097057829003601f168201915b50505060028085018054604080516020601f6000196101006001871615020190941695909504928301859004850281018501909152818152959695945090925090830182828015610a1f5780601f106109f457610100808354040283529160200191610a1f565b820191906000526020600020905b815481529060010190602001808311610a0257829003601f168201915b5050505060038301805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152949594935090830182828015610aaf5780601f10610a8457610100808354040283529160200191610aaf565b820191906000526020600020905b815481529060010190602001808311610a9257829003601f168201915b5050505060048301546005909301549192916001600160a01b0316905086565b610ad7610d3f565b610ae057600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610b0b82610f04565b6001600160a01b0316336001600160a01b031614610b2857600080fd5b60008281526001602090815260409091208251610b4d92600290920191840190611345565b505050565b60008054610b6790600163ffffffff6110e016565b6040805160c081018252828152602080820189815282840189905260608301889052608083018790523360a084015260008581526001808452949020835181559051805195965092949093610bc193908501920190611345565b5060408201518051610bdd916002840191602090910190611345565b5060608201518051610bf9916003840191602090910190611345565b506080820151600482015560a090910151600590910180546001600160a01b0319166001600160a01b0390921691909117905533600090815260066020526040902054610c479060016110e0565b336000818152600660209081526040808320949094556007808252848320805460088452868520888652845295842086905590825260018501815582528120909201839055610c979190836110f9565b5050505050565b6000908152600260205260409020546001600160a01b031690565b6001600160a01b031660009081526003602052604090205490565b610cdc610d3f565b610ce557600080fd5b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b6009546001600160a01b03165b90565b6009546001600160a01b0316331490565b610d5982610f04565b6001600160a01b0316336001600160a01b031614610d7657600080fd5b60008281526001602090815260409091208251610b4d92600390920191840190611345565b600a546001600160a01b031681565b610db381610c9e565b6001600160a01b0316336001600160a01b031614610dd057600080fd5b610ddb3383836110f9565b5050565b610de882610f04565b6001600160a01b0316336001600160a01b031614610e0557600080fd5b6000828152600160209081526040918290206004018390558151838152915184927fed7117feabace762d5982514bcc2b4b3acc83a34a5f5fc79904e0f4af61fbb7992908290030190a25050565b610e5c82610f04565b6001600160a01b0316336001600160a01b031614610e7957600080fd5b60008281526001602081815260409092208351610b4d93919092019190840190611345565b60066020526000908152604090205481565b610eb981610c9e565b6001600160a01b0316826001600160a01b0316148015610ee35750600a546001600160a01b031633145b610eec57600080fd5b600a54610ddb9083906001600160a01b0316836110f9565b6000908152600160205260409020600501546001600160a01b031690565b610f2b81610f04565b6001600160a01b0316336001600160a01b0316148015610f5357506001600160a01b03821615155b610f5c57600080fd5b33600090815260066020526040902054610f7d90600163ffffffff6112c116565b3360009081526006602090815260408083209390935560078152828220600882528383208584529091529190205481548110610fb557fe5b600091825260208083209091018290553382526008815260408083208484528252808320839055600180835281842060050180546001600160a01b0388166001600160a01b03199091168117909155845260069092529091205461101e9163ffffffff6110e016565b6001600160a01b03831660008181526006602090815260408083209490945560078082528483208054600884528685208886528452868520819055918352600182018155835291819020909101849055825133815290810191909152815183927f30fe29133a49d9926a5406d2e4f464336e0da4eb265b6a9a30dffc91758e6bfa928290030190a25050565b600460205281600052604060002081815481106108d657fe5b6110cb610d3f565b6110d457600080fd5b6110dd816112d6565b50565b6000828201838110156110f257600080fd5b9392505050565b816001600160a01b0316836001600160a01b03161415801561112357506001600160a01b03821615155b61112c57600080fd5b6001600160a01b038316156111d9576001600160a01b03831660009081526003602052604090205461116590600163ffffffff6112c116565b6001600160a01b038416600090815260036020908152604080832093909355600481528282206005825283832085845290915291902054815481106111a657fe5b600091825260208083209091018290556001600160a01b03851682526005815260408083208484529091528120556111f1565b6000546111ed90600163ffffffff6110e016565b6000555b600081815260026020908152604080832080546001600160a01b0319166001600160a01b038716908117909155835260039091529020546112339060016110e0565b6001600160a01b0380841660008181526003602090815260408083209590955560048082528583208054600584528785208986528452878520819055918352600182018155835291819020909101859055835185815293519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505050565b6000828211156112d057600080fd5b50900390565b6001600160a01b0381166112e957600080fd5b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061138657805160ff19168380011785556113b3565b828001600101855582156113b3579182015b828111156113b3578251825591602001919060010190611398565b506113bf9291506113c3565b5090565b610d3c91905b808211156113bf57600081556001016113c956fea165627a7a72305820a3bf806061a685b86c0738c4aa49be0beaf6170430873bea7dab0f15f58b276a0029

Swarm Source

bzzr://a3bf806061a685b86c0738c4aa49be0beaf6170430873bea7dab0f15f58b276a

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.