ETH Price: $3,132.37 (-2.50%)
 

Overview

Max Total Supply

231 Devcon2

Holders

42 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
1 Devcon2

Value
$0.00
0x7d1cd61f6153efd679963d101c5c49374989c7e7
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MainnetIndividualityTokenRoot

Compiler Version
v0.4.4+commit.4633f3de

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2016-11-17
*/

pragma solidity ^0.4.0;


library ECVerifyLib {
    // From: https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d
    // Duplicate Solidity's ecrecover, but catching the CALL return value
    function safer_ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal returns (bool, address) {
        // We do our own memory management here. Solidity uses memory offset
        // 0x40 to store the current end of memory. We write past it (as
        // writes are memory extensions), but don't update the offset so
        // Solidity will reuse it. The memory used here is only needed for
        // this context.

        // FIXME: inline assembly can't access return values
        bool ret;
        address addr;

        assembly {
            let size := mload(0x40)
            mstore(size, hash)
            mstore(add(size, 32), v)
            mstore(add(size, 64), r)
            mstore(add(size, 96), s)

            // NOTE: we can reuse the request memory because we deal with
            //       the return code
            ret := call(3000, 1, 0, size, 128, size, 32)
            addr := mload(size)
        }

        return (ret, addr);
    }

    function ecrecovery(bytes32 hash, bytes sig) returns (bool, address) {
        bytes32 r;
        bytes32 s;
        uint8 v;

        if (sig.length != 65)
          return (false, 0);

        // The signature format is a compact form of:
        //   {bytes32 r}{bytes32 s}{uint8 v}
        // Compact means, uint8 is not padded to 32 bytes.
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))

            // Here we are loading the last 32 bytes. We exploit the fact that
            // 'mload' will pad with zeroes if we overread.
            // There is no 'mload8' to do this, but that would be nicer.
            v := byte(0, mload(add(sig, 96)))

            // Alternative solution:
            // 'byte' is not working due to the Solidity parser, so lets
            // use the second best option, 'and'
            // v := and(mload(add(sig, 65)), 255)
        }

        // albeit non-transactional signatures are not specified by the YP, one would expect it
        // to match the YP range of [27, 28]
        //
        // geth uses [0, 1] and some clients have followed. This might change, see:
        //  https://github.com/ethereum/go-ethereum/issues/2053
        if (v < 27)
          v += 27;

        if (v != 27 && v != 28)
            return (false, 0);

        return safer_ecrecover(hash, v, r, s);
    }

    function ecverify(bytes32 hash, bytes sig, address signer) returns (bool) {
        bool ret;
        address addr;
        (ret, addr) = ecrecovery(hash, sig);
        return ret == true && addr == signer;
    }
}


contract IndividualityTokenInterface {
    /*
     *  Events
     */
    event Mint(address indexed _owner, bytes32 _tokenID);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    /*
     * Read storage functions
     */

    /// @dev Return the number of tokens
    function totalSupply() constant returns (uint256 supply);

    /// @dev Returns id of token owned by given address (encoded as an integer).
    /// @param _owner Address of token owner.
    function balanceOf(address _owner) constant returns (uint256 balance);

    /// @dev Returns the token id that may transfer from _owner account by _spender..
    /// @param _owner Address of token owner.
    /// @param _spender Address of token spender.
    function allowance(address _owner, address _spender) constant returns (uint256 remaining);

    /*
     *  Write storage functions
     */

    /// @dev Transfers sender token to given address. Returns success.
    /// @param _to Address of new token owner.
    /// @param _value Bytes32 id of the token to transfer.
    function transfer(address _to, uint256 _value) public returns (bool success);
    function transfer(address _to) public returns (bool success);

    /// @dev Allows allowed third party to transfer tokens from one address to another. Returns success.
    /// @param _from Address of token owner.
    /// @param _to Address of new token owner.
    /// @param _value Bytes32 id of the token to transfer.
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to) public returns (bool success);

    /// @dev Sets approval spender to transfer ownership of token. Returns success.
    /// @param _spender Address of spender..
    /// @param _value Bytes32 id of token that can be spend.
    function approve(address _spender, uint256 _value) public returns (bool success);
    function approve(address _spender) public returns (bool success);

    /*
     *  Extra non ERC20 functions
     */

    /// @dev Returns whether the address owns a token.
    /// @param _owner Address to check.
    function isTokenOwner(address _owner) constant returns (bool);

    /// @dev Returns the address of the owner of the given token id.
    /// @param _tokenID Bytes32 id of token to lookup.
    function ownerOf(bytes32 _tokenID) constant returns (address owner);

    /// @dev Returns the token ID for the given address or 0x0 if they are not a token owner.
    /// @param _owner Address of the owner to lookup.
    function tokenId(address _owner) constant returns (bytes32 tokenID);
}


contract IndividualityTokenRootInterface is IndividualityTokenInterface {
    /// @dev Imports a token from the Devcon2Token contract.
    function upgrade() public returns (bool success);

    /// @dev Upgrades a token from the previous contract
    /// @param _owner the address of the owner of the token on the original contract
    /// @param _newOwner the address that should own the token on the new contract.
    /// @param signature 65 byte signature of the tightly packed bytes (address(this) + _owner + _newOwner), signed by _owner
    function proxyUpgrade(address _owner,
                          address _newOwner,
                          bytes signature) public returns (bool);

    /// @dev Returns the number of tokens that have been upgraded.
    function upgradeCount() constant returns (uint256 amount);

    /// @dev Returns the number of tokens that have been upgraded.
    /// @param _tokenID the id of the token to query
    function isTokenUpgraded(bytes32 _tokenID) constant returns (bool isUpgraded);
}


library TokenEventLib {
    /*
     * When underlying solidity issue is fixed this library will not be needed.
     * https://github.com/ethereum/solidity/issues/1215
     */
    event Transfer(address indexed _from,
                   address indexed _to,
                   bytes32 indexed _tokenID);
    event Approval(address indexed _owner,
                   address indexed _spender,
                   bytes32 indexed _tokenID);

    function _Transfer(address _from, address _to, bytes32 _tokenID) public {
        Transfer(_from, _to, _tokenID);
    }

    function _Approval(address _owner, address _spender, bytes32 _tokenID) public {
        Approval(_owner, _spender, _tokenID);
    }
}


contract TokenInterface {
    /*
     *  Events
     */
    event Mint(address indexed _to, bytes32 _id);
    event Destroy(bytes32 _id);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
    event MinterAdded(address who);
    event MinterRemoved(address who);

    /*
     *  Minting
     */
    /// @dev Mints a new token.
    /// @param _to Address of token owner.
    /// @param _identity String for owner identity.
    function mint(address _to, string _identity) returns (bool success);

    /// @dev Destroy a token
    /// @param _id Bytes32 id of the token to destroy.
    function destroy(bytes32 _id) returns (bool success);

    /// @dev Add a new minter
    /// @param who Address the address that can now mint tokens.
    function addMinter(address who) returns (bool);

    /// @dev Remove a minter
    /// @param who Address the address that will no longer be a minter.
    function removeMinter(address who) returns (bool);

    /*
     *  Read and write storage functions
     */

    /// @dev Return the number of tokens
    function totalSupply() returns (uint supply);

    /// @dev Transfers sender token to given address. Returns success.
    /// @param _to Address of new token owner.
    /// @param _value Bytes32 id of the token to transfer.
    function transfer(address _to, uint256 _value) returns (bool success);
    function transfer(address _to, bytes32 _value) returns (bool success);

    /// @dev Allows allowed third party to transfer tokens from one address to another. Returns success.
    /// @param _from Address of token owner.
    /// @param _to Address of new token owner.
    /// @param _value Bytes32 id of the token to transfer.
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);
    function transferFrom(address _from, address _to, bytes32 _value) returns (bool success);

    /// @dev Sets approval spender to transfer ownership of token. Returns success.
    /// @param _spender Address of spender..
    /// @param _value Bytes32 id of token that can be spend.
    function approve(address _spender, uint256 _value) returns (bool success);
    function approve(address _spender, bytes32 _value) returns (bool success);

    /*
     * Read storage functions
     */
    /// @dev Returns id of token owned by given address (encoded as an integer).
    /// @param _owner Address of token owner.
    function balanceOf(address _owner) constant returns (uint256 balance);

    /// @dev Returns the token id that may transfer from _owner account by _spender..
    /// @param _owner Address of token owner.
    /// @param _spender Address of token spender.
    function allowance(address _owner, address _spender) constant returns (uint256 remaining);

    /*
     *  Extra non ERC20 functions
     */
    /// @dev Returns whether the address owns a token.
    /// @param _owner Address to check.
    function isTokenOwner(address _owner) constant returns (bool);

    /// @dev Returns the identity of the given token id.
    /// @param _id Bytes32 id of token to lookup.
    function identityOf(bytes32 _id) constant returns (string identity);

    /// @dev Returns the address of the owner of the given token id.
    /// @param _id Bytes32 id of token to lookup.
    function ownerOf(bytes32 _id) constant returns (address owner);
}


