ETH Price: $3,286.83 (-5.12%)

Token

Smart Investment Fund Token (SIFT)
 

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)

Balance
250 SIFT

Value
$0.00
0x8860f2dd5cab736a6cc4d2612aa214548194d1cd
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Smart Blockchain Trading and Managed Investment Portfolio

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

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

Contract ABI

[{"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"}]

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.