ETH Price: $3,607.22 (+6.10%)

Token

IOTW (IOTW)
 

Overview

Max Total Supply

2,560,750,000 IOTW

Holders

2,683 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
0.1 IOTW

Value
$0.00
0x7daa87de1d7c0c95fe47407480f50bec45026d9f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A Blockchain-Enabled IoT Data Platform

IEO Information

* BitMax Launchpad / IDAX Launchpad

IEO Start Date : Apr 28, 2019  
IEO End Date : Apr 29, 2019
Raised : $750,000
ICO Price  : $0.01
Country : Hong Kong

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
IOTW

Compiler Version
v0.4.23+commit.124ca40d

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-04-18
*/

// File: contracts/EToken2Interface.sol

pragma solidity 0.4.23;


contract RegistryICAPInterface {
    function parse(bytes32 _icap) public view returns(address, bytes32, bool);
    function institutions(bytes32 _institution) public view returns(address);
}


contract EToken2Interface {
    function registryICAP() public view returns(RegistryICAPInterface);
    function baseUnit(bytes32 _symbol) public view returns(uint8);
    function description(bytes32 _symbol) public view returns(string);
    function owner(bytes32 _symbol) public view returns(address);
    function isOwner(address _owner, bytes32 _symbol) public view returns(bool);
    function totalSupply(bytes32 _symbol) public view returns(uint);
    function balanceOf(address _holder, bytes32 _symbol) public view returns(uint);
    function isLocked(bytes32 _symbol) public view returns(bool);

    function issueAsset(
        bytes32 _symbol,
        uint _value,
        string _name,
        string _description,
        uint8 _baseUnit,
        bool _isReissuable)
    public returns(bool);

    function reissueAsset(bytes32 _symbol, uint _value) public returns(bool);
    function revokeAsset(bytes32 _symbol, uint _value) public returns(bool);
    function setProxy(address _address, bytes32 _symbol) public returns(bool);
    function lockAsset(bytes32 _symbol) public returns(bool);

    function proxyTransferFromToICAPWithReference(
        address _from,
        bytes32 _icap,
        uint _value,
        string _reference,
        address _sender)
    public returns(bool);

    function proxyApprove(address _spender, uint _value, bytes32 _symbol, address _sender)
    public returns(bool);
    
    function allowance(address _from, address _spender, bytes32 _symbol) public view returns(uint);

    function proxyTransferFromWithReference(
        address _from,
        address _to,
        uint _value,
        bytes32 _symbol,
        string _reference,
        address _sender)
    public returns(bool);

    function changeOwnership(bytes32 _symbol, address _newOwner) public returns(bool);
}

// File: contracts/AssetInterface.sol

pragma solidity 0.4.23;


contract AssetInterface {
    function _performTransferWithReference(
        address _to,
        uint _value,
        string _reference,
        address _sender)
    public returns(bool);

    function _performTransferToICAPWithReference(
        bytes32 _icap,
        uint _value,
        string _reference,
        address _sender)
    public returns(bool);

    function _performApprove(address _spender, uint _value, address _sender)
    public returns(bool);

    function _performTransferFromWithReference(
        address _from,
        address _to,
        uint _value,
        string _reference,
        address _sender)
    public returns(bool);

    function _performTransferFromToICAPWithReference(
        address _from,
        bytes32 _icap,
        uint _value,
        string _reference,
        address _sender)
    public returns(bool);

    function _performGeneric(bytes, address) public payable {
        revert();
    }
}

// File: contracts/ERC20Interface.sol

pragma solidity 0.4.23;


contract ERC20Interface {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed from, address indexed spender, uint256 value);

    function totalSupply() public view returns(uint256 supply);
    function balanceOf(address _owner) public view returns(uint256 balance);
    // solhint-disable-next-line no-simple-event-func-name
    function transfer(address _to, uint256 _value) public returns(bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns(bool success);
    function approve(address _spender, uint256 _value) public returns(bool success);
    function allowance(address _owner, address _spender) public view returns(uint256 remaining);

    // function symbol() constant returns(string);
    function decimals() public view returns(uint8);
    // function name() constant returns(string);
}

// File: contracts/AssetProxyInterface.sol

pragma solidity 0.4.23;



contract AssetProxyInterface is ERC20Interface {
    function _forwardApprove(address _spender, uint _value, address _sender)
    public returns(bool);

    function _forwardTransferFromWithReference(
        address _from,
        address _to,
        uint _value,
        string _reference,
        address _sender)
    public returns(bool);

    function _forwardTransferFromToICAPWithReference(
        address _from,
        bytes32 _icap,
        uint _value,
        string _reference,
        address _sender)
    public returns(bool);

    function recoverTokens(ERC20Interface _asset, address _receiver, uint _value)
    public returns(bool);

    // solhint-disable-next-line no-empty-blocks
    function etoken2() public pure returns(address) {} // To be replaced by the implicit getter;

    // To be replaced by the implicit getter;
    // solhint-disable-next-line no-empty-blocks
    function etoken2Symbol() public pure returns(bytes32) {}
}

// File: contracts/helpers/Bytes32.sol

pragma solidity 0.4.23;


contract Bytes32 {
    function _bytes32(string _input) internal pure returns(bytes32 result) {
        assembly {
            result := mload(add(_input, 32))
        }
    }
}

// File: contracts/helpers/ReturnData.sol

pragma solidity 0.4.23;


contract ReturnData {
    function _returnReturnData(bool _success) internal pure {
        assembly {
            let returndatastart := 0
            returndatacopy(returndatastart, 0, returndatasize)
            switch _success case 0 { revert(returndatastart, returndatasize) }
                default { return(returndatastart, returndatasize) }
        }
    }

    function _assemblyCall(address _destination, uint _value, bytes _data)
    internal returns(bool success) {
        assembly {
            success := call(gas, _destination, _value, add(_data, 32), mload(_data), 0, 0)
        }
    }
}

// File: contracts/AssetProxy.sol

pragma solidity 0.4.23;








