ETH Price: $3,357.27 (-3.39%)

Token

DRP Security (DRPS)
 

Overview

Max Total Supply

323,555.95665 DRPS

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
0 DRPS

Value
$0.00
0x084f807b974865f2285405bd7727612e64342c93
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DRPSToken

Compiler Version
v0.4.15+commit.bbb8e64f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-11-01
*/

pragma solidity ^0.4.15;

/**
 * @title 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);
        _;
    }
}


/**
 * @title Multi-owned interface
 *
 * Interface that allows multiple owners
 *
 * #created 09/10/2017
 * #author Frank Bonnet
 */
contract IMultiOwned {

    /**
     * Returns true if `_account` is an owner
     *
     * @param _account The address to test against
     */
    function isOwner(address _account) constant returns (bool);


    /**
     * Returns the amount of owners
     *
     * @return The amount of owners
     */
    function getOwnerCount() constant 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) constant returns (address);


     /**
     * Adds `_account` as a new owner
     *
     * @param _account The account to add as an owner
     */
    function addOwner(address _account);


    /**
     * Removes `_account` as an owner
     *
     * @param _account The account to remove as an owner
     */
    function removeOwner(address _account);
}


/**
 * @title Multi-owned
 *
 * 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() {
        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 constant returns (bool) {
        return owners[_account] < ownersIndex.length && _account == ownersIndex[owners[_account]];
    }


    /**
     * Returns the amount of owners
     *
     * @return The amount of owners
     */
    function getOwnerCount() public constant 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 constant 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--;
        }
    }
}


/**
 * @title Token retrieve interface
 *
 * Allows tokens to be retrieved from a contract
 *
 * #created 29/09/2017
 * #author Frank Bonnet
 */
contract ITokenRetriever {

    /**
     * Extracts tokens from the contract
     *
     * @param _tokenContract The address of ERC20 compatible token
     */
    function retrieveTokens(address _tokenContract);
}


/**
 * @title Token retrieve
 *
 * 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);
        }
    }
}


/**
 * @title Observable interface
 *
 * Allows observers to register and unregister with the 
 * implementing smart-contract that is observable
 *
 * #created 09/10/2017
 * #author Frank Bonnet
 */
contract 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) constant returns (bool);


    /**
     * Gets the amount of registered observers
     * 
     * @return The amount of registered observers
     */
    function getObserverCount() constant returns (uint);


    /**
     * Gets the observer at `_index`
     * 
     * @param _index The index of the observer
     * @return The observers address
     */
    function getObserverAtIndex(uint _index) constant returns (address);


    /**
     * Register `_observer` as an observer
     * 
     * @param _observer The account to add as an observer
     */
    function registerObserver(address _observer);


    /**
     * Unregister `_observer` as an observer
     * 
     * @param _observer The account to remove as an observer
     */
    function unregisterObserver(address _observer);
}


/**
 * @title 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 constant 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 constant 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 constant 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 constant 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 constant returns (bool);
}


/**
 * @title Token observer interface
 *
 * Allows a token smart-contract to notify observers 
 * when tokens are received
 *
 * #created 09/10/2017
 * #author Frank Bonnet
 */
contract 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);
}


/**
 * @title ERC20 compatible token interface
 *
 * - Implements ERC 20 Token standard
 * - Implements short address attack fix
 *
 * #created 29/09/2017
 * #author Frank Bonnet
 */
contract IToken { 

    /** 
     * Get the total supply of tokens
     * 
     * @return The total supply
     */
    function totalSupply() constant returns (uint);


    /** 
     * Get balance of `_owner` 
     * 
     * @param _owner The address from which the balance will be retrieved
     * @return The balance
     */
    function balanceOf(address _owner) constant 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) 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) 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) 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) constant returns (uint);
}


/**
 * @title 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";
    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) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        balances[msg.sender] = 0;
        totalTokenSupply = 0;
    }


    /** 
     * Get the total token supply
     * 
     * @return The total supply
     */
    function totalSupply() public constant 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 constant 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 constant returns (uint) {
      return allowed[_owner][_spender];
    }
}


/**
 * @title ManagedToken interface
 *
 * Adds the following functionality to the basic ERC20 token
 * - Locking
 * - Issuing
 * - Burning 
 *
 * #created 29/09/2017
 * #author Frank Bonnet
 */
