ETH Price: $2,921.03 (+4.55%)
 

Overview

Max Total Supply

99,998,697 EVE

Holders

3,570 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.59671320326091645 EVE

Value
$0.00
0x822fd50f043f331fe44df12af8559527b4be8006
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A blockchain powered, open-source, product verification protocol.

ICO Information

ICO Start Date : Jan 18, 2019  
ICO End Date : Jan 19, 2018
Total Cap : $200,000
Hard Cap : $10,000,000
Raised : $10,000,000
ICO Price  : $0.17
Bonus : Up to 5%

# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
BTTSToken

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-01-18
*/

pragma solidity ^0.4.18;

// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// ----------------------------------------------------------------------------
contract ERC20Interface {
    function totalSupply() public constant returns (uint);
    function balanceOf(address tokenOwner) public constant returns (uint balance);
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}


// ----------------------------------------------------------------------------
// Contracts that can have tokens approved, and then a function execute
// ----------------------------------------------------------------------------
contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}


// ----------------------------------------------------------------------------
// BokkyPooBah's Token Teleportation Service Interface v1.00
//
// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2017. The MIT Licence.
// ----------------------------------------------------------------------------
contract BTTSTokenInterface is ERC20Interface {
    uint public constant bttsVersion = 100;

    bytes public constant signingPrefix = "\x19Ethereum Signed Message:\n32";
    bytes4 public constant signedTransferSig = "\x75\x32\xea\xac";
    bytes4 public constant signedApproveSig = "\xe9\xaf\xa7\xa1";
    bytes4 public constant signedTransferFromSig = "\x34\x4b\xcc\x7d";
    bytes4 public constant signedApproveAndCallSig = "\xf1\x6f\x9b\x53";

    event OwnershipTransferred(address indexed from, address indexed to);
    event MinterUpdated(address from, address to);
    event Mint(address indexed tokenOwner, uint tokens, bool lockAccount);
    event MintingDisabled();
    event TransfersEnabled();
    event AccountUnlocked(address indexed tokenOwner);

    function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success);

    // ------------------------------------------------------------------------
    // signed{X} functions
    // ------------------------------------------------------------------------
    function signedTransferHash(address tokenOwner, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash);
    function signedTransferCheck(address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result);
    function signedTransfer(address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success);

    function signedApproveHash(address tokenOwner, address spender, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash);
    function signedApproveCheck(address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result);
    function signedApprove(address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success);

    function signedTransferFromHash(address spender, address from, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash);
    function signedTransferFromCheck(address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result);
    function signedTransferFrom(address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success);

    function signedApproveAndCallHash(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce) public view returns (bytes32 hash);
    function signedApproveAndCallCheck(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result);
    function signedApproveAndCall(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success);

    function mint(address tokenOwner, uint tokens, bool lockAccount) public returns (bool success);
    function unlockAccount(address tokenOwner) public;
    function disableMinting() public;
    function enableTransfers() public;

    // ------------------------------------------------------------------------
    // signed{X}Check return status
    // ------------------------------------------------------------------------
    enum CheckResult {
        Success,                           // 0 Success
        NotTransferable,                   // 1 Tokens not transferable yet
        AccountLocked,                     // 2 Account locked
        SignerMismatch,                    // 3 Mismatch in signing account
        AlreadyExecuted,                   // 4 Transfer already executed
        InsufficientApprovedTokens,        // 5 Insufficient approved tokens
        InsufficientApprovedTokensForFees, // 6 Insufficient approved tokens for fees
        InsufficientTokens,                // 7 Insufficient tokens
        InsufficientTokensForFees,         // 8 Insufficient tokens for fees
        OverflowError                      // 9 Overflow error
    }
}


