The SCI token has been upgraded to a new token contract - SCI2. The new token can be found here.
Overview
Max Total Supply
17,640,854 SCI
Holders
351 (0.00%)
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
ScienceBlockchainToken
Compiler Version
v0.4.16+commit.d7661dd9
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-12-13 */ /* * Safe Math Smart Contract. * Author: Mikhail Vladimirov <[email protected]> */ pragma solidity ^0.4.16; /** * Provides methods to safely add, subtract and multiply uint256 numbers. */ contract SafeMath { uint256 constant private MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; /** * Add two uint256 values, throw in case of overflow. * * @param x first value to add * @param y second value to add * @return x + y */ function safeAdd (uint256 x, uint256 y) constant internal returns (uint256 z) { assert (x <= MAX_UINT256 - y); return x + y; } /** * Subtract one uint256 value from another, throw in case of underflow. * * @param x value to subtract from * @param y value to subtract * @return x - y */ function safeSub (uint256 x, uint256 y) constant internal returns (uint256 z) { assert (x >= y); return x - y; } /** * Multiply two uint256 values, throw in case of overflow. * * @param x first value to multiply * @param y second value to multiply * @return x * y */ function safeMul (uint256 x, uint256 y) constant internal returns (uint256 z) { if (y == 0) return 0; // Prevent division by zero at the next line assert (x <= MAX_UINT256 / y); return x * y; } } /* * ERC-20 Standard Token Smart Contract Interface. * Author: Mikhail Vladimirov <[email protected]> */ pragma solidity ^0.4.16; /** * ERC-20 standard token interface, as defined * <a href="http://github.com/ethereum/EIPs/issues/20">here</a>. */ contract Token { /** * Get total number of tokens in circulation. * * @return total number of tokens in circulation */ function totalSupply () constant returns (uint256 supply); /** * Get number of tokens currently belonging to given owner. * * @param _owner address to get number of tokens currently belonging to the * owner of * @return number of tokens currently belonging to the owner of given address */ function balanceOf (address _owner) constant returns (uint256 balance); /** * Transfer given number of tokens from message sender to given recipient. * * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer to the owner of given address * @return true if tokens were transferred successfully, false otherwise */ function transfer (address _to, uint256 _value) returns (bool success); /** * Transfer given number of tokens from given owner to given recipient. * * @param _from address to transfer tokens from the owner of * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer from given owner to given * recipient * @return true if tokens were transferred successfully, false otherwise */ function transferFrom (address _from, address _to, uint256 _value) returns (bool success); /** * Allow given spender to transfer given number of tokens from message sender. * * @param _spender address to allow the owner of to transfer tokens from * message sender * @param _value number of tokens to allow to transfer * @return true if token transfer was successfully approved, false otherwise */ function approve (address _spender, uint256 _value) returns (bool success); /** * Tell how many tokens given spender is currently allowed to transfer from * given owner. * * @param _owner address to get number of tokens allowed to be transferred * from the owner of * @param _spender address to get number of tokens allowed to be transferred * by the owner of * @return number of tokens given spender is currently allowed to transfer * from given owner */ function allowance (address _owner, address _spender) constant returns (uint256 remaining); /** * Logged when tokens were transferred from one owner to another. * * @param _from address of the owner, tokens were transferred from * @param _to address of the owner, tokens were transferred to * @param _value number of tokens transferred */ event Transfer (address indexed _from, address indexed _to, uint256 _value); /** * Logged when owner approved his tokens to be transferred by some spender. * * @param _owner owner who approved his tokens to be transferred * @param _spender spender who were allowed to transfer the tokens belonging * to the owner * @param _value number of tokens belonging to the owner, approved to be * transferred by the spender */ event Approval ( address indexed _owner, address indexed _spender, uint256 _value); } /* * Abstract base contract for Token Smart Contracts that may create snapshots of * token holder balances. * Author: Mikhail Vladimirov <[email protected]> */ pragma solidity ^0.4.16; /** * Abstract base contract Token Smart Contracts that support snapshots of token * holder balances. */ contract AbstractSnapshottableToken is SafeMath, Token { /** * Maximum number of tokens in circulation (2^256 - 1). */ uint256 constant MAX_TOKENS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; /** * Maximum value of uint256 type, i.e. 2^256-1. */ uint256 constant MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; /** * Maximum value of address represented as uint256, i.e. 2^160-1. */ uint256 constant MAX_ADDRESS = 0x00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; /** * 2^160. */ uint256 constant TWO_160 = 0x00010000000000000000000000000000000000000000; /** * Create new Abstract Snapshottable Token smart contract. */ function AbstractSnapshottableToken () { snapshots.length = 1; // Reserve zero ID. } /** * Get total number of tokens in circulation. * * @return total number of tokens in circulation */ function totalSupply () constant returns (uint256 supply) { return tokensCount; } /** * Get total number of tokens in circulation as is was at the moment when * snapshot with given index was created. * * @param _index index of the snapshot to get total number of tokens in * circulation at the moment of * @return total number of tokens in circulation at the moment snapshot with * given index was created */ function totalSupplyAt (uint256 _index) constant returns (uint256 supply) { require (_index > 0); require (_index < snapshots.length); return snapshots [_index].tokensCount; } /** * Get number of tokens currently belonging to the owner of given address. * * @param _owner address to get number of tokens currently belonging to the * owner of * @return number of tokens currently belonging to the owner of given address */ function balanceOf (address _owner) constant returns (uint256 balance) { return accounts [_owner].balance; } /** * Get number of tokens owner of the given address had at the moment when * snapshot with given index was created. * * @param _owner address to get number of tokens for the owner of * @param _index index of the snapshot to get number of tokens at the time of * @return number of tokens owner of the given address had at the moment the * snapshot with given index was created */ function balanceOfAt (address _owner, uint256 _index) constant returns (uint256 balance) { require (_index > 0); require (_index < snapshots.length); if (_index > accounts [_owner].lastSnapshotIndex) return accounts [_owner].balance; else { uint8 level = 0; while (_index > 0) { uint256 v = historicalBalances [_owner][level][_index]; if (v != 0) return v; _index >>= 1; level += 1; // Overflow is possible here, but is harmless } return 0; } } /** * Get first address that probably had non-zero token balance at the moment * snapshot with given index was created. * * @param _index index of the snapshot to get first address the probably had * non-zero token balance at the moment of * @return flag that tells whether there is at least one address that probably * had non-zero token balance at the moment of snapshot with given * index (hasResult); and the fist address that probably had non-zero * token balance at the moment snapshot with given index was created * or zero if there are no such addresses (result) */ function firstAddressAt (uint256 _index) constant returns (bool hasResult, address result) { require (_index > 0); require (_index < snapshots.length); uint256 rawFirstAddress = snapshots [_index].firstAddress; hasResult = rawFirstAddress != MAX_UINT256; result = hasResult ? address (rawFirstAddress & MAX_ADDRESS) : 0; } /** * Get next address that probably had non-zero token balance at the moment * certain snapshot was created. * * @param _address previous address that probably had non-zero token balance * at the moment of certain snapshot * @return flag that tells whether there is next address that probably had * non-zero token balance at the moment of snapshot with given index * (hasResult); and the next address that probably had non-zero * token balance at the moment of snapshot with given index was * created or zero if there are no such addresses (result) */ function nextAddress (address _address) constant returns (bool hasResult, address result) { uint256 rawNextAddress = nextAddresses [_address]; require (rawNextAddress != 0); hasResult = rawNextAddress != MAX_UINT256; result = hasResult ? address (rawNextAddress & MAX_ADDRESS) : 0; } /** * Transfer given number of tokens from message sender to given recipient. * * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer to the owner of given address * @return true if tokens were transferred successfully, false otherwise */ function transfer (address _to, uint256 _value) returns (bool success) { return doTransfer (msg.sender, _to, _value); } /** * Transfer given number of tokens from given owner to given recipient. * * @param _from address to transfer tokens from the owner of * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer from given owner to given * recipient * @return true if tokens were transferred successfully, false otherwise */ function transferFrom (address _from, address _to, uint256 _value) returns (bool success) { if (_value > approved [_from][msg.sender]) return false; else if (doTransfer (_from, _to, _value)) { approved [_from][msg.sender] = safeSub (approved[_from][msg.sender], _value); return true; } else return false; } /** * Allow given spender to transfer given number of tokens from message sender. * * @param _spender address to allow the owner of to transfer tokens from * message sender * @param _value number of tokens to allow to transfer * @return true if token transfer was successfully approved, false otherwise */ function approve (address _spender, uint256 _value) returns (bool success) { approved [msg.sender][_spender] = _value; Approval (msg.sender, _spender, _value); return true; } /** * Tell how many tokens given spender is currently allowed to transfer from * given owner. * * @param _owner address to get number of tokens allowed to be transferred * from the owner of * @param _spender address to get number of tokens allowed to be transferred * by the owner of * @return number of tokens given spender is currently allowed to transfer * from given owner */ function allowance (address _owner, address _spender) constant returns (uint256 remaining) { return approved [_owner][_spender]; } /** * Create snapshot of token holder balances. * * @return index of new created snapshot */ function snapshot () returns (uint256 index) { index = snapshots.length++; snapshots [index].tokensCount = tokensCount; snapshots [index].firstAddress = firstAddress; Snapshot (index); } /** * Transfer given number of tokens from the owner of given from address to the * owner of given to address. * * @param _from address to transfer tokens from the owner of * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer * @return true if tokens were transferred successfully, false otherwise */ function doTransfer (address _from, address _to, uint256 _value) internal returns (bool success) { if (_value > accounts [_from].balance) return false; else if (_value > 0 && _from != _to) { saveAddress (_to); updateHistoricalBalances (_from); updateHistoricalBalances (_to); accounts [_from].balance = safeSub (accounts [_from].balance, _value); accounts [_to].balance = safeAdd (accounts [_to].balance, _value); Transfer (_from, _to, _value); return true; } else return true; } /** * Create given number of tokens and give them to message sender. * * @param _value number of tokens to create * @return true on success, false on error */ function doCreateTokens (uint256 _value) internal returns (bool success) { if (_value > safeSub (MAX_TOKENS, tokensCount)) return false; else if (_value > 0) { saveAddress (msg.sender); updateHistoricalBalances (msg.sender); accounts [msg.sender].balance = safeAdd (accounts [msg.sender].balance, _value); tokensCount = safeAdd (tokensCount, _value); return true; } else return true; } /** * Update historical balances for given token owner. * * @param _owner token owner to update historical balances for */ function updateHistoricalBalances (address _owner) internal { uint256 balance = accounts [_owner].balance; uint256 nextSnapshotIndex = snapshots.length; uint256 lastNextSnapshotIndex = safeAdd (accounts [_owner].lastSnapshotIndex, 1); if (nextSnapshotIndex > lastNextSnapshotIndex) { if (balance > 0) { setHistoricalBalance ( _owner, lastNextSnapshotIndex, nextSnapshotIndex, balance); } accounts [_owner].lastSnapshotIndex = safeSub (nextSnapshotIndex, 1); } } /** * Set historical balance for the owner of given address as it was at the * moments of snapshots with indexes in given range. * * @param _owner address to set the historical balance for the owner of * @param _from beginning of the snapshot index range (inclusive) * @param _to end of the snapshot index range (exclusive) * @param _balance value to set balance to */ function setHistoricalBalance ( address _owner, uint256 _from, uint256 _to, uint256 _balance) internal { assert (_from > 0); assert (_to >= _from); assert (_balance > 0); uint8 level = 0; while (_from < _to) { if (_from & 1 == 1) { // Overflow is not possible here because _from < _to historicalBalances [_owner][level][_from++] = _balance; } if (_to & 1 == 1) { // Underflow is not possible here, because _to & 1 == 1 historicalBalances [_owner][level][--_to] = _balance; } _from >>= 1; _to >>= 1; level += 1; // Even for snapshot index range 1..2^256-1 overflow will // not happen here } } /** * Add address to the list of addresses that ever had non-zero token balance. * * @param _address address to be added to the list of addresses that ever had * non-zero token balance */ function saveAddress (address _address) internal { if (nextAddresses [_address] == 0) { nextAddresses [_address] = firstAddress; firstAddress = TWO_160 | uint256(_address); } } /** * Total number of tokens in circulation. */ uint256 tokensCount; /** * All snapshots ever created. */ SnapshotInfo [] snapshots; /** * Maps addresses of token owners to states of their accounts. */ mapping (address => Account) accounts; /** * First address that ever had non-zero token balance plus 2^160, or 2^256-1 * if there are no such addresses. */ uint256 firstAddress = MAX_UINT256; /** * Mapping from address that ever had non-zero token balance to the next * address that ever had non-zero token balance plus 2^160 or 2^256-1 if there * are no more such addresses. */ mapping (address => uint256) nextAddresses; /** * Historical balances of token owners. If for some address, level and index, * where level >= 0 and index > 0, historicalBalances[address][level][index] * is non-zero, then owner of given address had this many tokens at the * time moments of snapshots with indexes from (index * 2^level) to * ((index + 1) * 2^level - 1) inclusive. * For each snapshot, there should be at most one level with non-zero * value at corresponding index. */ mapping (address => mapping (uint8 => mapping (uint256 => uint256))) historicalBalances; /** * Maps addresses of token owners to mappings from addresses of spenders to * how many tokens belonging to the owner, the spender is currently allowed to * transfer. */ mapping (address => mapping (address => uint256)) approved; /** * Encapsulates information about snapshot. */ struct SnapshotInfo { /** * Total number of tokens in circulation at the moment of snapshot. */ uint256 tokensCount; /** * Value of firstAddress field at the moment of snapshot. */ uint256 firstAddress; } /** * Encapsulates information about token owner's balance. */ struct Account { /** * Number of tokens currently belonging to the token owner. */ uint256 balance; /** * Index of the last snapshot before the moment historical balances were * last updated for this token owner. */ uint256 lastSnapshotIndex; } /** * Logged when new snapshot was created. * * @param _index index of the new snapshot */ event Snapshot (uint256 indexed _index); } /* * Standard Snapshottable Token Smart Contract. * Author: Mikhail Vladimirov <[email protected]> */ /** * Standard Snapshottable Token Smart Contract. */ contract StandardSnapshottableToken is AbstractSnapshottableToken { /** * Create new Standard Snapshottable Token Smart Contract and make * message sender the owner of the smart contract. */ function StandardSnapshottableToken () AbstractSnapshottableToken () { owner = msg.sender; } /** * Transfer given number of tokens from message sender to given recipient. * * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer to the owner of given address * @return true if tokens were transferred successfully, false otherwise */ function transfer (address _to, uint256 _value) returns (bool success) { if (frozen) return false; else return AbstractSnapshottableToken.transfer (_to, _value); } /** * Transfer given number of tokens from given owner to given recipient. * * @param _from address to transfer tokens from the owner of * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer from given owner to given * recipient * @return true if tokens were transferred successfully, false otherwise */ function transferFrom (address _from, address _to, uint256 _value) returns (bool success) { if (frozen) return false; else return AbstractSnapshottableToken.transferFrom (_from, _to, _value); } /** * Create given number of tokens and give them to message sender. May only be * called by the owner of the smart contract. * * @param _value number of tokens to create * @return true on success, false on error */ function createTokens (uint256 _value) returns (bool success) { require (msg.sender == owner); return doCreateTokens (_value); } /** * Freeze token transfers. May only be called by the owner of the smart * contract. */ function freezeTransfers () { require (msg.sender == owner); if (!frozen) { frozen = true; Freeze (); } } /** * Unfreeze token transfers. May only be called by the owner of the smart * contract. */ function unfreezeTransfers () { require (msg.sender == owner); if (frozen) { frozen = false; Unfreeze (); } } /** * Set new owner address. May only be called by the owner of the smart * contract. * * @param _newOwner new owner address */ function setOwner (address _newOwner) { require (msg.sender == owner); owner = _newOwner; } /** * Owner of this smart contract. */ address owner; /** * Whether token transfers are currently frozen. */ bool frozen; /** * Logged when token transfers were frozen. */ event Freeze (); /** * Logged when token transfers were unfrozen. */ event Unfreeze (); } /* * Science Blockchain Token Smart Contract. * Author: Mikhail Vladimirov <[email protected]> */ /** * Science Blockchain Token Smart Contract. */ contract ScienceBlockchainToken is StandardSnapshottableToken { /** * Create new Science Blockchain Token smart contract and make message sender * to be the owner of smart contract and to be a snapshot creator. */ function ScienceBlockchainToken () StandardSnapshottableToken () { snapshotCreator = msg.sender; } /** * Create snapshot of token holder balances. * * @return index of new created snapshot */ function snapshot () returns (uint256 index) { require (msg.sender == snapshotCreator); return AbstractSnapshottableToken.snapshot (); } /** * Get name of this token. * * @return name of this token */ function name () constant returns (string result) { return "SCIENCE BLOCKCHAIN"; } /** * Get symbol of this token. * * @return symbol of this token */ function symbol () constant returns (string result) { return "SCI"; } /** * Get number of decimals for this token. * * @return number of decimals for this token */ function decimals () constant returns (uint8 result) { return 0; } /** * Burn given number of tokens belonging to message sender. * * @param _value number of tokens to burn * @return true if tokens were burned successfully, false otherwise */ function burnTokens (uint256 _value) returns (bool success) { uint256 balance = accounts [msg.sender].balance; if (_value > balance) return false; if (_value > 0) { updateHistoricalBalances (msg.sender); accounts [msg.sender].balance = safeSub (balance, _value); tokensCount = safeSub (tokensCount, _value); return true; } return true; } /** * Set new snapshot creator address. * * @param _snapshotCreator new snapshot creator address */ function setSnapshotCreator (address _snapshotCreator) { require (msg.sender == owner); snapshotCreator = _snapshotCreator; } /** * Address of snapshot creator, i.e. the one allowed to create snapshots. */ address snapshotCreator; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[],"name":"freezeTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"result","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"supply","type":"uint256"}],"payable":false,"stateMutability":"view","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,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"result","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unfreezeTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"firstAddressAt","outputs":[{"name":"hasResult","type":"bool"},{"name":"result","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_snapshotCreator","type":"address"}],"name":"setSnapshotCreator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burnTokens","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"createTokens","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"result","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"snapshot","outputs":[{"name":"index","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"supply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"nextAddress","outputs":[{"name":"hasResult","type":"bool"},{"name":"result","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Freeze","type":"event"},{"anonymous":false,"inputs":[],"name":"Unfreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_index","type":"uint256"}],"name":"Snapshot","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
6060604052600019600355341561001557600080fd5b5b5b5b60016100248180610063565b505b60078054600160a060020a03191633600160a060020a03161790555b60088054600160a060020a03191633600160a060020a03161790555b6100bc565b81548183558181151161008f5760020281600202836000526020600020918201910161008f9190610095565b5b505050565b6100b991905b808211156100b5576000808255600182015560020161009b565b5090565b90565b6110ba806100cb6000396000f3006060604052361561010f5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301502460811461011457806306fdde0314610129578063095ea7b3146101b457806313af4035146101ea57806318160ddd1461020b57806323b872dd14610230578063313ce5671461026c57806331c420d4146102955780634ee2cd7e146102aa578063584fc102146102de578063618765d8146103175780636d1b229d1461033857806370a08231146103625780637e1f2bb81461039357806395d89b41146103bd5780639711715a14610448578063981b24d01461046d5780639d9bd2b414610495578063a9059cbb146104d7578063dd62ed3e1461050d575b600080fd5b341561011f57600080fd5b610127610544565b005b341561013457600080fd5b61013c6105c6565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101795780820151818401525b602001610160565b50505050905090810190601f1680156101a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101bf57600080fd5b6101d6600160a060020a0360043516602435610608565b604051901515815260200160405180910390f35b34156101f557600080fd5b610127600160a060020a0360043516610675565b005b341561021657600080fd5b61021e6106bc565b60405190815260200160405180910390f35b341561023b57600080fd5b6101d6600160a060020a03600435811690602435166044356106c3565b604051901515815260200160405180910390f35b341561027757600080fd5b61027f6106f6565b60405160ff909116815260200160405180910390f35b34156102a057600080fd5b6101276106fc565b005b34156102b557600080fd5b61021e600160a060020a0360043516602435610777565b60405190815260200160405180910390f35b34156102e957600080fd5b6102f4600435610844565b6040519115158252600160a060020a031660208201526040908101905180910390f35b341561032257600080fd5b610127600160a060020a03600435166108b0565b005b341561034357600080fd5b6101d66004356108f7565b604051901515815260200160405180910390f35b341561036d57600080fd5b61021e600160a060020a036004351661097b565b60405190815260200160405180910390f35b341561039e57600080fd5b6101d660043561099a565b604051901515815260200160405180910390f35b34156103c857600080fd5b61013c6109c9565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101795780820151818401525b602001610160565b50505050905090810190601f1680156101a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561045357600080fd5b61021e610a0b565b60405190815260200160405180910390f35b341561047857600080fd5b61021e600435610a37565b60405190815260200160405180910390f35b34156104a057600080fd5b6102f4600160a060020a0360043516610a7c565b6040519115158252600160a060020a031660208201526040908101905180910390f35b34156104e257600080fd5b6101d6600160a060020a0360043516602435610acb565b604051901515815260200160405180910390f35b341561051857600080fd5b61021e600160a060020a0360043581169060243516610b00565b60405190815260200160405180910390f35b60075433600160a060020a0390811691161461055f57600080fd5b60075460a060020a900460ff1615156105c3576007805474ff0000000000000000000000000000000000000000191660a060020a1790557f615acbaede366d76a8b8cb2a9ada6a71495f0786513d71aa97aaf0c3910b78de60405160405180910390a15b5b565b6105ce611023565b60408051908101604052601281527f534349454e434520424c4f434b434841494e0000000000000000000000000000602082015290505b90565b600160a060020a03338116600081815260066020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075433600160a060020a0390811691161461069057600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b6000545b90565b60075460009060a060020a900460ff16156106e0575060006106ee565b6106eb848484610b2d565b90505b5b9392505050565b60005b90565b60075433600160a060020a0390811691161461071757600080fd5b60075460a060020a900460ff16156105c3576007805474ff0000000000000000000000000000000000000000191690557f2f05ba71d0df11bf5fa562a6569d70c4f80da84284badbe015ce1456063d0ded60405160405180910390a15b5b565b6000808080841161078757600080fd5b600154841061079557600080fd5b600160a060020a0385166000908152600260205260409020600101548411156107d857600160a060020a038516600090815260026020526040902054925061083b565b600091505b60008411156108365750600160a060020a038416600090815260056020908152604080832060ff85168452825280832086845290915290205480156108245780925061083b565b600290930492600191909101906107dd565b600092505b5b505092915050565b6000808080841161085457600080fd5b600154841061086257600080fd5b600180548590811061087057fe5b906000526020600020906002020160005b5060010154905060001981141592508261089c5760006108a7565b600160a060020a0381165b91505b50915091565b60075433600160a060020a039081169116146108cb57600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b600160a060020a033316600090815260026020526040812054808311156109215760009150610975565b60008311156109705761093333610be6565b61093d8184610c63565b600160a060020a033316600090815260026020526040812091909155546109649084610c63565b60005560019150610975565b600191505b50919050565b600160a060020a0381166000908152600260205260409020545b919050565b60075460009033600160a060020a039081169116146109b857600080fd5b6109c182610c7a565b90505b919050565b6109d1611023565b60408051908101604052600381527f5343490000000000000000000000000000000000000000000000000000000000602082015290505b90565b60085460009033600160a060020a03908116911614610a2957600080fd5b610a31610d18565b90505b90565b6000808211610a4557600080fd5b6001548210610a5357600080fd5b6001805483908110610a6157fe5b906000526020600020906002020160005b505490505b919050565b600160a060020a0381166000908152600460205260408120548190801515610aa357600080fd5b60001981141592508261089c5760006108a7565b600160a060020a0381165b91505b50915091565b60075460009060a060020a900460ff1615610ae85750600061066f565b610af28383610daa565b905061066f565b5b92915050565b600160a060020a038083166000908152600660209081526040808320938516835292905220545b92915050565b600160a060020a03808416600090815260066020908152604080832033909416835292905290812054821115610b65575060006106ee565b610b70848484610dc0565b15610bd557600160a060020a0380851660009081526006602090815260408083203390941683529290522054610ba69083610c63565b600160a060020a03808616600090815260066020908152604080832033909416835292905220555060016106ee565b5060006106ee565b5b5b9392505050565b600160a060020a038116600090815260026020526040812080546001805492810154919391610c1491610eec565b905080821115610c5c576000831115610c3357610c3384828486610f08565b5b610c3f826001610c63565b600160a060020a0385166000908152600260205260409020600101555b5b50505050565b600081831015610c6f57fe5b508082035b92915050565b6000610c8a600019600054610c63565b821115610c9957506000610995565b6000821115610d0957610cab33610fd7565b610cb433610be6565b600160a060020a033316600090815260026020526040902054610cd79083610eec565b600160a060020a03331660009081526002602052604081209190915554610cfe9083610eec565b600055506001610995565b506001610995565b5b5b919050565b60018054600091610d2b90828101611035565b9050600054600182815481101515610d3f57fe5b906000526020600020906002020160005b50556003546001805483908110610d6357fe5b906000526020600020906002020160005b5060010155807f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb6760405160405180910390a25b90565b6000610db7338484610dc0565b90505b92915050565b600160a060020a038316600090815260026020526040812054821115610de8575060006106ee565b600082118015610e0a575082600160a060020a031684600160a060020a031614155b15610edb57610e1883610fd7565b610e2184610be6565b610e2a83610be6565b600160a060020a038416600090815260026020526040902054610e4d9083610c63565b600160a060020a038086166000908152600260205260408082209390935590851681522054610e7c9083610eec565b600160a060020a03808516600081815260026020526040908190209390935591908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060016106ee565b5060016106ee565b5b5b9392505050565b6000600019829003831115610efd57fe5b508181015b92915050565b6000808411610f1357fe5b83831015610f1d57fe5b60008211610f2757fe5b5060005b82841015610fcf578360011660011415610f7757600160a060020a038516600090815260056020908152604080832060ff85168452825280832087845290915290208290556001909301925b8260011660011415610fbc57600160a060020a038516600090815260056020908152604080832060ff8516845282528083206000199096018084529590915290208290555b6002938490049390920491600101610f2b565b5b5050505050565b600160a060020a03811660009081526004602052604090205415156106b95760038054600160a060020a03831660008181526004602052604090209190915560a060020a1790555b5b50565b60206040519081016040526000815290565b815481835581811511611061576002028160020283600052602060002091820191016110619190611067565b5b505050565b61060591905b80821115611087576000808255600182015560020161106d565b5090565b905600a165627a7a7230582071702e78d22ba963c26375689926cdce2ee288ee9dd4c5f0b6a5e82c2f4dc5c20029
Deployed Bytecode
0x6060604052361561010f5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301502460811461011457806306fdde0314610129578063095ea7b3146101b457806313af4035146101ea57806318160ddd1461020b57806323b872dd14610230578063313ce5671461026c57806331c420d4146102955780634ee2cd7e146102aa578063584fc102146102de578063618765d8146103175780636d1b229d1461033857806370a08231146103625780637e1f2bb81461039357806395d89b41146103bd5780639711715a14610448578063981b24d01461046d5780639d9bd2b414610495578063a9059cbb146104d7578063dd62ed3e1461050d575b600080fd5b341561011f57600080fd5b610127610544565b005b341561013457600080fd5b61013c6105c6565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101795780820151818401525b602001610160565b50505050905090810190601f1680156101a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101bf57600080fd5b6101d6600160a060020a0360043516602435610608565b604051901515815260200160405180910390f35b34156101f557600080fd5b610127600160a060020a0360043516610675565b005b341561021657600080fd5b61021e6106bc565b60405190815260200160405180910390f35b341561023b57600080fd5b6101d6600160a060020a03600435811690602435166044356106c3565b604051901515815260200160405180910390f35b341561027757600080fd5b61027f6106f6565b60405160ff909116815260200160405180910390f35b34156102a057600080fd5b6101276106fc565b005b34156102b557600080fd5b61021e600160a060020a0360043516602435610777565b60405190815260200160405180910390f35b34156102e957600080fd5b6102f4600435610844565b6040519115158252600160a060020a031660208201526040908101905180910390f35b341561032257600080fd5b610127600160a060020a03600435166108b0565b005b341561034357600080fd5b6101d66004356108f7565b604051901515815260200160405180910390f35b341561036d57600080fd5b61021e600160a060020a036004351661097b565b60405190815260200160405180910390f35b341561039e57600080fd5b6101d660043561099a565b604051901515815260200160405180910390f35b34156103c857600080fd5b61013c6109c9565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101795780820151818401525b602001610160565b50505050905090810190601f1680156101a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561045357600080fd5b61021e610a0b565b60405190815260200160405180910390f35b341561047857600080fd5b61021e600435610a37565b60405190815260200160405180910390f35b34156104a057600080fd5b6102f4600160a060020a0360043516610a7c565b6040519115158252600160a060020a031660208201526040908101905180910390f35b34156104e257600080fd5b6101d6600160a060020a0360043516602435610acb565b604051901515815260200160405180910390f35b341561051857600080fd5b61021e600160a060020a0360043581169060243516610b00565b60405190815260200160405180910390f35b60075433600160a060020a0390811691161461055f57600080fd5b60075460a060020a900460ff1615156105c3576007805474ff0000000000000000000000000000000000000000191660a060020a1790557f615acbaede366d76a8b8cb2a9ada6a71495f0786513d71aa97aaf0c3910b78de60405160405180910390a15b5b565b6105ce611023565b60408051908101604052601281527f534349454e434520424c4f434b434841494e0000000000000000000000000000602082015290505b90565b600160a060020a03338116600081815260066020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075433600160a060020a0390811691161461069057600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b6000545b90565b60075460009060a060020a900460ff16156106e0575060006106ee565b6106eb848484610b2d565b90505b5b9392505050565b60005b90565b60075433600160a060020a0390811691161461071757600080fd5b60075460a060020a900460ff16156105c3576007805474ff0000000000000000000000000000000000000000191690557f2f05ba71d0df11bf5fa562a6569d70c4f80da84284badbe015ce1456063d0ded60405160405180910390a15b5b565b6000808080841161078757600080fd5b600154841061079557600080fd5b600160a060020a0385166000908152600260205260409020600101548411156107d857600160a060020a038516600090815260026020526040902054925061083b565b600091505b60008411156108365750600160a060020a038416600090815260056020908152604080832060ff85168452825280832086845290915290205480156108245780925061083b565b600290930492600191909101906107dd565b600092505b5b505092915050565b6000808080841161085457600080fd5b600154841061086257600080fd5b600180548590811061087057fe5b906000526020600020906002020160005b5060010154905060001981141592508261089c5760006108a7565b600160a060020a0381165b91505b50915091565b60075433600160a060020a039081169116146108cb57600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b600160a060020a033316600090815260026020526040812054808311156109215760009150610975565b60008311156109705761093333610be6565b61093d8184610c63565b600160a060020a033316600090815260026020526040812091909155546109649084610c63565b60005560019150610975565b600191505b50919050565b600160a060020a0381166000908152600260205260409020545b919050565b60075460009033600160a060020a039081169116146109b857600080fd5b6109c182610c7a565b90505b919050565b6109d1611023565b60408051908101604052600381527f5343490000000000000000000000000000000000000000000000000000000000602082015290505b90565b60085460009033600160a060020a03908116911614610a2957600080fd5b610a31610d18565b90505b90565b6000808211610a4557600080fd5b6001548210610a5357600080fd5b6001805483908110610a6157fe5b906000526020600020906002020160005b505490505b919050565b600160a060020a0381166000908152600460205260408120548190801515610aa357600080fd5b60001981141592508261089c5760006108a7565b600160a060020a0381165b91505b50915091565b60075460009060a060020a900460ff1615610ae85750600061066f565b610af28383610daa565b905061066f565b5b92915050565b600160a060020a038083166000908152600660209081526040808320938516835292905220545b92915050565b600160a060020a03808416600090815260066020908152604080832033909416835292905290812054821115610b65575060006106ee565b610b70848484610dc0565b15610bd557600160a060020a0380851660009081526006602090815260408083203390941683529290522054610ba69083610c63565b600160a060020a03808616600090815260066020908152604080832033909416835292905220555060016106ee565b5060006106ee565b5b5b9392505050565b600160a060020a038116600090815260026020526040812080546001805492810154919391610c1491610eec565b905080821115610c5c576000831115610c3357610c3384828486610f08565b5b610c3f826001610c63565b600160a060020a0385166000908152600260205260409020600101555b5b50505050565b600081831015610c6f57fe5b508082035b92915050565b6000610c8a600019600054610c63565b821115610c9957506000610995565b6000821115610d0957610cab33610fd7565b610cb433610be6565b600160a060020a033316600090815260026020526040902054610cd79083610eec565b600160a060020a03331660009081526002602052604081209190915554610cfe9083610eec565b600055506001610995565b506001610995565b5b5b919050565b60018054600091610d2b90828101611035565b9050600054600182815481101515610d3f57fe5b906000526020600020906002020160005b50556003546001805483908110610d6357fe5b906000526020600020906002020160005b5060010155807f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb6760405160405180910390a25b90565b6000610db7338484610dc0565b90505b92915050565b600160a060020a038316600090815260026020526040812054821115610de8575060006106ee565b600082118015610e0a575082600160a060020a031684600160a060020a031614155b15610edb57610e1883610fd7565b610e2184610be6565b610e2a83610be6565b600160a060020a038416600090815260026020526040902054610e4d9083610c63565b600160a060020a038086166000908152600260205260408082209390935590851681522054610e7c9083610eec565b600160a060020a03808516600081815260026020526040908190209390935591908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060016106ee565b5060016106ee565b5b5b9392505050565b6000600019829003831115610efd57fe5b508181015b92915050565b6000808411610f1357fe5b83831015610f1d57fe5b60008211610f2757fe5b5060005b82841015610fcf578360011660011415610f7757600160a060020a038516600090815260056020908152604080832060ff85168452825280832087845290915290208290556001909301925b8260011660011415610fbc57600160a060020a038516600090815260056020908152604080832060ff8516845282528083206000199096018084529590915290208290555b6002938490049390920491600101610f2b565b5b5050505050565b600160a060020a03811660009081526004602052604090205415156106b95760038054600160a060020a03831660008181526004602052604090209190915560a060020a1790555b5b50565b60206040519081016040526000815290565b815481835581811511611061576002028160020283600052602060002091820191016110619190611067565b5b505050565b61060591905b80821115611087576000808255600182015560020161106d565b5090565b905600a165627a7a7230582071702e78d22ba963c26375689926cdce2ee288ee9dd4c5f0b6a5e82c2f4dc5c20029
Swarm Source
bzzr://71702e78d22ba963c26375689926cdce2ee288ee9dd4c5f0b6a5e82c2f4dc5c2
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.
Add Token to MetaMask (Web3)