Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
722,935 SIFT
Holders
608 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SmartInvestmentFundToken
Compiler Version
v0.4.11+commit.68ef5810
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-07-17 */ pragma solidity ^0.4.11; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /* The authentication manager details user accounts that have access to certain priviledges and keeps a permanent ledger of who has and has had these rights. */ contract AuthenticationManager { /* Map addresses to admins */ mapping (address => bool) adminAddresses; /* Map addresses to account readers */ mapping (address => bool) accountReaderAddresses; /* Details of all admins that have ever existed */ address[] adminAudit; /* Details of all account readers that have ever existed */ address[] accountReaderAudit; /* Fired whenever an admin is added to the contract. */ event AdminAdded(address addedBy, address admin); /* Fired whenever an admin is removed from the contract. */ event AdminRemoved(address removedBy, address admin); /* Fired whenever an account-reader contract is added. */ event AccountReaderAdded(address addedBy, address account); /* Fired whenever an account-reader contract is removed. */ event AccountReaderRemoved(address removedBy, address account); /* When this contract is first setup we use the creator as the first admin */ function AuthenticationManager() { /* Set the first admin to be the person creating the contract */ adminAddresses[msg.sender] = true; AdminAdded(0, msg.sender); adminAudit.length++; adminAudit[adminAudit.length - 1] = msg.sender; } /* Gets the contract version for validation */ function contractVersion() constant returns(uint256) { // Admin contract identifies as 100YYYYMMDDHHMM return 100201707171503; } /* Gets whether or not the specified address is currently an admin */ function isCurrentAdmin(address _address) constant returns (bool) { return adminAddresses[_address]; } /* Gets whether or not the specified address has ever been an admin */ function isCurrentOrPastAdmin(address _address) constant returns (bool) { for (uint256 i = 0; i < adminAudit.length; i++) if (adminAudit[i] == _address) return true; return false; } /* Gets whether or not the specified address is currently an account reader */ function isCurrentAccountReader(address _address) constant returns (bool) { return accountReaderAddresses[_address]; } /* Gets whether or not the specified address has ever been an admin */ function isCurrentOrPastAccountReader(address _address) constant returns (bool) { for (uint256 i = 0; i < accountReaderAudit.length; i++) if (accountReaderAudit[i] == _address) return true; return false; } /* Adds a user to our list of admins */ function addAdmin(address _address) { /* Ensure we're an admin */ if (!isCurrentAdmin(msg.sender)) throw; // Fail if this account is already admin if (adminAddresses[_address]) throw; // Add the user adminAddresses[_address] = true; AdminAdded(msg.sender, _address); adminAudit.length++; adminAudit[adminAudit.length - 1] = _address; } /* Removes a user from our list of admins but keeps them in the history audit */ function removeAdmin(address _address) { /* Ensure we're an admin */ if (!isCurrentAdmin(msg.sender)) throw; /* Don't allow removal of self */ if (_address == msg.sender) throw; // Fail if this account is already non-admin if (!adminAddresses[_address]) throw; /* Remove this admin user */ adminAddresses[_address] = false; AdminRemoved(msg.sender, _address); } /* Adds a user/contract to our list of account readers */ function addAccountReader(address _address) { /* Ensure we're an admin */ if (!isCurrentAdmin(msg.sender)) throw; // Fail if this account is already in the list if (accountReaderAddresses[_address]) throw; // Add the user accountReaderAddresses[_address] = true; AccountReaderAdded(msg.sender, _address); accountReaderAudit.length++; accountReaderAudit[adminAudit.length - 1] = _address; } /* Removes a user/contracts from our list of account readers but keeps them in the history audit */ function removeAccountReader(address _address) { /* Ensure we're an admin */ if (!isCurrentAdmin(msg.sender)) throw; // Fail if this account is already not in the list if (!accountReaderAddresses[_address]) throw; /* Remove this admin user */ accountReaderAddresses[_address] = false; AccountReaderRemoved(msg.sender, _address); } } contract IcoPhaseManagement { using SafeMath for uint256; /* Defines whether or not we are in the ICO phase */ bool public icoPhase = true; /* Defines whether or not the ICO has been abandoned */ bool public icoAbandoned = false; /* Defines whether or not the SIFT contract address has yet been set. */ bool siftContractDefined = false; /* Defines the sale price during ICO */ uint256 constant icoUnitPrice = 10 finney; /* If an ICO is abandoned and some withdrawals fail then this map allows people to request withdrawal of locked-in ether. */ mapping(address => uint256) public abandonedIcoBalances; /* Defines our interface to the SIFT contract. */ SmartInvestmentFundToken smartInvestmentFundToken; /* Defines the admin contract we interface with for credentails. */ AuthenticationManager authenticationManager; /* Defines the time that the ICO starts. */ uint256 constant public icoStartTime = 1501545600; // August 1st 2017 at 00:00:00 UTC /* Defines the time that the ICO ends. */ uint256 constant public icoEndTime = 1505433600; // September 15th 2017 at 00:00:00 UTC /* Defines our event fired when the ICO is closed */ event IcoClosed(); /* Defines our event fired if the ICO is abandoned */ event IcoAbandoned(string details); /* Ensures that once the ICO is over this contract cannot be used until the point it is destructed. */ modifier onlyDuringIco { bool contractValid = siftContractDefined && !smartInvestmentFundToken.isClosed(); if (!contractValid || (!icoPhase && !icoAbandoned)) throw; _; } /* This modifier allows a method to only be called by current admins */ modifier adminOnly { if (!authenticationManager.isCurrentAdmin(msg.sender)) throw; _; } /* Create the ICO phase managerment and define the address of the main SIFT contract. */ function IcoPhaseManagement(address _authenticationManagerAddress) { /* A basic sanity check */ if (icoStartTime >= icoEndTime) throw; /* Setup access to our other contracts and validate their versions */ authenticationManager = AuthenticationManager(_authenticationManagerAddress); if (authenticationManager.contractVersion() != 100201707171503) throw; } /* Set the SIFT contract address as a one-time operation. This happens after all the contracts are created and no other functionality can be used until this is set. */ function setSiftContractAddress(address _siftContractAddress) adminOnly { /* This can only happen once in the lifetime of this contract */ if (siftContractDefined) throw; /* Setup access to our other contracts and validate their versions */ smartInvestmentFundToken = SmartInvestmentFundToken(_siftContractAddress); if (smartInvestmentFundToken.contractVersion() != 500201707171440) throw; siftContractDefined = true; } /* Gets the contract version for validation */ function contractVersion() constant returns(uint256) { /* ICO contract identifies as 300YYYYMMDDHHMM */ return 300201707171440; } /* Close the ICO phase and transition to execution phase */ function close() adminOnly onlyDuringIco { // Forbid closing contract before the end of ICO if (now <= icoEndTime) throw; // Close the ICO icoPhase = false; IcoClosed(); // Withdraw funds to the caller if (!msg.sender.send(this.balance)) throw; } /* Handle receiving ether in ICO phase - we work out how much the user has bought, allocate a suitable balance and send their change */ function () onlyDuringIco payable { // Forbid funding outside of ICO if (now < icoStartTime || now > icoEndTime) throw; /* Determine how much they've actually purhcased and any ether change */ uint256 tokensPurchased = msg.value / icoUnitPrice; uint256 purchaseTotalPrice = tokensPurchased * icoUnitPrice; uint256 change = msg.value.sub(purchaseTotalPrice); /* Increase their new balance if they actually purchased any */ if (tokensPurchased > 0) smartInvestmentFundToken.mintTokens(msg.sender, tokensPurchased); /* Send change back to recipient */ if (change > 0 && !msg.sender.send(change)) throw; } /* Abandons the ICO and returns funds to shareholders. Any failed funds can be separately withdrawn once the ICO is abandoned. */ function abandon(string details) adminOnly onlyDuringIco { // Forbid closing contract before the end of ICO if (now <= icoEndTime) throw; /* If already abandoned throw an error */ if (icoAbandoned) throw; /* Work out a refund per share per share */ uint256 paymentPerShare = this.balance / smartInvestmentFundToken.totalSupply(); /* Enum all accounts and send them refund */ uint numberTokenHolders = smartInvestmentFundToken.tokenHolderCount(); uint256 totalAbandoned = 0; for (uint256 i = 0; i < numberTokenHolders; i++) { /* Calculate how much goes to this shareholder */ address addr = smartInvestmentFundToken.tokenHolder(i); uint256 etherToSend = paymentPerShare * smartInvestmentFundToken.balanceOf(addr); if (etherToSend < 1) continue; /* Allocate appropriate amount of fund to them */ abandonedIcoBalances[addr] = abandonedIcoBalances[addr].add(etherToSend); totalAbandoned = totalAbandoned.add(etherToSend); } /* Audit the abandonment */ icoAbandoned = true; IcoAbandoned(details); // There should be no money left, but withdraw just incase for manual resolution uint256 remainder = this.balance.sub(totalAbandoned); if (remainder > 0) if (!msg.sender.send(remainder)) // Add this to the callers balance for emergency refunds abandonedIcoBalances[msg.sender] = abandonedIcoBalances[msg.sender].add(remainder); } /* Allows people to withdraw funds that failed to send during the abandonment of the ICO for any reason. */ function abandonedFundWithdrawal() { // This functionality only exists if an ICO was abandoned if (!icoAbandoned || abandonedIcoBalances[msg.sender] == 0) throw; // Attempt to send them to funds uint256 funds = abandonedIcoBalances[msg.sender]; abandonedIcoBalances[msg.sender] = 0; if (!msg.sender.send(funds)) throw; } } /* The SIFT itself is a simple extension of the ERC20 that allows for granting other SIFT contracts special rights to act on behalf of all transfers. */ contract SmartInvestmentFundToken { using SafeMath for uint256; /* Map all our our balances for issued tokens */ mapping (address => uint256) balances; /* Map between users and their approval addresses and amounts */ mapping(address => mapping (address => uint256)) allowed; /* List of all token holders */ address[] allTokenHolders; /* The name of the contract */ string public name; /* The symbol for the contract */ string public symbol; /* How many DPs are in use in this contract */ uint8 public decimals; /* Defines the current supply of the token in its own units */ uint256 totalSupplyAmount = 0; /* Defines the address of the ICO contract which is the only contract permitted to mint tokens. */ address public icoContractAddress; /* Defines whether or not the fund is closed. */ bool public isClosed; /* Defines the contract handling the ICO phase. */ IcoPhaseManagement icoPhaseManagement; /* Defines the admin contract we interface with for credentails. */ AuthenticationManager authenticationManager; /* Fired when the fund is eventually closed. */ event FundClosed(); /* Our transfer event to fire whenever we shift SMRT around */ event Transfer(address indexed from, address indexed to, uint256 value); /* Our approval event when one user approves another to control */ event Approval(address indexed _owner, address indexed _spender, uint256 _value); /* Create a new instance of this fund with links to other contracts that are required. */ function SmartInvestmentFundToken(address _icoContractAddress, address _authenticationManagerAddress) { // Setup defaults name = "Smart Investment Fund Token"; symbol = "SIFT"; decimals = 0; /* Setup access to our other contracts and validate their versions */ icoPhaseManagement = IcoPhaseManagement(_icoContractAddress); if (icoPhaseManagement.contractVersion() != 300201707171440) throw; authenticationManager = AuthenticationManager(_authenticationManagerAddress); if (authenticationManager.contractVersion() != 100201707171503) throw; /* Store our special addresses */ icoContractAddress = _icoContractAddress; } modifier onlyPayloadSize(uint numwords) { assert(msg.data.length == numwords * 32 + 4); _; } /* This modifier allows a method to only be called by account readers */ modifier accountReaderOnly { if (!authenticationManager.isCurrentAccountReader(msg.sender)) throw; _; } modifier fundSendablePhase { // If it's in ICO phase, forbid it if (icoPhaseManagement.icoPhase()) throw; // If it's abandoned, forbid it if (icoPhaseManagement.icoAbandoned()) throw; // We're good, funds can now be transferred _; } /* Gets the contract version for validation */ function contractVersion() constant returns(uint256) { /* SIFT contract identifies as 500YYYYMMDDHHMM */ return 500201707171440; } /* Transfer funds between two addresses that are not the current msg.sender - this requires approval to have been set separately and follows standard ERC20 guidelines */ function transferFrom(address _from, address _to, uint256 _amount) fundSendablePhase onlyPayloadSize(3) returns (bool) { if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0 && balances[_to].add(_amount) > balances[_to]) { bool isNew = balances[_to] == 0; balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); if (isNew) tokenOwnerAdd(_to); if (balances[_from] == 0) tokenOwnerRemove(_from); Transfer(_from, _to, _amount); return true; } return false; } /* Returns the total number of holders of this currency. */ function tokenHolderCount() accountReaderOnly constant returns (uint256) { return allTokenHolders.length; } /* Gets the token holder at the specified index. */ function tokenHolder(uint256 _index) accountReaderOnly constant returns (address) { return allTokenHolders[_index]; } /* Adds an approval for the specified account to spend money of the message sender up to the defined limit */ function approve(address _spender, uint256 _amount) fundSendablePhase onlyPayloadSize(2) returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; } /* Gets the current allowance that has been approved for the specified spender of the owner address */ function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /* Gets the total supply available of this token */ function totalSupply() constant returns (uint256) { return totalSupplyAmount; } /* Gets the balance of a specified account */ function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } /* Transfer the balance from owner's account to another account */ function transfer(address _to, uint256 _amount) fundSendablePhase onlyPayloadSize(2) returns (bool) { /* Check if sender has balance and for overflows */ if (balances[msg.sender] < _amount || balances[_to].add(_amount) < balances[_to]) return false; /* Do a check to see if they are new, if so we'll want to add it to our array */ bool isRecipientNew = balances[_to] < 1; /* Add and subtract new balances */ balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); /* Consolidate arrays if they are new or if sender now has empty balance */ if (isRecipientNew) tokenOwnerAdd(_to); if (balances[msg.sender] < 1) tokenOwnerRemove(msg.sender); /* Fire notification event */ Transfer(msg.sender, _to, _amount); return true; } /* If the specified address is not in our owner list, add them - this can be called by descendents to ensure the database is kept up to date. */ function tokenOwnerAdd(address _addr) internal { /* First check if they already exist */ uint256 tokenHolderCount = allTokenHolders.length; for (uint256 i = 0; i < tokenHolderCount; i++) if (allTokenHolders[i] == _addr) /* Already found so we can abort now */ return; /* They don't seem to exist, so let's add them */ allTokenHolders.length++; allTokenHolders[allTokenHolders.length - 1] = _addr; } /* If the specified address is in our owner list, remove them - this can be called by descendents to ensure the database is kept up to date. */ function tokenOwnerRemove(address _addr) internal { /* Find out where in our array they are */ uint256 tokenHolderCount = allTokenHolders.length; uint256 foundIndex = 0; bool found = false; uint256 i; for (i = 0; i < tokenHolderCount; i++) if (allTokenHolders[i] == _addr) { foundIndex = i; found = true; break; } /* If we didn't find them just return */ if (!found) return; /* We now need to shuffle down the array */ for (i = foundIndex; i < tokenHolderCount - 1; i++) allTokenHolders[i] = allTokenHolders[i + 1]; allTokenHolders.length--; } /* Mint new tokens - this can only be done by special callers (i.e. the ICO management) during the ICO phase. */ function mintTokens(address _address, uint256 _amount) onlyPayloadSize(2) { /* Ensure we are the ICO contract calling */ if (msg.sender != icoContractAddress || !icoPhaseManagement.icoPhase()) throw; /* Mint the tokens for the new address*/ bool isNew = balances[_address] == 0; totalSupplyAmount = totalSupplyAmount.add(_amount); balances[_address] = balances[_address].add(_amount); if (isNew) tokenOwnerAdd(_address); Transfer(0, _address, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenHolder","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"icoContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"contractVersion","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"isClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenHolderCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mintTokens","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_icoContractAddress","type":"address"},{"name":"_authenticationManagerAddress","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[],"name":"FundClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
6060604052600060065534156200001257fe5b604051604080620014fc8339810160405280516020909101515b60408051808201909152601b8082527f536d61727420496e766573746d656e742046756e6420546f6b656e0000000000602090920191825262000072916003916200022f565b506040805180820190915260048082527f53494654000000000000000000000000000000000000000000000000000000006020909201918252620000b791816200022f565b506005805460ff1916905560088054600160a060020a031916600160a060020a038481169190911791829055604080516000602091820181905282517fa0a8e4600000000000000000000000000000000000000000000000000000000081529251949093169363a0a8e460936004808501948390030190829087803b15156200013c57fe5b6102c65a03f115156200014b57fe5b50506040515166011108281dee70149050620001675760006000fd5b60098054600160a060020a031916600160a060020a038381169190911791829055604080516000602091820181905282517fa0a8e4600000000000000000000000000000000000000000000000000000000081529251949093169363a0a8e460936004808501948390030190829087803b1515620001e157fe5b6102c65a03f11515620001f057fe5b505060405151655b2207296eaf1490506200020b5760006000fd5b60078054600160a060020a031916600160a060020a0384161790555b5050620002d9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027257805160ff1916838001178555620002a2565b82800160010185558215620002a2579182015b82811115620002a257825182559160200191906001019062000285565b5b50620002b1929150620002b5565b5090565b620002d691905b80821115620002b15760008155600101620002bc565b5090565b90565b61121380620002e96000396000f300606060405236156100d85763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100da578063095ea7b31461016a57806318160ddd1461019d57806323b872dd146101bf578063313ce567146101f857806370a082311461021e578063862a4bf21461024c57806395d89b411461027b5780639fe17cc21461030b578063a0a8e46014610337578063a9059cbb14610359578063c2b6b58c1461038c578063d13e5846146103b0578063dd62ed3e146103d2578063f0dda65c14610406575bfe5b34156100e257fe5b6100ea610427565b604080516020808252835181830152835191928392908301918501908083838215610130575b80518252602083111561013057601f199092019160209182019101610110565b505050905090810190601f16801561015c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017257fe5b610189600160a060020a03600435166024356104b5565b604080519115158252519081900360200190f35b34156101a557fe5b6101ad61061f565b60408051918252519081900360200190f35b34156101c757fe5b610189600160a060020a0360043581169060243516604435610626565b604080519115158252519081900360200190f35b341561020057fe5b61020861092d565b6040805160ff9092168252519081900360200190f35b341561022657fe5b6101ad600160a060020a0360043516610936565b60408051918252519081900360200190f35b341561025457fe5b61025f600435610955565b60408051600160a060020a039092168252519081900360200190f35b341561028357fe5b6100ea610a1c565b604080516020808252835181830152835191928392908301918501908083838215610130575b80518252602083111561013057601f199092019160209182019101610110565b505050905090810190601f16801561015c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031357fe5b61025f610aaa565b60408051600160a060020a039092168252519081900360200190f35b341561033f57fe5b6101ad610ab9565b60408051918252519081900360200190f35b341561036157fe5b610189600160a060020a0360043516602435610ac5565b604080519115158252519081900360200190f35b341561039457fe5b610189610d40565b604080519115158252519081900360200190f35b34156103b857fe5b6101ad610d61565b60408051918252519081900360200190f35b34156103da57fe5b6101ad600160a060020a0360043581169060243516610dfa565b60408051918252519081900360200190f35b341561040e57fe5b610425600160a060020a0360043516602435610e27565b005b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b505050505081565b6008546040805160006020918201819052825160e060020a6368955fb102815292519093600160a060020a0316926368955fb192600480830193919282900301818787803b151561050257fe5b6102c65a03f1151561051057fe5b5050604051511590506105235760006000fd5b600854604080516000602091820181905282517fc2f0d93f0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363c2f0d93f9360048082019493918390030190829087803b151561058757fe5b6102c65a03f1151561059557fe5b5050604051511590506105a85760006000fd5b6002366044146105b457fe5b600160a060020a03338116600081815260016020908152604080832094891680845294825291829020879055815187815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3600191505b5b505b92915050565b6006545b90565b6008546040805160006020918201819052825160e060020a6368955fb1028152925190938493600160a060020a03909116926368955fb19260048084019382900301818787803b151561067557fe5b6102c65a03f1151561068357fe5b5050604051511590506106965760006000fd5b600854604080516000602091820181905282517fc2f0d93f0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363c2f0d93f9360048082019493918390030190829087803b15156106fa57fe5b6102c65a03f1151561070857fe5b50506040515115905061071b5760006000fd5b60033660641461072757fe5b600160a060020a0386166000908152602081905260409020548490108015906107775750600160a060020a0380871660009081526001602090815260408083203390941683529290522054849010155b80156107835750600084115b80156107b55750600160a060020a0385166000908152602081905260409020546107b3818663ffffffff610f8d16565b115b1561091d57600160a060020a03808616600090815260208190526040808220549289168252902054901592506107f1908563ffffffff610fa716565b600160a060020a038088166000908152602081815260408083209490945560018152838220339093168252919091522054610832908563ffffffff610fa716565b600160a060020a03808816600090815260016020908152604080832033851684528252808320949094559188168152908190522054610877908563ffffffff610f8d16565b600160a060020a038616600090815260208190526040902055811561089f5761089f85610fbe565b5b600160a060020a03861660009081526020819052604090205415156108c8576108c886611080565b5b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250610922565b600092505b5b505b509392505050565b60055460ff1681565b600160a060020a0381166000908152602081905260409020545b919050565b600954604080516000602091820181905282517fd6f5792d000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015293519194939093169263d6f5792d92602480830193919282900301818787803b15156109c357fe5b6102c65a03f115156109d157fe5b505060405151151590506109e55760006000fd5b60028054839081106109f357fe5b906000526020600020900160005b9054906101000a9004600160a060020a031690505b5b919050565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b505050505081565b600754600160a060020a031681565b6601c6ee49126e705b90565b6008546040805160006020918201819052825160e060020a6368955fb1028152925190938493600160a060020a03909116926368955fb19260048084019382900301818787803b1515610b1457fe5b6102c65a03f11515610b2257fe5b505060405151159050610b355760006000fd5b600854604080516000602091820181905282517fc2f0d93f0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363c2f0d93f9360048082019493918390030190829087803b1515610b9957fe5b6102c65a03f11515610ba757fe5b505060405151159050610bba5760006000fd5b600236604414610bc657fe5b600160a060020a03331660009081526020819052604090205484901080610c135750600160a060020a038516600090815260208190526040902054610c11818663ffffffff610f8d16565b105b15610c215760009250610d36565b600160a060020a038086166000908152602081905260408082205433909316825290205460019091109250610c5c908563ffffffff610fa716565b600160a060020a033381166000908152602081905260408082209390935590871681522054610c91908563ffffffff610f8d16565b600160a060020a0386166000908152602081905260409020558115610cb957610cb985610fbe565b5b600160a060020a0333166000908152602081905260409020546001901015610ce557610ce533611080565b5b84600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3600192505b5b505b5092915050565b60075474010000000000000000000000000000000000000000900460ff1681565b600954604080516000602091820181905282517fd6f5792d000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015293519194939093169263d6f5792d92602480830193919282900301818787803b1515610dcf57fe5b6102c65a03f11515610ddd57fe5b50506040515115159050610df15760006000fd5b506002545b5b90565b600160a060020a038083166000908152600160209081526040808320938516835292905220545b92915050565b6000600236604414610e3557fe5b60075433600160a060020a039081169116141580610eb457506008546040805160006020918201819052825160e060020a6368955fb10281529251600160a060020a03909416936368955fb19360048082019493918390030190829087803b1515610e9c57fe5b6102c65a03f11515610eaa57fe5b5050604051511590505b15610ebf5760006000fd5b600160a060020a03841660009081526020819052604090205460065490159250610eef908463ffffffff610f8d16565b600655600160a060020a038416600090815260208190526040902054610f1b908463ffffffff610f8d16565b600160a060020a0385166000908152602081905260409020558115610f4357610f4384610fbe565b5b604080518481529051600160a060020a038616916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35b5b50505050565b600082820183811015610f9c57fe5b8091505b5092915050565b600082821115610fb357fe5b508082035b92915050565b60025460005b818110156110225782600160a060020a0316600282815481101515610fe557fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156110195761107b565b5b600101610fc4565b6002805490611034906001830161119c565b5060028054849190600019810190811061104a57fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055505b505050565b600254600080805b838110156110ed5784600160a060020a03166002828154811015156110a957fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156110e457809250600191506110ed565b5b600101611088565b8115156110f957611195565b50815b6001840381101561118057600280546001830190811061111857fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660028281548110151561114757fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055505b6001016110fc565b600280549061119390600019830161119c565b505b5050505050565b81548183558181151161107b5760008381526020902061107b9181019083016111c6565b5b505050565b61062391905b808211156111e057600081556001016111cc565b5090565b905600a165627a7a72305820a593607bf2b5e33ea07fad926591f58fff929d931e19a4991bcade34fa03cd210029000000000000000000000000f8fc0cc97d01a47e0ba66b167b120a8a0deab949000000000000000000000000c6a3746aa3fec176559f0865fd5240159402a81f
Deployed Bytecode
0x606060405236156100d85763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100da578063095ea7b31461016a57806318160ddd1461019d57806323b872dd146101bf578063313ce567146101f857806370a082311461021e578063862a4bf21461024c57806395d89b411461027b5780639fe17cc21461030b578063a0a8e46014610337578063a9059cbb14610359578063c2b6b58c1461038c578063d13e5846146103b0578063dd62ed3e146103d2578063f0dda65c14610406575bfe5b34156100e257fe5b6100ea610427565b604080516020808252835181830152835191928392908301918501908083838215610130575b80518252602083111561013057601f199092019160209182019101610110565b505050905090810190601f16801561015c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017257fe5b610189600160a060020a03600435166024356104b5565b604080519115158252519081900360200190f35b34156101a557fe5b6101ad61061f565b60408051918252519081900360200190f35b34156101c757fe5b610189600160a060020a0360043581169060243516604435610626565b604080519115158252519081900360200190f35b341561020057fe5b61020861092d565b6040805160ff9092168252519081900360200190f35b341561022657fe5b6101ad600160a060020a0360043516610936565b60408051918252519081900360200190f35b341561025457fe5b61025f600435610955565b60408051600160a060020a039092168252519081900360200190f35b341561028357fe5b6100ea610a1c565b604080516020808252835181830152835191928392908301918501908083838215610130575b80518252602083111561013057601f199092019160209182019101610110565b505050905090810190601f16801561015c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031357fe5b61025f610aaa565b60408051600160a060020a039092168252519081900360200190f35b341561033f57fe5b6101ad610ab9565b60408051918252519081900360200190f35b341561036157fe5b610189600160a060020a0360043516602435610ac5565b604080519115158252519081900360200190f35b341561039457fe5b610189610d40565b604080519115158252519081900360200190f35b34156103b857fe5b6101ad610d61565b60408051918252519081900360200190f35b34156103da57fe5b6101ad600160a060020a0360043581169060243516610dfa565b60408051918252519081900360200190f35b341561040e57fe5b610425600160a060020a0360043516602435610e27565b005b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b505050505081565b6008546040805160006020918201819052825160e060020a6368955fb102815292519093600160a060020a0316926368955fb192600480830193919282900301818787803b151561050257fe5b6102c65a03f1151561051057fe5b5050604051511590506105235760006000fd5b600854604080516000602091820181905282517fc2f0d93f0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363c2f0d93f9360048082019493918390030190829087803b151561058757fe5b6102c65a03f1151561059557fe5b5050604051511590506105a85760006000fd5b6002366044146105b457fe5b600160a060020a03338116600081815260016020908152604080832094891680845294825291829020879055815187815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3600191505b5b505b92915050565b6006545b90565b6008546040805160006020918201819052825160e060020a6368955fb1028152925190938493600160a060020a03909116926368955fb19260048084019382900301818787803b151561067557fe5b6102c65a03f1151561068357fe5b5050604051511590506106965760006000fd5b600854604080516000602091820181905282517fc2f0d93f0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363c2f0d93f9360048082019493918390030190829087803b15156106fa57fe5b6102c65a03f1151561070857fe5b50506040515115905061071b5760006000fd5b60033660641461072757fe5b600160a060020a0386166000908152602081905260409020548490108015906107775750600160a060020a0380871660009081526001602090815260408083203390941683529290522054849010155b80156107835750600084115b80156107b55750600160a060020a0385166000908152602081905260409020546107b3818663ffffffff610f8d16565b115b1561091d57600160a060020a03808616600090815260208190526040808220549289168252902054901592506107f1908563ffffffff610fa716565b600160a060020a038088166000908152602081815260408083209490945560018152838220339093168252919091522054610832908563ffffffff610fa716565b600160a060020a03808816600090815260016020908152604080832033851684528252808320949094559188168152908190522054610877908563ffffffff610f8d16565b600160a060020a038616600090815260208190526040902055811561089f5761089f85610fbe565b5b600160a060020a03861660009081526020819052604090205415156108c8576108c886611080565b5b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250610922565b600092505b5b505b509392505050565b60055460ff1681565b600160a060020a0381166000908152602081905260409020545b919050565b600954604080516000602091820181905282517fd6f5792d000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015293519194939093169263d6f5792d92602480830193919282900301818787803b15156109c357fe5b6102c65a03f115156109d157fe5b505060405151151590506109e55760006000fd5b60028054839081106109f357fe5b906000526020600020900160005b9054906101000a9004600160a060020a031690505b5b919050565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b505050505081565b600754600160a060020a031681565b6601c6ee49126e705b90565b6008546040805160006020918201819052825160e060020a6368955fb1028152925190938493600160a060020a03909116926368955fb19260048084019382900301818787803b1515610b1457fe5b6102c65a03f11515610b2257fe5b505060405151159050610b355760006000fd5b600854604080516000602091820181905282517fc2f0d93f0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363c2f0d93f9360048082019493918390030190829087803b1515610b9957fe5b6102c65a03f11515610ba757fe5b505060405151159050610bba5760006000fd5b600236604414610bc657fe5b600160a060020a03331660009081526020819052604090205484901080610c135750600160a060020a038516600090815260208190526040902054610c11818663ffffffff610f8d16565b105b15610c215760009250610d36565b600160a060020a038086166000908152602081905260408082205433909316825290205460019091109250610c5c908563ffffffff610fa716565b600160a060020a033381166000908152602081905260408082209390935590871681522054610c91908563ffffffff610f8d16565b600160a060020a0386166000908152602081905260409020558115610cb957610cb985610fbe565b5b600160a060020a0333166000908152602081905260409020546001901015610ce557610ce533611080565b5b84600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3600192505b5b505b5092915050565b60075474010000000000000000000000000000000000000000900460ff1681565b600954604080516000602091820181905282517fd6f5792d000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015293519194939093169263d6f5792d92602480830193919282900301818787803b1515610dcf57fe5b6102c65a03f11515610ddd57fe5b50506040515115159050610df15760006000fd5b506002545b5b90565b600160a060020a038083166000908152600160209081526040808320938516835292905220545b92915050565b6000600236604414610e3557fe5b60075433600160a060020a039081169116141580610eb457506008546040805160006020918201819052825160e060020a6368955fb10281529251600160a060020a03909416936368955fb19360048082019493918390030190829087803b1515610e9c57fe5b6102c65a03f11515610eaa57fe5b5050604051511590505b15610ebf5760006000fd5b600160a060020a03841660009081526020819052604090205460065490159250610eef908463ffffffff610f8d16565b600655600160a060020a038416600090815260208190526040902054610f1b908463ffffffff610f8d16565b600160a060020a0385166000908152602081905260409020558115610f4357610f4384610fbe565b5b604080518481529051600160a060020a038616916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35b5b50505050565b600082820183811015610f9c57fe5b8091505b5092915050565b600082821115610fb357fe5b508082035b92915050565b60025460005b818110156110225782600160a060020a0316600282815481101515610fe557fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156110195761107b565b5b600101610fc4565b6002805490611034906001830161119c565b5060028054849190600019810190811061104a57fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055505b505050565b600254600080805b838110156110ed5784600160a060020a03166002828154811015156110a957fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156110e457809250600191506110ed565b5b600101611088565b8115156110f957611195565b50815b6001840381101561118057600280546001830190811061111857fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660028281548110151561114757fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055505b6001016110fc565b600280549061119390600019830161119c565b505b5050505050565b81548183558181151161107b5760008381526020902061107b9181019083016111c6565b5b505050565b61062391905b808211156111e057600081556001016111cc565b5090565b905600a165627a7a72305820a593607bf2b5e33ea07fad926591f58fff929d931e19a4991bcade34fa03cd210029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f8Fc0cc97d01A47E0Ba66B167B120A8A0DeAb949000000000000000000000000c6a3746aa3fec176559f0865fd5240159402a81f
-----Decoded View---------------
Arg [0] : _icoContractAddress (address): 0xf8Fc0cc97d01A47E0Ba66B167B120A8A0DeAb949
Arg [1] : _authenticationManagerAddress (address): 0xc6a3746Aa3fec176559f0865Fd5240159402A81f
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f8Fc0cc97d01A47E0Ba66B167B120A8A0DeAb949
Arg [1] : 000000000000000000000000c6a3746aa3fec176559f0865fd5240159402a81f
Swarm Source
bzzr://a593607bf2b5e33ea07fad926591f58fff929d931e19a4991bcade34fa03cd21
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.