// ----------------------------------------------------------------------------
// BokkyPooBah's Token Teleportation Service Library v1.00
//
// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2017. The MIT Licence.
// ----------------------------------------------------------------------------
library BTTSLib {
    struct Data {
        // Ownership
        address owner;
        address newOwner;

        // Minting and management
        address minter;
        bool mintable;
        bool transferable;
        mapping(address => bool) accountLocked;

        // Token
        string symbol;
        string name;
        uint8 decimals;
        uint totalSupply;
        mapping(address => uint) balances;
        mapping(address => mapping(address => uint)) allowed;
        mapping(address => mapping(bytes32 => bool)) executed;
    }


    // ------------------------------------------------------------------------
    // Constants
    // ------------------------------------------------------------------------
    uint public constant bttsVersion = 100;
    bytes public constant signingPrefix = "\x19Ethereum Signed Message:\n32";
    bytes4 public constant signedTransferSig = "\x75\x32\xea\xac";
    bytes4 public constant signedApproveSig = "\xe9\xaf\xa7\xa1";
    bytes4 public constant signedTransferFromSig = "\x34\x4b\xcc\x7d";
    bytes4 public constant signedApproveAndCallSig = "\xf1\x6f\x9b\x53";

    // ------------------------------------------------------------------------
    // Event
    // ------------------------------------------------------------------------
    event OwnershipTransferred(address indexed from, address indexed to);
    event MinterUpdated(address from, address to);
    event Mint(address indexed tokenOwner, uint tokens, bool lockAccount);
    event MintingDisabled();
    event TransfersEnabled();
    event AccountUnlocked(address indexed tokenOwner);
    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);


    // ------------------------------------------------------------------------
    // Initialisation
    // ------------------------------------------------------------------------
    function init(Data storage self, address owner, string symbol, string name, uint8 decimals, uint initialSupply, bool mintable, bool transferable) public {
        require(self.owner == address(0));
        self.owner = owner;
        self.symbol = symbol;
        self.name = name;
        self.decimals = decimals;
        if (initialSupply > 0) {
            self.balances[owner] = initialSupply;
            self.totalSupply = initialSupply;
            Mint(self.owner, initialSupply, false);
            Transfer(address(0), self.owner, initialSupply);
        }
        self.mintable = mintable;
        self.transferable = transferable;
    }

    // ------------------------------------------------------------------------
    // Safe maths
    // ------------------------------------------------------------------------
    function safeAdd(uint a, uint b) internal pure returns (uint c) {
        c = a + b;
        require(c >= a);
    }
    function safeSub(uint a, uint b) internal pure returns (uint c) {
        require(b <= a);
        c = a - b;
    }
    function safeMul(uint a, uint b) internal pure returns (uint c) {
        c = a * b;
        require(a == 0 || c / a == b);
    }
    function safeDiv(uint a, uint b) internal pure returns (uint c) {
        require(b > 0);
        c = a / b;
    }

    // ------------------------------------------------------------------------
    // Ownership
    // ------------------------------------------------------------------------
    function transferOwnership(Data storage self, address newOwner) public {
        require(msg.sender == self.owner);
        self.newOwner = newOwner;
    }
    function acceptOwnership(Data storage self) public {
        require(msg.sender == self.newOwner);
        OwnershipTransferred(self.owner, self.newOwner);
        self.owner = self.newOwner;
        self.newOwner = address(0);
    }
    function transferOwnershipImmediately(Data storage self, address newOwner) public {
        require(msg.sender == self.owner);
        OwnershipTransferred(self.owner, newOwner);
        self.owner = newOwner;
        self.newOwner = address(0);
    }

    // ------------------------------------------------------------------------
    // Minting and management
    // ------------------------------------------------------------------------
    function setMinter(Data storage self, address minter) public {
        require(msg.sender == self.owner);
        require(self.mintable);
        MinterUpdated(self.minter, minter);
        self.minter = minter;
    }
    function mint(Data storage self, address tokenOwner, uint tokens, bool lockAccount) public returns (bool success) {
        require(self.mintable);
        require(msg.sender == self.minter || msg.sender == self.owner);
        if (lockAccount) {
            self.accountLocked[tokenOwner] = true;
        }
        self.balances[tokenOwner] = safeAdd(self.balances[tokenOwner], tokens);
        self.totalSupply = safeAdd(self.totalSupply, tokens);
        Mint(tokenOwner, tokens, lockAccount);
        Transfer(address(0), tokenOwner, tokens);
        return true;
    }
    function unlockAccount(Data storage self, address tokenOwner) public {
        require(msg.sender == self.owner);
        require(self.accountLocked[tokenOwner]);
        self.accountLocked[tokenOwner] = false;
        AccountUnlocked(tokenOwner);
    }
    function disableMinting(Data storage self) public {
        require(self.mintable);
        require(msg.sender == self.minter || msg.sender == self.owner);
        self.mintable = false;
        if (self.minter != address(0)) {
            MinterUpdated(self.minter, address(0));
            self.minter = address(0);
        }
        MintingDisabled();
    }
    function enableTransfers(Data storage self) public {
        require(msg.sender == self.owner);
        require(!self.transferable);
        self.transferable = true;
        TransfersEnabled();
    }

    // ------------------------------------------------------------------------
    // Other functions
    // ------------------------------------------------------------------------
    function transferAnyERC20Token(Data storage self, address tokenAddress, uint tokens) public returns (bool success) {
        require(msg.sender == self.owner);
        return ERC20Interface(tokenAddress).transfer(self.owner, tokens);
    }

    // ------------------------------------------------------------------------
    // ecrecover from a signature rather than the signature in parts [v, r, s]
    // The signature format is a compact form {bytes32 r}{bytes32 s}{uint8 v}.
    // Compact means, uint8 is not padded to 32 bytes.
    //
    // An invalid signature results in the address(0) being returned, make
    // sure that the returned result is checked to be non-zero for validity
    //
    // Parts from https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d
    // ------------------------------------------------------------------------
    function ecrecoverFromSig(Data storage /*self*/, bytes32 hash, bytes sig) public pure returns (address recoveredAddress) {
        bytes32 r;
        bytes32 s;
        uint8 v;
        if (sig.length != 65) return address(0);
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            // Here we are loading the last 32 bytes. We exploit the fact that 'mload' will pad with zeroes if we overread.
            // There is no 'mload8' to do this, but that would be nicer.
            v := byte(0, mload(add(sig, 96)))
        }
        // Albeit non-transactional signatures are not specified by the YP, one would expect it to match the YP range of [27, 28]
        // geth uses [0, 1] and some clients have followed. This might change, see https://github.com/ethereum/go-ethereum/issues/2053
        if (v < 27) {
          v += 27;
        }
        if (v != 27 && v != 28) return address(0);
        return ecrecover(hash, v, r, s);
    }

    // ------------------------------------------------------------------------
    // Get CheckResult message
    // ------------------------------------------------------------------------
    function getCheckResultMessage(Data storage /*self*/, BTTSTokenInterface.CheckResult result) public pure returns (string) {
        if (result == BTTSTokenInterface.CheckResult.Success) {
            return "Success";
        } else if (result == BTTSTokenInterface.CheckResult.NotTransferable) {
            return "Tokens not transferable yet";
        } else if (result == BTTSTokenInterface.CheckResult.AccountLocked) {
            return "Account locked";
        } else if (result == BTTSTokenInterface.CheckResult.SignerMismatch) {
            return "Mismatch in signing account";
        } else if (result == BTTSTokenInterface.CheckResult.AlreadyExecuted) {
            return "Transfer already executed";
        } else if (result == BTTSTokenInterface.CheckResult.InsufficientApprovedTokens) {
            return "Insufficient approved tokens";
        } else if (result == BTTSTokenInterface.CheckResult.InsufficientApprovedTokensForFees) {
            return "Insufficient approved tokens for fees";
        } else if (result == BTTSTokenInterface.CheckResult.InsufficientTokens) {
            return "Insufficient tokens";
        } else if (result == BTTSTokenInterface.CheckResult.InsufficientTokensForFees) {
            return "Insufficient tokens for fees";
        } else if (result == BTTSTokenInterface.CheckResult.OverflowError) {
            return "Overflow error";
        } else {
            return "Unknown error";
        }
    }

    // ------------------------------------------------------------------------
    // Token functions
    // ------------------------------------------------------------------------
    function transfer(Data storage self, address to, uint tokens) public returns (bool success) {
        // Owner and minter can move tokens before the tokens are transferable 
        require(self.transferable || (self.mintable && (msg.sender == self.owner  || msg.sender == self.minter)));
        require(!self.accountLocked[msg.sender]);
        self.balances[msg.sender] = safeSub(self.balances[msg.sender], tokens);
        self.balances[to] = safeAdd(self.balances[to], tokens);
        Transfer(msg.sender, to, tokens);
        return true;
    }
    function approve(Data storage self, address spender, uint tokens) public returns (bool success) {
        require(!self.accountLocked[msg.sender]);
        self.allowed[msg.sender][spender] = tokens;
        Approval(msg.sender, spender, tokens);
        return true;
    }
    function transferFrom(Data storage self, address from, address to, uint tokens) public returns (bool success) {
        require(self.transferable);
        require(!self.accountLocked[from]);
        self.balances[from] = safeSub(self.balances[from], tokens);
        self.allowed[from][msg.sender] = safeSub(self.allowed[from][msg.sender], tokens);
        self.balances[to] = safeAdd(self.balances[to], tokens);
        Transfer(from, to, tokens);
        return true;
    }
    function approveAndCall(Data storage self, address tokenContract, address spender, uint tokens, bytes data) public returns (bool success) {
        require(!self.accountLocked[msg.sender]);
        self.allowed[msg.sender][spender] = tokens;
        Approval(msg.sender, spender, tokens);
        ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, tokenContract, data);
        return true;
    }

    // ------------------------------------------------------------------------
    // Signed function
    // ------------------------------------------------------------------------
    function signedTransferHash(Data storage /*self*/, address tokenContract, address tokenOwner, address to, uint tokens, uint fee, uint nonce) public pure returns (bytes32 hash) {
        hash = keccak256(signedTransferSig, tokenContract, tokenOwner, to, tokens, fee, nonce);
    }
    function signedTransferCheck(Data storage self, address tokenContract, address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (BTTSTokenInterface.CheckResult result) {
        if (!self.transferable) return BTTSTokenInterface.CheckResult.NotTransferable;
        bytes32 hash = signedTransferHash(self, tokenContract, tokenOwner, to, tokens, fee, nonce);
        if (tokenOwner == address(0) || tokenOwner != ecrecoverFromSig(self, keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch;
        if (self.accountLocked[tokenOwner]) return BTTSTokenInterface.CheckResult.AccountLocked;
        if (self.executed[tokenOwner][hash]) return BTTSTokenInterface.CheckResult.AlreadyExecuted;
        uint total = safeAdd(tokens, fee);
        if (self.balances[tokenOwner] < tokens) return BTTSTokenInterface.CheckResult.InsufficientTokens;
        if (self.balances[tokenOwner] < total) return BTTSTokenInterface.CheckResult.InsufficientTokensForFees;
        if (self.balances[to] + tokens < self.balances[to]) return BTTSTokenInterface.CheckResult.OverflowError;
        if (self.balances[feeAccount] + fee < self.balances[feeAccount]) return BTTSTokenInterface.CheckResult.OverflowError;
        return BTTSTokenInterface.CheckResult.Success;
    }
    function signedTransfer(Data storage self, address tokenContract, address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) {
        require(self.transferable);
        bytes32 hash = signedTransferHash(self, tokenContract, tokenOwner, to, tokens, fee, nonce);
        require(tokenOwner != address(0) && tokenOwner == ecrecoverFromSig(self, keccak256(signingPrefix, hash), sig));
        require(!self.accountLocked[tokenOwner]);
        require(!self.executed[tokenOwner][hash]);
        self.executed[tokenOwner][hash] = true;
        self.balances[tokenOwner] = safeSub(self.balances[tokenOwner], tokens);
        self.balances[to] = safeAdd(self.balances[to], tokens);
        Transfer(tokenOwner, to, tokens);
        self.balances[tokenOwner] = safeSub(self.balances[tokenOwner], fee);
        self.balances[feeAccount] = safeAdd(self.balances[feeAccount], fee);
        Transfer(tokenOwner, feeAccount, fee);
        return true;
    }
    function signedApproveHash(Data storage /*self*/, address tokenContract, address tokenOwner, address spender, uint tokens, uint fee, uint nonce) public pure returns (bytes32 hash) {
        hash = keccak256(signedApproveSig, tokenContract, tokenOwner, spender, tokens, fee, nonce);
    }
    function signedApproveCheck(Data storage self, address tokenContract, address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (BTTSTokenInterface.CheckResult result) {
        if (!self.transferable) return BTTSTokenInterface.CheckResult.NotTransferable;
        bytes32 hash = signedApproveHash(self, tokenContract, tokenOwner, spender, tokens, fee, nonce);
        if (tokenOwner == address(0) || tokenOwner != ecrecoverFromSig(self, keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch;
        if (self.accountLocked[tokenOwner]) return BTTSTokenInterface.CheckResult.AccountLocked;
        if (self.executed[tokenOwner][hash]) return BTTSTokenInterface.CheckResult.AlreadyExecuted;
        if (self.balances[tokenOwner] < fee) return BTTSTokenInterface.CheckResult.InsufficientTokensForFees;
        if (self.balances[feeAccount] + fee < self.balances[feeAccount]) return BTTSTokenInterface.CheckResult.OverflowError;
        return BTTSTokenInterface.CheckResult.Success;
    }
    function signedApprove(Data storage self, address tokenContract, address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) {
        require(self.transferable);
        bytes32 hash = signedApproveHash(self, tokenContract, tokenOwner, spender, tokens, fee, nonce);
        require(tokenOwner != address(0) && tokenOwner == ecrecoverFromSig(self, keccak256(signingPrefix, hash), sig));
        require(!self.accountLocked[tokenOwner]);
        require(!self.executed[tokenOwner][hash]);
        self.executed[tokenOwner][hash] = true;
        self.allowed[tokenOwner][spender] = tokens;
        Approval(tokenOwner, spender, tokens);
        self.balances[tokenOwner] = safeSub(self.balances[tokenOwner], fee);
        self.balances[feeAccount] = safeAdd(self.balances[feeAccount], fee);
        Transfer(tokenOwner, feeAccount, fee);
        return true;
    }
    function signedTransferFromHash(Data storage /*self*/, address tokenContract, address spender, address from, address to, uint tokens, uint fee, uint nonce) public pure returns (bytes32 hash) {
        hash = keccak256(signedTransferFromSig, tokenContract, spender, from, to, tokens, fee, nonce);
    }
    function signedTransferFromCheck(Data storage self, address tokenContract, address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (BTTSTokenInterface.CheckResult result) {
        if (!self.transferable) return BTTSTokenInterface.CheckResult.NotTransferable;
        bytes32 hash = signedTransferFromHash(self, tokenContract, spender, from, to, tokens, fee, nonce);
        if (spender == address(0) || spender != ecrecoverFromSig(self, keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch;
        if (self.accountLocked[from]) return BTTSTokenInterface.CheckResult.AccountLocked;
        if (self.executed[spender][hash]) return BTTSTokenInterface.CheckResult.AlreadyExecuted;
        uint total = safeAdd(tokens, fee);
        if (self.allowed[from][spender] < tokens) return BTTSTokenInterface.CheckResult.InsufficientApprovedTokens;
        if (self.allowed[from][spender] < total) return BTTSTokenInterface.CheckResult.InsufficientApprovedTokensForFees;
        if (self.balances[from] < tokens) return BTTSTokenInterface.CheckResult.InsufficientTokens;
        if (self.balances[from] < total) return BTTSTokenInterface.CheckResult.InsufficientTokensForFees;
        if (self.balances[to] + tokens < self.balances[to]) return BTTSTokenInterface.CheckResult.OverflowError;
        if (self.balances[feeAccount] + fee < self.balances[feeAccount]) return BTTSTokenInterface.CheckResult.OverflowError;
        return BTTSTokenInterface.CheckResult.Success;
    }
    function signedTransferFrom(Data storage self, address tokenContract, address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) {
        require(self.transferable);
        bytes32 hash = signedTransferFromHash(self, tokenContract, spender, from, to, tokens, fee, nonce);
        require(spender != address(0) && spender == ecrecoverFromSig(self, keccak256(signingPrefix, hash), sig));
        require(!self.accountLocked[from]);
        require(!self.executed[spender][hash]);
        self.executed[spender][hash] = true;
        self.balances[from] = safeSub(self.balances[from], tokens);
        self.allowed[from][spender] = safeSub(self.allowed[from][spender], tokens);
        self.balances[to] = safeAdd(self.balances[to], tokens);
        Transfer(from, to, tokens);
        self.balances[from] = safeSub(self.balances[from], fee);
        self.allowed[from][spender] = safeSub(self.allowed[from][spender], fee);
        self.balances[feeAccount] = safeAdd(self.balances[feeAccount], fee);
        Transfer(from, feeAccount, fee);
        return true;
    }
    function signedApproveAndCallHash(Data storage /*self*/, address tokenContract, address tokenOwner, address spender, uint tokens, bytes data, uint fee, uint nonce) public pure returns (bytes32 hash) {
        hash = keccak256(signedApproveAndCallSig, tokenContract, tokenOwner, spender, tokens, data, fee, nonce);
    }
    function signedApproveAndCallCheck(Data storage self, address tokenContract, address tokenOwner, address spender, uint tokens, bytes data, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (BTTSTokenInterface.CheckResult result) {
        if (!self.transferable) return BTTSTokenInterface.CheckResult.NotTransferable;
        bytes32 hash = signedApproveAndCallHash(self, tokenContract, tokenOwner, spender, tokens, data, fee, nonce);
        if (tokenOwner == address(0) || tokenOwner != ecrecoverFromSig(self, keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch;
        if (self.accountLocked[tokenOwner]) return BTTSTokenInterface.CheckResult.AccountLocked;
        if (self.executed[tokenOwner][hash]) return BTTSTokenInterface.CheckResult.AlreadyExecuted;
        if (self.balances[tokenOwner] < fee) return BTTSTokenInterface.CheckResult.InsufficientTokensForFees;
        if (self.balances[feeAccount] + fee < self.balances[feeAccount]) return BTTSTokenInterface.CheckResult.OverflowError;
        return BTTSTokenInterface.CheckResult.Success;
    }
    function signedApproveAndCall(Data storage self, address tokenContract, address tokenOwner, address spender, uint tokens, bytes data, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) {
        require(self.transferable);
        bytes32 hash = signedApproveAndCallHash(self, tokenContract, tokenOwner, spender, tokens, data, fee, nonce);
        require(tokenOwner != address(0) && tokenOwner == ecrecoverFromSig(self, keccak256(signingPrefix, hash), sig));
        require(!self.accountLocked[tokenOwner]);
        require(!self.executed[tokenOwner][hash]);
        self.executed[tokenOwner][hash] = true;
        self.allowed[tokenOwner][spender] = tokens;
        Approval(tokenOwner, spender, tokens);
        self.balances[tokenOwner] = safeSub(self.balances[tokenOwner], fee);
        self.balances[feeAccount] = safeAdd(self.balances[feeAccount], fee);
        Transfer(tokenOwner, feeAccount, fee);
        ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, tokenContract, data);
        return true;
    }
}


// ----------------------------------------------------------------------------
// BokkyPooBah's Token Teleportation Service Token Factory v1.00
//
// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2017. The MIT Licence.
// ----------------------------------------------------------------------------
contract BTTSToken is BTTSTokenInterface {
    using BTTSLib for BTTSLib.Data;

    BTTSLib.Data data;

    // ------------------------------------------------------------------------
    // Constructor
    // ------------------------------------------------------------------------
    function BTTSToken(address owner, string symbol, string name, uint8 decimals, uint initialSupply, bool mintable, bool transferable) public {
        data.init(owner, symbol, name, decimals, initialSupply, mintable, transferable);
    }

    // ------------------------------------------------------------------------
    // Ownership
    // ------------------------------------------------------------------------
    function owner() public view returns (address) {
        return data.owner;
    }
    function newOwner() public view returns (address) {
        return data.newOwner;
    }
    function transferOwnership(address _newOwner) public {
        data.transferOwnership(_newOwner);
    }
    function acceptOwnership() public {
        data.acceptOwnership();
    }
    function transferOwnershipImmediately(address _newOwner) public {
        data.transferOwnershipImmediately(_newOwner);
    }

    // ------------------------------------------------------------------------
    // Token
    // ------------------------------------------------------------------------
    function symbol() public view returns (string) {
        return data.symbol;
    }
    function name() public view returns (string) {
        return data.name;
    }
    function decimals() public view returns (uint8) {
        return data.decimals;
    }

    // ------------------------------------------------------------------------
    // Minting and management
    // ------------------------------------------------------------------------
    function minter() public view returns (address) {
        return data.minter;
    }
    function setMinter(address _minter) public {
        data.setMinter(_minter);
    }
    function mint(address tokenOwner, uint tokens, bool lockAccount) public returns (bool success) {
        return data.mint(tokenOwner, tokens, lockAccount);
    }
    function unlockAccount(address tokenOwner) public {
        return data.unlockAccount(tokenOwner);
    }
    function mintable() public view returns (bool) {
        return data.mintable;
    }
    function transferable() public view returns (bool) {
        return data.transferable;
    }
    function disableMinting() public {
        data.disableMinting();
    }
    function enableTransfers() public {
        data.enableTransfers();
    }

    // ------------------------------------------------------------------------
    // Other functions
    // ------------------------------------------------------------------------
    function transferAnyERC20Token(address tokenAddress, uint tokens) public returns (bool success) {
        return data.transferAnyERC20Token(tokenAddress, tokens);
    }

    // ------------------------------------------------------------------------
    // Don't accept ethers
    // ------------------------------------------------------------------------
    function () public payable {
        revert();
    }

    // ------------------------------------------------------------------------
    // Token functions
    // ------------------------------------------------------------------------
    function totalSupply() public constant returns (uint) {
        return data.totalSupply - data.balances[address(0)];
    }
    function balanceOf(address tokenOwner) public constant returns (uint balance) {
        return data.balances[tokenOwner];
    }
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining) {
        return data.allowed[tokenOwner][spender];
    }
    function transfer(address to, uint tokens) public returns (bool success) {
        return data.transfer(to, tokens);
    }
    function approve(address spender, uint tokens) public returns (bool success) {
        return data.approve(spender, tokens);
    }
    function transferFrom(address from, address to, uint tokens) public returns (bool success) {
        return data.transferFrom(from, to, tokens);
    }
    function approveAndCall(address spender, uint tokens, bytes _data) public returns (bool success) {
        success = data.approveAndCall(this, spender, tokens, _data);
    }

    // ------------------------------------------------------------------------
    // Signed function
    // ------------------------------------------------------------------------
    function signedTransferHash(address tokenOwner, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) {
        return data.signedTransferHash(address(this), tokenOwner, to, tokens, fee, nonce);
    }
    function signedTransferCheck(address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result) {
        return data.signedTransferCheck(address(this), tokenOwner, to, tokens, fee, nonce, sig, feeAccount);
    }
    function signedTransfer(address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) {
        return data.signedTransfer(address(this), tokenOwner, to, tokens, fee, nonce, sig, feeAccount);
    }
    function signedApproveHash(address tokenOwner, address spender, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) {
        return data.signedApproveHash(address(this), tokenOwner, spender, tokens, fee, nonce);
    }
    function signedApproveCheck(address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result) {
        return data.signedApproveCheck(address(this), tokenOwner, spender, tokens, fee, nonce, sig, feeAccount);
    }
    function signedApprove(address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) {
        return data.signedApprove(address(this), tokenOwner, spender, tokens, fee, nonce, sig, feeAccount);
    }
    function signedTransferFromHash(address spender, address from, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) {
        return data.signedTransferFromHash(address(this), spender, from, to, tokens, fee, nonce);
    }
    function signedTransferFromCheck(address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result) {
        return data.signedTransferFromCheck(address(this), spender, from, to, tokens, fee, nonce, sig, feeAccount);
    }
    function signedTransferFrom(address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) {
        return data.signedTransferFrom(address(this), spender, from, to, tokens, fee, nonce, sig, feeAccount);
    }
    function signedApproveAndCallHash(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce) public view returns (bytes32 hash) {
        return data.signedApproveAndCallHash(address(this), tokenOwner, spender, tokens, _data, fee, nonce);
    }
    function signedApproveAndCallCheck(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result) {
        return data.signedApproveAndCallCheck(address(this), tokenOwner, spender, tokens, _data, fee, nonce, sig, feeAccount);
    }
    function signedApproveAndCall(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) {
        return data.signedApproveAndCall(address(this), tokenOwner, spender, tokens, _data, fee, nonce, sig, feeAccount);
    }
}

// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract Owned {
    address public owner;
    address public newOwner;
    event OwnershipTransferred(address indexed _from, address indexed _to);

    function Owned() public {
        owner = msg.sender;
    }
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }
    function transferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }
    function acceptOwnership() public {
        require(msg.sender == newOwner);
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
    function transferOwnershipImmediately(address _newOwner) public onlyOwner {
        OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
        newOwner = address(0);
    }
}


// ----------------------------------------------------------------------------
// BokkyPooBah's Token Teleportation Service Token Factory v1.00
//
// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2017. The MIT Licence.
// ----------------------------------------------------------------------------
contract BTTSTokenFactory is Owned {

    // ------------------------------------------------------------------------
    // Internal data
    // ------------------------------------------------------------------------
    mapping(address => bool) _verify;

    // ------------------------------------------------------------------------
    // Event
    // ------------------------------------------------------------------------
    event BTTSTokenListing(address indexed ownerAddress,
        address indexed bttsTokenAddress, 
        string symbol, string name, uint8 decimals, 
        uint initialSupply, bool mintable, bool transferable);


    // ------------------------------------------------------------------------
    // Anyone can call this method to verify whether the bttsToken contract at
    // the specified address was deployed using this factory
    //
    // Parameters:
    //   tokenContract  the bttsToken contract address
    //
    // Return values:
    //   valid          did this BTTSTokenFactory create the BTTSToken contract?
    //   decimals       number of decimal places for the token contract
    //   initialSupply  the token initial supply
    //   mintable       is the token mintable after deployment?
    //   transferable   are the tokens transferable after deployment?
    // ------------------------------------------------------------------------
    function verify(address tokenContract) public view returns (
        bool    valid,
        address owner,
        uint    decimals,
        bool    mintable,
        bool    transferable
    ) {
        valid = _verify[tokenContract];
        if (valid) {
            BTTSToken t = BTTSToken(tokenContract);
            owner        = t.owner();
            decimals     = t.decimals();
            mintable     = t.mintable();
            transferable = t.transferable();
        }
    }


    // ------------------------------------------------------------------------
    // Any account can call this method to deploy a new BTTSToken contract.
    // The owner of the BTTSToken contract will be the calling account
    //
    // Parameters:
    //   symbol         symbol
    //   name           name
    //   decimals       number of decimal places for the token contract
    //   initialSupply  the token initial supply
    //   mintable       is the token mintable after deployment?
    //   transferable   are the tokens transferable after deployment?
    //
    // For example, deploying a BTTSToken contract with `initialSupply` of
    // 1,000.000000000000000000 tokens:
    //   symbol         "ME"
    //   name           "My Token"
    //   decimals       18
    //   initialSupply  10000000000000000000000 = 1,000.000000000000000000
    //                  tokens
    //   mintable       can tokens be minted after deployment?
    //   transferable   are the tokens transferable after deployment?
    //
    // The BTTSTokenListing() event is logged with the following parameters
    //   owner          the account that execute this transaction
    //   symbol         symbol
    //   name           name
    //   decimals       number of decimal places for the token contract
    //   initialSupply  the token initial supply
    //   mintable       can tokens be minted after deployment?
    //   transferable   are the tokens transferable after deployment?
    // ------------------------------------------------------------------------
    function deployBTTSTokenContract(
        string symbol,
        string name,
        uint8 decimals,
        uint initialSupply,
        bool mintable,
        bool transferable
    ) public returns (address bttsTokenAddress) {
        bttsTokenAddress = new BTTSToken(
            msg.sender,
            symbol,
            name,
            decimals,
            initialSupply,
            mintable,
            transferable);
        // Record that this factory created the trader
        _verify[bttsTokenAddress] = true;
        BTTSTokenListing(msg.sender, bttsTokenAddress, symbol, name, decimals, 
            initialSupply, mintable, transferable);
    }


    // ------------------------------------------------------------------------
    // Factory owner can transfer out any accidentally sent ERC20 tokens
    //
    // Parameters:
    //   tokenAddress  contract address of the token contract being withdrawn
    //                 from
    //   tokens        number of tokens
    // ------------------------------------------------------------------------
    function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) {
        return ERC20Interface(tokenAddress).transfer(owner, tokens);
    }

    // ------------------------------------------------------------------------
    // Don't accept ethers
    // ------------------------------------------------------------------------
    function () public payable {
        revert();
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"_data","type":"bytes"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"}],"name":"signedApproveAndCallHash","outputs":[{"name":"hash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minter","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"}],"name":"signedApproveHash","outputs":[{"name":"hash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"spender","type":"address"},{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"}],"name":"signedTransferFromHash","outputs":[{"name":"hash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"signedApproveAndCallSig","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"sig","type":"bytes"},{"name":"feeAccount","type":"address"}],"name":"signedTransferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mintable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"signedTransferSig","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"sig","type":"bytes"},{"name":"feeAccount","type":"address"}],"name":"signedTransfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"sig","type":"bytes"},{"name":"feeAccount","type":"address"}],"name":"signedTransferCheck","outputs":[{"name":"result","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnershipImmediately","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bttsVersion","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenOwner","type":"address"}],"name":"unlockAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transferable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"_data","type":"bytes"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"sig","type":"bytes"},{"name":"feeAccount","type":"address"}],"name":"signedApproveAndCallCheck","outputs":[{"name":"result","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"}],"name":"signedTransferHash","outputs":[{"name":"hash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"signedApproveSig","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"signedTransferFromSig","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"sig","type":"bytes"},{"name":"feeAccount","type":"address"}],"name":"signedApproveCheck","outputs":[{"name":"result","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"tokens","type":"uint256"},{"name":"lockAccount","type":"bool"}],"name":"mint","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"signingPrefix","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"sig","type":"bytes"},{"name":"feeAccount","type":"address"}],"name":"signedApprove","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"_data","type":"bytes"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"sig","type":"bytes"},{"name":"feeAccount","type":"address"}],"name":"signedApproveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"spender","type":"address"},{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"sig","type":"bytes"},{"name":"feeAccount","type":"address"}],"name":"signedTransferFromCheck","outputs":[{"name":"result","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minter","type":"address"}],"name":"setMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"owner","type":"address"},{"name":"symbol","type":"string"},{"name":"name","type":"string"},{"name":"decimals","type":"uint8"},{"name":"initialSupply","type":"uint256"},{"name":"mintable","type":"bool"},{"name":"transferable","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"}],"name":"MinterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"lockAccount","type":"bool"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintingDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"TransfersEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"}],"name":"AccountUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"}]

606060405234156200001057600080fd5b604051620021f1380380620021f183398101604052808051919060200180518201919060200180518201919060200180519190602001805191906020018051919060200180519150739bb2eae0be24460a1f8292fb2c48c300f5622e6490506335659df96000898989898989896040517c010000000000000000000000000000000000000000000000000000000063ffffffff8b1602815260048101898152600160a060020a038916602483015260ff8616608483015260a4820185905283151560c483015282151560e483015261010060448301908152909160648101906101040189818151815260200191508051906020019080838360005b83811015620001255780820151838201526020016200010b565b50505050905090810190601f168015620001535780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b838110156200018b57808201518382015260200162000171565b50505050905090810190601f168015620001b95780820380516001836020036101000a031916815260200191505b509a505050505050505050505060006040518083038186803b1515620001de57600080fd5b6102c65a03f41515620001f057600080fd5b50505050505050505050611fe7806200020a6000396000f3006060604052600436106101ea5763ffffffff60e060020a60003504166305a5f83081146101ef57806306fdde031461027457806307546172146102fe578063095ea7b31461032d5780631296d47d1461036357806318160ddd146103915780631a2b3adf146103a4578063233907a3146103d857806323b872dd14610420578063313ce56714610448578063344bcc7d146104715780634bf365df146104f55780635b1ea8581461050857806370a082311461051b5780637532eaac1461053a57806379ba5097146105b95780637c0fbc31146105ce5780637e5cd5c1146106715780637e71fb091461068457806389443aac146106a35780638da5cb5b146106b6578063905295e3146106c957806392ff0d31146106e857806395d89b41146106fb578063965b0cc41461070e57806396cfd124146107d0578063a3fc136a146107fe578063a9059cbb14610811578063af35c6c714610833578063c14a932f14610846578063c7a86e3314610859578063cae9ca51146108d8578063d1a1beb41461093d578063d4ee1d9014610964578063dc39d06d14610977578063dd62ed3e14610999578063e2cc7a51146109be578063e9afa7a1146109d1578063f16f9b5314610a50578063f2fde38b14610b12578063f30d4d3f14610b31578063fca3b5aa14610bb5575b600080fd5b34156101fa57600080fd5b610262600160a060020a036004803582169160248035909116916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050843594602001359350610bd492505050565b60405190815260200160405180910390f35b341561027f57600080fd5b610287610d02565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102c35780820151838201526020016102ab565b50505050905090810190601f1680156102f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030957600080fd5b610311610dab565b604051600160a060020a03909116815260200160405180910390f35b341561033857600080fd5b61034f600160a060020a0360043516602435610dba565b604051901515815260200160405180910390f35b341561036e57600080fd5b610262600160a060020a0360043581169060243516604435606435608435610e4b565b341561039c57600080fd5b610262610f04565b34156103af57600080fd5b610262600160a060020a036004358116906024358116906044351660643560843560a435610f36565b34156103e357600080fd5b6103eb610fd3565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390f35b341561042b57600080fd5b61034f600160a060020a0360043581169060243516604435610ff7565b341561045357600080fd5b61045b611091565b60405160ff909116815260200160405180910390f35b341561047c57600080fd5b61034f60048035600160a060020a0390811691602480358316926044351691606435916084359160a4359160e49060c43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a0316925061109a915050565b341561050057600080fd5b61034f6111e0565b341561051357600080fd5b6103eb611201565b341561052657600080fd5b610262600160a060020a0360043516611225565b341561054557600080fd5b61034f600160a060020a0360048035821691602480359091169160443591606435916084359160c49060a43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611240915050565b34156105c457600080fd5b6105cc61137a565b005b34156105d957600080fd5b61064d600160a060020a0360048035821691602480359091169160443591606435916084359160c49060a43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a031692506113e0915050565b6040518082600981111561065d57fe5b60ff16815260200191505060405180910390f35b341561067c57600080fd5b6105cc6114a2565b341561068f57600080fd5b6105cc600160a060020a03600435166114f2565b34156106ae57600080fd5b610262611568565b34156106c157600080fd5b61031161156d565b34156106d457600080fd5b6105cc600160a060020a036004351661157c565b34156106f357600080fd5b61034f6115db565b341561070657600080fd5b6102876115fd565b341561071957600080fd5b61064d600160a060020a036004803582169160248035909116916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094968635966020808201359750919550606081019450604090810135860180830194503592508291601f83018190048102019051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611671915050565b34156107db57600080fd5b610262600160a060020a03600435811690602435166044356064356084356117f1565b341561080957600080fd5b6103eb611886565b341561081c57600080fd5b61034f600160a060020a03600435166024356118aa565b341561083e57600080fd5b6105cc61191a565b341561085157600080fd5b6103eb61196a565b341561086457600080fd5b61064d600160a060020a0360048035821691602480359091169160443591606435916084359160c49060a43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a0316925061198e915050565b34156108e357600080fd5b61034f60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611a5095505050505050565b341561094857600080fd5b61034f600160a060020a03600435166024356044351515611b3b565b341561096f57600080fd5b610311611bb3565b341561098257600080fd5b61034f600160a060020a0360043516602435611bc2565b34156109a457600080fd5b610262600160a060020a0360043581169060243516611c32565b34156109c957600080fd5b610287611c5d565b34156109dc57600080fd5b61034f600160a060020a0360048035821691602480359091169160443591606435916084359160c49060a43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611c94915050565b3415610a5b57600080fd5b61034f600160a060020a036004803582169160248035909116916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094968635966020808201359750919550606081019450604090810135860180830194503592508291601f83018190048102019051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611d56915050565b3415610b1d57600080fd5b6105cc600160a060020a0360043516611e1f565b3415610b3c57600080fd5b61064d60048035600160a060020a0390811691602480358316926044351691606435916084359160a4359160e49060c43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611e7e915050565b3415610bc057600080fd5b6105cc600160a060020a0360043516611f4a565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463d1adb13382308a8a8a8a8a8a876040516020015260405160e060020a63ffffffff8b1602815260048101898152600160a060020a03808a1660248401528881166044840152871660648301526084820186905260c4820184905260e4820183905261010060a4830190815290916101040185818151815260200191508051906020019080838360005b83811015610c8d578082015183820152602001610c75565b50505050905090810190601f168015610cba5780820380516001836020036101000a031916815260200191505b50995050505050505050505060206040518083038186803b1515610cdd57600080fd5b6102c65a03f41515610cee57600080fd5b505050604051805198975050505050505050565b610d0a611fa9565b60058054600260001961010060018416150201909116046020601f82018190048102016040519081016040528092919081815260200182805460018160011615610100020316600290048015610da15780601f10610d7657610100808354040283529160200191610da1565b820191906000526020600020905b815481529060010190602001808311610d8457829003601f168201915b5050505050905090565b600254600160a060020a031690565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463bed568f7828585826040516020015260405160e060020a63ffffffff86160281526004810193909352600160a060020a039091166024830152604482015260640160206040518083038186803b1515610e2a57600080fd5b6102c65a03f41515610e3b57600080fd5b5050506040518051949350505050565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463bbcd693982308989898989866040516020015260405160e060020a63ffffffff8a160281526004810197909752600160a060020a0395861660248801529385166044870152919093166064850152608484019290925260a483019190915260c482015260e40160206040518083038186803b1515610ee057600080fd5b6102c65a03f41515610ef157600080fd5b5050506040518051979650505050505050565b6000805260086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7546007540390565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64630781fc2882308a8a8a8a8a8a876040516020015260405160e060020a63ffffffff8b160281526004810198909852600160a060020a039687166024890152948616604488015292851660648701529316608485015260a484019290925260c483019190915260e48201526101040160206040518083038186803b1515610cdd57600080fd5b7ff16f9b530000000000000000000000000000000000000000000000000000000081565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e646367b9965482868686836040516020015260405160e060020a63ffffffff87160281526004810194909452600160a060020a03928316602485015291166044830152606482015260840160206040518083038186803b151561106f57600080fd5b6102c65a03f4151561108057600080fd5b505050604051805195945050505050565b60065460ff1690565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e646397e8c81382308c8c8c8c8c8c8c8c896040516020015260405160e060020a63ffffffff8d16028152600481018b8152600160a060020a03808c1660248401528a811660448401528981166064840152888116608484015260a4830188905260c4830187905260e483018690528316610124830152610140610104830190815290916101440184818151815260200191508051906020019080838360005b8381101561116757808201518382015260200161114f565b50505050905090810190601f1680156111945780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060206040518083038186803b15156111b957600080fd5b6102c65a03f415156111ca57600080fd5b50505060405180519a9950505050505050505050565b60025474010000000000000000000000000000000000000000900460ff1690565b7f7532eaac0000000000000000000000000000000000000000000000000000000081565b600160a060020a031660009081526008602052604090205490565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64636a7191aa82308b8b8b8b8b8b8b886040516020015260405160e060020a63ffffffff8c16028152600481018a8152600160a060020a03808b166024840152898116604484015288811660648401526084830188905260a4830187905260c48301869052831661010483015261012060e4830190815290916101240184818151815260200191508051906020019080838360005b838110156113035780820151838201526020016112eb565b50505050905090810190601f1680156113305780820380516001836020036101000a031916815260200191505b509a505050505050505050505060206040518083038186803b151561135457600080fd5b6102c65a03f4151561136557600080fd5b50505060405180519998505050505050505050565b739bb2eae0be24460a1f8292fb2c48c300f5622e6463ea300bda600060405160e060020a63ffffffff8416028152600481019190915260240160006040518083038186803b15156113ca57600080fd5b6102c65a03f415156113db57600080fd5b505050565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463ecbc878482308b8b8b8b8b8b8b886040516020015260405160e060020a63ffffffff8c16028152600481018a8152600160a060020a03808b166024840152898116604484015288811660648401526084830188905260a4830187905260c48301869052831661010483015261012060e483019081529091610124018481815181526020019150805190602001908083836000838110156113035780820151838201526020016112eb565b739bb2eae0be24460a1f8292fb2c48c300f5622e6463f72cb00a600060405160e060020a63ffffffff8416028152600481019190915260240160006040518083038186803b15156113ca57600080fd5b739bb2eae0be24460a1f8292fb2c48c300f5622e64638fedeca660008360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b151561155157600080fd5b6102c65a03f4151561156257600080fd5b50505050565b606481565b600054600160a060020a031690565b739bb2eae0be24460a1f8292fb2c48c300f5622e6463b39d0e0960008360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b151561155157600080fd5b6002547501000000000000000000000000000000000000000000900460ff1690565b611605611fa9565b60048054600260001961010060018416150201909116046020601f82018190048102016040519081016040528092919081815260200182805460018160011615610100020316600290048015610da15780601f10610d7657610100808354040283529160200191610da1565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463d4d7ebb182308c8c8c8c8c8c8c8c896040516020015260405160e060020a63ffffffff8d16028152600481018b8152600160a060020a03808c1660248401528a8116604484015289811660648401526084830189905260c4830187905260e48301869052831661012483015261014060a4830190815290916101048101906101440188818151815260200191508051906020019080838360005b8381101561173b578082015183820152602001611723565b50505050905090810190601f1680156117685780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561179e578082015183820152602001611786565b50505050905090810190601f1680156117cb5780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060206040518083038186803b15156111b957600080fd5b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463883c811a82308989898989866040516020015260405160e060020a63ffffffff8a160281526004810197909752600160a060020a0395861660248801529385166044870152919093166064850152608484019290925260a483019190915260c482015260e40160206040518083038186803b1515610ee057600080fd5b7fe9afa7a10000000000000000000000000000000000000000000000000000000081565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e646306ad0e7b828585826040516020015260405160e060020a63ffffffff86160281526004810193909352600160a060020a039091166024830152604482015260640160206040518083038186803b1515610e2a57600080fd5b739bb2eae0be24460a1f8292fb2c48c300f5622e6463976f56a5600060405160e060020a63ffffffff8416028152600481019190915260240160006040518083038186803b15156113ca57600080fd5b7f344bcc7d0000000000000000000000000000000000000000000000000000000081565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463233a651d82308b8b8b8b8b8b8b886040516020015260405160e060020a63ffffffff8c16028152600481018a8152600160a060020a03808b166024840152898116604484015288811660648401526084830188905260a4830187905260c48301869052831661010483015261012060e483019081529091610124018481815181526020019150805190602001908083836000838110156113035780820151838201526020016112eb565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64635ce9f29c8230878787846040516020015260405160e060020a63ffffffff881602815260048101868152600160a060020a038087166024840152851660448301526064820184905260a060848301908152909160a40183818151815260200191508051906020019080838360005b83811015611aee578082015183820152602001611ad6565b50505050905090810190601f168015611b1b5780820380516001836020036101000a031916815260200191505b50965050505050505060206040518083038186803b151561106f57600080fd5b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64639fb6f52682868686836040516020015260405160e060020a63ffffffff87160281526004810194909452600160a060020a03909216602484015260448301521515606482015260840160206040518083038186803b151561106f57600080fd5b600154600160a060020a031690565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64637512eb85828585826040516020015260405160e060020a63ffffffff86160281526004810193909352600160a060020a039091166024830152604482015260640160206040518083038186803b1515610e2a57600080fd5b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60408051908101604052601c81527f19457468657265756d205369676e6564204d6573736167653a0a333200000000602082015281565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463b21b2fdd82308b8b8b8b8b8b8b886040516020015260405160e060020a63ffffffff8c16028152600481018a8152600160a060020a03808b166024840152898116604484015288811660648401526084830188905260a4830187905260c48301869052831661010483015261012060e483019081529091610124018481815181526020019150805190602001908083836000838110156113035780820151838201526020016112eb565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64638ed89fb382308c8c8c8c8c8c8c8c896040516020015260405160e060020a63ffffffff8d16028152600481018b8152600160a060020a03808c1660248401528a8116604484015289811660648401526084830189905260c4830187905260e48301869052831661012483015261014060a4830190815290916101048101906101440188818151815260200191508051906020019080838360008381101561173b578082015183820152602001611723565b739bb2eae0be24460a1f8292fb2c48c300f5622e646364850de560008360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b151561155157600080fd5b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64635ac4195682308c8c8c8c8c8c8c8c896040516020015260405160e060020a63ffffffff8d16028152600481018b8152600160a060020a03808c1660248401528a811660448401528981166064840152888116608484015260a4830188905260c4830187905260e483018690528316610124830152610140610104830190815290916101440184818151815260200191508051906020019080838360008381101561116757808201518382015260200161114f565b739bb2eae0be24460a1f8292fb2c48c300f5622e64635250afa160008360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b151561155157600080fd5b602060405190810160405260008152905600a165627a7a723058204682545eb4351a060d0602ea3fcd7cc19f33db2437811765c875a59c14eb0f330029000000000000000000000000f58546f5cde2a7ff5c91afc63b43380f0c198be800000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003455645000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094465766572792e696f0000000000000000000000000000000000000000000000

Deployed Bytecode

0x6060604052600436106101ea5763ffffffff60e060020a60003504166305a5f83081146101ef57806306fdde031461027457806307546172146102fe578063095ea7b31461032d5780631296d47d1461036357806318160ddd146103915780631a2b3adf146103a4578063233907a3146103d857806323b872dd14610420578063313ce56714610448578063344bcc7d146104715780634bf365df146104f55780635b1ea8581461050857806370a082311461051b5780637532eaac1461053a57806379ba5097146105b95780637c0fbc31146105ce5780637e5cd5c1146106715780637e71fb091461068457806389443aac146106a35780638da5cb5b146106b6578063905295e3146106c957806392ff0d31146106e857806395d89b41146106fb578063965b0cc41461070e57806396cfd124146107d0578063a3fc136a146107fe578063a9059cbb14610811578063af35c6c714610833578063c14a932f14610846578063c7a86e3314610859578063cae9ca51146108d8578063d1a1beb41461093d578063d4ee1d9014610964578063dc39d06d14610977578063dd62ed3e14610999578063e2cc7a51146109be578063e9afa7a1146109d1578063f16f9b5314610a50578063f2fde38b14610b12578063f30d4d3f14610b31578063fca3b5aa14610bb5575b600080fd5b34156101fa57600080fd5b610262600160a060020a036004803582169160248035909116916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050843594602001359350610bd492505050565b60405190815260200160405180910390f35b341561027f57600080fd5b610287610d02565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102c35780820151838201526020016102ab565b50505050905090810190601f1680156102f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030957600080fd5b610311610dab565b604051600160a060020a03909116815260200160405180910390f35b341561033857600080fd5b61034f600160a060020a0360043516602435610dba565b604051901515815260200160405180910390f35b341561036e57600080fd5b610262600160a060020a0360043581169060243516604435606435608435610e4b565b341561039c57600080fd5b610262610f04565b34156103af57600080fd5b610262600160a060020a036004358116906024358116906044351660643560843560a435610f36565b34156103e357600080fd5b6103eb610fd3565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390f35b341561042b57600080fd5b61034f600160a060020a0360043581169060243516604435610ff7565b341561045357600080fd5b61045b611091565b60405160ff909116815260200160405180910390f35b341561047c57600080fd5b61034f60048035600160a060020a0390811691602480358316926044351691606435916084359160a4359160e49060c43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a0316925061109a915050565b341561050057600080fd5b61034f6111e0565b341561051357600080fd5b6103eb611201565b341561052657600080fd5b610262600160a060020a0360043516611225565b341561054557600080fd5b61034f600160a060020a0360048035821691602480359091169160443591606435916084359160c49060a43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611240915050565b34156105c457600080fd5b6105cc61137a565b005b34156105d957600080fd5b61064d600160a060020a0360048035821691602480359091169160443591606435916084359160c49060a43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a031692506113e0915050565b6040518082600981111561065d57fe5b60ff16815260200191505060405180910390f35b341561067c57600080fd5b6105cc6114a2565b341561068f57600080fd5b6105cc600160a060020a03600435166114f2565b34156106ae57600080fd5b610262611568565b34156106c157600080fd5b61031161156d565b34156106d457600080fd5b6105cc600160a060020a036004351661157c565b34156106f357600080fd5b61034f6115db565b341561070657600080fd5b6102876115fd565b341561071957600080fd5b61064d600160a060020a036004803582169160248035909116916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094968635966020808201359750919550606081019450604090810135860180830194503592508291601f83018190048102019051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611671915050565b34156107db57600080fd5b610262600160a060020a03600435811690602435166044356064356084356117f1565b341561080957600080fd5b6103eb611886565b341561081c57600080fd5b61034f600160a060020a03600435166024356118aa565b341561083e57600080fd5b6105cc61191a565b341561085157600080fd5b6103eb61196a565b341561086457600080fd5b61064d600160a060020a0360048035821691602480359091169160443591606435916084359160c49060a43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a0316925061198e915050565b34156108e357600080fd5b61034f60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611a5095505050505050565b341561094857600080fd5b61034f600160a060020a03600435166024356044351515611b3b565b341561096f57600080fd5b610311611bb3565b341561098257600080fd5b61034f600160a060020a0360043516602435611bc2565b34156109a457600080fd5b610262600160a060020a0360043581169060243516611c32565b34156109c957600080fd5b610287611c5d565b34156109dc57600080fd5b61034f600160a060020a0360048035821691602480359091169160443591606435916084359160c49060a43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611c94915050565b3415610a5b57600080fd5b61034f600160a060020a036004803582169160248035909116916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094968635966020808201359750919550606081019450604090810135860180830194503592508291601f83018190048102019051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611d56915050565b3415610b1d57600080fd5b6105cc600160a060020a0360043516611e1f565b3415610b3c57600080fd5b61064d60048035600160a060020a0390811691602480358316926044351691606435916084359160a4359160e49060c43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611e7e915050565b3415610bc057600080fd5b6105cc600160a060020a0360043516611f4a565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463d1adb13382308a8a8a8a8a8a876040516020015260405160e060020a63ffffffff8b1602815260048101898152600160a060020a03808a1660248401528881166044840152871660648301526084820186905260c4820184905260e4820183905261010060a4830190815290916101040185818151815260200191508051906020019080838360005b83811015610c8d578082015183820152602001610c75565b50505050905090810190601f168015610cba5780820380516001836020036101000a031916815260200191505b50995050505050505050505060206040518083038186803b1515610cdd57600080fd5b6102c65a03f41515610cee57600080fd5b505050604051805198975050505050505050565b610d0a611fa9565b60058054600260001961010060018416150201909116046020601f82018190048102016040519081016040528092919081815260200182805460018160011615610100020316600290048015610da15780601f10610d7657610100808354040283529160200191610da1565b820191906000526020600020905b815481529060010190602001808311610d8457829003601f168201915b5050505050905090565b600254600160a060020a031690565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463bed568f7828585826040516020015260405160e060020a63ffffffff86160281526004810193909352600160a060020a039091166024830152604482015260640160206040518083038186803b1515610e2a57600080fd5b6102c65a03f41515610e3b57600080fd5b5050506040518051949350505050565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463bbcd693982308989898989866040516020015260405160e060020a63ffffffff8a160281526004810197909752600160a060020a0395861660248801529385166044870152919093166064850152608484019290925260a483019190915260c482015260e40160206040518083038186803b1515610ee057600080fd5b6102c65a03f41515610ef157600080fd5b5050506040518051979650505050505050565b6000805260086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7546007540390565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64630781fc2882308a8a8a8a8a8a876040516020015260405160e060020a63ffffffff8b160281526004810198909852600160a060020a039687166024890152948616604488015292851660648701529316608485015260a484019290925260c483019190915260e48201526101040160206040518083038186803b1515610cdd57600080fd5b7ff16f9b530000000000000000000000000000000000000000000000000000000081565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e646367b9965482868686836040516020015260405160e060020a63ffffffff87160281526004810194909452600160a060020a03928316602485015291166044830152606482015260840160206040518083038186803b151561106f57600080fd5b6102c65a03f4151561108057600080fd5b505050604051805195945050505050565b60065460ff1690565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e646397e8c81382308c8c8c8c8c8c8c8c896040516020015260405160e060020a63ffffffff8d16028152600481018b8152600160a060020a03808c1660248401528a811660448401528981166064840152888116608484015260a4830188905260c4830187905260e483018690528316610124830152610140610104830190815290916101440184818151815260200191508051906020019080838360005b8381101561116757808201518382015260200161114f565b50505050905090810190601f1680156111945780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060206040518083038186803b15156111b957600080fd5b6102c65a03f415156111ca57600080fd5b50505060405180519a9950505050505050505050565b60025474010000000000000000000000000000000000000000900460ff1690565b7f7532eaac0000000000000000000000000000000000000000000000000000000081565b600160a060020a031660009081526008602052604090205490565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64636a7191aa82308b8b8b8b8b8b8b886040516020015260405160e060020a63ffffffff8c16028152600481018a8152600160a060020a03808b166024840152898116604484015288811660648401526084830188905260a4830187905260c48301869052831661010483015261012060e4830190815290916101240184818151815260200191508051906020019080838360005b838110156113035780820151838201526020016112eb565b50505050905090810190601f1680156113305780820380516001836020036101000a031916815260200191505b509a505050505050505050505060206040518083038186803b151561135457600080fd5b6102c65a03f4151561136557600080fd5b50505060405180519998505050505050505050565b739bb2eae0be24460a1f8292fb2c48c300f5622e6463ea300bda600060405160e060020a63ffffffff8416028152600481019190915260240160006040518083038186803b15156113ca57600080fd5b6102c65a03f415156113db57600080fd5b505050565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463ecbc878482308b8b8b8b8b8b8b886040516020015260405160e060020a63ffffffff8c16028152600481018a8152600160a060020a03808b166024840152898116604484015288811660648401526084830188905260a4830187905260c48301869052831661010483015261012060e483019081529091610124018481815181526020019150805190602001908083836000838110156113035780820151838201526020016112eb565b739bb2eae0be24460a1f8292fb2c48c300f5622e6463f72cb00a600060405160e060020a63ffffffff8416028152600481019190915260240160006040518083038186803b15156113ca57600080fd5b739bb2eae0be24460a1f8292fb2c48c300f5622e64638fedeca660008360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b151561155157600080fd5b6102c65a03f4151561156257600080fd5b50505050565b606481565b600054600160a060020a031690565b739bb2eae0be24460a1f8292fb2c48c300f5622e6463b39d0e0960008360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b151561155157600080fd5b6002547501000000000000000000000000000000000000000000900460ff1690565b611605611fa9565b60048054600260001961010060018416150201909116046020601f82018190048102016040519081016040528092919081815260200182805460018160011615610100020316600290048015610da15780601f10610d7657610100808354040283529160200191610da1565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463d4d7ebb182308c8c8c8c8c8c8c8c896040516020015260405160e060020a63ffffffff8d16028152600481018b8152600160a060020a03808c1660248401528a8116604484015289811660648401526084830189905260c4830187905260e48301869052831661012483015261014060a4830190815290916101048101906101440188818151815260200191508051906020019080838360005b8381101561173b578082015183820152602001611723565b50505050905090810190601f1680156117685780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561179e578082015183820152602001611786565b50505050905090810190601f1680156117cb5780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060206040518083038186803b15156111b957600080fd5b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463883c811a82308989898989866040516020015260405160e060020a63ffffffff8a160281526004810197909752600160a060020a0395861660248801529385166044870152919093166064850152608484019290925260a483019190915260c482015260e40160206040518083038186803b1515610ee057600080fd5b7fe9afa7a10000000000000000000000000000000000000000000000000000000081565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e646306ad0e7b828585826040516020015260405160e060020a63ffffffff86160281526004810193909352600160a060020a039091166024830152604482015260640160206040518083038186803b1515610e2a57600080fd5b739bb2eae0be24460a1f8292fb2c48c300f5622e6463976f56a5600060405160e060020a63ffffffff8416028152600481019190915260240160006040518083038186803b15156113ca57600080fd5b7f344bcc7d0000000000000000000000000000000000000000000000000000000081565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463233a651d82308b8b8b8b8b8b8b886040516020015260405160e060020a63ffffffff8c16028152600481018a8152600160a060020a03808b166024840152898116604484015288811660648401526084830188905260a4830187905260c48301869052831661010483015261012060e483019081529091610124018481815181526020019150805190602001908083836000838110156113035780820151838201526020016112eb565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64635ce9f29c8230878787846040516020015260405160e060020a63ffffffff881602815260048101868152600160a060020a038087166024840152851660448301526064820184905260a060848301908152909160a40183818151815260200191508051906020019080838360005b83811015611aee578082015183820152602001611ad6565b50505050905090810190601f168015611b1b5780820380516001836020036101000a031916815260200191505b50965050505050505060206040518083038186803b151561106f57600080fd5b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64639fb6f52682868686836040516020015260405160e060020a63ffffffff87160281526004810194909452600160a060020a03909216602484015260448301521515606482015260840160206040518083038186803b151561106f57600080fd5b600154600160a060020a031690565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64637512eb85828585826040516020015260405160e060020a63ffffffff86160281526004810193909352600160a060020a039091166024830152604482015260640160206040518083038186803b1515610e2a57600080fd5b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60408051908101604052601c81527f19457468657265756d205369676e6564204d6573736167653a0a333200000000602082015281565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e6463b21b2fdd82308b8b8b8b8b8b8b886040516020015260405160e060020a63ffffffff8c16028152600481018a8152600160a060020a03808b166024840152898116604484015288811660648401526084830188905260a4830187905260c48301869052831661010483015261012060e483019081529091610124018481815181526020019150805190602001908083836000838110156113035780820151838201526020016112eb565b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64638ed89fb382308c8c8c8c8c8c8c8c896040516020015260405160e060020a63ffffffff8d16028152600481018b8152600160a060020a03808c1660248401528a8116604484015289811660648401526084830189905260c4830187905260e48301869052831661012483015261014060a4830190815290916101048101906101440188818151815260200191508051906020019080838360008381101561173b578082015183820152602001611723565b739bb2eae0be24460a1f8292fb2c48c300f5622e646364850de560008360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b151561155157600080fd5b6000739bb2eae0be24460a1f8292fb2c48c300f5622e64635ac4195682308c8c8c8c8c8c8c8c896040516020015260405160e060020a63ffffffff8d16028152600481018b8152600160a060020a03808c1660248401528a811660448401528981166064840152888116608484015260a4830188905260c4830187905260e483018690528316610124830152610140610104830190815290916101440184818151815260200191508051906020019080838360008381101561116757808201518382015260200161114f565b739bb2eae0be24460a1f8292fb2c48c300f5622e64635250afa160008360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b151561155157600080fd5b602060405190810160405260008152905600a165627a7a723058204682545eb4351a060d0602ea3fcd7cc19f33db2437811765c875a59c14eb0f330029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000f58546f5cde2a7ff5c91afc63b43380f0c198be800000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003455645000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094465766572792e696f0000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : owner (address): 0xf58546F5CDE2a7ff5C91AFc63B43380F0C198BE8
Arg [1] : symbol (string): EVE
Arg [2] : name (string): Devery.io
Arg [3] : decimals (uint8): 18
Arg [4] : initialSupply (uint256): 0
Arg [5] : mintable (bool): True
Arg [6] : transferable (bool): False

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000f58546f5cde2a7ff5c91afc63b43380f0c198be8
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4556450000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [10] : 4465766572792e696f0000000000000000000000000000000000000000000000


Swarm Source

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