[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0xf1ac59b620f268629648517891ea8a231df18e4a2c1297edff83e27291d17ad850424911 day 7 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x1770c2a8166e66b9396d971d9e1f580b83d8ce7a21c6d78a86aaaeb677a49d1250424691 day 7 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0xe4e16445287505e842b1a32ab55bfa7191e8185bbca71f95274ecabba641b3b450424441 day 7 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x2e47953cab20ac162ab7b95b486bc02dd2ce62039605e24cfb83cbccc6f9862250424371 day 7 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x69de31c92bbf0a56b876fcccb47989b9e647e132a7ab34d8d8eaa92ab43084db50424051 day 8 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0xcb8d66c37c6bfae179b68a22f2fdc8826cbafca86a288fa52868d195bc58e44a50238674 days 4 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0xcad0e6be2ed2c8640f8e108fbbd47d85abec7cc59545b446ac1533e141d8832750238574 days 4 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x23b2e44d0c851cc26473629211be7134c22d9194a6ddb0cb9568c3de183abdb750237934 days 5 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x71de925e80502cd07d26d1c8a111929ef3b22767aaa9265d7c6da87518feb0de50218144 days 11 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x34173a079ffa0d86c646110ab7a3517a47d848865a6213dc37e1d3be9ee138d750172615 days 6 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0xb5ae23827af3ff3c9cc1a29c31917e1aa1c7db6defa99de83d640501f4c8a19650158225 days 11 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0xbb54f9ca5a3766127342cb0ee696f049ca98c2caea711701828da3ff1542602150157705 days 11 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0xd8eb8c5f9adb69e3988de5e741154469179e5527ac74a20bb8d7a941cbc5e1b850156725 days 12 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0xa73d6cb1dc65872bfe9eee36f991281c33fc250434fa4dc03b7a55e2b4fbd0a950156705 days 12 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x0d1a1a354f1b0dd03393987d4ba17c8482df1431acd579137b41b225f4abce3650125746 days 12 mins ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x660cf2c4beb5dd31ac0f3e019de4b9937f44b93c93acebf5a75732e2286cca1850125736 days 13 mins ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0xb24afef16a6707aec4bb7e93cfc2924b8cac03745b7c5b789b1d2cbd61ea990d50125616 days 16 mins ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x003d2a281ae88c74dfdcfe571c62bd02a12d7ea819131101d18ef7d49b6136e250123676 days 1 hr ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x3f69472cc49528973307bfcb85491fc4c81a565d1fb7ac0763a274490e8404e550105506 days 7 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x0f169dcc688f123948b85ebc1b422fc5947432e315d2da54854c6d79b209f02550105266 days 7 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x11dd9d46b85f5403754c5147f4350282dfc05659fe3cf8396f1de074c6aa335450104336 days 7 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x80f795e49b7f2bc2779c6e0cd9f3edaa9d1353bae4cb185cfe63c762ff86302e50103966 days 7 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0xc88bcab9cc91df346b9cbe3ef395698f9859bff3c919b73e0f25418eff53b7d050103506 days 7 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0x65ed483145ff4d2f2316e2f74827a27ea5e2ba8557daf4916c5c0ef5a9a48b1f50097646 days 9 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
0xd77bf383f31d147a2bddec55e87b7aa7018c2c4a3eb61d781eb90c2b8974699f50097096 days 10 hrs ago0x362fa7d41a47874cf5231dc12ac7ca1339d1090d0xdb53a3db5d9224fce5ab4459ae008bd2a43af7420 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: BTTSLib
Compiler Version: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

// ----------------------------------------------------------------------------
// BokkyPooBah's Token Teleportation Service v1.10
//
// https://github.com/bokkypoobah/BokkyPooBahsTokenTeleportationServiceSmartContract
//
// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018. The MIT Licence.
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// ----------------------------------------------------------------------------
contract ERC20Interface {
    function totalSupply() public view returns (uint);
    function balanceOf(address tokenOwner) public view returns (uint balance);
    function allowance(address tokenOwner, address spender) public view 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 executed
// ----------------------------------------------------------------------------
contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}


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

    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
        InvalidNonce,                      // 4 Invalid nonce
        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 2018. The MIT Licence.
// ----------------------------------------------------------------------------
library BTTSLib {
    struct Data {
        bool initialised;

        // 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 => uint) nextNonce;
    }


    // ------------------------------------------------------------------------
    // Constants
    // ------------------------------------------------------------------------
    uint public constant bttsVersion = 110;
    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.initialised);
        self.initialised = true;
        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, inspired by OpenZeppelin
    // ------------------------------------------------------------------------
    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(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.InvalidNonce) {
            return "Invalid nonce";
        } 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 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, address(this), data);
        return true;
    }

    // ------------------------------------------------------------------------
    // Signed function
    // ------------------------------------------------------------------------
    function signedTransferHash(Data storage /*self*/, address tokenOwner, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) {
        hash = keccak256(signedTransferSig, address(this), tokenOwner, to, tokens, fee, nonce);
    }
    function signedTransferCheck(Data storage self, 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, tokenOwner, to, tokens, fee, nonce);
        if (tokenOwner == address(0) || tokenOwner != ecrecoverFromSig(keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch;
        if (self.accountLocked[tokenOwner]) return BTTSTokenInterface.CheckResult.AccountLocked;
        if (self.nextNonce[tokenOwner] != nonce) return BTTSTokenInterface.CheckResult.InvalidNonce;
        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 tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) {
        require(self.transferable);
        bytes32 hash = signedTransferHash(self, tokenOwner, to, tokens, fee, nonce);
        require(tokenOwner != address(0) && tokenOwner == ecrecoverFromSig(keccak256(signingPrefix, hash), sig));
        require(!self.accountLocked[tokenOwner]);
        require(self.nextNonce[tokenOwner] == nonce);
        self.nextNonce[tokenOwner] = nonce + 1;
        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 tokenOwner, address spender, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) {
        hash = keccak256(signedApproveSig, address(this), tokenOwner, spender, tokens, fee, nonce);
    }
    function signedApproveCheck(Data storage self, 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, tokenOwner, spender, tokens, fee, nonce);
        if (tokenOwner == address(0) || tokenOwner != ecrecoverFromSig(keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch;
        if (self.accountLocked[tokenOwner]) return BTTSTokenInterface.CheckResult.AccountLocked;
        if (self.nextNonce[tokenOwner] != nonce) return BTTSTokenInterface.CheckResult.InvalidNonce;
        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 tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) {
        require(self.transferable);
        bytes32 hash = signedApproveHash(self, tokenOwner, spender, tokens, fee, nonce);
        require(tokenOwner != address(0) && tokenOwner == ecrecoverFromSig(keccak256(signingPrefix, hash), sig));
        require(!self.accountLocked[tokenOwner]);
        require(self.nextNonce[tokenOwner] == nonce);
        self.nextNonce[tokenOwner] = nonce + 1;
        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 spender, address from, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) {
        hash = keccak256(signedTransferFromSig, address(this), spender, from, to, tokens, fee, nonce);
    }
    function signedTransferFromCheck(Data storage self, 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, spender, from, to, tokens, fee, nonce);
        if (spender == address(0) || spender != ecrecoverFromSig(keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch;
        if (self.accountLocked[from]) return BTTSTokenInterface.CheckResult.AccountLocked;
        if (self.nextNonce[spender] != nonce) return BTTSTokenInterface.CheckResult.InvalidNonce;
        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 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, spender, from, to, tokens, fee, nonce);
        require(spender != address(0) && spender == ecrecoverFromSig(keccak256(signingPrefix, hash), sig));
        require(!self.accountLocked[from]);
        require(self.nextNonce[spender] == nonce);
        self.nextNonce[spender] = nonce + 1;
        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 tokenOwner, address spender, uint tokens, bytes data, uint fee, uint nonce) public view returns (bytes32 hash) {
        hash = keccak256(signedApproveAndCallSig, address(this), tokenOwner, spender, tokens, data, fee, nonce);
    }
    function signedApproveAndCallCheck(Data storage self, 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, tokenOwner, spender, tokens, data, fee, nonce);
        if (tokenOwner == address(0) || tokenOwner != ecrecoverFromSig(keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch;
        if (self.accountLocked[tokenOwner]) return BTTSTokenInterface.CheckResult.AccountLocked;
        if (self.nextNonce[tokenOwner] != nonce) return BTTSTokenInterface.CheckResult.InvalidNonce;
        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 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, tokenOwner, spender, tokens, data, fee, nonce);
        require(tokenOwner != address(0) && tokenOwner == ecrecoverFromSig(keccak256(signingPrefix, hash), sig));
        require(!self.accountLocked[tokenOwner]);
        require(self.nextNonce[tokenOwner] == nonce);
        self.nextNonce[tokenOwner] = nonce + 1;
        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(tokenOwner, tokens, address(this), data);
        return true;
    }
}


// ----------------------------------------------------------------------------
// BokkyPooBah's Token Teleportation Service Token v1.10
//
// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018. 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 accountLocked(address tokenOwner) public view returns (bool) {
        return data.accountLocked[tokenOwner];
    }
    function unlockAccount(address tokenOwner) public {
        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();
    }
    function nextNonce(address spender) public view returns (uint) {
        return data.nextNonce[spender];
    }

    // ------------------------------------------------------------------------
    // 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 view returns (uint) {
        return data.totalSupply - data.balances[address(0)];
    }
    function balanceOf(address tokenOwner) public view returns (uint balance) {
        return data.balances[tokenOwner];
    }
    function allowance(address tokenOwner, address spender) public view 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) {
        return data.approveAndCall(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(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(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(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(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(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(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(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(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(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(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(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(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.10
//
// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018. The MIT Licence.
// ----------------------------------------------------------------------------
contract BTTSTokenFactory is Owned {

    // ------------------------------------------------------------------------
    // Internal data
    // ------------------------------------------------------------------------
    mapping(address => bool) _verify;
    address[] public deployedTokens;

    // ------------------------------------------------------------------------
    // 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;
        deployedTokens.push(bttsTokenAddress);
        BTTSTokenListing(msg.sender, bttsTokenAddress, symbol, name, decimals,
            initialSupply, mintable, transferable);
    }


    // ------------------------------------------------------------------------
    // Number of deployed tokens
    // ------------------------------------------------------------------------
    function numberOfDeployedTokens() public view returns (uint) {
        return deployedTokens.length;
    }

    // ------------------------------------------------------------------------
    // 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 ABI  
[{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":"self","type":"BTTSLib.Data storage"},{"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":true,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":"BTTSTokenInterface.CheckResult"}],"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":"self","type":"BTTSLib.Data storage"},{"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"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"BTTSLib.Data storage"},{"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":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":"self","type":"BTTSLib.Data storage"},{"name":"minter","type":"address"}],"name":"setMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":"signedTransferSig","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"name":"tokenAddress","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":true,"inputs":[{"name":"","type":"BTTSLib.Data storage"},{"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":"","type":"BTTSLib.Data storage"},{"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":"bttsVersion","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"name":"newOwner","type":"address"}],"name":"transferOwnershipImmediately","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"}],"name":"enableTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":"signedApproveSig","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"name":"tokenOwner","type":"address"}],"name":"unlockAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":"BTTSTokenInterface.CheckResult"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":"signedTransferFromSig","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"BTTSLib.Data storage"},{"name":"result","type":"BTTSTokenInterface.CheckResult"}],"name":"getCheckResultMessage","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"sig","type":"bytes"}],"name":"ecrecoverFromSig","outputs":[{"name":"recoveredAddress","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":"BTTSTokenInterface.CheckResult"}],"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":"self","type":"BTTSLib.Data storage"}],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"BTTSLib.Data storage"},{"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":"self","type":"BTTSLib.Data storage"},{"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":"BTTSTokenInterface.CheckResult"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"BTTSLib.Data storage"},{"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":"self","type":"BTTSLib.Data storage"}],"name":"disableMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"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"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000f57600080fd5b6132c38061001e6000396000f3006060604052600436106101925763ffffffff60e060020a60003504166306ad0e7b811461019757806306fc8397146101c557806311a44a6b1461023d578063233907a3146102df57806335659df9146103045780633c0734a3146103bb57806340c3e55b146103f35780635250afa11461046b5780635b08c4d8146104825780635b1ea8581461050057806364850de51461050857806367b996541461051f5780637512eb851461053f5780637f3f30bf146105595780638099f6cb146105b6578063836be758146105e257806389443aac146106085780638fedeca614610610578063976f56a5146106275780639fb6f52614610632578063a3fc136a14610651578063b39d0e0914610659578063b457c85f14610670578063bed568f7146106e8578063c14a932f14610702578063c3af8bcb1461070a578063d4acaf6c14610792578063e0ccb749146107f9578063e2cc7a51146108b4578063ea300bda146108bc578063ed3b174b146108c7578063f12d346e14610933578063f134977b146109ab578063f72cb00a14610a66575b600080fd5b6101b1600435600160a060020a0360243516604435610a71565b604051901515815260200160405180910390f35b6101b16004803590600160a060020a036024803582169260443590921691606435916084359160a4359160e49060c43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250610bab915050565b6102bb6004803590600160a060020a036024803582169260443583169260643516916084359160a4359160c43591906101049060e43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250610df7915050565b604051808260098111156102cb57fe5b60ff16815260200191505060405180910390f35b6102e76110ad565b604051600160e060020a0319909116815260200160405180910390f35b6103b9600480359060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833560ff16936020810135935060408101351515925060600135151590506110d1565b005b6103e1600435600160a060020a036024358116906044351660643560843560a43561125b565b60405190815260200160405180910390f35b6101b16004803590600160a060020a036024803582169260443590921691606435916084359160a4359160e49060c43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a031692506112fc915050565b6103b9600435600160a060020a03602435166114d6565b6101b16004803590600160a060020a036024803582169260443583169260643516916084359160a4359160c43591906101049060e43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611595915050565b6102e76118a5565b6103b9600435600160a060020a03602435166118c9565b6101b1600435600160a060020a036024358116906044351660643561191a565b6101b1600435600160a060020a0360243516604435611a5b565b6101b1600480359060248035600160a060020a0316916044359160849060643590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611b0795505050505050565b6103e1600435600160a060020a036024358116906044358116906064351660843560a43560c435611c84565b6103e1600435600160a060020a036024358116906044351660643560843560a435611d31565b6103e1611dd2565b6103b9600435600160a060020a0360243516611dd7565b6103b9600435611e84565b6101b1600435600160a060020a03602435166044356064351515611f12565b6102e7612069565b6103b9600435600160a060020a036024351661208d565b6102bb6004803590600160a060020a036024803582169260443590921691606435916084359160a4359160e49060c43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250612128915050565b6101b1600435600160a060020a03602435166044356122a5565b6102e7612327565b61071b60043560ff6024351661234b565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561075757808201518382015260200161073f565b50505050905090810190601f1680156107845780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107dd600480359060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506126cf95505050505050565b604051600160a060020a03909116815260200160405180910390f35b6102bb6004803590600160a060020a0360248035821692604435909216916064359160a49060843590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094968635966020808201359750919550606081019450604090810135860180830194503592508291601f83018190048102019051908101604052818152929190602084018383808284375094965050509235600160a060020a031692506127af915050565b61071b61292e565b6103b9600435612953565b6103e16004803590600160a060020a0360248035821692604435909216916064359160a49060843590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050843594602001359350612a0592505050565b6102bb6004803590600160a060020a036024803582169260443590921691606435916084359160a4359160e49060c43590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250612af0915050565b6101b16004803590600160a060020a0360248035821692604435909216916064359160a49060843590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094968635966020808201359750919550606081019450604090810135860180830194503592508291601f83018190048102019051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250612cd9915050565b6103b960043561303b565b600283015460009060a860020a900460ff1680610ad05750600284015460a060020a900460ff168015610ad05750835433600160a060020a03908116610100909204161480610ad05750600284015433600160a060020a039081169116145b1515610adb57600080fd5b600160a060020a033316600090815260038501602052604090205460ff1615610b0357600080fd5b600160a060020a0333166000908152600885016020526040902054610b289083613165565b600160a060020a0333811660009081526008870160205260408082209390935590851681522054610b59908361317a565b600160a060020a03808516600081815260088801602052604090819020939093559133909116906000805160206132588339815191529085905190815260200160405180910390a35060019392505050565b6002880154600090819060a860020a900460ff161515610bca57600080fd5b610bd88a8a8a8a8a8a61125b565b9050600160a060020a03891615801590610c905750610c7b6040805190810160405280601c8152602001600080516020613238833981519152815250826040518083805190602001908083835b60208310610c445780518252601f199092019160209182019101610c25565b6001836020036101000a038019825116818451161790925250505091909101928352505060200190506040518091039020856126cf565b600160a060020a031689600160a060020a0316145b1515610c9b57600080fd5b600160a060020a038916600090815260038b01602052604090205460ff1615610cc357600080fd5b600160a060020a0389166000908152600a8b0160205260409020548514610ce957600080fd5b600160a060020a03808a166000818152600a8d016020908152604080832060018b01905560098f018252808320948d1680845294909152908190208a9055600080516020613278833981519152908a905190815260200160405180910390a3600160a060020a038916600090815260088b016020526040902054610d6d9087613165565b600160a060020a03808b16600090815260088d0160205260408082209390935590851681522054610d9e908761317a565b600160a060020a03808516600081815260088e016020526040908190209390935591908b16906000805160206132588339815191529089905190815260200160405180910390a3600191505b5098975050505050505050565b60008060008b60020160159054906101000a900460ff161515610e1d576001925061109e565b610e2c8c8c8c8c8c8c8c611c84565b9150600160a060020a038b161580610ee35750610ecd6040805190810160405280601c8152602001600080516020613238833981519152815250836040518083805190602001908083835b60208310610e965780518252601f199092019160209182019101610e77565b6001836020036101000a038019825116818451161790925250505091909101928352505060200190506040518091039020866126cf565b600160a060020a03168b600160a060020a031614155b15610ef1576003925061109e565b600160a060020a038a16600090815260038d01602052604090205460ff1615610f1d576002925061109e565b600160a060020a038b166000908152600a8d0160205260409020548614610f47576004925061109e565b610f51888861317a565b9050878c60090160008c600160a060020a0316600160a060020a0316815260200190815260200160002060008d600160a060020a0316600160a060020a03168152602001908152602001600020541015610fae576005925061109e565b600160a060020a03808b16600090815260098e0160209081526040808320938f168352929052205481901015610fe7576006925061109e565b600160a060020a038a16600090815260088d01602052604090205488901015611013576007925061109e565b600160a060020a038a16600090815260088d0160205260409020548190101561103f576008925061109e565b600160a060020a038916600090815260088d016020526040902054888101101561106c576009925061109e565b600160a060020a038416600090815260088d0160205260409020548781011015611099576009925061109e565b600092505b50509998505050505050505050565b7ff16f9b530000000000000000000000000000000000000000000000000000000081565b875460ff16156110e057600080fd5b8754600160ff199091161774ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a038916021788556004880186805161112992916020019061318a565b506005880185805161113f92916020019061318a565b5060068801805460ff191660ff861617905560008311156111fa57600160a060020a03808816600090815260088a01602052604080822086905560078b018690558a546101009004909216917ff9288aa3c16d157f87dbf24b824f702d4c76887d38e8fd6ef8212ad19a712aee91869151918252151560208201526040908101905180910390a287546101009004600160a060020a031660006000805160206132588339815191528560405190815260200160405180910390a35b6002909701805497151560a860020a0275ff0000000000000000000000000000000000000000001992151560a060020a0274ff0000000000000000000000000000000000000000199099169890981791909116969096179095555050505050565b60007fe9afa7a100000000000000000000000000000000000000000000000000000000308787878787604051600160e060020a031990971687526c01000000000000000000000000600160a060020a03968716810260048901529486168502601888015292909416909202602c8501526040808501929092526060840192909252608083019190915260a09091019051809103902090509695505050505050565b6002880154600090819060a860020a900460ff16151561131b57600080fd5b6113298a8a8a8a8a8a611d31565b9050600160a060020a038916158015906113a957506113946040805190810160405280601c81526020016000805160206132388339815191528152508260405180838051906020019080838360208310610c445780518252601f199092019160209182019101610c25565b600160a060020a031689600160a060020a0316145b15156113b457600080fd5b600160a060020a038916600090815260038b01602052604090205460ff16156113dc57600080fd5b600160a060020a0389166000908152600a8b016020526040902054851461140257600080fd5b600160a060020a0389166000908152600a8b016020908152604080832060018901905560088d019091529020546114399088613165565b600160a060020a03808b16600090815260088d01602052604080822093909355908a168152205461146a908861317a565b600160a060020a03808a16600081815260088e016020526040908190209390935591908b1690600080516020613258833981519152908a905190815260200160405180910390a3600160a060020a038916600090815260088b016020526040902054610d6d9087613165565b815433600160a060020a0390811661010090920416146114f557600080fd5b600282015460a060020a900460ff16151561150f57600080fd5b60028201547f1cf2de25c5bf439ac0287061c3a0fa69b3b02867d0ccfd2ded34e42577050b7390600160a060020a031682604051600160a060020a039283168152911660208201526040908101905180910390a1600291909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b6002890154600090819060a860020a900460ff1615156115b457600080fd5b6115c38b8b8b8b8b8b8b611c84565b9050600160a060020a038a1615801590611643575061162e6040805190810160405280601c81526020016000805160206132388339815191528152508260405180838051906020019080838360208310610c445780518252601f199092019160209182019101610c25565b600160a060020a03168a600160a060020a0316145b151561164e57600080fd5b600160a060020a038916600090815260038c01602052604090205460ff161561167657600080fd5b600160a060020a038a166000908152600a8c016020526040902054851461169c57600080fd5b600160a060020a03808b166000908152600a8d016020908152604080832060018a019055928c16825260088e01905220546116d79088613165565b600160a060020a03808b16600090815260088e01602090815260408083209490945560098f018152838220928e1682529190915220546117179088613165565b600160a060020a03808b16600090815260098e01602090815260408083208f85168452825280832094909455918b16815260088e01909152205461175b908861317a565b600160a060020a03808a16600081815260088f016020526040908190209390935591908b1690600080516020613258833981519152908a905190815260200160405180910390a3600160a060020a038916600090815260088c0160205260409020546117c79087613165565b600160a060020a03808b16600090815260088e01602090815260408083209490945560098f018152838220928e1682529190915220546118079087613165565b600160a060020a03808b16600090815260098e01602090815260408083208f85168452825280832094909455918616815260088e01909152205461184b908761317a565b600160a060020a03808516600081815260088f016020526040908190209390935591908b16906000805160206132588339815191529089905190815260200160405180910390a3600191505b509998505050505050505050565b7f7532eaac0000000000000000000000000000000000000000000000000000000081565b815433600160a060020a0390811661010090920416146118e857600080fd5b600191909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600284015460009060a860020a900460ff16151561193757600080fd5b600160a060020a038416600090815260038601602052604090205460ff161561195f57600080fd5b600160a060020a03841660009081526008860160205260409020546119849083613165565b600160a060020a0380861660009081526008880160209081526040808320949094556009890181528382203390931682529190915220546119c59083613165565b600160a060020a038086166000908152600988016020908152604080832033851684528252808320949094559186168152600888019091522054611a09908361317a565b600160a060020a038085166000818152600889016020526040908190209390935591908616906000805160206132588339815191529085905190815260200160405180910390a3506001949350505050565b825460009033600160a060020a039081166101009092041614611a7d57600080fd5b8354600160a060020a038085169163a9059cbb91610100909104168460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611ae557600080fd5b6102c65a03f11515611af657600080fd5b505050604051805195945050505050565b600160a060020a033316600090815260038501602052604081205460ff1615611b2f57600080fd5b600160a060020a033381166000818152600988016020908152604080832094891680845294909152908190208690556000805160206132788339815191529086905190815260200160405180910390a383600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611c17578082015183820152602001611bff565b50505050905090810190601f168015611c445780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515611c6557600080fd5b6102c65a03f11515611c7657600080fd5b506001979650505050505050565b60007f344bcc7d0000000000000000000000000000000000000000000000000000000030888888888888604051600160e060020a031990981688526c01000000000000000000000000600160a060020a03978816810260048a0152958716860260188901529386168502602c8801529190941690920260408086019190915260548501939093526074840191909152609483015260b4909101905180910390209050979650505050505050565b60007f7532eaac00000000000000000000000000000000000000000000000000000000308787878787604051600160e060020a031990971687526c01000000000000000000000000600160a060020a03968716810260048901529486168502601888015292909416909202602c8501526040808501929092526060840192909252608083019190915260a09091019051809103902090509695505050505050565b606e81565b815433600160a060020a039081166101009092041614611df657600080fd5b8154600160a060020a03808316916101009004167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38154600160a060020a039091166101000274ffffffffffffffffffffffffffffffffffffffff0019909116178155600101805473ffffffffffffffffffffffffffffffffffffffff19169055565b805433600160a060020a039081166101009092041614611ea357600080fd5b600281015460a860020a900460ff1615611ebc57600080fd5b60028101805475ff000000000000000000000000000000000000000000191660a860020a1790557feadb24812ab3c9a55c774958184293ebdb6c7f6a2dbab11f397d80c86feb65d360405160405180910390a150565b600284015460009060a060020a900460ff161515611f2f57600080fd5b600285015433600160a060020a0390811691161480611f605750845433600160a060020a0390811661010090920416145b1515611f6b57600080fd5b8115611f9757600160a060020a03841660009081526003860160205260409020805460ff191660011790555b600160a060020a0384166000908152600886016020526040902054611fbc908461317a565b600160a060020a03851660009081526008870160205260409020556007850154611fe6908461317a565b6007860155600160a060020a0384167ff9288aa3c16d157f87dbf24b824f702d4c76887d38e8fd6ef8212ad19a712aee8484604051918252151560208201526040908101905180910390a2600160a060020a03841660006000805160206132588339815191528560405190815260200160405180910390a3506001949350505050565b7fe9afa7a10000000000000000000000000000000000000000000000000000000081565b815433600160a060020a0390811661010090920416146120ac57600080fd5b600160a060020a038116600090815260038301602052604090205460ff1615156120d557600080fd5b600160a060020a038116600081815260038401602052604090819020805460ff191690557fb7df7ef889418eecc895118f0d863c3074abf7769bfe39ba852192114c725dfc905160405180910390a25050565b6002880154600090819060a860020a900460ff16151561214b5760019150610dea565b6121598a8a8a8a8a8a61125b565b9050600160a060020a03891615806121d857506121c26040805190810160405280601c81526020016000805160206132388339815191528152508260405180838051906020019080838360208310610c445780518252601f199092019160209182019101610c25565b600160a060020a031689600160a060020a031614155b156121e65760039150610dea565b600160a060020a038916600090815260038b01602052604090205460ff16156122125760029150610dea565b600160a060020a0389166000908152600a8b016020526040902054851461223c5760049150610dea565b600160a060020a038916600090815260088b016020526040902054869010156122685760089150610dea565b600160a060020a038316600090815260088b01602052604090205486810110156122955760099150610dea565b5060009998505050505050505050565b600160a060020a033316600090815260038401602052604081205460ff16156122cd57600080fd5b600160a060020a033381166000818152600987016020908152604080832094881680845294909152908190208590556000805160206132788339815191529085905190815260200160405180910390a35060019392505050565b7f344bcc7d0000000000000000000000000000000000000000000000000000000081565b612353613208565b600082600981111561236157fe5b14156123a25760408051908101604052600781527f5375636365737300000000000000000000000000000000000000000000000000602082015290506126c9565b60018260098111156123b057fe5b14156123f15760408051908101604052601b81527f546f6b656e73206e6f74207472616e7366657261626c65207965740000000000602082015290506126c9565b60028260098111156123ff57fe5b14156124405760408051908101604052600e81527f4163636f756e74206c6f636b6564000000000000000000000000000000000000602082015290506126c9565b600382600981111561244e57fe5b141561248f5760408051908101604052601b81527f4d69736d6174636820696e207369676e696e67206163636f756e740000000000602082015290506126c9565b600482600981111561249d57fe5b14156124de5760408051908101604052600d81527f496e76616c6964206e6f6e636500000000000000000000000000000000000000602082015290506126c9565b60058260098111156124ec57fe5b141561252d5760408051908101604052601c81527f496e73756666696369656e7420617070726f76656420746f6b656e7300000000602082015290506126c9565b600682600981111561253b57fe5b14156125a557606060405190810160405280602581526020017f496e73756666696369656e7420617070726f76656420746f6b656e7320666f7281526020017f206665657300000000000000000000000000000000000000000000000000000081525090506126c9565b60078260098111156125b357fe5b14156125f45760408051908101604052601381527f496e73756666696369656e7420746f6b656e7300000000000000000000000000602082015290506126c9565b600882600981111561260257fe5b14156126435760408051908101604052601c81527f496e73756666696369656e7420746f6b656e7320666f72206665657300000000602082015290506126c9565b600982600981111561265157fe5b14156126925760408051908101604052600e81527f4f766572666c6f77206572726f72000000000000000000000000000000000000602082015290506126c9565b60408051908101604052600d81527f556e6b6e6f776e206572726f7200000000000000000000000000000000000000602082015290505b92915050565b60008060008084516041146126e757600093506127a6565b6020850151925060408501519150606085015160001a9050601b8160ff16101561270f57601b015b8060ff16601b1415801561272757508060ff16601c14155b1561273557600093506127a6565b6001868285856040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561279a57600080fd5b50506020604051035193505b50505092915050565b6002890154600090819060a860020a900460ff1615156127d25760019150611897565b6127e18b8b8b8b8b8b8b612a05565b9050600160a060020a038a161580612860575061284a6040805190810160405280601c81526020016000805160206132388339815191528152508260405180838051906020019080838360208310610c445780518252601f199092019160209182019101610c25565b600160a060020a03168a600160a060020a031614155b1561286e5760039150611897565b600160a060020a038a16600090815260038c01602052604090205460ff161561289a5760029150611897565b600160a060020a038a166000908152600a8c01602052604090205485146128c45760049150611897565b600160a060020a038a16600090815260088c016020526040902054869010156128f05760089150611897565b600160a060020a038316600090815260088c016020526040902054868101101561291d5760099150611897565b5060009a9950505050505050505050565b60408051908101604052601c8152600080516020613238833981519152602082015281565b600181015433600160a060020a0390811691161461297057600080fd5b60018101548154600160a060020a0391821691610100909104167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600181018054825474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a038316021790925573ffffffffffffffffffffffffffffffffffffffff199091169055565b60007ff16f9b530000000000000000000000000000000000000000000000000000000030888888888888604051600160e060020a0319891681526c01000000000000000000000000600160a060020a03808a168202600484015288811682026018840152871602602c820152604081018590526060810184805190602001908083835b60208310612aa75780518252601f199092019160209182019101612a88565b6001836020036101000a03801982511681845116179092525050509190910193845250506020820152604090810196509450505050505180910390209050979650505050505050565b60008060008a60020160159054906101000a900460ff161515612b165760019250612ccb565b612b248b8b8b8b8b8b611d31565b9150600160a060020a038a161580612ba35750612b8d6040805190810160405280601c81526020016000805160206132388339815191528152508360405180838051906020019080838360208310610e965780518252601f199092019160209182019101610e77565b600160a060020a03168a600160a060020a031614155b15612bb15760039250612ccb565b600160a060020a038a16600090815260038c01602052604090205460ff1615612bdd5760029250612ccb565b600160a060020a038a166000908152600a8c0160205260409020548614612c075760049250612ccb565b612c11888861317a565b600160a060020a038b16600090815260088d01602052604090205490915088901015612c405760079250612ccb565b600160a060020a038a16600090815260088c01602052604090205481901015612c6c5760089250612ccb565b600160a060020a038916600090815260088c0160205260409020548881011015612c995760099250612ccb565b600160a060020a038416600090815260088c0160205260409020548781011015612cc65760099250612ccb565b600092505b505098975050505050505050565b6002890154600090819060a860020a900460ff161515612cf857600080fd5b612d078b8b8b8b8b8b8b612a05565b9050600160a060020a038a1615801590612d875750612d726040805190810160405280601c81526020016000805160206132388339815191528152508260405180838051906020019080838360208310610c445780518252601f199092019160209182019101610c25565b600160a060020a03168a600160a060020a0316145b1515612d9257600080fd5b600160a060020a038a16600090815260038c01602052604090205460ff1615612dba57600080fd5b600160a060020a038a166000908152600a8c0160205260409020548514612de057600080fd5b846001018b600a0160008c600160a060020a0316600160a060020a0316815260200190815260200160002081905550878b60090160008c600160a060020a0316600160a060020a0316815260200190815260200160002060008b600160a060020a0316600160a060020a031681526020019081526020016000208190555088600160a060020a03168a600160a060020a03166000805160206132788339815191528a60405190815260200160405180910390a3600160a060020a038a16600090815260088c016020526040902054612eb89087613165565b600160a060020a03808c16600090815260088e0160205260408082209390935590851681522054612ee9908761317a565b600160a060020a03808516600081815260088f016020526040908190209390935591908c16906000805160206132588339815191529089905190815260200160405180910390a388600160a060020a0316638f4ffcb18b8a308b6040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612fc8578082015183820152602001612fb0565b50505050905090810190601f168015612ff55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561301657600080fd5b6102c65a03f1151561302757600080fd5b5060019d9c50505050505050505050505050565b600281015460a060020a900460ff16151561305557600080fd5b600281015433600160a060020a03908116911614806130865750805433600160a060020a0390811661010090920416145b151561309157600080fd5b60028101805474ff0000000000000000000000000000000000000000198116909155600160a060020a0316156131365760028101547f1cf2de25c5bf439ac0287061c3a0fa69b3b02867d0ccfd2ded34e42577050b7390600160a060020a03166000604051600160a060020a039283168152911660208201526040908101905180910390a160028101805473ffffffffffffffffffffffffffffffffffffffff191690555b7faf79b4370f6af9d950564bbe6b81f7f0834c003c455db9248f4e55e6bf865eb760405160405180910390a150565b60008282111561317457600080fd5b50900390565b818101828110156126c957600080fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106131cb57805160ff19168380011785556131f8565b828001600101855582156131f8579182015b828111156131f85782518255916020019190600101906131dd565b5061320492915061321a565b5090565b60206040519081016040526000815290565b61323491905b808211156132045760008155600101613220565b90560019457468657265756d205369676e6564204d6573736167653a0a333200000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a165627a7a72305820dbfaee8587da7b0e992e6332a324e4030afb395056213feb9e391cfb4d2104c30029

   Swarm Source:
bzzr://dbfaee8587da7b0e992e6332a324e4030afb395056213feb9e391cfb4d2104c3

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward