Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x5BaD262DE5B55fd75BeeC97738744aDFa35a9b78
Balance 0 ETH
Nonce 1
Code Size 9016 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

9016 bytes
0x6080604052600436106101685763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041662113e08811461044957806306fdde03146104f7578063095ea7b31461051e57806318160ddd1461056b57806323b872dd14610580578063313ce567146105c35780633e8a8009146105ee578063502dadb0146106a3578063565974d3146107535780636786ed0e146107dd5780636d1b229d1461080757806370a08231146108315780638da5cb5b1461086457806395d89b411461089557806397304ced146108aa578063983c0a01146108d45780639c09c835146108e95780639e1bd11314610999578063a9059cbb146109ae578063b10ed487146109e7578063bab4898e146109fc578063ceb791d914610a35578063d01f63f514610a4a578063dd62ed3e14610aaf578063e181587414610aea578063f2fde38b14610b14578063f660c57014610b47578063fd6b7ef814610c3a575b3360009081526001602052604090205460ff166002146101c0576040805160e560020a62461bcd02815260206004820152600f60248201526000805160206122cd833981519152604482015290519081900360640190fd5b600054610100900460ff161561020e576040805160e560020a62461bcd028152602060048201526013602482015260008051602061228d833981519152604482015290519081900360640190fd5b600854349081101561026a576040805160e560020a62461bcd02815260206004820152601f60248201527f416d6f756e742062656c6f77206d696e696d756d20696e766573746d656e7400604482015290519081900360640190fd5b600061028160075483610c4f90919063ffffffff16565b116102d6576040805160e560020a62461bcd02815260206004820152601e60248201527f496e73756666696369656e7420616d6f756e7420666f7220746f6b656e730000604482015290519081900360640190fd5b3360009081526003602052604090205481111580610301575033600090815260036020526040902054155b1515610357576040805160e560020a62461bcd02815260206004820152601c60248201527f45786365656473206d617820696e766573746d656e74206c696d697400000000604482015290519081900360640190fd5b6000610386670de0b6b3a764000061037a60075485610c4f90919063ffffffff16565b9063ffffffff610cbb16565b600d5490915061039c908363ffffffff610d3816565b600d55600554600160a060020a03166000908152600e60205260409020546103ca908263ffffffff610d9316565b600554600160a060020a03166000908152600e60205260408082209290925533815220546103fe908263ffffffff610d3816565b336000818152600e602090815260409182902093909355600554815185815291519293600160a060020a03909116926000805160206122ed8339815191529281900390910190a35050005b34801561045557600080fd5b5061045e610df3565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104a257818101518382015260200161048a565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104e15781810151838201526020016104c9565b5050505090500194505050505060405180910390f35b34801561050357600080fd5b5061050c610eec565b60408051918252519081900360200190f35b34801561052a57600080fd5b506105576004803603604081101561054157600080fd5b50600160a060020a038135169060200135610ef2565b604080519115158252519081900360200190f35b34801561057757600080fd5b5061050c611011565b34801561058c57600080fd5b50610557600480360360608110156105a357600080fd5b50600160a060020a03813581169160208101359091169060400135611055565b3480156105cf57600080fd5b506105d8611206565b6040805160ff9092168252519081900360200190f35b3480156105fa57600080fd5b506106a16004803603602081101561061157600080fd5b81019060208101813564010000000081111561062c57600080fd5b82018360208201111561063e57600080fd5b8035906020019184600183028401116401000000008311171561066057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061120f945050505050565b005b3480156106af57600080fd5b50610557600480360360208110156106c657600080fd5b8101906020810181356401000000008111156106e157600080fd5b8201836020820111156106f357600080fd5b8035906020019184602083028401116401000000008311171561071557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611276945050505050565b34801561075f57600080fd5b50610768611306565b6040805160208082528351818301528351919283929083019185019080838360005b838110156107a257818101518382015260200161078a565b50505050905090810190601f1680156107cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107e957600080fd5b506106a16004803603602081101561080057600080fd5b5035611394565b34801561081357600080fd5b506106a16004803603602081101561082a57600080fd5b50356113e9565b34801561083d57600080fd5b5061050c6004803603602081101561085457600080fd5b5035600160a060020a0316611518565b34801561087057600080fd5b50610879611533565b60408051600160a060020a039092168252519081900360200190f35b3480156108a157600080fd5b5061050c611542565b3480156108b657600080fd5b506106a1600480360360208110156108cd57600080fd5b5035611548565b3480156108e057600080fd5b506106a1611673565b3480156108f557600080fd5b506105576004803603602081101561090c57600080fd5b81019060208101813564010000000081111561092757600080fd5b82018360208201111561093957600080fd5b8035906020019184602083028401116401000000008311171561095b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506116d4945050505050565b3480156109a557600080fd5b506106a161175b565b3480156109ba57600080fd5b50610557600480360360408110156109d157600080fd5b50600160a060020a03813516906020013561182f565b3480156109f357600080fd5b5061050c611985565b348015610a0857600080fd5b5061055760048036036040811015610a1f57600080fd5b50600160a060020a03813516906020013561198b565b348015610a4157600080fd5b5061050c611a72565b348015610a5657600080fd5b50610a5f611a78565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610a9b578181015183820152602001610a83565b505050509050019250505060405180910390f35b348015610abb57600080fd5b5061050c60048036036040811015610ad257600080fd5b50600160a060020a0381358116916020013516611b8b565b348015610af657600080fd5b506106a160048036036020811015610b0d57600080fd5b5035611bb6565b348015610b2057600080fd5b506106a160048036036020811015610b3757600080fd5b5035600160a060020a0316611c0b565b348015610b5357600080fd5b50610b5c611d9d565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015610ba4578181015183820152602001610b8c565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610be3578181015183820152602001610bcb565b50505050905001848103825285818151815260200191508051906020019060200280838360005b83811015610c22578181015183820152602001610c0a565b50505050905001965050505050505060405180910390f35b348015610c4657600080fd5b506106a1611f08565b6000808211610ca8576040805160e560020a62461bcd02815260206004820152601060248201527f4469766973696f6e206279207a65726f00000000000000000000000000000000604482015290519081900360640190fd5b8183811515610cb357fe5b049392505050565b6000821515610ccc57506000610d32565b50818102818382811515610cdc57fe5b0414610d32576040805160e560020a62461bcd02815260206004820152601760248201527f4d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604482015290519081900360640190fd5b92915050565b81810182811015610d32576040805160e560020a62461bcd02815260206004820152601160248201527f4164646974696f6e206f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b600082821115610ded576040805160e560020a62461bcd02815260206004820152601560248201527f5375627472616374696f6e20756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b50900390565b6060806060600454604051908082528060200260200182016040528015610e24578160200160208202803883390190505b5090506060600454604051908082528060200260200182016040528015610e55578160200160208202803883390190505b50905060005b600454811015610ee2576000818152600260205260409020548351600160a060020a0390911690849083908110610e8e57fe5b600160a060020a0392831660209182029092018101919091526000838152600282526040808220549093168152600e90915220548251839083908110610ed057fe5b60209081029091010152600101610e5b565b5090925090509091565b60095481565b3360009081526001602052604081205460ff16600214610f4a576040805160e560020a62461bcd02815260206004820152600f60248201526000805160206122cd833981519152604482015290519081900360640190fd5b600160a060020a0383161515610faa576040805160e560020a62461bcd02815260206004820152601b60248201527f417070726f766520746f20746865207a65726f20616464726573730000000000604482015290519081900360640190fd5b336000818152600f60209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b6000808052600e6020527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c54600c5461104f9163ffffffff610d9316565b90505b90565b3360009081526001602052604081205460ff166002146110ad576040805160e560020a62461bcd02815260206004820152600f60248201526000805160206122cd833981519152604482015290519081900360640190fd5b600160a060020a038316151561110d576040805160e560020a62461bcd02815260206004820152601c60248201527f5472616e7366657220746f20746865207a65726f206164647265737300000000604482015290519081900360640190fd5b600160a060020a0384166000908152600e6020526040902054611136908363ffffffff610d9316565b600160a060020a0385166000908152600e6020908152604080832093909355600f815282822033835290522054611173908363ffffffff610d9316565b600160a060020a038086166000908152600f602090815260408083203384528252808320949094559186168152600e90915220546111b7908363ffffffff610d3816565b600160a060020a038085166000818152600e602090815260409182902094909455805186815290519193928816926000805160206122ed83398151915292918290030190a35060019392505050565b600a5460ff1681565b600554600160a060020a0316331461125f576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b805161127290600b9060208401906121f4565b5050565b600554600090600160a060020a031633146112c9576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b60005b82518110156112fd576112f583828151811015156112e657fe5b90602001906020020151612054565b6001016112cc565b50600192915050565b600b805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561138c5780601f106113615761010080835404028352916020019161138c565b820191906000526020600020905b81548152906001019060200180831161136f57829003601f168201915b505050505081565b600554600160a060020a031633146113e4576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b600755565b600554600160a060020a03163314611439576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b600054610100900460ff1615611487576040805160e560020a62461bcd028152602060048201526013602482015260008051602061228d833981519152604482015290519081900360640190fd5b600554600160a060020a03166000908152600e60205260409020546114b2908263ffffffff610d9316565b600554600160a060020a03166000908152600e6020526040902055600c546114e0908263ffffffff610d9316565b600c55600554604080518381529051600092600160a060020a0316916000805160206122ed833981519152919081900360200190a350565b600160a060020a03166000908152600e602052604090205490565b600554600160a060020a031681565b60065481565b600554600160a060020a03163314611598576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b600054610100900460ff16156115e6576040805160e560020a62461bcd028152602060048201526013602482015260008051602061228d833981519152604482015290519081900360640190fd5b600c546115f9908263ffffffff610d3816565b600c55600554600160a060020a03166000908152600e6020526040902054611627908263ffffffff610d3816565b60058054600160a060020a039081166000908152600e602090815260408083209590955592548451868152945192169390926000805160206122ed83398151915292918290030190a350565b600554600160a060020a031633146116c3576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b6000805461ff001916610100179055565b600554600090600160a060020a03163314611727576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b60005b82518110156112fd57611753838281518110151561174457fe5b906020019060200201516120a2565b60010161172a565b600554600160a060020a031633146117ab576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b600d54600010611805576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f2066756e647320746f207769746864726177000000000000000000000000604482015290519081900360640190fd5b600d54604051339180156108fc02916000818181858888f193505050501561182d576000600d555b565b3360009081526001602052604081205460ff16600214611887576040805160e560020a62461bcd02815260206004820152600f60248201526000805160206122cd833981519152604482015290519081900360640190fd5b600160a060020a03831615156118e7576040805160e560020a62461bcd02815260206004820152601c60248201527f5472616e7366657220746f20746865207a65726f206164647265737300000000604482015290519081900360640190fd5b336000908152600e6020526040902054611907908363ffffffff610d9316565b336000908152600e602052604080822092909255600160a060020a03851681522054611939908363ffffffff610d3816565b600160a060020a0384166000818152600e60209081526040918290209390935580518581529051919233926000805160206122ed8339815191529281900390910190a350600192915050565b60085481565b600554600090600160a060020a031633146119de576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526001602052604090205460ff16600214611a51576040805160e560020a62461bcd02815260206004820152601760248201527f41646472657373206e6f742077686974656c6973746564000000000000000000604482015290519081900360640190fd5b50600160a060020a0391909116600090815260036020526040902055600190565b60075481565b60606000805b600454811015611ac657600081815260026020818152604080842054600160a060020a0316845260019091529091205460ff161415611abe576001909101905b600101611a7e565b50606081604051908082528060200260200182016040528015611af3578160200160208202803883390190505b5090506000805b600454811015611b8257600081815260026020818152604080842054600160a060020a0316845260019091529091205460ff161415611b7a576000818152600260205260409020548351600160a060020a0390911690849084908110611b5c57fe5b600160a060020a039092166020928302909101909101526001909101905b600101611afa565b50909250505090565b600160a060020a039182166000908152600f6020908152604080832093909416825291909152205490565b600554600160a060020a03163314611c06576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b600855565b600554600160a060020a03163314611c5b576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b600054610100900460ff1615611ca9576040805160e560020a62461bcd028152602060048201526013602482015260008051602061228d833981519152604482015290519081900360640190fd5b600160a060020a0381161515611d09576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b611d12816120a2565b600554600160a060020a039081166000908152600e60205260408082208054908390559284168252902054611d4d908263ffffffff610d3816565b600160a060020a038084166000818152600e6020908152604091829020949094556005548151868152915192949316926000805160206122ed83398151915292918290030190a36112728261212b565b606080606080600454604051908082528060200260200182016040528015611dcf578160200160208202803883390190505b5090506060600454604051908082528060200260200182016040528015611e00578160200160208202803883390190505b5090506060600454604051908082528060200260200182016040528015611e31578160200160208202803883390190505b50905060005b600454811015611efb576000818152600260205260409020548451600160a060020a0390911690859083908110611e6a57fe5b600160a060020a0392831660209182029092018101919091526000838152600282526040808220549093168152600e90915220548351849083908110611eac57fe5b6020908102909101810191909152600082815260028252604080822054600160a060020a03168252600390925220548251839083908110611ee957fe5b60209081029091010152600101611e37565b5091945092509050909192565b600554600160a060020a03163314611f58576040805160e560020a62461bcd02815260206004820152601360248201526000805160206122ad833981519152604482015290519081900360640190fd5b600054610100900460ff161515611fb9576040805160e560020a62461bcd02815260206004820152601460248201527f43726f776473616c65206e6f7420636c6f736564000000000000000000000000604482015290519081900360640190fd5b60005460ff1615612014576040805160e560020a62461bcd02815260206004820152601c60248201527f46756e64696e6720676f616c20616c7265616479207265616368656400000000604482015290519081900360640190fd5b600d54604051339180156108fc02916000818181858888f1935050505015612048576000805460ff1916600117905561182d565b6000805460ff19169055565b600160a060020a03811660009081526001602052604090205460ff166002141561209f57600160a060020a0381166000908152600160208190526040909120805460ff191690911790555b50565b600160a060020a03811660009081526001602052604090205460ff1660021461209f57600160a060020a03166000818152600160208181526040808420805460ff19166002908117909155600480548652908352818520805473ffffffffffffffffffffffffffffffffffffffff19168717905594845260039091528220919091558154019055565b600160a060020a038116151561218b576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b600554604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061223557805160ff1916838001178555612262565b82800160010185558215612262579182015b82811115612262578251825591602001919060010190612247565b5061226e929150612272565b5090565b61105291905b8082111561226e576000815560010161227856fe43726f776473616c6520697320636c6f7365640000000000000000000000000043616c6c6572206973206e6f74206f776e6572000000000000000000000000004e6f742077686974656c69737465640000000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820e604157d0d44f46e6a233b3f573bdd0cdfc20e9b1ef9ca1cddb06d8e5968dc3b0029

