ERC-20
Devcon
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)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | 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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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.