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)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | 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 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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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.