contract IndividualityTokenRoot is IndividualityTokenRootInterface {
    TokenInterface public devcon2Token;

    function IndividualityTokenRoot(address _devcon2Token) {
        devcon2Token = TokenInterface(_devcon2Token);
    }

    // owner => token
    mapping (address => bytes32) ownerToToken;

    // token => owner
    mapping (bytes32 => address) tokenToOwner;

    // owner => spender => token
    mapping (address => mapping (address => bytes32)) approvals;

    uint _upgradeCount;

    /*
     * Internal Helpers
     */
    function isEligibleForUpgrade(address _owner) internal returns (bool) {
        if (ownerToToken[_owner] != 0x0) {
            // already a token owner
            return false;
        } else if (!devcon2Token.isTokenOwner(_owner)) {
            // not a token owner on the original devcon2Token contract.
            return false;
        } else if (isTokenUpgraded(bytes32(devcon2Token.balanceOf(_owner)))) {
            // the token has already been upgraded.
            return false;
        } else {
            return true;
        }
    }

    /*
     * Any function modified with this will perform the `upgrade` call prior to
     * execution which allows people to use this contract as-if they had
     * already processed the upgrade.
     */
    modifier silentUpgrade {
        if (isEligibleForUpgrade(msg.sender)) {
            upgrade();
        }
        _;
    }


    /// @dev Return the number of tokens
    function totalSupply() constant returns (uint256) {
        return devcon2Token.totalSupply();
    }

    /// @dev Returns id of token owned by given address (encoded as an integer).
    /// @param _owner Address of token owner.
    function balanceOf(address _owner) constant returns (uint256 balance) {
        if (_owner == 0x0) {
            return 0;
        } else if (ownerToToken[_owner] == 0x0) {
            // not a current token owner.  Check whether they are on the
            // original contract.
            if (devcon2Token.isTokenOwner(_owner)) {
                // pull the tokenID
                var tokenID = bytes32(devcon2Token.balanceOf(_owner));

                if (tokenToOwner[tokenID] == 0x0) {
                    // the token hasn't yet been upgraded so we can return 1.
                    return 1;
                }
            }
            return 0;
        } else {
            return 1;
        }
    }

    /// @dev Returns the token id that may transfer from _owner account by _spender..
    /// @param _owner Address of token owner.
    /// @param _spender Address of token spender.
    function allowance(address _owner,
                       address _spender) constant returns (uint256 remaining) {
        var approvedTokenID = approvals[_owner][_spender];

        if (approvedTokenID == 0x0) {
            return 0;
        } else if (_owner == 0x0 || _spender == 0x0) {
            return 0;
        } else if (tokenToOwner[approvedTokenID] == _owner) {
            return 1;
        } else {
            return 0;
        }
    }

    /// @dev Transfers sender token to given address. Returns success.
    /// @param _to Address of new token owner.
    /// @param _value Bytes32 id of the token to transfer.
    function transfer(address _to,
                      uint256 _value) public silentUpgrade returns (bool success) {
        if (_value != 1) {
            // 1 is the only value that makes any sense here.
            return false;
        } else if (_to == 0x0) {
            // cannot transfer to the null address.
            return false;
        } else if (ownerToToken[msg.sender] == 0x0) {
            // msg.sender is not a token owner
            return false;
        } else if (ownerToToken[_to] != 0x0) {
            // cannot transfer to an address that already owns a token.
            return false;
        } else if (isEligibleForUpgrade(_to)) {
            // cannot transfer to an account which is still holding their token
            // in the old system.
            return false;
        }

        // pull the token id.
        var tokenID = ownerToToken[msg.sender];

        // remove the token from the sender.
        ownerToToken[msg.sender] = 0x0;

        // assign the token to the new owner
        ownerToToken[_to] = tokenID;
        tokenToOwner[tokenID] = _to;

        // log the transfer
        Transfer(msg.sender, _to, 1);
        TokenEventLib._Transfer(msg.sender, _to, tokenID);

        return true;
    }

    /// @dev Transfers sender token to given address. Returns success.
    /// @param _to Address of new token owner.
    function transfer(address _to) public returns (bool success) {
        return transfer(_to, 1);
    }

    /// @dev Allows allowed third party to transfer tokens from one address to another. Returns success.
    /// @param _from Address of token owner.
    /// @param _to Address of new token owner.
    /// @param _value Bytes32 id of the token to transfer.
    function transferFrom(address _from,
                          address _to,
                          uint256 _value) public returns (bool success) {
        if (_value != 1) {
            // Cannot transfer anything other than 1 token.
            return false;
        } else if (_to == 0x0) {
            // Cannot transfer to the null address
            return false;
        } else if (ownerToToken[_from] == 0x0) {
            // Cannot transfer if _from is not a token owner
            return false;
        } else if (ownerToToken[_to] != 0x0) {
            // Cannot transfer to an existing token owner
            return false;
        } else if (approvals[_from][msg.sender] != ownerToToken[_from]) {
            // The approved token doesn't match the token being transferred.
            return false;
        } else if (isEligibleForUpgrade(_to)) {
            // cannot transfer to an account which is still holding their token
            // in the old system.
            return false;
        }

        // pull the tokenID
        var tokenID = ownerToToken[_from];

        // null out the approval
        approvals[_from][msg.sender] = 0x0;

        // remove the token from the sender.
        ownerToToken[_from] = 0x0;

        // assign the token to the new owner
        ownerToToken[_to] = tokenID;
        tokenToOwner[tokenID] = _to;

        // log the transfer
        Transfer(_from, _to, 1);
        TokenEventLib._Transfer(_from, _to, tokenID);

        return true;
    }

    /// @dev Allows allowed third party to transfer tokens from one address to another. Returns success.
    /// @param _from Address of token owner.
    /// @param _to Address of new token owner.
    function transferFrom(address _from, address _to) public returns (bool success) {
        return transferFrom(_from, _to, 1);
    }

    /// @dev Sets approval spender to transfer ownership of token. Returns success.
    /// @param _spender Address of spender..
    /// @param _value Bytes32 id of token that can be spend.
    function approve(address _spender,
                     uint256 _value) public silentUpgrade returns (bool success) {
        if (_value != 1) {
            // cannot approve any value other than 1
            return false;
        } else if (_spender == 0x0) {
            // cannot approve the null address as a spender.
            return false;
        } else if (ownerToToken[msg.sender] == 0x0) {
            // cannot approve if not a token owner.
            return false;
        }

        var tokenID = ownerToToken[msg.sender];
        approvals[msg.sender][_spender] = tokenID;

        Approval(msg.sender, _spender, 1);
        TokenEventLib._Approval(msg.sender, _spender, tokenID);

        return true;
    }

    /// @dev Sets approval spender to transfer ownership of token. Returns success.
    /// @param _spender Address of spender..
    function approve(address _spender) public returns (bool success) {
        return approve(_spender, 1);
    }

    /*
     *  Extra non ERC20 functions
     */
    /// @dev Returns whether the address owns a token.
    /// @param _owner Address to check.
    function isTokenOwner(address _owner) constant returns (bool) {
        if (_owner == 0x0) {
            return false;
        } else if (ownerToToken[_owner] == 0x0) {
            // Check if the owner has a token on the main devcon2Token contract.
            if (devcon2Token.isTokenOwner(_owner)) {
                // pull the token ID
                var tokenID = bytes32(devcon2Token.balanceOf(_owner));

                if (tokenToOwner[tokenID] == 0x0) {
                    // They own an un-transfered token in the parent
                    // devcon2Token contract.
                    return true;
                }
            }
            return false;
        } else {
            return true;
        }
    }

    /// @dev Returns the address of the owner of the given token id.
    /// @param _tokenID Bytes32 id of token to lookup.
    function ownerOf(bytes32 _tokenID) constant returns (address owner) {
        if (_tokenID == 0x0) {
            return 0x0;
        } else if (tokenToOwner[_tokenID] != 0x0) {
            return tokenToOwner[_tokenID];
        } else {
            return devcon2Token.ownerOf(_tokenID);
        }
    }

    /// @dev Returns the token ID for the given address or 0x0 if they are not a token owner.
    /// @param _owner Address of the owner to lookup.
    function tokenId(address _owner) constant returns (bytes32 tokenID) {
        if (_owner == 0x0) {
            return 0x0;
        } else if (ownerToToken[_owner] != 0x0) {
            return ownerToToken[_owner];
        } else {
            tokenID = bytes32(devcon2Token.balanceOf(_owner));
            if (tokenToOwner[tokenID] == 0x0) {
                // this token has not been transfered yet so return the proxied
                // value.
                return tokenID;
            } else {
                // The token has already been transferred so ignore the parent
                // contract data.
                return 0x0;
            }
        }
    }

    /// @dev Upgrades a token from the previous contract
    function upgrade() public returns (bool success) {
        if (!devcon2Token.isTokenOwner(msg.sender)) {
            // not a token owner.
            return false;
        } else if (ownerToToken[msg.sender] != 0x0) {
            // already owns a token
            return false;
        }
        
        // pull the token ID
        var tokenID = bytes32(devcon2Token.balanceOf(msg.sender));

        if (tokenID == 0x0) {
            // (should not be possible but here as a sanity check)
            // null token is invalid.
            return false;
        } else if (tokenToOwner[tokenID] != 0x0) {
            // already upgraded.
            return false;
        } else if (devcon2Token.ownerOf(tokenID) != msg.sender) {
            // (should not be possible but here as a sanity check)
            // not the owner of the token.
            return false;
        }

        // Assign the new ownership.
        ownerToToken[msg.sender] = tokenID;
        tokenToOwner[tokenID] = msg.sender;

        // increment the number of tokens that have been upgraded.
        _upgradeCount += 1;

        // Log it
        Mint(msg.sender, tokenID);
        return true;
    }

    /// @dev Upgrades a token from the previous contract
    /// @param _owner the address of the owner of the token on the original contract
    /// @param _newOwner the address that should own the token on the new contract.
    /// @param signature 65 byte signature of the tightly packed bytes (address(this) + _owner + _newOwner), signed by _owner
    function proxyUpgrade(address _owner,
                          address _newOwner,
                          bytes signature) public returns (bool) {
        if (_owner == 0x0 || _newOwner == 0x0) {
            // cannot work with null addresses.
            return false;
        } else if (!devcon2Token.isTokenOwner(_owner)) {
            // not a token owner on the original devcon2Token contract.
            return false;
        }

        bytes32 tokenID = bytes32(devcon2Token.balanceOf(_owner));

        if (tokenID == 0x0) {
            // (should not be possible since we already checked isTokenOwner
            // but I like being explicit)
            return false;
        } else if (isTokenUpgraded(tokenID)) {
            // the token has already been upgraded.
            return false;
        } else if (ownerToToken[_newOwner] != 0x0) {
            // new owner already owns a token
            return false;
        } else if (_owner != _newOwner && isEligibleForUpgrade(_newOwner)) {
            // cannot upgrade to account that is still has an upgradable token
            // on the old system.
            return false;
        }

        bytes32 signatureHash = sha3(address(this), _owner, _newOwner);

        if (!ECVerifyLib.ecverify(signatureHash, signature, _owner)) {
            return false;
        }

        // Assign the new token
        tokenToOwner[tokenID] = _newOwner;
        ownerToToken[_newOwner] = tokenID;

        // increment the number of tokens that have been upgraded.
        _upgradeCount += 1;

        // Log it
        Mint(_newOwner, tokenID);

        return true;
    }

    /// @dev Returns the number of tokens that have been upgraded.
    function upgradeCount() constant returns (uint256 _amount) {
        return _upgradeCount;
    }

    /// @dev Returns the number of tokens that have been upgraded.
    /// @param _tokenID the id of the token to query
    function isTokenUpgraded(bytes32 _tokenID) constant returns (bool isUpgraded) {
        return (tokenToOwner[_tokenID] != 0x0);
    }
}


