Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
3,110,257.01279697 SPEND
Holders
1,655
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 8 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SpendToken
Compiler Version
v0.4.18+commit.9cf6e910
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-01-19 */ pragma solidity ^0.4.18; /** * IMultiOwned * * Interface that allows multiple owners * * #created 09/10/2017 * #author Frank Bonnet */ interface IMultiOwned { /** * Returns true if `_account` is an owner * * @param _account The address to test against */ function isOwner(address _account) public view returns (bool); /** * Returns the amount of owners * * @return The amount of owners */ function getOwnerCount() public view returns (uint); /** * Gets the owner at `_index` * * @param _index The index of the owner * @return The address of the owner found at `_index` */ function getOwnerAt(uint _index) public view returns (address); /** * Adds `_account` as a new owner * * @param _account The account to add as an owner */ function addOwner(address _account) public; /** * Removes `_account` as an owner * * @param _account The account to remove as an owner */ function removeOwner(address _account) public; } /** * MultiOwned * * Allows multiple owners * * #created 09/10/2017 * #author Frank Bonnet */ contract MultiOwned is IMultiOwned { // Owners mapping (address => uint) private owners; address[] private ownersIndex; /** * Access is restricted to owners only */ modifier only_owner() { require(isOwner(msg.sender)); _; } /** * The publisher is the initial owner */ function MultiOwned() public { ownersIndex.push(msg.sender); owners[msg.sender] = 0; } /** * Returns true if `_account` is the current owner * * @param _account The address to test against */ function isOwner(address _account) public view returns (bool) { return owners[_account] < ownersIndex.length && _account == ownersIndex[owners[_account]]; } /** * Returns the amount of owners * * @return The amount of owners */ function getOwnerCount() public view returns (uint) { return ownersIndex.length; } /** * Gets the owner at `_index` * * @param _index The index of the owner * @return The address of the owner found at `_index` */ function getOwnerAt(uint _index) public view returns (address) { return ownersIndex[_index]; } /** * Adds `_account` as a new owner * * @param _account The account to add as an owner */ function addOwner(address _account) public only_owner { if (!isOwner(_account)) { owners[_account] = ownersIndex.push(_account) - 1; } } /** * Removes `_account` as an owner * * @param _account The account to remove as an owner */ function removeOwner(address _account) public only_owner { if (isOwner(_account)) { uint indexToDelete = owners[_account]; address keyToMove = ownersIndex[ownersIndex.length - 1]; ownersIndex[indexToDelete] = keyToMove; owners[keyToMove] = indexToDelete; ownersIndex.length--; } } } /** * IObservable * * Allows observers to register and unregister with the * implementing smart-contract that is observable * * #created 09/10/2017 * #author Frank Bonnet */ interface IObservable { /** * Returns true if `_account` is a registered observer * * @param _account The account to test against * @return Whether the account is a registered observer */ function isObserver(address _account) public view returns (bool); /** * Gets the amount of registered observers * * @return The amount of registered observers */ function getObserverCount() public view returns (uint); /** * Gets the observer at `_index` * * @param _index The index of the observer * @return The observers address */ function getObserverAtIndex(uint _index) public view returns (address); /** * Register `_observer` as an observer * * @param _observer The account to add as an observer */ function registerObserver(address _observer) public; /** * Unregister `_observer` as an observer * * @param _observer The account to remove as an observer */ function unregisterObserver(address _observer) public; } /** * Abstract Observable * * Allows observers to register and unregister with the the * implementing smart-contract that is observable * * #created 09/10/2017 * #author Frank Bonnet */ contract Observable is IObservable { // Observers mapping (address => uint) private observers; address[] private observerIndex; /** * Returns true if `_account` is a registered observer * * @param _account The account to test against * @return Whether the account is a registered observer */ function isObserver(address _account) public view returns (bool) { return observers[_account] < observerIndex.length && _account == observerIndex[observers[_account]]; } /** * Gets the amount of registered observers * * @return The amount of registered observers */ function getObserverCount() public view returns (uint) { return observerIndex.length; } /** * Gets the observer at `_index` * * @param _index The index of the observer * @return The observers address */ function getObserverAtIndex(uint _index) public view returns (address) { return observerIndex[_index]; } /** * Register `_observer` as an observer * * @param _observer The account to add as an observer */ function registerObserver(address _observer) public { require(canRegisterObserver(_observer)); if (!isObserver(_observer)) { observers[_observer] = observerIndex.push(_observer) - 1; } } /** * Unregister `_observer` as an observer * * @param _observer The account to remove as an observer */ function unregisterObserver(address _observer) public { require(canUnregisterObserver(_observer)); if (isObserver(_observer)) { uint indexToDelete = observers[_observer]; address keyToMove = observerIndex[observerIndex.length - 1]; observerIndex[indexToDelete] = keyToMove; observers[keyToMove] = indexToDelete; observerIndex.length--; } } /** * Returns whether it is allowed to register `_observer` by calling * canRegisterObserver() in the implementing smart-contract * * @param _observer The address to register as an observer * @return Whether the sender is allowed or not */ function canRegisterObserver(address _observer) internal view returns (bool); /** * Returns whether it is allowed to unregister `_observer` by calling * canRegisterObserver() in the implementing smart-contract * * @param _observer The address to unregister as an observer * @return Whether the sender is allowed or not */ function canUnregisterObserver(address _observer) internal view returns (bool); } /** * ITokenObserver * * Allows a token smart-contract to notify observers * when tokens are received * * #created 09/10/2017 * #author Frank Bonnet */ interface ITokenObserver { /** * Called by the observed token smart-contract in order * to notify the token observer when tokens are received * * @param _from The address that the tokens where send from * @param _value The amount of tokens that was received */ function notifyTokensReceived(address _from, uint _value) public; } /** * TokenObserver * * Allows observers to be notified by an observed token smart-contract * when tokens are received * * #created 09/10/2017 * #author Frank Bonnet */ contract TokenObserver is ITokenObserver { /** * Called by the observed token smart-contract in order * to notify the token observer when tokens are received * * @param _from The address that the tokens where send from * @param _value The amount of tokens that was received */ function notifyTokensReceived(address _from, uint _value) public { onTokensReceived(msg.sender, _from, _value); } /** * Event handler * * Called by `_token` when a token amount is received * * @param _token The token contract that received the transaction * @param _from The account or contract that send the transaction * @param _value The value of tokens that where received */ function onTokensReceived(address _token, address _from, uint _value) internal; } /** * ITokenRetriever * * Allows tokens to be retrieved from a contract * * #created 29/09/2017 * #author Frank Bonnet */ interface ITokenRetriever { /** * Extracts tokens from the contract * * @param _tokenContract The address of ERC20 compatible token */ function retrieveTokens(address _tokenContract) public; } /** * TokenRetriever * * Allows tokens to be retrieved from a contract * * #created 18/10/2017 * #author Frank Bonnet */ contract TokenRetriever is ITokenRetriever { /** * Extracts tokens from the contract * * @param _tokenContract The address of ERC20 compatible token */ function retrieveTokens(address _tokenContract) public { IToken tokenInstance = IToken(_tokenContract); uint tokenBalance = tokenInstance.balanceOf(this); if (tokenBalance > 0) { tokenInstance.transfer(msg.sender, tokenBalance); } } } /** * Input validation * * Validates argument length * * #created 01/10/2017 * #author Frank Bonnet */ contract InputValidator { /** * ERC20 Short Address Attack fix */ modifier safe_arguments(uint _numArgs) { assert(msg.data.length == _numArgs * 32 + 4); _; } } /** * ERC20 compatible token interface * * - Implements ERC 20 Token standard * - Implements short address attack fix * * #created 29/09/2017 * #author Frank Bonnet */ interface IToken { /** * Get the total supply of tokens * * @return The total supply */ function totalSupply() public view returns (uint); /** * Get balance of `_owner` * * @param _owner The address from which the balance will be retrieved * @return The balance */ function balanceOf(address _owner) public view returns (uint); /** * Send `_value` token to `_to` from `msg.sender` * * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transfer(address _to, uint _value) public returns (bool); /** * Send `_value` token to `_to` from `_from` on the condition it is approved by `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transferFrom(address _from, address _to, uint _value) public returns (bool); /** * `msg.sender` approves `_spender` to spend `_value` tokens * * @param _spender The address of the account able to transfer the tokens * @param _value The amount of tokens to be approved for transfer * @return Whether the approval was successful or not */ function approve(address _spender, uint _value) public returns (bool); /** * Get the amount of remaining tokens that `_spender` is allowed to spend from `_owner` * * @param _owner The address of the account owning tokens * @param _spender The address of the account able to transfer the tokens * @return Amount of remaining tokens allowed to spent */ function allowance(address _owner, address _spender) public view returns (uint); } /** * ERC20 compatible token * * - Implements ERC 20 Token standard * - Implements short address attack fix * * #created 29/09/2017 * #author Frank Bonnet */ contract Token is IToken, InputValidator { // Ethereum token standard string public standard = "Token 0.3.1"; string public name; string public symbol; uint8 public decimals; // Token state uint internal totalTokenSupply; // Token balances mapping (address => uint) internal balances; // Token allowances mapping (address => mapping (address => uint)) internal allowed; // Events event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value); /** * Construct ERC20 token * * @param _name The full token name * @param _symbol The token symbol (aberration) * @param _decimals The token precision */ function Token(string _name, string _symbol, uint8 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; balances[msg.sender] = 0; totalTokenSupply = 0; } /** * Get the total token supply * * @return The total supply */ function totalSupply() public view returns (uint) { return totalTokenSupply; } /** * Get balance of `_owner` * * @param _owner The address from which the balance will be retrieved * @return The balance */ function balanceOf(address _owner) public view returns (uint) { return balances[_owner]; } /** * Send `_value` token to `_to` from `msg.sender` * * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transfer(address _to, uint _value) public safe_arguments(2) returns (bool) { // Check if the sender has enough tokens require(balances[msg.sender] >= _value); // Check for overflows require(balances[_to] + _value >= balances[_to]); // Transfer tokens balances[msg.sender] -= _value; balances[_to] += _value; // Notify listeners Transfer(msg.sender, _to, _value); return true; } /** * Send `_value` token to `_to` from `_from` on the condition it is approved by `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transferFrom(address _from, address _to, uint _value) public safe_arguments(3) returns (bool) { // Check if the sender has enough require(balances[_from] >= _value); // Check for overflows require(balances[_to] + _value >= balances[_to]); // Check allowance require(_value <= allowed[_from][msg.sender]); // Transfer tokens balances[_to] += _value; balances[_from] -= _value; // Update allowance allowed[_from][msg.sender] -= _value; // Notify listeners Transfer(_from, _to, _value); return true; } /** * `msg.sender` approves `_spender` to spend `_value` tokens * * @param _spender The address of the account able to transfer the tokens * @param _value The amount of tokens to be approved for transfer * @return Whether the approval was successful or not */ function approve(address _spender, uint _value) public safe_arguments(2) returns (bool) { // Update allowance allowed[msg.sender][_spender] = _value; // Notify listeners Approval(msg.sender, _spender, _value); return true; } /** * Get the amount of remaining tokens that `_spender` is allowed to spend from `_owner` * * @param _owner The address of the account owning tokens * @param _spender The address of the account able to transfer the tokens * @return Amount of remaining tokens allowed to spent */ function allowance(address _owner, address _spender) public view returns (uint) { return allowed[_owner][_spender]; } } /** * IManagedToken * * Adds the following functionality to the basic ERC20 token * - Locking * - Issuing * - Burning * * #created 29/09/2017 * #author Frank Bonnet */ interface IManagedToken { /** * Returns true if the token is locked * * @return Whether the token is locked */ function isLocked() public view returns (bool); /** * Locks the token so that the transfering of value is disabled * * @return Whether the unlocking was successful or not */ function lock() public returns (bool); /** * Unlocks the token so that the transfering of value is enabled * * @return Whether the unlocking was successful or not */ function unlock() public returns (bool); /** * Issues `_value` new tokens to `_to` * * @param _to The address to which the tokens will be issued * @param _value The amount of new tokens to issue * @return Whether the tokens where sucessfully issued or not */ function issue(address _to, uint _value) public returns (bool); /** * Burns `_value` tokens of `_from` * * @param _from The address that owns the tokens to be burned * @param _value The amount of tokens to be burned * @return Whether the tokens where sucessfully burned or not */ function burn(address _from, uint _value) public returns (bool); } /** * ManagedToken * * Adds the following functionality to the basic ERC20 token * - Locking * - Issuing * - Burning * * #created 29/09/2017 * #author Frank Bonnet */ contract ManagedToken is IManagedToken, Token, MultiOwned { // Token state bool internal locked; /** * Allow access only when not locked */ modifier only_when_unlocked() { require(!locked); _; } /** * Construct managed ERC20 token * * @param _name The full token name * @param _symbol The token symbol (aberration) * @param _decimals The token precision * @param _locked Whether the token should be locked initially */ function ManagedToken(string _name, string _symbol, uint8 _decimals, bool _locked) public Token(_name, _symbol, _decimals) { locked = _locked; } /** * Send `_value` token to `_to` from `msg.sender` * * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transfer(address _to, uint _value) public only_when_unlocked returns (bool) { return super.transfer(_to, _value); } /** * Send `_value` token to `_to` from `_from` on the condition it is approved by `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transferFrom(address _from, address _to, uint _value) public only_when_unlocked returns (bool) { return super.transferFrom(_from, _to, _value); } /** * `msg.sender` approves `_spender` to spend `_value` tokens * * @param _spender The address of the account able to transfer the tokens * @param _value The amount of tokens to be approved for transfer * @return Whether the approval was successful or not */ function approve(address _spender, uint _value) public returns (bool) { return super.approve(_spender, _value); } /** * Returns true if the token is locked * * @return Whether the token is locked */ function isLocked() public view returns (bool) { return locked; } /** * Locks the token so that the transfering of value is enabled * * @return Whether the locking was successful or not */ function lock() public only_owner returns (bool) { locked = true; return locked; } /** * Unlocks the token so that the transfering of value is enabled * * @return Whether the unlocking was successful or not */ function unlock() public only_owner returns (bool) { locked = false; return !locked; } /** * Issues `_value` new tokens to `_to` * * @param _to The address to which the tokens will be issued * @param _value The amount of new tokens to issue * @return Whether the approval was successful or not */ function issue(address _to, uint _value) public only_owner safe_arguments(2) returns (bool) { // Check for overflows require(balances[_to] + _value >= balances[_to]); // Create tokens balances[_to] += _value; totalTokenSupply += _value; // Notify listeners Transfer(0, this, _value); Transfer(this, _to, _value); return true; } /** * Burns `_value` tokens of `_recipient` * * @param _from The address that owns the tokens to be burned * @param _value The amount of tokens to be burned * @return Whether the tokens where sucessfully burned or not */ function burn(address _from, uint _value) public only_owner safe_arguments(2) returns (bool) { // Check if the token owner has enough tokens require(balances[_from] >= _value); // Check for overflows require(balances[_from] - _value <= balances[_from]); // Burn tokens balances[_from] -= _value; totalTokenSupply -= _value; // Notify listeners Transfer(_from, 0, _value); return true; } } /** * Spend token (SPEND) * * SPEND is an ERC20 token as outlined within the whitepaper. * * #created 06/01/2018 * #author Frank Bonnet */ contract SpendToken is ManagedToken, Observable, TokenRetriever { /** * Construct the managed token */ function SpendToken() public ManagedToken("Spend Token", "SPEND", 8, true) {} /** * Returns whether sender is allowed to register `_observer` * * @param _observer The address to register as an observer * @return Whether the sender is allowed or not */ function canRegisterObserver(address _observer) internal view returns (bool) { return _observer != address(this) && isOwner(msg.sender); } /** * Returns whether sender is allowed to unregister `_observer` * * @param _observer The address to unregister as an observer * @return Whether the sender is allowed or not */ function canUnregisterObserver(address _observer) internal view returns (bool) { return msg.sender == _observer || isOwner(msg.sender); } /** * Issues `_value` new tokens to `_to` * * @param _to The address to which the tokens will be issued * @param _value The amount of new tokens to issue * @return Whether the approval was successful or not */ function issue(address _to, uint _value) public returns (bool) { bool result = super.issue(_to, _value); if (isObserver(_to)) { ITokenObserver(_to).notifyTokensReceived(msg.sender, _value); } return result; } /** * Send `_value` token to `_to` from `msg.sender` * - Notifies registered observers when the observer receives tokens * * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transfer(address _to, uint _value) public returns (bool) { bool result = super.transfer(_to, _value); if (isObserver(_to)) { ITokenObserver(_to).notifyTokensReceived(msg.sender, _value); } return result; } /** * Send `_value` token to `_to` from `_from` on the condition it is approved by `_from` * - Notifies registered observers when the observer receives tokens * * @param _from The address of the sender * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transferFrom(address _from, address _to, uint _value) public returns (bool) { bool result = super.transferFrom(_from, _to, _value); if (isObserver(_to)) { ITokenObserver(_to).notifyTokensReceived(_from, _value); } return result; } /** * Failsafe mechanism * * Allows the owner to retrieve tokens from the contract that * might have been send there by accident * * @param _tokenContract The address of ERC20 compatible token */ function retrieveTokens(address _tokenContract) public only_owner { super.retrieveTokens(_tokenContract); } /** * Prevents the accidental sending of ether */ function () public payable { revert(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","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":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_observer","type":"address"}],"name":"registerObserver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getOwnerAt","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"standard","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getObserverAtIndex","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getObserverCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"issue","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"burn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isLocked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unlock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"retrieveTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"isObserver","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwnerCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"lock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_observer","type":"address"}],"name":"unregisterObserver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"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
606060405260408051908101604052600b81527f546f6b656e20302e332e31000000000000000000000000000000000000000000602082015260009080516200004d9291602001906200018d565b5034156200005a57600080fd5b604080519081016040908152600b82527f5370656e6420546f6b656e00000000000000000000000000000000000000000060208301528051908101604052600581527f5350454e4400000000000000000000000000000000000000000000000000000060208201526008600183838383838051620000dd9291602001906200018d565b506002828051620000f39291602001906200018d565b506003805460ff191660ff92909216919091179055505033600160a060020a0316600090815260056020526040812081905560045560088054600181016200013c838262000212565b5060009182526020808320919091018054600160a060020a03191633600160a060020a031690811790915582526007905260408120556009805460ff1916911515919091179055506200025e915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001d057805160ff191683800117855562000200565b8280016001018555821562000200579182015b8281111562000200578251825591602001919060010190620001e3565b506200020e9291506200023e565b5090565b8154818355818115116200023957600083815260209020620002399181019083016200023e565b505050565b6200025b91905b808211156200020e576000815560010162000245565b90565b6111ea806200026e6000396000f30060606040526004361061013a5763ffffffff60e060020a60003504166306fdde03811461013f578063095ea7b3146101c9578063173825d9146101ff57806318160ddd1461022057806323b872dd146102455780632c07398d1461026d5780632f54bf6e1461028c578063313ce567146102ab57806355f28260146102d45780635a3b7e4214610306578063601fc832146103195780637065cb481461032f57806370a082311461034e57806377215c8d1461036d578063867904b41461038057806395d89b41146103a25780639dc29fac146103b5578063a4e2d634146103d7578063a69df4b5146103ea578063a9059cbb146103fd578063ac4ddd9f1461041f578063d9facbe01461043e578063dd62ed3e1461045d578063ef18374a14610482578063f83d08ba14610495578063f94d71a0146104a8575b600080fd5b341561014a57600080fd5b6101526104c7565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561018e578082015183820152602001610176565b50505050905090810190601f1680156101bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d457600080fd5b6101eb600160a060020a0360043516602435610565565b604051901515815260200160405180910390f35b341561020a57600080fd5b61021e600160a060020a0360043516610578565b005b341561022b57600080fd5b610233610655565b60405190815260200160405180910390f35b341561025057600080fd5b6101eb600160a060020a036004358116906024351660443561065c565b341561027857600080fd5b61021e600160a060020a03600435166106eb565b341561029757600080fd5b6101eb600160a060020a0360043516610770565b34156102b657600080fd5b6102be6107e0565b60405160ff909116815260200160405180910390f35b34156102df57600080fd5b6102ea6004356107e9565b604051600160a060020a03909116815260200160405180910390f35b341561031157600080fd5b610152610815565b341561032457600080fd5b6102ea600435610880565b341561033a57600080fd5b61021e600160a060020a0360043516610891565b341561035957600080fd5b610233600160a060020a0360043516610913565b341561037857600080fd5b61023361092e565b341561038b57600080fd5b6101eb600160a060020a0360043516602435610934565b34156103ad57600080fd5b6101526109c0565b34156103c057600080fd5b6101eb600160a060020a0360043516602435610a2b565b34156103e257600080fd5b6101eb610af1565b34156103f557600080fd5b6101eb610afa565b341561040857600080fd5b6101eb600160a060020a0360043516602435610b20565b341561042a57600080fd5b61021e600160a060020a0360043516610b2d565b341561044957600080fd5b6101eb600160a060020a0360043516610b4a565b341561046857600080fd5b610233600160a060020a0360043581169060243516610b99565b341561048d57600080fd5b610233610bc4565b34156104a057600080fd5b6101eb610bca565b34156104b357600080fd5b61021e600160a060020a0360043516610bf6565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055d5780601f106105325761010080835404028352916020019161055d565b820191906000526020600020905b81548152906001019060200180831161054057829003601f168201915b505050505081565b60006105718383610ccc565b9392505050565b60008061058433610770565b151561058f57600080fd5b61059883610770565b1561065057600160a060020a038316600090815260076020526040902054600880549193509060001981019081106105cc57fe5b60009182526020909120015460088054600160a060020a0390921692508291849081106105f557fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039485161790559183168152600790915260409020829055600880549061064e906000198301611161565b505b505050565b6004545b90565b60008061066a858585610d44565b905061067584610b4a565b156106e35783600160a060020a0316637cf5d66f868560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156106ce57600080fd5b6102c65a03f115156106df57600080fd5b5050505b949350505050565b6106f481610d62565b15156106ff57600080fd5b61070881610b4a565b151561076d576001600b80548060010182816107249190611161565b6000928352602080842092909201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091558352600a909152604090912091900390555b50565b600854600160a060020a0382166000908152600760205260408120549091901080156107da5750600160a060020a0382166000908152600760205260409020546008805490919081106107bf57fe5b600091825260209091200154600160a060020a038381169116145b92915050565b60035460ff1681565b60006008828154811015156107fa57fe5b600091825260209091200154600160a060020a031692915050565b60008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055d5780601f106105325761010080835404028352916020019161055d565b6000600b828154811015156107fa57fe5b61089a33610770565b15156108a557600080fd5b6108ae81610770565b151561076d576001600880548060010182816108ca9190611161565b6000928352602080842092909201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03969096169586179055938252600790526040902091039055565b600160a060020a031660009081526005602052604090205490565b600b5490565b6000806109418484610d8a565b905061094c84610b4a565b156105715783600160a060020a0316637cf5d66f338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156109a557600080fd5b6102c65a03f115156109b657600080fd5b5050509392505050565b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055d5780601f106105325761010080835404028352916020019161055d565b6000610a3633610770565b1515610a4157600080fd5b600236604414610a4d57fe5b600160a060020a03841660009081526005602052604090205483901015610a7357600080fd5b600160a060020a0384166000908152600560205260409020548381031115610a9a57600080fd5b600160a060020a0384166000818152600560205260408082208054879003905560048054879003905590919060008051602061119f8339815191529086905190815260200160405180910390a35060019392505050565b60095460ff1690565b6000610b0533610770565b1515610b1057600080fd5b506009805460ff19169055600190565b6000806109418484610e60565b610b3633610770565b1515610b4157600080fd5b61076d81610e7d565b600b54600160a060020a0382166000908152600a60205260408120549091901080156107da5750600160a060020a0382166000908152600a6020526040902054600b805490919081106107bf57fe5b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b60085490565b6000610bd533610770565b1515610be057600080fd5b506009805460ff19166001179081905560ff1690565b600080610c0283610f78565b1515610c0d57600080fd5b610c1683610b4a565b1561065057600160a060020a0383166000908152600a6020526040902054600b8054919350906000198101908110610c4a57fe5b600091825260209091200154600b8054600160a060020a039092169250829184908110610c7357fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039485161790559183168152600a90915260409020829055600b80549061064e906000198301611161565b6000600236604414610cda57fe5b600160a060020a03338116600081815260066020908152604080832094891680845294909152908190208690557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259086905190815260200160405180910390a35060019392505050565b60095460009060ff1615610d5757600080fd5b6106e3848484610f9e565b600030600160a060020a031682600160a060020a0316141580156107da57506107da33610770565b6000610d9533610770565b1515610da057600080fd5b600236604414610dac57fe5b600160a060020a0384166000908152600560205260409020548381011015610dd357600080fd5b600160a060020a038085166000908152600560205260408082208054870190556004805487019055309092169160008051602061119f8339815191529086905190815260200160405180910390a383600160a060020a031630600160a060020a031660008051602061119f8339815191528560405190815260200160405180910390a35060019392505050565b60095460009060ff1615610e7357600080fd5b61057183836110a9565b806000600160a060020a0382166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ed657600080fd5b6102c65a03f11515610ee757600080fd5b505050604051805191505060008111156106505781600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610f5857600080fd5b6102c65a03f11515610f6957600080fd5b50505060405180515050505050565b600081600160a060020a031633600160a060020a031614806107da57506107da33610770565b6000600336606414610fac57fe5b600160a060020a03851660009081526005602052604090205483901015610fd257600080fd5b600160a060020a0384166000908152600560205260409020548381011015610ff957600080fd5b600160a060020a038086166000908152600660209081526040808320339094168352929052205483111561102c57600080fd5b600160a060020a03808516600081815260056020908152604080832080548901905589851680845281842080548a900390556006835281842033909616845294909152908190208054879003905590919060008051602061119f8339815191529086905190815260200160405180910390a3506001949350505050565b60006002366044146110b757fe5b600160a060020a033316600090815260056020526040902054839010156110dd57600080fd5b600160a060020a038416600090815260056020526040902054838101101561110457600080fd5b600160a060020a0333811660008181526005602052604080822080548890039055928716808252908390208054870190559160008051602061119f8339815191529086905190815260200160405180910390a35060019392505050565b8154818355818115116106505760008381526020902061065091810190830161065991905b8082111561119a5760008155600101611186565b50905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820415dc90418e2e08fb7785d67fb335977dc698d233d70a61073afab6eaa201ea60029
Deployed Bytecode
0x60606040526004361061013a5763ffffffff60e060020a60003504166306fdde03811461013f578063095ea7b3146101c9578063173825d9146101ff57806318160ddd1461022057806323b872dd146102455780632c07398d1461026d5780632f54bf6e1461028c578063313ce567146102ab57806355f28260146102d45780635a3b7e4214610306578063601fc832146103195780637065cb481461032f57806370a082311461034e57806377215c8d1461036d578063867904b41461038057806395d89b41146103a25780639dc29fac146103b5578063a4e2d634146103d7578063a69df4b5146103ea578063a9059cbb146103fd578063ac4ddd9f1461041f578063d9facbe01461043e578063dd62ed3e1461045d578063ef18374a14610482578063f83d08ba14610495578063f94d71a0146104a8575b600080fd5b341561014a57600080fd5b6101526104c7565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561018e578082015183820152602001610176565b50505050905090810190601f1680156101bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d457600080fd5b6101eb600160a060020a0360043516602435610565565b604051901515815260200160405180910390f35b341561020a57600080fd5b61021e600160a060020a0360043516610578565b005b341561022b57600080fd5b610233610655565b60405190815260200160405180910390f35b341561025057600080fd5b6101eb600160a060020a036004358116906024351660443561065c565b341561027857600080fd5b61021e600160a060020a03600435166106eb565b341561029757600080fd5b6101eb600160a060020a0360043516610770565b34156102b657600080fd5b6102be6107e0565b60405160ff909116815260200160405180910390f35b34156102df57600080fd5b6102ea6004356107e9565b604051600160a060020a03909116815260200160405180910390f35b341561031157600080fd5b610152610815565b341561032457600080fd5b6102ea600435610880565b341561033a57600080fd5b61021e600160a060020a0360043516610891565b341561035957600080fd5b610233600160a060020a0360043516610913565b341561037857600080fd5b61023361092e565b341561038b57600080fd5b6101eb600160a060020a0360043516602435610934565b34156103ad57600080fd5b6101526109c0565b34156103c057600080fd5b6101eb600160a060020a0360043516602435610a2b565b34156103e257600080fd5b6101eb610af1565b34156103f557600080fd5b6101eb610afa565b341561040857600080fd5b6101eb600160a060020a0360043516602435610b20565b341561042a57600080fd5b61021e600160a060020a0360043516610b2d565b341561044957600080fd5b6101eb600160a060020a0360043516610b4a565b341561046857600080fd5b610233600160a060020a0360043581169060243516610b99565b341561048d57600080fd5b610233610bc4565b34156104a057600080fd5b6101eb610bca565b34156104b357600080fd5b61021e600160a060020a0360043516610bf6565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055d5780601f106105325761010080835404028352916020019161055d565b820191906000526020600020905b81548152906001019060200180831161054057829003601f168201915b505050505081565b60006105718383610ccc565b9392505050565b60008061058433610770565b151561058f57600080fd5b61059883610770565b1561065057600160a060020a038316600090815260076020526040902054600880549193509060001981019081106105cc57fe5b60009182526020909120015460088054600160a060020a0390921692508291849081106105f557fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039485161790559183168152600790915260409020829055600880549061064e906000198301611161565b505b505050565b6004545b90565b60008061066a858585610d44565b905061067584610b4a565b156106e35783600160a060020a0316637cf5d66f868560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156106ce57600080fd5b6102c65a03f115156106df57600080fd5b5050505b949350505050565b6106f481610d62565b15156106ff57600080fd5b61070881610b4a565b151561076d576001600b80548060010182816107249190611161565b6000928352602080842092909201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091558352600a909152604090912091900390555b50565b600854600160a060020a0382166000908152600760205260408120549091901080156107da5750600160a060020a0382166000908152600760205260409020546008805490919081106107bf57fe5b600091825260209091200154600160a060020a038381169116145b92915050565b60035460ff1681565b60006008828154811015156107fa57fe5b600091825260209091200154600160a060020a031692915050565b60008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055d5780601f106105325761010080835404028352916020019161055d565b6000600b828154811015156107fa57fe5b61089a33610770565b15156108a557600080fd5b6108ae81610770565b151561076d576001600880548060010182816108ca9190611161565b6000928352602080842092909201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03969096169586179055938252600790526040902091039055565b600160a060020a031660009081526005602052604090205490565b600b5490565b6000806109418484610d8a565b905061094c84610b4a565b156105715783600160a060020a0316637cf5d66f338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156109a557600080fd5b6102c65a03f115156109b657600080fd5b5050509392505050565b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055d5780601f106105325761010080835404028352916020019161055d565b6000610a3633610770565b1515610a4157600080fd5b600236604414610a4d57fe5b600160a060020a03841660009081526005602052604090205483901015610a7357600080fd5b600160a060020a0384166000908152600560205260409020548381031115610a9a57600080fd5b600160a060020a0384166000818152600560205260408082208054879003905560048054879003905590919060008051602061119f8339815191529086905190815260200160405180910390a35060019392505050565b60095460ff1690565b6000610b0533610770565b1515610b1057600080fd5b506009805460ff19169055600190565b6000806109418484610e60565b610b3633610770565b1515610b4157600080fd5b61076d81610e7d565b600b54600160a060020a0382166000908152600a60205260408120549091901080156107da5750600160a060020a0382166000908152600a6020526040902054600b805490919081106107bf57fe5b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b60085490565b6000610bd533610770565b1515610be057600080fd5b506009805460ff19166001179081905560ff1690565b600080610c0283610f78565b1515610c0d57600080fd5b610c1683610b4a565b1561065057600160a060020a0383166000908152600a6020526040902054600b8054919350906000198101908110610c4a57fe5b600091825260209091200154600b8054600160a060020a039092169250829184908110610c7357fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039485161790559183168152600a90915260409020829055600b80549061064e906000198301611161565b6000600236604414610cda57fe5b600160a060020a03338116600081815260066020908152604080832094891680845294909152908190208690557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259086905190815260200160405180910390a35060019392505050565b60095460009060ff1615610d5757600080fd5b6106e3848484610f9e565b600030600160a060020a031682600160a060020a0316141580156107da57506107da33610770565b6000610d9533610770565b1515610da057600080fd5b600236604414610dac57fe5b600160a060020a0384166000908152600560205260409020548381011015610dd357600080fd5b600160a060020a038085166000908152600560205260408082208054870190556004805487019055309092169160008051602061119f8339815191529086905190815260200160405180910390a383600160a060020a031630600160a060020a031660008051602061119f8339815191528560405190815260200160405180910390a35060019392505050565b60095460009060ff1615610e7357600080fd5b61057183836110a9565b806000600160a060020a0382166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ed657600080fd5b6102c65a03f11515610ee757600080fd5b505050604051805191505060008111156106505781600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610f5857600080fd5b6102c65a03f11515610f6957600080fd5b50505060405180515050505050565b600081600160a060020a031633600160a060020a031614806107da57506107da33610770565b6000600336606414610fac57fe5b600160a060020a03851660009081526005602052604090205483901015610fd257600080fd5b600160a060020a0384166000908152600560205260409020548381011015610ff957600080fd5b600160a060020a038086166000908152600660209081526040808320339094168352929052205483111561102c57600080fd5b600160a060020a03808516600081815260056020908152604080832080548901905589851680845281842080548a900390556006835281842033909616845294909152908190208054879003905590919060008051602061119f8339815191529086905190815260200160405180910390a3506001949350505050565b60006002366044146110b757fe5b600160a060020a033316600090815260056020526040902054839010156110dd57600080fd5b600160a060020a038416600090815260056020526040902054838101101561110457600080fd5b600160a060020a0333811660008181526005602052604080822080548890039055928716808252908390208054870190559160008051602061119f8339815191529086905190815260200160405180910390a35060019392505050565b8154818355818115116106505760008381526020902061065091810190830161065991905b8082111561119a5760008155600101611186565b50905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820415dc90418e2e08fb7785d67fb335977dc698d233d70a61073afab6eaa201ea60029
Swarm Source
bzzr://415dc90418e2e08fb7785d67fb335977dc698d233d70a61073afab6eaa201ea6
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.