/**
 * @title EToken2 Asset Proxy.
 *
 * Proxy implements ERC20 interface and acts as a gateway to a single EToken2 asset.
 * Proxy adds etoken2Symbol and caller(sender) when forwarding requests to EToken2.
 * Every request that is made by caller first sent to the specific asset implementation
 * contract, which then calls back to be forwarded onto EToken2.
 *
 * Calls flow: Caller ->
 *             Proxy.func(...) ->
 *             Asset._performFunc(..., Caller.address) ->
 *             Proxy._forwardFunc(..., Caller.address) ->
 *             Platform.proxyFunc(..., symbol, Caller.address)
 *
 * Generic call flow: Caller ->
 *             Proxy.unknownFunc(...) ->
 *             Asset._performGeneric(..., Caller.address) ->
 *             Asset.unknownFunc(...)
 *
 * Asset implementation contract is mutable, but each user have an option to stick with
 * old implementation, through explicit decision made in timely manner, if he doesn't agree
 * with new rules.
 * Each user have a possibility to upgrade to latest asset contract implementation, without the
 * possibility to rollback.
 *
 * Note: all the non constant functions return false instead of throwing in case if state change
 * didn't happen yet.
 */
contract IOTW is ERC20Interface, AssetProxyInterface, Bytes32, ReturnData {
    // Assigned EToken2, immutable.
    EToken2Interface public etoken2;

    // Assigned symbol, immutable.
    bytes32 public etoken2Symbol;

    // Assigned name, immutable. For UI.
    string public name;
    string public symbol;

    /**
     * Sets EToken2 address, assigns symbol and name.
     *
     * Can be set only once.
     *
     * @param _etoken2 EToken2 contract address.
     * @param _symbol assigned symbol.
     * @param _name assigned name.
     *
     * @return success.
     */
    function init(EToken2Interface _etoken2, string _symbol, string _name) public returns(bool) {
        if (address(etoken2) != 0x0) {
            return false;
        }
        etoken2 = _etoken2;
        etoken2Symbol = _bytes32(_symbol);
        name = _name;
        symbol = _symbol;
        return true;
    }

    /**
     * Only EToken2 is allowed to call.
     */
    modifier onlyEToken2() {
        if (msg.sender == address(etoken2)) {
            _;
        }
    }

    /**
     * Only current asset owner is allowed to call.
     */
    modifier onlyAssetOwner() {
        if (etoken2.isOwner(msg.sender, etoken2Symbol)) {
            _;
        }
    }

    /**
     * Returns asset implementation contract for current caller.
     *
     * @return asset implementation contract.
     */
    function _getAsset() internal view returns(AssetInterface) {
        return AssetInterface(getVersionFor(msg.sender));
    }

    /**
     * Recovers tokens on proxy contract
     *
     * @param _asset type of tokens to recover.
     * @param _value tokens that will be recovered.
     * @param _receiver address where to send recovered tokens.
     *
     * @return success.
     */
    function recoverTokens(ERC20Interface _asset, address _receiver, uint _value)
    public onlyAssetOwner() returns(bool) {
        return _asset.transfer(_receiver, _value);
    }

    /**
     * Returns asset total supply.
     *
     * @return asset total supply.
     */
    function totalSupply() public view returns(uint) {
        return etoken2.totalSupply(etoken2Symbol);
    }

    /**
     * Returns asset balance for a particular holder.
     *
     * @param _owner holder address.
     *
     * @return holder balance.
     */
    function balanceOf(address _owner) public view returns(uint) {
        return etoken2.balanceOf(_owner, etoken2Symbol);
    }

    /**
     * Returns asset allowance from one holder to another.
     *
     * @param _from holder that allowed spending.
     * @param _spender holder that is allowed to spend.
     *
     * @return holder to spender allowance.
     */
    function allowance(address _from, address _spender) public view returns(uint) {
        return etoken2.allowance(_from, _spender, etoken2Symbol);
    }

    /**
     * Returns asset decimals.
     *
     * @return asset decimals.
     */
    function decimals() public view returns(uint8) {
        return etoken2.baseUnit(etoken2Symbol);
    }

    /**
     * Transfers asset balance from the caller to specified receiver.
     *
     * @param _to holder address to give to.
     * @param _value amount to transfer.
     *
     * @return success.
     */
    function transfer(address _to, uint _value) public returns(bool) {
        return transferWithReference(_to, _value, '');
    }

    /**
     * Transfers asset balance from the caller to specified receiver adding specified comment.
     * Resolves asset implementation contract for the caller and forwards there arguments along with
     * the caller address.
     *
     * @param _to holder address to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     *
     * @return success.
     */
    function transferWithReference(address _to, uint _value, string _reference)
    public returns(bool) {
        return _getAsset()._performTransferWithReference(
            _to, _value, _reference, msg.sender);
    }

    /**
     * Transfers asset balance from the caller to specified ICAP.
     *
     * @param _icap recipient ICAP to give to.
     * @param _value amount to transfer.
     *
     * @return success.
     */
    function transferToICAP(bytes32 _icap, uint _value) public returns(bool) {
        return transferToICAPWithReference(_icap, _value, '');
    }

    /**
     * Transfers asset balance from the caller to specified ICAP adding specified comment.
     * Resolves asset implementation contract for the caller and forwards there arguments along with
     * the caller address.
     *
     * @param _icap recipient ICAP to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     *
     * @return success.
     */
    function transferToICAPWithReference(
        bytes32 _icap,
        uint _value,
        string _reference)
    public returns(bool) {
        return _getAsset()._performTransferToICAPWithReference(
            _icap, _value, _reference, msg.sender);
    }

    /**
     * Prforms allowance transfer of asset balance between holders.
     *
     * @param _from holder address to take from.
     * @param _to holder address to give to.
     * @param _value amount to transfer.
     *
     * @return success.
     */
    function transferFrom(address _from, address _to, uint _value) public returns(bool) {
        return transferFromWithReference(_from, _to, _value, '');
    }

    /**
     * Prforms allowance transfer of asset balance between holders adding specified comment.
     * Resolves asset implementation contract for the caller and forwards there arguments along with
     * the caller address.
     *
     * @param _from holder address to take from.
     * @param _to holder address to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     *
     * @return success.
     */
    function transferFromWithReference(
        address _from,
        address _to,
        uint _value,
        string _reference)
    public returns(bool) {
        return _getAsset()._performTransferFromWithReference(
            _from,
            _to,
            _value,
            _reference,
            msg.sender
        );
    }

    /**
     * Performs transfer call on the EToken2 by the name of specified sender.
     *
     * Can only be called by asset implementation contract assigned to sender.
     *
     * @param _from holder address to take from.
     * @param _to holder address to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     * @param _sender initial caller.
     *
     * @return success.
     */
    function _forwardTransferFromWithReference(
        address _from,
        address _to,
        uint _value,
        string _reference,
        address _sender)
    public onlyImplementationFor(_sender) returns(bool) {
        return etoken2.proxyTransferFromWithReference(
            _from,
            _to,
            _value,
            etoken2Symbol,
            _reference,
            _sender
        );
    }

    /**
     * Prforms allowance transfer of asset balance between holders.
     *
     * @param _from holder address to take from.
     * @param _icap recipient ICAP address to give to.
     * @param _value amount to transfer.
     *
     * @return success.
     */
    function transferFromToICAP(address _from, bytes32 _icap, uint _value)
    public returns(bool) {
        return transferFromToICAPWithReference(_from, _icap, _value, '');
    }

    /**
     * Prforms allowance transfer of asset balance between holders adding specified comment.
     * Resolves asset implementation contract for the caller and forwards there arguments along with
     * the caller address.
     *
     * @param _from holder address to take from.
     * @param _icap recipient ICAP address to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     *
     * @return success.
     */
    function transferFromToICAPWithReference(
        address _from,
        bytes32 _icap,
        uint _value,
        string _reference)
    public returns(bool) {
        return _getAsset()._performTransferFromToICAPWithReference(
            _from,
            _icap,
            _value,
            _reference,
            msg.sender
        );
    }

    /**
     * Performs allowance transfer to ICAP call on the EToken2 by the name of specified sender.
     *
     * Can only be called by asset implementation contract assigned to sender.
     *
     * @param _from holder address to take from.
     * @param _icap recipient ICAP address to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     * @param _sender initial caller.
     *
     * @return success.
     */
    function _forwardTransferFromToICAPWithReference(
        address _from,
        bytes32 _icap,
        uint _value,
        string _reference,
        address _sender)
    public onlyImplementationFor(_sender) returns(bool) {
        return etoken2.proxyTransferFromToICAPWithReference(
            _from,
            _icap,
            _value,
            _reference,
            _sender
        );
    }

    /**
     * Sets asset spending allowance for a specified spender.
     * Resolves asset implementation contract for the caller and forwards there arguments along with
     * the caller address.
     *
     * @param _spender holder address to set allowance to.
     * @param _value amount to allow.
     *
     * @return success.
     */
    function approve(address _spender, uint _value) public returns(bool) {
        return _getAsset()._performApprove(_spender, _value, msg.sender);
    }

    /**
     * Performs allowance setting call on the EToken2 by the name of specified sender.
     *
     * Can only be called by asset implementation contract assigned to sender.
     *
     * @param _spender holder address to set allowance to.
     * @param _value amount to allow.
     * @param _sender initial caller.
     *
     * @return success.
     */
    function _forwardApprove(address _spender, uint _value, address _sender)
    public onlyImplementationFor(_sender) returns(bool) {
        return etoken2.proxyApprove(_spender, _value, etoken2Symbol, _sender);
    }

    /**
     * Emits ERC20 Transfer event on this contract.
     *
     * Can only be, and, called by assigned EToken2 when asset transfer happens.
     */
    function emitTransfer(address _from, address _to, uint _value) public onlyEToken2() {
        emit Transfer(_from, _to, _value);
    }

    /**
     * Emits ERC20 Approval event on this contract.
     *
     * Can only be, and, called by assigned EToken2 when asset allowance set happens.
     */
    function emitApprove(address _from, address _spender, uint _value) public onlyEToken2() {
        emit Approval(_from, _spender, _value);
    }

    /**
     * Resolves asset implementation contract for the caller and forwards there transaction data,
     * along with the value. This allows for proxy interface growth.
     */
    function () public payable {
        _getAsset()._performGeneric.value(msg.value)(msg.data, msg.sender);
        _returnReturnData(true);
    }

    // Interface functions to allow specifying ICAP addresses as strings.
    function transferToICAP(string _icap, uint _value) public returns(bool) {
        return transferToICAPWithReference(_icap, _value, '');
    }

    function transferToICAPWithReference(string _icap, uint _value, string _reference)
    public returns(bool) {
        return transferToICAPWithReference(_bytes32(_icap), _value, _reference);
    }

    function transferFromToICAP(address _from, string _icap, uint _value) public returns(bool) {
        return transferFromToICAPWithReference(_from, _icap, _value, '');
    }

    function transferFromToICAPWithReference(
        address _from,
        string _icap,
        uint _value,
        string _reference)
    public returns(bool) {
        return transferFromToICAPWithReference(_from, _bytes32(_icap), _value, _reference);
    }

    /**
     * Indicates an upgrade freeze-time start, and the next asset implementation contract.
     */
    event UpgradeProposed(address newVersion);
    event UpgradePurged(address newVersion);
    event UpgradeCommited(address newVersion);
    event OptedOut(address sender, address version);
    event OptedIn(address sender, address version);

    // Current asset implementation contract address.
    address internal latestVersion;

    // Proposed next asset implementation contract address.
    address internal pendingVersion;

    // Upgrade freeze-time start.
    uint internal pendingVersionTimestamp;

    // Timespan for users to review the new implementation and make decision.
    uint internal constant UPGRADE_FREEZE_TIME = 3 days;

    // Asset implementation contract address that user decided to stick with.
    // 0x0 means that user uses latest version.
    mapping(address => address) internal userOptOutVersion;

    /**
     * Only asset implementation contract assigned to sender is allowed to call.
     */
    modifier onlyImplementationFor(address _sender) {
        if (getVersionFor(_sender) == msg.sender) {
            _;
        }
    }

    /**
     * Returns asset implementation contract address assigned to sender.
     *
     * @param _sender sender address.
     *
     * @return asset implementation contract address.
     */
    function getVersionFor(address _sender) public view returns(address) {
        return userOptOutVersion[_sender] == 0 ? latestVersion : userOptOutVersion[_sender];
    }

    /**
     * Returns current asset implementation contract address.
     *
     * @return asset implementation contract address.
     */
    function getLatestVersion() public view returns(address) {
        return latestVersion;
    }

    /**
     * Returns proposed next asset implementation contract address.
     *
     * @return asset implementation contract address.
     */
    function getPendingVersion() public view returns(address) {
        return pendingVersion;
    }

    /**
     * Returns upgrade freeze-time start.
     *
     * @return freeze-time start.
     */
    function getPendingVersionTimestamp() public view returns(uint) {
        return pendingVersionTimestamp;
    }

    /**
     * Propose next asset implementation contract address.
     *
     * Can only be called by current asset owner.
     *
     * Note: freeze-time should not be applied for the initial setup.
     *
     * @param _newVersion asset implementation contract address.
     *
     * @return success.
     */
    function proposeUpgrade(address _newVersion) public onlyAssetOwner() returns(bool) {
        // Should not already be in the upgrading process.
        if (pendingVersion != 0x0) {
            return false;
        }
        // New version address should be other than 0x0.
        if (_newVersion == 0x0) {
            return false;
        }
        // Don't apply freeze-time for the initial setup.
        if (latestVersion == 0x0) {
            latestVersion = _newVersion;
            return true;
        }
        pendingVersion = _newVersion;
        // solhint-disable-next-line not-rely-on-time
        pendingVersionTimestamp = now;
        emit UpgradeProposed(_newVersion);
        return true;
    }

    /**
     * Cancel the pending upgrade process.
     *
     * Can only be called by current asset owner.
     *
     * @return success.
     */
    function purgeUpgrade() public onlyAssetOwner() returns(bool) {
        if (pendingVersion == 0x0) {
            return false;
        }
        emit UpgradePurged(pendingVersion);
        delete pendingVersion;
        delete pendingVersionTimestamp;
        return true;
    }

    /**
     * Finalize an upgrade process setting new asset implementation contract address.
     *
     * Can only be called after an upgrade freeze-time.
     *
     * @return success.
     */
    function commitUpgrade() public returns(bool) {
        if (pendingVersion == 0x0) {
            return false;
        }
        // solhint-disable-next-line not-rely-on-time
        if (pendingVersionTimestamp + UPGRADE_FREEZE_TIME > now) {
            return false;
        }
        latestVersion = pendingVersion;
        delete pendingVersion;
        delete pendingVersionTimestamp;
        emit UpgradeCommited(latestVersion);
        return true;
    }

    /**
     * Disagree with proposed upgrade, and stick with current asset implementation
     * until further explicit agreement to upgrade.
     *
     * @return success.
     */
    function optOut() public returns(bool) {
        if (userOptOutVersion[msg.sender] != 0x0) {
            return false;
        }
        userOptOutVersion[msg.sender] = latestVersion;
        emit OptedOut(msg.sender, latestVersion);
        return true;
    }

    /**
     * Implicitly agree to upgrade to current and future asset implementation upgrades,
     * until further explicit disagreement.
     *
     * @return success.
     */
    function optIn() public returns(bool) {
        delete userOptOutVersion[msg.sender];
        emit OptedIn(msg.sender, latestVersion);
        return true;
    }

    // Backwards compatibility.
    function multiAsset() public view returns(EToken2Interface) {
        return etoken2;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"multiAsset","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"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":"commitUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getLatestVersion","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"},{"name":"_sender","type":"address"}],"name":"_forwardTransferFromWithReference","outputs":[{"name":"","type":"bool"}],"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":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"emitApprove","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"emitTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"etoken2","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPendingVersionTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"purgeUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"optIn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_asset","type":"address"},{"name":"_receiver","type":"address"},{"name":"_value","type":"uint256"}],"name":"recoverTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferFromWithReference","outputs":[{"name":"","type":"bool"}],"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":false,"inputs":[{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"transferToICAP","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"string"},{"name":"_value","type":"uint256"}],"name":"transferFromToICAP","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferToICAPWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_sender","type":"address"}],"name":"_forwardApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_icap","type":"string"},{"name":"_value","type":"uint256"}],"name":"transferToICAP","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"string"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferFromToICAPWithReference","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":"_icap","type":"string"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferToICAPWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"},{"name":"_sender","type":"address"}],"name":"_forwardTransferFromToICAPWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferFromToICAPWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"transferFromToICAP","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"etoken2Symbol","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPendingVersion","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_etoken2","type":"address"},{"name":"_symbol","type":"string"},{"name":"_name","type":"string"}],"name":"init","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newVersion","type":"address"}],"name":"proposeUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"optOut","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sender","type":"address"}],"name":"getVersionFor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newVersion","type":"address"}],"name":"UpgradeProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newVersion","type":"address"}],"name":"UpgradePurged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newVersion","type":"address"}],"name":"UpgradeCommited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"version","type":"address"}],"name":"OptedOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"version","type":"address"}],"name":"OptedIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