contract MainnetIndividualityTokenRoot is 
         IndividualityTokenRoot(0x0a43edfe106d295e7c1e591a4b04b5598af9474c) {
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tokenID","type":"bytes32"}],"name":"isTokenUpgraded","outputs":[{"name":"isUpgraded","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_newOwner","type":"address"},{"name":"signature","type":"bytes"}],"name":"proxyUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"devcon2Token","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokenId","outputs":[{"name":"tokenID","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tokenID","type":"bytes32"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"isTokenOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"upgradeCount","outputs":[{"name":"_amount","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"upgrade","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_tokenID","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]

606060405260008054600160a060020a031916730a43edfe106d295e7c1e591a4b04b5598af9474c1781556112cf90819061003990396000f3606060405236156100cf5760e060020a6000350463095ea7b381146100d457806309fc8f6d146100e7578063103f9251146100f757806318160ddd146101275780631a695230146101a7578063216ef940146101c857806323b872dd1461024857806357b8e8c31461025e57806370a08231146102755780637ca317241461029d5780637dd56411146102c257806396286cc9146102de578063a9059cbb146102ee578063c4128b6d14610301578063d55ec69714610310578063daea85c5146103a1578063dd62ed3e146103e4575b610002565b346100025761042a6004356024356103b5565b346100025761042a600435610443565b346100025761042a60043560243560006105e8838360015b6000806001831461092e57600091505b509392505050565b34610002576104636000805460408051602090810184905281517f18160ddd0000000000000000000000000000000000000000000000000000000081529151600160a060020a03909316926318160ddd92600480820193929182900301818787803b156100025760325a03f11561000257505060405151915061030d9050565b346100025761042a60043560006105ef8260015b60006000610ddd336103be565b3461000257604080516020600460443581810135601f810184900484028501840190955284845261042a94823594602480359560649492939190920191819084018382808284375094965050505050505060008080600160a060020a038616158061023a5750600160a060020a038516155b156106825760009250610679565b346100025761042a60043560243560443561010f565b3461000257610475600054600160a060020a031681565b34610002576104636004355b600080600160a060020a0383161515610b095760009150610c47565b34610002576104636004356000600160a060020a0382161515610c565750600061045e565b34610002576104756004356000811515610d375750600061045e565b346100025761042a600435610281565b346100025761042a6004356024356101bb565b34610002576104636004545b90565b346100025761042a5b60006000600060009054906101000a9004600160a060020a0316600160a060020a03166396286cc9336000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f1156100025750506040515115159050611010576000915061100c565b346100025761042a60043560006105ef8260015b60006000610491335b600160a060020a038116600090815260016020526040812054156111ba5750600061045e565b3461000257610463600435602435600160a060020a03808316600090815260036020908152604080832093851683529290529081205480151561116457600091506104b6565b604080519115158252519081900360200190f35b61078c825b600081815260026020526040902054600160a060020a031615155b919050565b60408051918252519081900360200190f35b60408051600160a060020a039092168252519081900360200190f35b156104a05761049e610319565b505b600183146104bd57600091506104b6565b600091505b5092915050565b600160a060020a03841615156104d657600091506104b6565b600160a060020a03331660009081526001602052604090205415156104fe57600091506104b6565b50600160a060020a0333811660008181526001602081815260408084205460038352818520968a1680865296835293819020849055805192835251929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a373__TokenEventLib_________________________6362c99e843386846040518460e060020a0281526004018084600160a060020a0316815260200183600160a060020a0316815260200182600019168152602001935050505060006040518083038186803b156100025760325a03f41561000257505050600191506104b6565b9392505050565b905061045e565b60008281526002602090815260408083208054600160a060020a031916606060020a8a810204179055600160a060020a03881680845260018084529382902086905560048054909401909355805185815290517fd55909a3222b4688b86d9a5ff4d4660b08fc8b66c20c62bba968a42382d275ca929181900390910190a2600192505b50509392505050565b600060009054906101000a9004600160a060020a0316600160a060020a03166396286cc9876000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f11561000257505060405151151590506107065760009250610679565b600060009054906101000a9004600160a060020a0316600160a060020a03166370a08231876000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f1156100025750506040515192505081151561043e5760009250610679565b1561079a5760009250610679565b600160a060020a038516600090815260016020526040902054156107c15760009250610679565b84600160a060020a031686600160a060020a0316141580156107e757506107e7856103be565b156107f55760009250610679565b3086866040518084600160a060020a0316606060020a02815260140183600160a060020a0316606060020a02815260140182600160a060020a0316606060020a02815260140193505050506040518091039020905073__ECVerifyLib___________________________6339cdde328286896000604051602001526040518460e060020a02815260040180846000191681526020018060200183600160a060020a031681526020018281038252848181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156108f55780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b156100025760325a03f41561000257505060405151151590506105f65760009250610679565b600160a060020a0384161515610947576000915061011f565b600160a060020a038516600090815260016020526040902054151561096f576000915061011f565b600160a060020a03841660009081526001602052604090205415610996576000915061011f565b600160a060020a038086166000908152600160209081526040808320546003835281842033909516845293909152902054146109d5576000915061011f565b6109de846103be565b156109ec576000915061011f565b50600160a060020a038481166000818152600160208181526040808420805460038452828620338916875284528286208690558484529085905595891680855281852087905586855260028352938190208054600160a060020a031916606060020a808c02041790558051928352519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a373__TokenEventLib_________________________6376d66f5d8686846040518460e060020a0281526004018084600160a060020a0316815260200183600160a060020a0316815260200182600019168152602001935050505060006040518083038186803b156100025760325a03f415610002575050506001915061011f565b600160a060020a0383166000908152600160205260409020541515610c4257600060009054906101000a9004600160a060020a0316600160a060020a03166396286cc9846000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f11561000257505060405151159050610c4d57600060009054906101000a9004600160a060020a0316600160a060020a03166370a08231846000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f1156100025750506040805151600081815260026020529190912054909250600160a060020a031615159050610c4d5760019150610c47565b600191505b50919050565b60009150610c47565b600160a060020a03821660009081526001602052604090205415610c935750600160a060020a03811660009081526001602052604090205461045e565b600060009054906101000a9004600160a060020a0316600160a060020a03166370a08231836000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f1156100025750506040805151600081815260026020529190912054909250600160a060020a031615159050610d2f5761045e565b50600061045e565b600082815260026020526040902054600160a060020a031615610d725750600081815260026020526040902054600160a060020a031661045e565b60008054604080516020908101849052815160e060020a637dd56411028152600481018790529151600160a060020a0390931693637dd56411936024808501949192918390030190829087803b156100025760325a03f11561000257505060405151915061045e9050565b15610dec57610dea610319565b505b60018314610dfd57600091506104b6565b600160a060020a0384161515610e1657600091506104b6565b600160a060020a0333166000908152600160205260409020541515610e3e57600091506104b6565b600160a060020a03841660009081526001602052604090205415610e6557600091506104b6565b610e6e846103be565b15610e7c57600091506104b6565b5033600160a060020a03908116600081815260016020818152604080842080549085905595891680855281852087905586855260028352938190208054600160a060020a031916606060020a808c02041790558051928352519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a373__TokenEventLib_________________________6376d66f5d3386846040518460e060020a0281526004018084600160a060020a0316815260200183600160a060020a0316815260200182600019168152602001935050505060006040518083038186803b156100025760325a03f41561000257505050600191506104b6565b33600160a060020a038116600081815260016020818152604080842087905586845260028252928390208054600160a060020a031916606060020a96870296909604959095179094556004805490910190558051848152905191927fd55909a3222b4688b86d9a5ff4d4660b08fc8b66c20c62bba968a42382d275ca92918290030190a2600191505b5090565b600160a060020a03331660009081526001602052604090205415611037576000915061100c565b600060009054906101000a9004600160a060020a0316600160a060020a03166370a08231336000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f115610002575050604051519150508015156110bd576000915061100c565b600081815260026020526040902054600160a060020a0316156110e3576000915061100c565b60008054604080516020908101849052815160e060020a637dd56411028152600481018690529151600160a060020a0333811695941693637dd56411936024808201949392918390030190829087803b156100025760325a03f11561000257505060405151600160a060020a0316919091149050610f83576000915061100c565b600160a060020a03841615806111815750600160a060020a038316155b1561118f57600091506104b6565b600081815260026020526040902054600160a060020a03858116911614156104b157600191506104b6565b600060009054906101000a9004600160a060020a0316600160a060020a03166396286cc9836000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f115610002575050604051511515905061123d5750600061045e565b6112ba600060009054906101000a9004600160a060020a0316600160a060020a03166370a08231846000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f115610002575050604051519050610443565b156112c75750600061045e565b50600161045e56

Deployed Bytecode

0x606060405236156100cf5760e060020a6000350463095ea7b381146100d457806309fc8f6d146100e7578063103f9251146100f757806318160ddd146101275780631a695230146101a7578063216ef940146101c857806323b872dd1461024857806357b8e8c31461025e57806370a08231146102755780637ca317241461029d5780637dd56411146102c257806396286cc9146102de578063a9059cbb146102ee578063c4128b6d14610301578063d55ec69714610310578063daea85c5146103a1578063dd62ed3e146103e4575b610002565b346100025761042a6004356024356103b5565b346100025761042a600435610443565b346100025761042a60043560243560006105e8838360015b6000806001831461092e57600091505b509392505050565b34610002576104636000805460408051602090810184905281517f18160ddd0000000000000000000000000000000000000000000000000000000081529151600160a060020a03909316926318160ddd92600480820193929182900301818787803b156100025760325a03f11561000257505060405151915061030d9050565b346100025761042a60043560006105ef8260015b60006000610ddd336103be565b3461000257604080516020600460443581810135601f810184900484028501840190955284845261042a94823594602480359560649492939190920191819084018382808284375094965050505050505060008080600160a060020a038616158061023a5750600160a060020a038516155b156106825760009250610679565b346100025761042a60043560243560443561010f565b3461000257610475600054600160a060020a031681565b34610002576104636004355b600080600160a060020a0383161515610b095760009150610c47565b34610002576104636004356000600160a060020a0382161515610c565750600061045e565b34610002576104756004356000811515610d375750600061045e565b346100025761042a600435610281565b346100025761042a6004356024356101bb565b34610002576104636004545b90565b346100025761042a5b60006000600060009054906101000a9004600160a060020a0316600160a060020a03166396286cc9336000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f1156100025750506040515115159050611010576000915061100c565b346100025761042a60043560006105ef8260015b60006000610491335b600160a060020a038116600090815260016020526040812054156111ba5750600061045e565b3461000257610463600435602435600160a060020a03808316600090815260036020908152604080832093851683529290529081205480151561116457600091506104b6565b604080519115158252519081900360200190f35b61078c825b600081815260026020526040902054600160a060020a031615155b919050565b60408051918252519081900360200190f35b60408051600160a060020a039092168252519081900360200190f35b156104a05761049e610319565b505b600183146104bd57600091506104b6565b600091505b5092915050565b600160a060020a03841615156104d657600091506104b6565b600160a060020a03331660009081526001602052604090205415156104fe57600091506104b6565b50600160a060020a0333811660008181526001602081815260408084205460038352818520968a1680865296835293819020849055805192835251929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a373ee4e09a72c5f8d60ce09b4b90dd1ee680fc375fe6362c99e843386846040518460e060020a0281526004018084600160a060020a0316815260200183600160a060020a0316815260200182600019168152602001935050505060006040518083038186803b156100025760325a03f41561000257505050600191506104b6565b9392505050565b905061045e565b60008281526002602090815260408083208054600160a060020a031916606060020a8a810204179055600160a060020a03881680845260018084529382902086905560048054909401909355805185815290517fd55909a3222b4688b86d9a5ff4d4660b08fc8b66c20c62bba968a42382d275ca929181900390910190a2600192505b50509392505050565b600060009054906101000a9004600160a060020a0316600160a060020a03166396286cc9876000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f11561000257505060405151151590506107065760009250610679565b600060009054906101000a9004600160a060020a0316600160a060020a03166370a08231876000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f1156100025750506040515192505081151561043e5760009250610679565b1561079a5760009250610679565b600160a060020a038516600090815260016020526040902054156107c15760009250610679565b84600160a060020a031686600160a060020a0316141580156107e757506107e7856103be565b156107f55760009250610679565b3086866040518084600160a060020a0316606060020a02815260140183600160a060020a0316606060020a02815260140182600160a060020a0316606060020a028152601401935050505060405180910390209050739e475f8b49be49daf0571a53dda0fc9bfdbcf5056339cdde328286896000604051602001526040518460e060020a02815260040180846000191681526020018060200183600160a060020a031681526020018281038252848181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156108f55780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b156100025760325a03f41561000257505060405151151590506105f65760009250610679565b600160a060020a0384161515610947576000915061011f565b600160a060020a038516600090815260016020526040902054151561096f576000915061011f565b600160a060020a03841660009081526001602052604090205415610996576000915061011f565b600160a060020a038086166000908152600160209081526040808320546003835281842033909516845293909152902054146109d5576000915061011f565b6109de846103be565b156109ec576000915061011f565b50600160a060020a038481166000818152600160208181526040808420805460038452828620338916875284528286208690558484529085905595891680855281852087905586855260028352938190208054600160a060020a031916606060020a808c02041790558051928352519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a373ee4e09a72c5f8d60ce09b4b90dd1ee680fc375fe6376d66f5d8686846040518460e060020a0281526004018084600160a060020a0316815260200183600160a060020a0316815260200182600019168152602001935050505060006040518083038186803b156100025760325a03f415610002575050506001915061011f565b600160a060020a0383166000908152600160205260409020541515610c4257600060009054906101000a9004600160a060020a0316600160a060020a03166396286cc9846000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f11561000257505060405151159050610c4d57600060009054906101000a9004600160a060020a0316600160a060020a03166370a08231846000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f1156100025750506040805151600081815260026020529190912054909250600160a060020a031615159050610c4d5760019150610c47565b600191505b50919050565b60009150610c47565b600160a060020a03821660009081526001602052604090205415610c935750600160a060020a03811660009081526001602052604090205461045e565b600060009054906101000a9004600160a060020a0316600160a060020a03166370a08231836000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f1156100025750506040805151600081815260026020529190912054909250600160a060020a031615159050610d2f5761045e565b50600061045e565b600082815260026020526040902054600160a060020a031615610d725750600081815260026020526040902054600160a060020a031661045e565b60008054604080516020908101849052815160e060020a637dd56411028152600481018790529151600160a060020a0390931693637dd56411936024808501949192918390030190829087803b156100025760325a03f11561000257505060405151915061045e9050565b15610dec57610dea610319565b505b60018314610dfd57600091506104b6565b600160a060020a0384161515610e1657600091506104b6565b600160a060020a0333166000908152600160205260409020541515610e3e57600091506104b6565b600160a060020a03841660009081526001602052604090205415610e6557600091506104b6565b610e6e846103be565b15610e7c57600091506104b6565b5033600160a060020a03908116600081815260016020818152604080842080549085905595891680855281852087905586855260028352938190208054600160a060020a031916606060020a808c02041790558051928352519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a373ee4e09a72c5f8d60ce09b4b90dd1ee680fc375fe6376d66f5d3386846040518460e060020a0281526004018084600160a060020a0316815260200183600160a060020a0316815260200182600019168152602001935050505060006040518083038186803b156100025760325a03f41561000257505050600191506104b6565b33600160a060020a038116600081815260016020818152604080842087905586845260028252928390208054600160a060020a031916606060020a96870296909604959095179094556004805490910190558051848152905191927fd55909a3222b4688b86d9a5ff4d4660b08fc8b66c20c62bba968a42382d275ca92918290030190a2600191505b5090565b600160a060020a03331660009081526001602052604090205415611037576000915061100c565b600060009054906101000a9004600160a060020a0316600160a060020a03166370a08231336000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f115610002575050604051519150508015156110bd576000915061100c565b600081815260026020526040902054600160a060020a0316156110e3576000915061100c565b60008054604080516020908101849052815160e060020a637dd56411028152600481018690529151600160a060020a0333811695941693637dd56411936024808201949392918390030190829087803b156100025760325a03f11561000257505060405151600160a060020a0316919091149050610f83576000915061100c565b600160a060020a03841615806111815750600160a060020a038316155b1561118f57600091506104b6565b600081815260026020526040902054600160a060020a03858116911614156104b157600191506104b6565b600060009054906101000a9004600160a060020a0316600160a060020a03166396286cc9836000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f115610002575050604051511515905061123d5750600061045e565b6112ba600060009054906101000a9004600160a060020a0316600160a060020a03166370a08231846000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f115610002575050604051519050610443565b156112c75750600061045e565b50600161045e56

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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.