contract IManagedToken is IToken { 

    /** 
     * Returns true if the token is locked
     * 
     * @return Whether the token is locked
     */
    function isLocked() constant returns (bool);


    /**
     * Locks the token so that the transfering of value is disabled 
     *
     * @return Whether the unlocking was successful or not
     */
    function lock() returns (bool);


    /**
     * Unlocks the token so that the transfering of value is enabled 
     *
     * @return Whether the unlocking was successful or not
     */
    function unlock() 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) 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) returns (bool);
}


/**
 * @title 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) 
        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 constant 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;
    }
}


/**
 * @title DRP Security token (DRPS)
 *
 * DRPS as indicated by its ‘S’ designation, maintaining the primary security functions of the DRP token as 
 * outlined within the Dcorp whitepaper (https://www.dcorp.it/whitepaper).  
 *
 * Those who bear DRPS will be entitled to profit sharing in the form of dividends as per a voting process, 
 * and is considered the "Security" token of Dcorp.
 *
 * https://www.dcorp.it/drps
 *
 * #created 01/10/2017
 * #author Frank Bonnet
 */
contract DRPSToken is ManagedToken, Observable, TokenRetriever {

    
    /**
     * Construct the managed security token
     */
    function DRPSToken() ManagedToken("DRP Security", "DRPS", 8, false) {}


    /**
     * 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 constant 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 constant returns (bool) {
        return msg.sender == _observer || isOwner(msg.sender);
    }


    /** 
     * 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 () payable {
        revert();
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"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,"type":"function"},{"constant":false,"inputs":[{"name":"_observer","type":"address"}],"name":"registerObserver","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getOwnerAt","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"standard","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getObserverAtIndex","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getObserverCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"issue","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"burn","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"isLocked","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"unlock","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"retrieveTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"isObserver","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getOwnerCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"lock","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_observer","type":"address"}],"name":"unregisterObserver","outputs":[],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"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"}]

606060405260408051908101604052600981527f546f6b656e20302e330000000000000000000000000000000000000000000000602082015260009080516200004d9291602001906200019a565b5034156200005a57600080fd5b5b604080519081016040908152600c82527f445250205365637572697479000000000000000000000000000000000000000060208301528051908101604052600481527f44525053000000000000000000000000000000000000000000000000000000006020820152600860005b5b8383835b6001838051620000e29291602001906200019a565b506002828051620000f89291602001906200019a565b506003805460ff191660ff831617905533600160a060020a031660009081526005602052604081208190556004555b5050506008805480600101828162000140919062000220565b916000526020600020900160005b8154600160a060020a033381166101009390930a83810291021990911617909155600090815260076020526040812055505b6009805460ff19168215151790555b505050505b62000271565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001dd57805160ff19168380011785556200020d565b828001600101855582156200020d579182015b828111156200020d578251825591602001919060010190620001f0565b5b506200021c9291506200024d565b5090565b8154818355818115116200024757600083815260209020620002479181019083016200024d565b5b505050565b6200026e91905b808211156200021c576000815560010162000254565b5090565b90565b61157c80620002816000396000f300606060405236156101385763ffffffff60e060020a60003504166306fdde038114610140578063095ea7b3146101cb578063173825d91461020157806318160ddd1461022257806323b872dd146102475780632c07398d146102835780632f54bf6e146102a4578063313ce567146102d757806355f28260146103005780635a3b7e4214610332578063601fc832146103bd5780637065cb48146103ef57806370a082311461041057806377215c8d14610441578063867904b41461046657806395d89b411461049c5780639dc29fac14610527578063a4e2d6341461055d578063a69df4b514610584578063a9059cbb146105ab578063ac4ddd9f146105e1578063d9facbe014610602578063dd62ed3e14610635578063ef18374a1461066c578063f83d08ba14610691578063f94d71a0146106b8575b5b600080fd5b005b341561014b57600080fd5b6101536106d9565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101905780820151818401525b602001610177565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d657600080fd5b6101ed600160a060020a0360043516602435610777565b604051901515815260200160405180910390f35b341561020c57600080fd5b61013e600160a060020a036004351661078c565b005b341561022d57600080fd5b61023561086e565b60405190815260200160405180910390f35b341561025257600080fd5b6101ed600160a060020a0360043581169060243516604435610875565b604051901515815260200160405180910390f35b341561028e57600080fd5b61013e600160a060020a0360043516610908565b005b34156102af57600080fd5b6101ed600160a060020a0360043516610988565b604051901515815260200160405180910390f35b34156102e257600080fd5b6102ea610a14565b60405160ff909116815260200160405180910390f35b341561030b57600080fd5b610316600435610a1d565b604051600160a060020a03909116815260200160405180910390f35b341561033d57600080fd5b610153610a56565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101905780820151818401525b602001610177565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103c857600080fd5b610316600435610af4565b604051600160a060020a03909116815260200160405180910390f35b34156103fa57600080fd5b61013e600160a060020a0360043516610b2d565b005b341561041b57600080fd5b610235600160a060020a0360043516610bae565b60405190815260200160405180910390f35b341561044c57600080fd5b610235610bcd565b60405190815260200160405180910390f35b341561047157600080fd5b6101ed600160a060020a0360043516602435610bd4565b604051901515815260200160405180910390f35b34156104a757600080fd5b610153610cae565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101905780820151818401525b602001610177565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561053257600080fd5b6101ed600160a060020a0360043516602435610d4c565b604051901515815260200160405180910390f35b341561056857600080fd5b6101ed610e16565b604051901515815260200160405180910390f35b341561058f57600080fd5b6101ed610e20565b604051901515815260200160405180910390f35b34156105b657600080fd5b6101ed600160a060020a0360043516602435610e48565b604051901515815260200160405180910390f35b34156105ec57600080fd5b61013e600160a060020a0360043516610ed9565b005b341561060d57600080fd5b6101ed600160a060020a0360043516610efb565b604051901515815260200160405180910390f35b341561064057600080fd5b610235600160a060020a0360043581169060243516610f87565b60405190815260200160405180910390f35b341561067757600080fd5b610235610fb4565b60405190815260200160405180910390f35b341561069c57600080fd5b6101ed610fbb565b604051901515815260200160405180910390f35b34156106c357600080fd5b61013e600160a060020a0360043516610fe9565b005b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076f5780601f106107445761010080835404028352916020019161076f565b820191906000526020600020905b81548152906001019060200180831161075257829003601f168201915b505050505081565b600061078383836110ca565b90505b92915050565b60008061079833610988565b15156107a357600080fd5b6107ac83610988565b1561086757600160a060020a038316600090815260076020526040902054600880549193509060001981019081106107e057fe5b906000526020600020900160005b9054906101000a9004600160a060020a031690508060088381548110151561081257fe5b906000526020600020900160005b8154600160a060020a039384166101009290920a91820291840219161790558116600090815260076020526040902082905560088054906108659060001983016114bb565b505b5b5b505050565b6004545b90565b600080610883858585611145565b905061088e84610efb565b156108fc5783600160a060020a0316637cf5d66f868560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156108e757600080fd5b6102c65a03f115156108f857600080fd5b5050505b8091505b509392505050565b6109118161116e565b151561091c57600080fd5b61092581610efb565b1515610984576001600b805480600101828161094191906114bb565b916000526020600020900160005b8154600160a060020a038087166101009390930a838102910219909116179091556000908152600a6020526040902091900390555b5b50565b600854600160a060020a038216600090815260076020526040812054909190108015610a0c5750600160a060020a0382166000908152600760205260409020546008805490919081106109d757fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031682600160a060020a0316145b90505b919050565b60035460ff1681565b6000600882815481101515610a2e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a031690505b919050565b60008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076f5780601f106107445761010080835404028352916020019161076f565b820191906000526020600020905b81548152906001019060200180831161075257829003601f168201915b505050505081565b6000600b82815481101515610a2e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a031690505b919050565b610b3633610988565b1515610b4157600080fd5b610b4a81610988565b151561098457600160088054806001018281610b6691906114bb565b916000526020600020900160005b8154600160a060020a038087166101009390930a83810291021990911617909155600090815260076020526040902091900390555b5b5b50565b600160a060020a0381166000908152600560205260409020545b919050565b600b545b90565b6000610bdf33610988565b1515610bea57600080fd5b600236604414610bf657fe5b600160a060020a0384166000908152600560205260409020548381011015610c1d57600080fd5b600160a060020a03808516600090815260056020526040808220805487019055600480548701905530909216916000805160206115318339815191529086905190815260200160405180910390a383600160a060020a031630600160a060020a03166000805160206115318339815191528560405190815260200160405180910390a3600191505b5b505b92915050565b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076f5780601f106107445761010080835404028352916020019161076f565b820191906000526020600020905b81548152906001019060200180831161075257829003601f168201915b505050505081565b6000610d5733610988565b1515610d6257600080fd5b600236604414610d6e57fe5b600160a060020a03841660009081526005602052604090205483901015610d9457600080fd5b600160a060020a0384166000908152600560205260409020548381031115610dbb57600080fd5b600160a060020a038416600081815260056020526040808220805487900390556004805487900390559091906000805160206115318339815191529086905190815260200160405180910390a3600191505b5b505b92915050565b60095460ff165b90565b6000610e2b33610988565b1515610e3657600080fd5b506009805460ff1916905560015b5b90565b600080610e55848461119f565b9050610e6084610efb565b15610ece5783600160a060020a0316637cf5d66f338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610eb957600080fd5b6102c65a03f11515610eca57600080fd5b5050505b8091505b5092915050565b610ee233610988565b1515610eed57600080fd5b610984816111c6565b5b5b50565b600b54600160a060020a0382166000908152600a6020526040812054909190108015610a0c5750600160a060020a0382166000908152600a6020526040902054600b805490919081106109d757fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031682600160a060020a0316145b90505b919050565b600160a060020a038083166000908152600660209081526040808320938516835292905220545b92915050565b6008545b90565b6000610fc633610988565b1515610fd157600080fd5b506009805460ff19166001179081905560ff165b5b90565b600080610ff5836112c3565b151561100057600080fd5b61100983610efb565b1561086757600160a060020a0383166000908152600a6020526040902054600b805491935090600019810190811061103d57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316905080600b8381548110151561106f57fe5b906000526020600020900160005b8154600160a060020a039384166101009290920a918202918402191617905581166000908152600a60205260409020829055600b8054906108659060001983016114bb565b505b5b505050565b60006002366044146110d857fe5b600160a060020a03338116600081815260066020908152604080832094891680845294909152908190208690557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259086905190815260200160405180910390a3600191505b5b5092915050565b60095460009060ff161561115857600080fd5b6111638484846112f2565b90505b5b9392505050565b600030600160a060020a031682600160a060020a031614158015610a0c5750610a0c33610988565b5b90505b919050565b60095460009060ff16156111b257600080fd5b6107838383611400565b90505b5b92915050565b806000600160a060020a0382166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561121f57600080fd5b6102c65a03f1151561123057600080fd5b505050604051805191505060008111156108675781600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112a157600080fd5b6102c65a03f115156112b257600080fd5b505050604051805150505b5b505050565b600081600160a060020a031633600160a060020a03161480610a0c5750610a0c33610988565b5b90505b919050565b600060033660641461130057fe5b600160a060020a0385166000908152600560205260409020548390101561132657600080fd5b600160a060020a038416600090815260056020526040902054838101101561134d57600080fd5b600160a060020a038086166000908152600660209081526040808320339094168352929052205483111561138057600080fd5b600160a060020a03808516600081815260056020908152604080832080548901905589851680845281842080548a90039055600683528184203390961684529490915290819020805487900390559091906000805160206115318339815191529086905190815260200160405180910390a3600191505b5b509392505050565b600060023660441461140e57fe5b600160a060020a0333166000908152600560205260409020548390101561143457600080fd5b600160a060020a038416600090815260056020526040902054838101101561145b57600080fd5b600160a060020a033381166000818152600560205260408082208054889003905592871680825290839020805487019055916000805160206115318339815191529086905190815260200160405180910390a3600191505b5b5092915050565b8154818355818115116108675760008381526020902061086791810190830161150f565b5b505050565b8154818355818115116108675760008381526020902061086791810190830161150f565b5b505050565b61087291905b808211156115295760008155600101611515565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820ac00a1acc99835e359b8f0664acda31254d9276e6e8904c907cb713d8ed5ac020029

Deployed Bytecode

0x606060405236156101385763ffffffff60e060020a60003504166306fdde038114610140578063095ea7b3146101cb578063173825d91461020157806318160ddd1461022257806323b872dd146102475780632c07398d146102835780632f54bf6e146102a4578063313ce567146102d757806355f28260146103005780635a3b7e4214610332578063601fc832146103bd5780637065cb48146103ef57806370a082311461041057806377215c8d14610441578063867904b41461046657806395d89b411461049c5780639dc29fac14610527578063a4e2d6341461055d578063a69df4b514610584578063a9059cbb146105ab578063ac4ddd9f146105e1578063d9facbe014610602578063dd62ed3e14610635578063ef18374a1461066c578063f83d08ba14610691578063f94d71a0146106b8575b5b600080fd5b005b341561014b57600080fd5b6101536106d9565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101905780820151818401525b602001610177565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d657600080fd5b6101ed600160a060020a0360043516602435610777565b604051901515815260200160405180910390f35b341561020c57600080fd5b61013e600160a060020a036004351661078c565b005b341561022d57600080fd5b61023561086e565b60405190815260200160405180910390f35b341561025257600080fd5b6101ed600160a060020a0360043581169060243516604435610875565b604051901515815260200160405180910390f35b341561028e57600080fd5b61013e600160a060020a0360043516610908565b005b34156102af57600080fd5b6101ed600160a060020a0360043516610988565b604051901515815260200160405180910390f35b34156102e257600080fd5b6102ea610a14565b60405160ff909116815260200160405180910390f35b341561030b57600080fd5b610316600435610a1d565b604051600160a060020a03909116815260200160405180910390f35b341561033d57600080fd5b610153610a56565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101905780820151818401525b602001610177565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103c857600080fd5b610316600435610af4565b604051600160a060020a03909116815260200160405180910390f35b34156103fa57600080fd5b61013e600160a060020a0360043516610b2d565b005b341561041b57600080fd5b610235600160a060020a0360043516610bae565b60405190815260200160405180910390f35b341561044c57600080fd5b610235610bcd565b60405190815260200160405180910390f35b341561047157600080fd5b6101ed600160a060020a0360043516602435610bd4565b604051901515815260200160405180910390f35b34156104a757600080fd5b610153610cae565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101905780820151818401525b602001610177565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561053257600080fd5b6101ed600160a060020a0360043516602435610d4c565b604051901515815260200160405180910390f35b341561056857600080fd5b6101ed610e16565b604051901515815260200160405180910390f35b341561058f57600080fd5b6101ed610e20565b604051901515815260200160405180910390f35b34156105b657600080fd5b6101ed600160a060020a0360043516602435610e48565b604051901515815260200160405180910390f35b34156105ec57600080fd5b61013e600160a060020a0360043516610ed9565b005b341561060d57600080fd5b6101ed600160a060020a0360043516610efb565b604051901515815260200160405180910390f35b341561064057600080fd5b610235600160a060020a0360043581169060243516610f87565b60405190815260200160405180910390f35b341561067757600080fd5b610235610fb4565b60405190815260200160405180910390f35b341561069c57600080fd5b6101ed610fbb565b604051901515815260200160405180910390f35b34156106c357600080fd5b61013e600160a060020a0360043516610fe9565b005b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076f5780601f106107445761010080835404028352916020019161076f565b820191906000526020600020905b81548152906001019060200180831161075257829003601f168201915b505050505081565b600061078383836110ca565b90505b92915050565b60008061079833610988565b15156107a357600080fd5b6107ac83610988565b1561086757600160a060020a038316600090815260076020526040902054600880549193509060001981019081106107e057fe5b906000526020600020900160005b9054906101000a9004600160a060020a031690508060088381548110151561081257fe5b906000526020600020900160005b8154600160a060020a039384166101009290920a91820291840219161790558116600090815260076020526040902082905560088054906108659060001983016114bb565b505b5b5b505050565b6004545b90565b600080610883858585611145565b905061088e84610efb565b156108fc5783600160a060020a0316637cf5d66f868560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156108e757600080fd5b6102c65a03f115156108f857600080fd5b5050505b8091505b509392505050565b6109118161116e565b151561091c57600080fd5b61092581610efb565b1515610984576001600b805480600101828161094191906114bb565b916000526020600020900160005b8154600160a060020a038087166101009390930a838102910219909116179091556000908152600a6020526040902091900390555b5b50565b600854600160a060020a038216600090815260076020526040812054909190108015610a0c5750600160a060020a0382166000908152600760205260409020546008805490919081106109d757fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031682600160a060020a0316145b90505b919050565b60035460ff1681565b6000600882815481101515610a2e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a031690505b919050565b60008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076f5780601f106107445761010080835404028352916020019161076f565b820191906000526020600020905b81548152906001019060200180831161075257829003601f168201915b505050505081565b6000600b82815481101515610a2e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a031690505b919050565b610b3633610988565b1515610b4157600080fd5b610b4a81610988565b151561098457600160088054806001018281610b6691906114bb565b916000526020600020900160005b8154600160a060020a038087166101009390930a83810291021990911617909155600090815260076020526040902091900390555b5b5b50565b600160a060020a0381166000908152600560205260409020545b919050565b600b545b90565b6000610bdf33610988565b1515610bea57600080fd5b600236604414610bf657fe5b600160a060020a0384166000908152600560205260409020548381011015610c1d57600080fd5b600160a060020a03808516600090815260056020526040808220805487019055600480548701905530909216916000805160206115318339815191529086905190815260200160405180910390a383600160a060020a031630600160a060020a03166000805160206115318339815191528560405190815260200160405180910390a3600191505b5b505b92915050565b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076f5780601f106107445761010080835404028352916020019161076f565b820191906000526020600020905b81548152906001019060200180831161075257829003601f168201915b505050505081565b6000610d5733610988565b1515610d6257600080fd5b600236604414610d6e57fe5b600160a060020a03841660009081526005602052604090205483901015610d9457600080fd5b600160a060020a0384166000908152600560205260409020548381031115610dbb57600080fd5b600160a060020a038416600081815260056020526040808220805487900390556004805487900390559091906000805160206115318339815191529086905190815260200160405180910390a3600191505b5b505b92915050565b60095460ff165b90565b6000610e2b33610988565b1515610e3657600080fd5b506009805460ff1916905560015b5b90565b600080610e55848461119f565b9050610e6084610efb565b15610ece5783600160a060020a0316637cf5d66f338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610eb957600080fd5b6102c65a03f11515610eca57600080fd5b5050505b8091505b5092915050565b610ee233610988565b1515610eed57600080fd5b610984816111c6565b5b5b50565b600b54600160a060020a0382166000908152600a6020526040812054909190108015610a0c5750600160a060020a0382166000908152600a6020526040902054600b805490919081106109d757fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031682600160a060020a0316145b90505b919050565b600160a060020a038083166000908152600660209081526040808320938516835292905220545b92915050565b6008545b90565b6000610fc633610988565b1515610fd157600080fd5b506009805460ff19166001179081905560ff165b5b90565b600080610ff5836112c3565b151561100057600080fd5b61100983610efb565b1561086757600160a060020a0383166000908152600a6020526040902054600b805491935090600019810190811061103d57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316905080600b8381548110151561106f57fe5b906000526020600020900160005b8154600160a060020a039384166101009290920a918202918402191617905581166000908152600a60205260409020829055600b8054906108659060001983016114bb565b505b5b505050565b60006002366044146110d857fe5b600160a060020a03338116600081815260066020908152604080832094891680845294909152908190208690557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259086905190815260200160405180910390a3600191505b5b5092915050565b60095460009060ff161561115857600080fd5b6111638484846112f2565b90505b5b9392505050565b600030600160a060020a031682600160a060020a031614158015610a0c5750610a0c33610988565b5b90505b919050565b60095460009060ff16156111b257600080fd5b6107838383611400565b90505b5b92915050565b806000600160a060020a0382166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561121f57600080fd5b6102c65a03f1151561123057600080fd5b505050604051805191505060008111156108675781600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112a157600080fd5b6102c65a03f115156112b257600080fd5b505050604051805150505b5b505050565b600081600160a060020a031633600160a060020a03161480610a0c5750610a0c33610988565b5b90505b919050565b600060033660641461130057fe5b600160a060020a0385166000908152600560205260409020548390101561132657600080fd5b600160a060020a038416600090815260056020526040902054838101101561134d57600080fd5b600160a060020a038086166000908152600660209081526040808320339094168352929052205483111561138057600080fd5b600160a060020a03808516600081815260056020908152604080832080548901905589851680845281842080548a90039055600683528184203390961684529490915290819020805487900390559091906000805160206115318339815191529086905190815260200160405180910390a3600191505b5b509392505050565b600060023660441461140e57fe5b600160a060020a0333166000908152600560205260409020548390101561143457600080fd5b600160a060020a038416600090815260056020526040902054838101101561145b57600080fd5b600160a060020a033381166000818152600560205260408082208054889003905592871680825290839020805487019055916000805160206115318339815191529086905190815260200160405180910390a3600191505b5b5092915050565b8154818355818115116108675760008381526020902061086791810190830161150f565b5b505050565b8154818355818115116108675760008381526020902061086791810190830161150f565b5b505050565b61087291905b808211156115295760008155600101611515565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820ac00a1acc99835e359b8f0664acda31254d9276e6e8904c907cb713d8ed5ac020029

Swarm Source

bzzr://ac00a1acc99835e359b8f0664acda31254d9276e6e8904c907cb713d8ed5ac02
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.