Verified Source Code Partial Match

Compiler: v0.5.0+commit.1d4f565a EVM: byzantium Optimization: Yes (200 runs)
TokenTemplate.sol 376 lines
pragma solidity ^0.5.0;

// ----------------------------------------------------------------------------
// Safe maths
// ----------------------------------------------------------------------------
library SafeMath {
    function add(uint a, uint b) internal pure returns (uint c) {
        c = a + b;
        require(c >= a, "Addition overflow");
    }

    function sub(uint a, uint b) internal pure returns (uint c) {
        require(b <= a, "Subtraction underflow");
        c = a - b;
    }

    function mul(uint a, uint b) internal pure returns (uint c) {
        if (a == 0) return 0;
        c = a * b;
        require(c / a == b, "Multiplication overflow");
    }

    function div(uint a, uint b) internal pure returns (uint c) {
        require(b > 0, "Division by zero");
        c = a / b;
    }
}

// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
// ----------------------------------------------------------------------------
contract ERC20Interface {
    function totalSupply() public view returns (uint);

    function balanceOf(address tokenOwner) public view returns (uint balance);

    function allowance(address tokenOwner, address spender) public view returns (uint remaining);

    function transfer(address to, uint tokens) public returns (bool success);

    function approve(address spender, uint tokens) public returns (bool success);

    function transferFrom(address from, address to, uint tokens) public returns (bool success);

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


contract CrowdsaleInterface {
    bool fundingGoalReached = false;
    bool crowdsaleClosed = false;

    mapping(address => uint8) whitelist;
    mapping(uint256 => address) holders;
    mapping(address => uint) maxInvestLimitList;

    uint256 _totalHolders;

    function enableWhitelist(address[] memory _addresses) public returns (bool success);

    function setMaximumInvest(address _address, uint _amount) public returns (bool success);

    modifier onlyWhitelist() {
        require(whitelist[msg.sender] == 2, "Not whitelisted");
        _;
    }
}

// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract Owned {
    address public owner;

    event OwnershipTransferred(address indexed _from, address indexed _to);

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner, "Caller is not owner");
        _;
    }

    /**
      * @dev Allows the current owner to transfer control of the contract to a newOwner.
      * @param newOwner The address to transfer ownership to.
      */
    // function transferOwnership(address newOwner) public onlyOwner {
    //     _transferOwnership(newOwner);
    // }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "New owner is the zero address");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