608060405234801561001057600080fd5b50612511806100206000396000f3006080604052600436106101d75763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663029a8bf7811461029757806306fdde03146102d5578063095ea7b31461035f5780630ba12c83146103a45780630e6d1de9146103b957806314cba002146103ce57806318160ddd14610462578063233850891461048957806323b872dd146104c057806323de6651146104f7578063313ce5671461052e578063406838b3146105595780634bfaf2e81461056e5780634dfe950d146105835780635b48684e146105985780635f3e849f146105ad5780636461fe39146105e457806370a0823114610660578063733480b71461068e5780637609c5a9146106a957806377fe38a41461071f5780637bcdc2f01461077f57806381d434e9146107b757806384c5c34d1461081257806395d89b41146108ca5780639ab253cc146108df5780639b487f3f1461097c578063a48a663c14610a0d578063a525f42c14610a86578063a66e6e5c14610aba578063a883fb9014610acf578063a9059cbb14610ae4578063ac35caee14610b15578063b2b45df514610b8b578063c915fc9314610c3d578063d4eec5a614610c6b578063dd62ed3e14610c80578063fe8beb7114610cb4575b6101df610ce2565b604080517fdb00b8480000000000000000000000000000000000000000000000000000000081523373ffffffffffffffffffffffffffffffffffffffff818116602484015260048301938452366044840181905294169363db00b8489334936000939190819060640185858082843782019150509450505050506000604051808303818588803b15801561027257600080fd5b505af1158015610286573d6000803e3d6000fd5b50505050506102956001610cf3565b005b3480156102a357600080fd5b506102ac610d0e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156102e157600080fd5b506102ea610d2a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032457818101518382015260200161030c565b50505050905090810190601f1680156103515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036b57600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff60043516602435610dd3565b604080519115158252519081900360200190f35b3480156103b057600080fd5b50610390610e92565b3480156103c557600080fd5b506102ac610f62565b3480156103da57600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103909473ffffffffffffffffffffffffffffffffffffffff81358116956024803590921695604435953695608494019181908401838280828437509497505050923573ffffffffffffffffffffffffffffffffffffffff169350610f7e92505050565b34801561046e57600080fd5b50610477611106565b60408051918252519081900360200190f35b34801561049557600080fd5b5061029573ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356111ae565b3480156104cc57600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561123c565b34801561050357600080fd5b5061029573ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435611264565b34801561053a57600080fd5b506105436112f2565b6040805160ff9092168252519081900360200190f35b34801561056557600080fd5b506102ac611369565b34801561057a57600080fd5b50610477611385565b34801561058f57600080fd5b5061039061138b565b3480156105a457600080fd5b506103906114e2565b3480156105b957600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435611572565b3480156105f057600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103909473ffffffffffffffffffffffffffffffffffffffff81358116956024803590921695604435953695608494019181908401838280828437509497506116fa9650505050505050565b34801561066c57600080fd5b5061047773ffffffffffffffffffffffffffffffffffffffff600435166118ad565b34801561069a57600080fd5b50610390600435602435611961565b3480156106b557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261039095833573ffffffffffffffffffffffffffffffffffffffff16953695604494919390910191908190840183828082843750949750509335945061197e9350505050565b34801561072b57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261039094823594602480359536959460649492019190819084018382808284375094975061199c9650505050505050565b34801561078b57600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff6004358116906024359060443516611ac2565b3480156107c357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103909436949293602493928401919081908401838280828437509497505093359450611bca9350505050565b34801561081e57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261039095833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b8a359b909a909994019750919550918201935091508190840183828082843750949750611be79650505050505050565b3480156108d657600080fd5b506102ea611c06565b3480156108eb57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261039094369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b8a359b909a909994019750919550918201935091508190840183828082843750949750611c7f9650505050505050565b34801561098857600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103909473ffffffffffffffffffffffffffffffffffffffff81351694602480359560443595369560849493019181908401838280828437509497505050923573ffffffffffffffffffffffffffffffffffffffff169350611c9492505050565b348015610a1957600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103909473ffffffffffffffffffffffffffffffffffffffff8135169460248035956044359536956084949301918190840183828082843750949750611dd79650505050505050565b348015610a9257600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff60043516602435604435611e8d565b348015610ac657600080fd5b50610477611eab565b348015610adb57600080fd5b506102ac611eb1565b348015610af057600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff60043516602435611ecd565b348015610b2157600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261039094823573ffffffffffffffffffffffffffffffffffffffff16946024803595369594606494920191908190840183828082843750949750611ee69650505050505050565b348015610b9757600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261039095833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611fe09650505050505050565b348015610c4957600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff60043516612085565b348015610c7757600080fd5b5061039061226a565b348015610c8c57600080fd5b5061047773ffffffffffffffffffffffffffffffffffffffff60043581169060243516612342565b348015610cc057600080fd5b506102ac73ffffffffffffffffffffffffffffffffffffffff600435166123ca565b6000610ced336123ca565b90505b90565b60003d6000823e818015610d05573d82f35b3d82fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b600280546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909316849004601f81018490048402820184019092528181529291830182828015610dcb5780601f10610da057610100808354040283529160200191610dcb565b820191906000526020600020905b815481529060010190602001808311610dae57829003601f168201915b505050505081565b6000610ddd610ce2565b604080517fe34f713700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820186905233811660448301529151929091169163e34f7137916064808201926020929091908290030181600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b505050506040513d6020811015610e8957600080fd5b50519392505050565b60055460009073ffffffffffffffffffffffffffffffffffffffff161515610ebc57506000610cf0565b426203f480600654011115610ed357506000610cf0565b600580546004805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617928390559216909255600060065560408051929091168252517f3d14778962aac3ae6130883f4c9d2e995d6fc2a644b7867087a59e92b954b4ed916020908290030190a150600190565b60045473ffffffffffffffffffffffffffffffffffffffff1690565b6000813373ffffffffffffffffffffffffffffffffffffffff16610fa1826123ca565b73ffffffffffffffffffffffffffffffffffffffff1614156110fc57600080546001546040517f161ff66200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483019081528b82166024840152604483018b90526064830184905288821660a484015260c0608484019081528a5160c48501528a51929095169563161ff662958e958e958e9591948e948e949193919260e4019160208701918190849084905b8381101561107c578181015183820152602001611064565b50505050905090810190601f1680156110a95780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b505050506040513d60208110156110f757600080fd5b505191505b5095945050505050565b60008054600154604080517fb524abcf00000000000000000000000000000000000000000000000000000000815260048101929092525173ffffffffffffffffffffffffffffffffffffffff9092169163b524abcf9160248082019260209290919082900301818787803b15801561117d57600080fd5b505af1158015611191573d6000803e3d6000fd5b505050506040513d60208110156111a757600080fd5b5051905090565b6000543373ffffffffffffffffffffffffffffffffffffffff90811691161415610d09578173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061125a84848460206040519081016040528060008152506116fa565b90505b9392505050565b6000543373ffffffffffffffffffffffffffffffffffffffff90811691161415610d09578173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008054600154604080517fdc86e6f000000000000000000000000000000000000000000000000000000000815260048101929092525173ffffffffffffffffffffffffffffffffffffffff9092169163dc86e6f09160248082019260209290919082900301818787803b15801561117d57600080fd5b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60065490565b60008054600154604080517fe96b462a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff338116600483015260248201939093529051919092169163e96b462a91604480830192602092919082900301818787803b15801561140b57600080fd5b505af115801561141f573d6000803e3d6000fd5b505050506040513d602081101561143557600080fd5b505115610cf05760055473ffffffffffffffffffffffffffffffffffffffff16151561146357506000610cf0565b6005546040805173ffffffffffffffffffffffffffffffffffffffff9092168252517f076759518ae32ffdfd36b17503d14cdd8042c074645c635aa26dceea2719acef9181900360200190a150600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556000600655600190565b73ffffffffffffffffffffffffffffffffffffffff338116600081815260076020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055600454815194855290941690830152825190927fd70d37e6618959bdba868db2d4138b221ef96101565dfc1a0bd38af1d3ab63c1928290030190a150600190565b60008054600154604080517fe96b462a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff338116600483015260248201939093529051919092169163e96b462a91604480830192602092919082900301818787803b1580156115f257600080fd5b505af1158015611606573d6000803e3d6000fd5b505050506040513d602081101561161c57600080fd5b50511561125d578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156116c657600080fd5b505af11580156116da573d6000803e3d6000fd5b505050506040513d60208110156116f057600080fd5b5051949350505050565b6000611704610ce2565b73ffffffffffffffffffffffffffffffffffffffff1663cca9702586868686336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611828578181015183820152602001611810565b50505050905090810190601f1680156118555780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561187857600080fd5b505af115801561188c573d6000803e3d6000fd5b505050506040513d60208110156118a257600080fd5b505195945050505050565b60008054600154604080517f4d30b6be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482019390935290519190921691634d30b6be91604480830192602092919082900301818787803b15801561192d57600080fd5b505af1158015611941573d6000803e3d6000fd5b505050506040513d602081101561195757600080fd5b505190505b919050565b600061125d8383602060405190810160405280600081525061199c565b600061125a8484846020604051908101604052806000815250611be7565b60006119a6610ce2565b73ffffffffffffffffffffffffffffffffffffffff1663c10796df858585336040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808560001916600019168152602001848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611a73578181015183820152602001611a5b565b50505050905090810190601f168015611aa05780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156116c657600080fd5b6000813373ffffffffffffffffffffffffffffffffffffffff16611ae5826123ca565b73ffffffffffffffffffffffffffffffffffffffff161415611bc25760008054600154604080517f14712e2f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018a905260448201939093528783166064820152905191909216926314712e2f92608480820193602093909283900390910190829087803b158015611b9357600080fd5b505af1158015611ba7573d6000803e3d6000fd5b505050506040513d6020811015611bbd57600080fd5b505191505b509392505050565b600061125d83836020604051908101604052806000815250611c7f565b6000611bfd85611bf686612446565b8585611dd7565b95945050505050565b6003805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610dcb5780601f10610da057610100808354040283529160200191610dcb565b600061125a611c8d85612446565b848461199c565b6000813373ffffffffffffffffffffffffffffffffffffffff16611cb7826123ca565b73ffffffffffffffffffffffffffffffffffffffff1614156110fc57600080546040517fa69032ee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301908152602483018b9052604483018a9052878216608484015260a060648401908152895160a48501528951929094169463a69032ee948d948d948d948d948d949193919260c49092019160208701918190849084905b83811015611d87578181015183820152602001611d6f565b50505050905090810190601f168015611db45780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156110cd57600080fd5b6000611de1610ce2565b6040517feb58705b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301908152602483018890526044830187905233808316608485015260a060648501908152875160a48601528751959093169463eb58705b948b948b948b948b94909391929160c401906020860190808383600083811015611828578181015183820152602001611810565b600061125a8484846020604051908101604052806000815250611dd7565b60015481565b60055473ffffffffffffffffffffffffffffffffffffffff1690565b600061125d838360206040519081016040528060008152505b6000611ef0610ce2565b73ffffffffffffffffffffffffffffffffffffffff16631962df71858585336040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281038252848181518152602001915080519060200190808383600083811015611a73578181015183820152602001611a5b565b6000805473ffffffffffffffffffffffffffffffffffffffff16156120075750600061125d565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861617905561205083612446565b600155815161206690600290602085019061244d565b50825161207a90600390602086019061244d565b506001949350505050565b60008054600154604080517fe96b462a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff338116600483015260248201939093529051919092169163e96b462a91604480830192602092919082900301818787803b15801561210557600080fd5b505af1158015612119573d6000803e3d6000fd5b505050506040513d602081101561212f57600080fd5b50511561195c5760055473ffffffffffffffffffffffffffffffffffffffff161561215c5750600061195c565b73ffffffffffffffffffffffffffffffffffffffff821615156121815750600061195c565b60045473ffffffffffffffffffffffffffffffffffffffff1615156121e85750600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316179055600161195c565b6005805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091554260065560408051918252517f8ddc9aa7b538ef74fb9f825a27578614d8cd88e4062392c6613d2d65ed987d769181900360200190a1506001919050565b73ffffffffffffffffffffffffffffffffffffffff338116600090815260076020526040812054909116156122a157506000610cf0565b600480543373ffffffffffffffffffffffffffffffffffffffff90811660008181526007602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001695851695909517909455935484519182529091169181019190915281517fe1dc7792699a69777c1f0b1695b7c1b9a2677af13bb0b61b9b9b975d30acf7b2929181900390910190a150600190565b60008054600154604080517f1c8d5d3800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152604482019390935290519190921691631c8d5d3891606480830192602092919082900301818787803b158015610e5f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808216600090815260076020526040812054909116156124265773ffffffffffffffffffffffffffffffffffffffff80831660009081526007602052604090205416612440565b60045473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6020015190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061248e57805160ff19168380011785556124bb565b828001600101855582156124bb579182015b828111156124bb5782518255916020019190600101906124a0565b506124c79291506124cb565b5090565b610cf091905b808211156124c757600081556001016124d15600a165627a7a72305820f1f1f83bd1e29c45ae20f08d2bd83a52550fffbf853ec97be7f9e766bf9a63200029