contract TokenTemplate is ERC20Interface, CrowdsaleInterface, Owned {
    using SafeMath for uint;

    bytes32 public symbol;
    uint public priceRate;
    uint public minimumInvest;
    bytes32 public name;
    uint8 public decimals;
    string public details;
    uint _totalSupply;
    uint amountRaised;

    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowed;

    constructor(bytes32 _name, bytes32 _symbol, uint _total, uint _weiCostOfEachToken, uint _weiMinimumInvest, string memory _details) public {
        symbol = _symbol;
        name = _name;
        decimals = 18;
        priceRate = _weiCostOfEachToken;
        minimumInvest = _weiMinimumInvest;
        details = _details;
        _totalSupply = _total.mul(10 ** uint(decimals));

        _totalHolders = 0;

        balances[owner] = _totalSupply;
        holders[_totalHolders] = owner;
        whitelist[owner] = 2;
        maxInvestLimitList[owner] = 0;
        _totalHolders++;

        emit Transfer(address(0), owner, _totalSupply);
    }

    // ------------------------------------------------------------------------
    // Total supply
    // ------------------------------------------------------------------------
    function totalSupply() public view returns (uint) {
        return _totalSupply.sub(balances[address(0)]);
    }

    // ------------------------------------------------------------------------
    // Get the token balance for account `tokenOwner`
    // ------------------------------------------------------------------------
    function balanceOf(address tokenOwner) public view returns (uint balance) {
        return balances[tokenOwner];
    }

    // ------------------------------------------------------------------------
    // Transfer the balance from token owner's account to `to` account
    // - Owner's account must have sufficient balance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transfer(address to, uint tokens) onlyWhitelist public returns (bool success) {
        require(to != address(0), "Transfer to the zero address");
        balances[msg.sender] = balances[msg.sender].sub(tokens);
        balances[to] = balances[to].add(tokens);
        emit Transfer(msg.sender, to, tokens);
        return true;
    }

    // ------------------------------------------------------------------------
    // Token owner can approve for `spender` to transferFrom(...) `tokens`
    // from the token owner's account
    //
    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
    // recommends that there are no checks for the approval double-spend attack
    // as this should be implemented in user interfaces
    // ------------------------------------------------------------------------
    function approve(address spender, uint tokens) onlyWhitelist public returns (bool success) {
        require(spender != address(0), "Approve to the zero address");
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        return true;
    }

    // ------------------------------------------------------------------------
    // Transfer `tokens` from the `from` account to the `to` account
    //
    // The calling account must already have sufficient tokens approve(...)-d
    // for spending from the `from` account and
    // - From account must have sufficient balance to transfer
    // - Spender must have sufficient allowance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transferFrom(address from, address to, uint tokens) onlyWhitelist public returns (bool success) {
        require(to != address(0), "Transfer to the zero address");
        balances[from] = balances[from].sub(tokens);
        allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
        balances[to] = balances[to].add(tokens);
        emit Transfer(from, to, tokens);
        return true;
    }

    // ------------------------------------------------------------------------
    // Returns the amount of tokens approved by the owner that can be
    // transferred to the spender's account
    // ------------------------------------------------------------------------
    function allowance(address tokenOwner, address spender) public view returns (uint remaining) {
        return allowed[tokenOwner][spender];
    }

    function enableWhitelist(address[] memory _addresses) public onlyOwner returns (bool success) {
        for (uint i = 0; i < _addresses.length; i++) {
            _addWalletToWhitelist(_addresses[i]);
        }
        return true;
    }

    function _addWalletToWhitelist(address addr) internal {
        if (whitelist[addr] != 2) {
            whitelist[addr] = 2;
            holders[_totalHolders] = addr;
            maxInvestLimitList[addr] = 0;
            _totalHolders++;
        }
    }

    function disableWhitelist(address[] memory _addresses) public onlyOwner returns (bool success) {
        for (uint i = 0; i < _addresses.length; i++) {
            _disableWhitelist(_addresses[i]);
        }
        return true;
    }

    function _disableWhitelist(address addr) internal {
        if (whitelist[addr] == 2) {
            whitelist[addr] = 1;
        }
    }

    function getWhitelist() public view returns (address[] memory addresses) {
        uint256 count = 0;
        for (uint256 j = 0; j < _totalHolders; j++) {
            if (whitelist[holders[j]] == 2) {
                count++;
            }
        }

        address[] memory wlist = new address[](count);
        uint256 index = 0;
        for (uint256 j = 0; j < _totalHolders; j++) {
            if (whitelist[holders[j]] == 2) {
                wlist[index] = holders[j];
                index++;
            }
        }
        return wlist;
    }

    function getBalances() public view returns (address[] memory _addresses, uint256[] memory _balances) {
        address[] memory wlist1 = new address[](_totalHolders);
        uint256[] memory wlist2 = new uint256[](_totalHolders);

        for (uint256 j = 0; j < _totalHolders; j++) {
            //////if (whitelist[holders[j]] == 2) {
            wlist1[j] = holders[j];
            wlist2[j] = balances[holders[j]];
            //////}
        }
        return (wlist1, wlist2);
    }

    function getBalancesAndMaxLimit() public view returns (address[] memory _addresses, uint256[] memory _balances, uint256[] memory _limits) {
        address[] memory wlist1 = new address[](_totalHolders);
        uint256[] memory wlist2 = new uint256[](_totalHolders);
        uint256[] memory wlist3 = new uint256[](_totalHolders);

        for (uint256 j = 0; j < _totalHolders; j++) {
            //////if (whitelist[holders[j]] == 2) {
            wlist1[j] = holders[j];
            wlist2[j] = balances[holders[j]];
            wlist3[j] = maxInvestLimitList[holders[j]];
            //////}
        }
        return (wlist1, wlist2, wlist3);
    }

    function closeCrowdsale() public onlyOwner {
        crowdsaleClosed = true;
    }

    function safeWithdrawal() public onlyOwner {
        require(crowdsaleClosed, "Crowdsale not closed");
        require(!fundingGoalReached, "Funding goal already reached");

        if (msg.sender.send(amountRaised)) {
            fundingGoalReached = true;
        } else {
            fundingGoalReached = false;
        }
    }

    // immediate withdrawal withou funding goal reached and without crowdsale close
    function immediateWithdrawal() public onlyOwner {
        require(amountRaised > 0, "No funds to withdraw");
        if (msg.sender.send(amountRaised)) {
            //fundingGoalReached = true;
            amountRaised = 0;
        } else {
            //fundingGoalReached = false;
        }
    }

    function burnTokens(uint token_amount) public onlyOwner {
        require(!crowdsaleClosed, "Crowdsale is closed");
        balances[owner] = balances[owner].sub(token_amount);
        _totalSupply = _totalSupply.sub(token_amount);
        emit Transfer(owner, address(0), token_amount);
    }

    function mintTokens(uint token_amount) public onlyOwner {
        require(!crowdsaleClosed, "Crowdsale is closed");
        _totalSupply = _totalSupply.add(token_amount);
        balances[owner] = balances[owner].add(token_amount);
        emit Transfer(address(0), owner, token_amount);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(!crowdsaleClosed, "Crowdsale is closed");
        require(newOwner != address(0), "New owner is the zero address");

        // enable newOwner to whitelist
        _addWalletToWhitelist(newOwner);

        // puts unrealized tokens to new owner
        uint token_amount = balances[owner];
        balances[owner] = 0;
        balances[newOwner] = balances[newOwner].add(token_amount);
        emit Transfer(owner, newOwner, token_amount);

        // change owner
        _transferOwnership(newOwner);
    }

    function setMaximumInvest(address _address, uint _amount) public onlyOwner returns (bool success) {
        require(whitelist[_address] == 2, "Address not whitelisted");
        maxInvestLimitList[_address] = _amount;
        return true;
    }

    function setMinimumInvest(uint _weiMinimumInvest) public onlyOwner {
        minimumInvest = _weiMinimumInvest;
    }

    function setPriceRate(uint _weiCostOfEachToken) public onlyOwner {
        priceRate = _weiCostOfEachToken;
    }

    function setDetails(string memory _details) public onlyOwner {
        details = _details;
    }

    function() payable onlyWhitelist external {
        require(!crowdsaleClosed, "Crowdsale is closed");
        uint amount = msg.value;
        require(amount >= minimumInvest, "Amount below minimum investment");
        require(amount.div(priceRate) > 0, "Insufficient amount for tokens");
        require(maxInvestLimitList[msg.sender] >= amount || maxInvestLimitList[msg.sender] == 0, "Exceeds max investment limit");

        uint token_amount = amount.div(priceRate).mul(10 ** 18);

        amountRaised = amountRaised.add(amount);

        balances[owner] = balances[owner].sub(token_amount);
        balances[msg.sender] = balances[msg.sender].add(token_amount);
        emit Transfer(owner, msg.sender, token_amount);
    }
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
details 0x565974d3 → string
getBalances 0x00113e08 → address[], uint256[]
getBalancesAndMaxLimit 0xf660c570 → address[], uint256[], uint256[]
getWhitelist 0xd01f63f5 → address[]
minimumInvest 0xb10ed487 → uint256
name 0x06fdde03 → bytes32
owner 0x8da5cb5b → address
priceRate 0xceb791d9 → uint256
symbol 0x95d89b41 → bytes32
totalSupply 0x18160ddd → uint256

Write Contract 15 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address spender
uint256 tokens
returns: bool
burnTokens 0x6d1b229d
uint256 token_amount
closeCrowdsale 0x983c0a01
No parameters
disableWhitelist 0x502dadb0
address[] _addresses
returns: bool
enableWhitelist 0x9c09c835
address[] _addresses
returns: bool
immediateWithdrawal 0x9e1bd113
No parameters
mintTokens 0x97304ced
uint256 token_amount
safeWithdrawal 0xfd6b7ef8
No parameters
setDetails 0x3e8a8009
string _details
setMaximumInvest 0xbab4898e
address _address
uint256 _amount
returns: bool
setMinimumInvest 0xe1815874
uint256 _weiMinimumInvest
setPriceRate 0x6786ed0e
uint256 _weiCostOfEachToken
transfer 0xa9059cbb
address to
uint256 tokens
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 tokens
returns: bool
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

No transactions found for this address