Deployed Bytecode

0x6080604052600436106101d75763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663029a8bf7811461029757806306fdde03146102d5578063095ea7b31461035f5780630ba12c83146103a45780630e6d1de9146103b957806314cba002146103ce57806318160ddd14610462578063233850891461048957806323b872dd146104c057806323de6651146104f7578063313ce5671461052e578063406838b3146105595780634bfaf2e81461056e5780634dfe950d146105835780635b48684e146105985780635f3e849f146105ad5780636461fe39146105e457806370a0823114610660578063733480b71461068e5780637609c5a9146106a957806377fe38a41461071f5780637bcdc2f01461077f57806381d434e9146107b757806384c5c34d1461081257806395d89b41146108ca5780639ab253cc146108df5780639b487f3f1461097c578063a48a663c14610a0d578063a525f42c14610a86578063a66e6e5c14610aba578063a883fb9014610acf578063a9059cbb14610ae4578063ac35caee14610b15578063b2b45df514610b8b578063c915fc9314610c3d578063d4eec5a614610c6b578063dd62ed3e14610c80578063fe8beb7114610cb4575b6101df610ce2565b604080517fdb00b8480000000000000000000000000000000000000000000000000000000081523373ffffffffffffffffffffffffffffffffffffffff818116602484015260048301938452366044840181905294169363db00b8489334936000939190819060640185858082843782019150509450505050506000604051808303818588803b15801561027257600080fd5b505af1158015610286573d6000803e3d6000fd5b50505050506102956001610cf3565b005b3480156102a357600080fd5b506102ac610d0e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156102e157600080fd5b506102ea610d2a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032457818101518382015260200161030c565b50505050905090810190601f1680156103515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036b57600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff60043516602435610dd3565b604080519115158252519081900360200190f35b3480156103b057600080fd5b50610390610e92565b3480156103c557600080fd5b506102ac610f62565b3480156103da57600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103909473ffffffffffffffffffffffffffffffffffffffff81358116956024803590921695604435953695608494019181908401838280828437509497505050923573ffffffffffffffffffffffffffffffffffffffff169350610f7e92505050565b34801561046e57600080fd5b50610477611106565b60408051918252519081900360200190f35b34801561049557600080fd5b5061029573ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356111ae565b3480156104cc57600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561123c565b34801561050357600080fd5b5061029573ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435611264565b34801561053a57600080fd5b506105436112f2565b6040805160ff9092168252519081900360200190f35b34801561056557600080fd5b506102ac611369565b34801561057a57600080fd5b50610477611385565b34801561058f57600080fd5b5061039061138b565b3480156105a457600080fd5b506103906114e2565b3480156105b957600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435611572565b3480156105f057600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103909473ffffffffffffffffffffffffffffffffffffffff81358116956024803590921695604435953695608494019181908401838280828437509497506116fa9650505050505050565b34801561066c57600080fd5b5061047773ffffffffffffffffffffffffffffffffffffffff600435166118ad565b34801561069a57600080fd5b50610390600435602435611961565b3480156106b557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261039095833573ffffffffffffffffffffffffffffffffffffffff16953695604494919390910191908190840183828082843750949750509335945061197e9350505050565b34801561072b57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261039094823594602480359536959460649492019190819084018382808284375094975061199c9650505050505050565b34801561078b57600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff6004358116906024359060443516611ac2565b3480156107c357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103909436949293602493928401919081908401838280828437509497505093359450611bca9350505050565b34801561081e57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261039095833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b8a359b909a909994019750919550918201935091508190840183828082843750949750611be79650505050505050565b3480156108d657600080fd5b506102ea611c06565b3480156108eb57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261039094369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b8a359b909a909994019750919550918201935091508190840183828082843750949750611c7f9650505050505050565b34801561098857600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103909473ffffffffffffffffffffffffffffffffffffffff81351694602480359560443595369560849493019181908401838280828437509497505050923573ffffffffffffffffffffffffffffffffffffffff169350611c9492505050565b348015610a1957600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103909473ffffffffffffffffffffffffffffffffffffffff8135169460248035956044359536956084949301918190840183828082843750949750611dd79650505050505050565b348015610a9257600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff60043516602435604435611e8d565b348015610ac657600080fd5b50610477611eab565b348015610adb57600080fd5b506102ac611eb1565b348015610af057600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff60043516602435611ecd565b348015610b2157600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261039094823573ffffffffffffffffffffffffffffffffffffffff16946024803595369594606494920191908190840183828082843750949750611ee69650505050505050565b348015610b9757600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261039095833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611fe09650505050505050565b348015610c4957600080fd5b5061039073ffffffffffffffffffffffffffffffffffffffff60043516612085565b348015610c7757600080fd5b5061039061226a565b348015610c8c57600080fd5b5061047773ffffffffffffffffffffffffffffffffffffffff60043581169060243516612342565b348015610cc057600080fd5b506102ac73ffffffffffffffffffffffffffffffffffffffff600435166123ca565b6000610ced336123ca565b90505b90565b60003d6000823e818015610d05573d82f35b3d82fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b600280546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909316849004601f81018490048402820184019092528181529291830182828015610dcb5780601f10610da057610100808354040283529160200191610dcb565b820191906000526020600020905b815481529060010190602001808311610dae57829003601f168201915b505050505081565b6000610ddd610ce2565b604080517fe34f713700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820186905233811660448301529151929091169163e34f7137916064808201926020929091908290030181600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b505050506040513d6020811015610e8957600080fd5b50519392505050565b60055460009073ffffffffffffffffffffffffffffffffffffffff161515610ebc57506000610cf0565b426203f480600654011115610ed357506000610cf0565b600580546004805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617928390559216909255600060065560408051929091168252517f3d14778962aac3ae6130883f4c9d2e995d6fc2a644b7867087a59e92b954b4ed916020908290030190a150600190565b60045473ffffffffffffffffffffffffffffffffffffffff1690565b6000813373ffffffffffffffffffffffffffffffffffffffff16610fa1826123ca565b73ffffffffffffffffffffffffffffffffffffffff1614156110fc57600080546001546040517f161ff66200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483019081528b82166024840152604483018b90526064830184905288821660a484015260c0608484019081528a5160c48501528a51929095169563161ff662958e958e958e9591948e948e949193919260e4019160208701918190849084905b8381101561107c578181015183820152602001611064565b50505050905090810190601f1680156110a95780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b505050506040513d60208110156110f757600080fd5b505191505b5095945050505050565b60008054600154604080517fb524abcf00000000000000000000000000000000000000000000000000000000815260048101929092525173ffffffffffffffffffffffffffffffffffffffff9092169163b524abcf9160248082019260209290919082900301818787803b15801561117d57600080fd5b505af1158015611191573d6000803e3d6000fd5b505050506040513d60208110156111a757600080fd5b5051905090565b6000543373ffffffffffffffffffffffffffffffffffffffff90811691161415610d09578173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061125a84848460206040519081016040528060008152506116fa565b90505b9392505050565b6000543373ffffffffffffffffffffffffffffffffffffffff90811691161415610d09578173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008054600154604080517fdc86e6f000000000000000000000000000000000000000000000000000000000815260048101929092525173ffffffffffffffffffffffffffffffffffffffff9092169163dc86e6f09160248082019260209290919082900301818787803b15801561117d57600080fd5b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60065490565b60008054600154604080517fe96b462a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff338116600483015260248201939093529051919092169163e96b462a91604480830192602092919082900301818787803b15801561140b57600080fd5b505af115801561141f573d6000803e3d6000fd5b505050506040513d602081101561143557600080fd5b505115610cf05760055473ffffffffffffffffffffffffffffffffffffffff16151561146357506000610cf0565b6005546040805173ffffffffffffffffffffffffffffffffffffffff9092168252517f076759518ae32ffdfd36b17503d14cdd8042c074645c635aa26dceea2719acef9181900360200190a150600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556000600655600190565b73ffffffffffffffffffffffffffffffffffffffff338116600081815260076020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055600454815194855290941690830152825190927fd70d37e6618959bdba868db2d4138b221ef96101565dfc1a0bd38af1d3ab63c1928290030190a150600190565b60008054600154604080517fe96b462a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff338116600483015260248201939093529051919092169163e96b462a91604480830192602092919082900301818787803b1580156115f257600080fd5b505af1158015611606573d6000803e3d6000fd5b505050506040513d602081101561161c57600080fd5b50511561125d578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156116c657600080fd5b505af11580156116da573d6000803e3d6000fd5b505050506040513d60208110156116f057600080fd5b5051949350505050565b6000611704610ce2565b73ffffffffffffffffffffffffffffffffffffffff1663cca9702586868686336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611828578181015183820152602001611810565b50505050905090810190601f1680156118555780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561187857600080fd5b505af115801561188c573d6000803e3d6000fd5b505050506040513d60208110156118a257600080fd5b505195945050505050565b60008054600154604080517f4d30b6be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482019390935290519190921691634d30b6be91604480830192602092919082900301818787803b15801561192d57600080fd5b505af1158015611941573d6000803e3d6000fd5b505050506040513d602081101561195757600080fd5b505190505b919050565b600061125d8383602060405190810160405280600081525061199c565b600061125a8484846020604051908101604052806000815250611be7565b60006119a6610ce2565b73ffffffffffffffffffffffffffffffffffffffff1663c10796df858585336040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808560001916600019168152602001848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611a73578181015183820152602001611a5b565b50505050905090810190601f168015611aa05780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156116c657600080fd5b6000813373ffffffffffffffffffffffffffffffffffffffff16611ae5826123ca565b73ffffffffffffffffffffffffffffffffffffffff161415611bc25760008054600154604080517f14712e2f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018a905260448201939093528783166064820152905191909216926314712e2f92608480820193602093909283900390910190829087803b158015611b9357600080fd5b505af1158015611ba7573d6000803e3d6000fd5b505050506040513d6020811015611bbd57600080fd5b505191505b509392505050565b600061125d83836020604051908101604052806000815250611c7f565b6000611bfd85611bf686612446565b8585611dd7565b95945050505050565b6003805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610dcb5780601f10610da057610100808354040283529160200191610dcb565b600061125a611c8d85612446565b848461199c565b6000813373ffffffffffffffffffffffffffffffffffffffff16611cb7826123ca565b73ffffffffffffffffffffffffffffffffffffffff1614156110fc57600080546040517fa69032ee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301908152602483018b9052604483018a9052878216608484015260a060648401908152895160a48501528951929094169463a69032ee948d948d948d948d948d949193919260c49092019160208701918190849084905b83811015611d87578181015183820152602001611d6f565b50505050905090810190601f168015611db45780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156110cd57600080fd5b6000611de1610ce2565b6040517feb58705b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301908152602483018890526044830187905233808316608485015260a060648501908152875160a48601528751959093169463eb58705b948b948b948b948b94909391929160c401906020860190808383600083811015611828578181015183820152602001611810565b600061125a8484846020604051908101604052806000815250611dd7565b60015481565b60055473ffffffffffffffffffffffffffffffffffffffff1690565b600061125d838360206040519081016040528060008152505b6000611ef0610ce2565b73ffffffffffffffffffffffffffffffffffffffff16631962df71858585336040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281038252848181518152602001915080519060200190808383600083811015611a73578181015183820152602001611a5b565b6000805473ffffffffffffffffffffffffffffffffffffffff16156120075750600061125d565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861617905561205083612446565b600155815161206690600290602085019061244d565b50825161207a90600390602086019061244d565b506001949350505050565b60008054600154604080517fe96b462a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff338116600483015260248201939093529051919092169163e96b462a91604480830192602092919082900301818787803b15801561210557600080fd5b505af1158015612119573d6000803e3d6000fd5b505050506040513d602081101561212f57600080fd5b50511561195c5760055473ffffffffffffffffffffffffffffffffffffffff161561215c5750600061195c565b73ffffffffffffffffffffffffffffffffffffffff821615156121815750600061195c565b60045473ffffffffffffffffffffffffffffffffffffffff1615156121e85750600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316179055600161195c565b6005805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091554260065560408051918252517f8ddc9aa7b538ef74fb9f825a27578614d8cd88e4062392c6613d2d65ed987d769181900360200190a1506001919050565b73ffffffffffffffffffffffffffffffffffffffff338116600090815260076020526040812054909116156122a157506000610cf0565b600480543373ffffffffffffffffffffffffffffffffffffffff90811660008181526007602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001695851695909517909455935484519182529091169181019190915281517fe1dc7792699a69777c1f0b1695b7c1b9a2677af13bb0b61b9b9b975d30acf7b2929181900390910190a150600190565b60008054600154604080517f1c8d5d3800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152604482019390935290519190921691631c8d5d3891606480830192602092919082900301818787803b158015610e5f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808216600090815260076020526040812054909116156124265773ffffffffffffffffffffffffffffffffffffffff80831660009081526007602052604090205416612440565b60045473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6020015190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061248e57805160ff19168380011785556124bb565b828001600101855582156124bb579182015b828111156124bb5782518255916020019190600101906124a0565b506124c79291506124cb565b5090565b610cf091905b808211156124c757600081556001016124d15600a165627a7a72305820f1f1f83bd1e29c45ae20f08d2bd83a52550fffbf853ec97be7f9e766bf9a63200029

Swarm Source

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