Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0x2F50AB197F950e0c2184CF5d804f4141502Cd987
Balance 0 ETH
Nonce 1
Code Size 7015 bytes
Indexed Transactions 0 (1 on-chain, 1.3% indexed)
External Etherscan · Sourcify

Contract Bytecode

7015 bytes
0x606060405236156101935763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630200b10d81146101bb5780630655c58b146101e057806306fdde031461020b57806307a95e8314610296578063095ea7b3146102c057806317634514146102f657806318160ddd1461031b5780631e72444714610340578063211e28b61461036557806322c9427e1461037f57806323b872dd146103a95780632e37eef6146103e5578063313ce5671461041357806337a366d81461043c5780633f1b1267146104765780635a3b7e421461049b578063668038e01461052657806370a082311461053b578063752d2bfb1461056c5780637c871d3114610579578063814b3fe0146105945780638da5cb5b146105f757806395d89b41146106265780639abd3572146106b1578063a713a3f7146106db578063a9059cbb14610709578063b414d4b61461072d578063cae9ca5114610760578063cf309012146107d9578063d271011d14610800578063dd62ed3e14610815578063f2fde38b1461084c575b6101b95b60006101a433423461086d565b90506001811515146101b557600080fd5b5b50565b005b34156101c657600080fd5b6101ce6109c0565b60405190815260200160405180910390f35b34156101eb57600080fd5b6101ce6004356024356109c6565b60405190815260200160405180910390f35b341561021657600080fd5b61021e610aab565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561025b5780820151818401525b602001610242565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102a157600080fd5b6102ac600435610b49565b604051901515815260200160405180910390f35b34156102cb57600080fd5b6102ac600160a060020a0360043516602435610c6d565b604051901515815260200160405180910390f35b341561030157600080fd5b6101ce610cb5565b60405190815260200160405180910390f35b341561032657600080fd5b6101ce610cbb565b60405190815260200160405180910390f35b341561034b57600080fd5b6101ce610cce565b60405190815260200160405180910390f35b341561037057600080fd5b6101b96004351515610cd4565b005b341561038a57600080fd5b6102ac600435610d02565b604051901515815260200160405180910390f35b34156103b457600080fd5b6102ac600160a060020a0360043581169060243516604435610d8d565b604051901515815260200160405180910390f35b34156103f057600080fd5b6103fb600435610e2b565b60405191825260208201526040908101905180910390f35b341561041e57600080fd5b610426610e59565b60405160ff909116815260200160405180910390f35b341561044757600080fd5b6103fb600160a060020a0360043516602435610e62565b60405191825260208201526040908101905180910390f35b341561048157600080fd5b6101ce610e9f565b60405190815260200160405180910390f35b34156104a657600080fd5b61021e610ea5565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561025b5780820151818401525b602001610242565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561053157600080fd5b6101b9610f43565b005b341561054657600080fd5b6101ce600160a060020a036004351661103d565b60405190815260200160405180910390f35b6101b9600435611067565b005b341561058457600080fd5b6101b96004356024356111d9565b005b341561059f57600080fd5b6105aa600435611204565b60405198895260208901979097526040808901969096526060880194909452608087019290925260a086015260c085015260e0840152901515610100830152610120909101905180910390f35b341561060257600080fd5b61060a611262565b604051600160a060020a03909116815260200160405180910390f35b341561063157600080fd5b61021e611271565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561025b5780820151818401525b602001610242565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156106bc57600080fd5b6102ac60043561130f565b604051901515815260200160405180910390f35b34156106e657600080fd5b6103fb6004356114cf565b60405191825260208201526040908101905180910390f35b341561071457600080fd5b6101b9600160a060020a03600435166024356114fd565b005b341561073857600080fd5b6102ac600160a060020a0360043516611532565b604051901515815260200160405180910390f35b341561076b57600080fd5b6102ac60048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061154795505050505050565b604051901515815260200160405180910390f35b34156107e457600080fd5b6102ac611697565b604051901515815260200160405180910390f35b341561080b57600080fd5b6101b96116a0565b005b341561082057600080fd5b6101ce600160a060020a03600435811690602435166116f8565b60405190815260200160405180910390f35b341561085757600080fd5b6101b9600160a060020a0360043516611715565b005b60065460009081908190819060ff1615156001141561088f57600093506109b6565b600d548610156108a257600093506109b6565b600e548611156108b557600093506109b6565b8415156108c557600093506109b6565b6108d1600f54866109c6565b92508215156108e357600093506109b6565b600160a060020a0330166000908152600860205260409020610905904361176d565b600160a060020a038816600090815260086020526040902090925061092a904361176d565b90508282101561093d57600093506109b6565b80838201101561095057600093506109b6565b61095c8784830161180d565b6109683084840361180d565b600f805486019055600160a060020a038088169030167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405190815260200160405180910390a3600193505b5050509392505050565b600f5481565b60008083838280805b601054831015610a895760108054849081106109e757fe5b906000526020600020906002020160005b5091508482600101541115610a705781600101548486011115610a4b57848260010154039050816000015481670de0b6b3a764000002811515610a3757fe5b048601955080840393508085019450610a70565b8154670de0b6b3a76400008502811515610a6157fe5b04860195508385019450600093505b5b831515610a7d57610a89565b5b6001909201916109cf565b6000841115610a9b5760009650610a9f565b8596505b50505050505092915050565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b415780601f10610b1657610100808354040283529160200191610b41565b820191906000526020600020905b815481529060010190602001808311610b2457829003601f168201915b505050505081565b600080548190819033600160a060020a03908116911614610b6957600080fd5b600b546000190184901015610b815760009250610c65565b600b805485908110610b8f57fe5b90600052602060002090600a020160005b50600881015490925060ff161515610bcd578160070154826002015401421015610bcd5760009250610c65565b5b506004810154600382015403600582018190556000811115610c6057600054600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610c1d57600080fd5b7ff8f6e080db19192fcb419f05354e903e76f8ef166e655114101e1f956b4c4cf5848260405191825260208201526040908101905180910390a160019250610c65565b600092505b5b5050919050565b60065460009060ff1615610c8357506000610caf565b50600160a060020a03338116600090815260096020908152604080832093861683529290522081905560015b92915050565b60075481565b6000610cc860054361176d565b90505b90565b600e5481565b60005433600160a060020a03908116911614610cef57600080fd5b6006805460ff19168215151790555b5b50565b60008054819033600160a060020a03908116911614610d2057600080fd5b600b546000190183901015610d385760009150610d86565b600b805484908110610d4657fe5b90600052602060002090600a020160005b50600881015490915060ff1615610d715760009150610d86565b60088101805460ff1916600190811790915591505b5b50919050565b600654600090819060ff1615610da65760009150610e23565b600160a060020a038086166000908152600960209081526040808320339094168352929052205483901015610dde5760009150610e23565b610de9858585611872565b90508015610e1f57600160a060020a03808616600090815260096020908152604080832033909416835292905220805484900390555b8091505b509392505050565b6010805482908110610e3957fe5b906000526020600020906002020160005b50805460019091015490915082565b60045460ff1681565b600860205281600052604060002081815481101515610e7d57fe5b906000526020600020906002020160005b508054600190910154909250905082565b600d5481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b415780601f10610b1657610100808354040283529160200191610b41565b820191906000526020600020905b815481529060010190602001808311610b2457829003601f168201915b505050505081565b600b54600160a060020a0333166000908152600c602052604081205490919010610f6c57600080fd5b50600160a060020a0333166000908152600c60205260409020545b600b548110156101b557600b805482908110610f9f57fe5b90600052602060002090600a020160005b50600160a060020a0333166000908152600991909101602052604090205460ff161580156110025750600b805482908110610fe757fe5b90600052602060002090600a020160005b506008015460ff16155b1561103057600160a060020a0333166000908152600c6020526040902060018201905561102e8161130f565b505b5b600101610f87565b5b50565b600160a060020a038116600090815260086020526040812061105f904361176d565b90505b919050565b60008054819033600160a060020a0390811691161461108557600080fd5b6000341161109257600080fd5b600b5491506110a260054361176d565b9050600b80548060010182816110b89190611a3c565b91600052602060002090600a020160005b6101206040519081016040908152868252436020830152429082015234606082015260006080820181905260a0820181905260c0820186905260e08201889052610100820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155610100820151600891909101805460ff1916911515919091179055505033600160a060020a03167f4ac365c2344819f39ac5cfcbf4b839a10fb791243db4797084e9ed0fbc917b8a834334856040518085815260200184815260200183815260200182815260200194505050505060405180910390a25b5b505050565b60005433600160a060020a039081169116146111f457600080fd5b600d829055600e8190555b5b5050565b600b80548290811061121257fe5b90600052602060002090600a020160005b50805460018201546002830154600384015460048501546005860154600687015460078801546008909801549698509496939592949193909260ff1689565b600054600160a060020a031681565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b415780601f10610b1657610100808354040283529160200191610b41565b820191906000526020600020905b815481529060010190602001808311610b2457829003601f168201915b505050505081565b600080600080846001600b8054905003101561132e57600093506114c7565b600b80548690811061133c57fe5b90600052602060002090600a020160005b50600160a060020a033316600090815260098201602052604090205490935060ff1615156001141561138257600093506114c7565b600883015460ff1615156001141561139d57600093506114c7565b600783015460028401540142106113b757600093506114c7565b600160a060020a033316600090815260086020526040902060018401546113de919061176d565b91508115156113f057600093506114c7565b82600601548360030154830281151561140557fe5b600160a060020a03331660009081526009860160205260408120805460ff19166001179055600486018054939092049283019091559091508111156114c257600160a060020a03331681156108fc0282604051600060405180830381858888f19350505050151561147557600080fd5b33600160a060020a03167fa1594d215a577c1905bcb0b5b186a40a0104714277441d4b2ac428c89bf7f4b1868360405191825260208201526040908101905180910390a2600193506114c7565b600093505b505050919050565b6005805482908110610e3957fe5b906000526020600020906002020160005b50805460019091015490915082565b60065460009060ff161561151057600080fd5b61151b338484611872565b90506001811515146111d357600080fd5b5b505050565b600a6020526000908152604090205460ff1681565b600654600090819060ff16156115605760009150610e23565b508361156c8185610c6d565b15610e235780600160a060020a0316638f4ffcb1338630876040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156116235780820151818401525b60200161160a565b50505050905090810190601f1680156116505780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561167157600080fd5b6102c65a03f1151561168257600080fd5b50505060019150610e23565b5b509392505050565b60065460ff1681565b60005433600160a060020a039081169116146116bb57600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156116f457600080fd5b5b5b565b600960209081526000928352604080842090915290825290205481565b60005433600160a060020a0390811691161461173057600080fd5b600160a060020a038116156101b5576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b50565b6000611777611a6e565b6000611781611a6e565b855415156117925760009350611804565b600091505b85548210156117ff5785828154811015156117ae57fe5b906000526020600020906002020160005b5060408051908101604052815481526001909101546020820190815290915085905111156117f05782519350611804565b8092505b600190910190611797565b825193505b50505092915050565b600160a060020a03821660009081526008602052604090208054600181016118358382611a85565b916000526020600020906002020160005b6040805190810160405284815243602082015291905081518155602082015181600101555050505b5050565b600160a060020a038316600090815260086020526040812081908190611898904361176d565b600160a060020a03861660009081526008602052604090209092506118bd904361176d565b90508315156118cf5760009250611a33565b600160a060020a0386166000908152600a602052604090205460ff161515600114156118fe5760009250611a33565b8382101561190f5760009250611a33565b8381018190116119225760009250611a33565b600160a060020a038616600090815260086020526040902080546001810161194a8382611a85565b916000526020600020906002020160005b604080519081016040528786038152436020820152919050815181556020820151600191820155600160a060020a03881660009081526008602052604090208054909350915081016119ad8382611a85565b916000526020600020906002020160005b604080519081016040528488018152436020820152919050815181556020820151816001015550505084600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b8154818355818115116111d357600a0281600a0283600052602060002091820191016111d39190611ab7565b5b505050565b604080519081016040526000808252602082015290565b8154818355818115116111d3576002028160020283600052602060002091820191016111d39190611b14565b5b505050565b610ccb91905b80821115611b0d576000808255600182018190556002820181905560038201819055600482018190556005820181905560068201819055600782015560088101805460ff19169055600a01611abd565b5090565b90565b610ccb91905b80821115611b0d5760008082556001820155600201611b1a565b5090565b905600a165627a7a72305820bb1f760fcc3411e0af2b05e0ccf283570bfbe432040ca29bc1ea572eba69004e0029

Verified Source Code Partial Match

Compiler: v0.4.13+commit.0fb4cb1a Optimization: Yes (200 runs)
Cajutel.sol 542 lines
pragma solidity ^0.4.13;


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address public owner;

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    function Ownable() {
        owner = msg.sender;
    }


    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == 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) onlyOwner {
        if (newOwner != address(0)) {
            owner = newOwner;
        }
    }
}

contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); }

contract LoggedERC20 is Ownable {
    /* Structures */
    struct LogValueBlock {
    uint256 value;
    uint256 block;
    }

    /* Public variables of the token */
    string public standard = 'LogValueBlockToken 0.1';
    string public name;
    string public symbol;
    uint8 public decimals;
    LogValueBlock[] public loggedTotalSupply;

    bool public locked;

    uint256 public creationBlock;

    /* This creates an array with all balances */
    mapping (address => LogValueBlock[]) public loggedBalances;
    mapping (address => mapping (address => uint256)) public allowance;

    /* This generates a public event on the blockchain that will notify clients */
    event Transfer(address indexed from, address indexed to, uint256 value);

    mapping (address => bool) public frozenAccount;

    /* This generates a public event on the blockchain that will notify clients */
    event FrozenFunds(address target, bool frozen);

    /* Initializes contract with initial supply tokens to the creator of the contract */
    function LoggedERC20(
    uint256 initialSupply,
    string tokenName,
    uint8 decimalUnits,
    string tokenSymbol,
    bool transferAllSupplyToOwner,
    bool _locked
    ) {
        LogValueBlock memory valueBlock = LogValueBlock(initialSupply, block.number);

        loggedTotalSupply.push(valueBlock);

        if(transferAllSupplyToOwner) {
            loggedBalances[msg.sender].push(valueBlock);
        }
        else {
            loggedBalances[this].push(valueBlock);
        }

        name = tokenName;                                   // Set the name for display purposes
        symbol = tokenSymbol;                               // Set the symbol for display purposes
        decimals = decimalUnits;                            // Amount of decimals for display purposes
        locked = _locked;
    }

    function valueAt(LogValueBlock [] storage valueBlocks, uint256 block) internal returns (uint256) {
        if(valueBlocks.length == 0) {
            return 0;
        }

        LogValueBlock memory prevLogValueBlock;

        for(uint256 i = 0; i < valueBlocks.length; i++) {

            LogValueBlock memory valueBlock = valueBlocks[i];

            if(valueBlock.block > block) {
                return prevLogValueBlock.value;
            }

            prevLogValueBlock = valueBlock;
        }

        return prevLogValueBlock.value;
    }

    function setBalance(address _address, uint256 value) internal {
        loggedBalances[_address].push(LogValueBlock(value, block.number));
    }

    function totalSupply() returns (uint256) {
        return valueAt(loggedTotalSupply, block.number);
    }

    function balanceOf(address _address) returns (uint256) {
        return valueAt(loggedBalances[_address], block.number);
    }

    function transferInternal(address _from, address _to, uint256 value) internal returns (bool success) {
        uint256 balanceFrom = valueAt(loggedBalances[_from], block.number);
        uint256 balanceTo = valueAt(loggedBalances[_to], block.number);

        if(value == 0) {
            return false;
        }

        if(frozenAccount[_from] == true) {
            return false;
        }

        if(balanceFrom < value) {
            return false;
        }

        if(balanceTo + value <= balanceTo) {
            return false;
        }

        loggedBalances[_from].push(LogValueBlock(balanceFrom - value, block.number));
        loggedBalances[_to].push(LogValueBlock(balanceTo + value, block.number));

        Transfer(_from, _to, value);

        return true;
    }

    /* Send coins */
    function transfer(address _to, uint256 _value) {
        require(locked == false);

        bool status = transferInternal(msg.sender, _to, _value);

        require(status == true);
    }

    /* Allow another contract to spend some tokens in your behalf */
    function approve(address _spender, uint256 _value) returns (bool success) {
        if(locked) {
            return false;
        }

        allowance[msg.sender][_spender] = _value;
        return true;
    }

    /* Approve and then communicate the approved contract in a single tx */
    function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
        if(locked) {
            return false;
        }

        tokenRecipient spender = tokenRecipient(_spender);
        if (approve(_spender, _value)) {
            spender.receiveApproval(msg.sender, _value, this, _extraData);
            return true;
        }
    }

    /* A contract attempts to get the coins */
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
        if(locked) {
            return false;
        }

        if(allowance[_from][msg.sender] < _value) {
            return false;
        }

        bool _success = transferInternal(_from, _to, _value);

        if(_success) {
            allowance[_from][msg.sender] -= _value;
        }

        return _success;
    }
}

contract LoggedDividend is Ownable, LoggedERC20 {
    /* Structs */
    struct Dividend {
    uint256 id;

    uint256 block;
    uint256 time;
    uint256 amount;

    uint256 claimedAmount;
    uint256 transferedBack;

    uint256 totalSupply;
    uint256 recycleTime;

    bool recycled;

    mapping (address => bool) claimed;
    }

    /* variables */
    Dividend [] public dividends;

    mapping (address => uint256) dividendsClaimed;

    /* Events */
    event DividendTransfered(uint256 id, address indexed _address, uint256 _block, uint256 _amount, uint256 _totalSupply);
    event DividendClaimed(uint256 id, address indexed _address, uint256 _claim);
    event UnclaimedDividendTransfer(uint256 id, uint256 _value);
    event DividendRecycled(uint256 id, address indexed _recycler, uint256 _blockNumber, uint256 _amount, uint256 _totalSupply);

    function LoggedDividend(
    uint256 initialSupply,
    string tokenName,
    uint8 decimalUnits,
    string tokenSymbol,
    bool transferAllSupplyToOwner,
    bool _locked
    ) LoggedERC20(initialSupply, tokenName, decimalUnits, tokenSymbol, transferAllSupplyToOwner, _locked) {

    }

    function addDividend(uint256 recycleTime) payable onlyOwner {
        require(msg.value > 0);

        uint256 id = dividends.length;
        uint256 _totalSupply = valueAt(loggedTotalSupply, block.number);

        dividends.push(
        Dividend(
        id,
        block.number,
        now,
        msg.value,
        0,
        0,
        _totalSupply,
        recycleTime,
        false
        )
        );

        DividendTransfered(id, msg.sender, block.number, msg.value, _totalSupply);
    }

    function claimDividend(uint256 dividendId) public returns (bool) {
        if(dividends.length - 1 < dividendId) {
            return false;
        }

        Dividend storage dividend = dividends[dividendId];

        if(dividend.claimed[msg.sender] == true) {
            return false;
        }

        if(dividend.recycled == true) {
            return false;
        }

        if(now >= dividend.time + dividend.recycleTime) {
            return false;
        }

        uint256 balance = valueAt(loggedBalances[msg.sender], dividend.block);

        if(balance == 0) {
            return false;
        }

        uint256 claim = balance * dividend.amount / dividend.totalSupply;

        dividend.claimed[msg.sender] = true;

        dividend.claimedAmount = dividend.claimedAmount + claim;

        if (claim > 0) {
            msg.sender.transfer(claim);
            DividendClaimed(dividendId, msg.sender, claim);

            return true;
        }

        return false;
    }

    function claimDividends() public {
        require(dividendsClaimed[msg.sender] < dividends.length);
        for (uint i = dividendsClaimed[msg.sender]; i < dividends.length; i++) {
            if ((dividends[i].claimed[msg.sender] == false) && (dividends[i].recycled == false)) {
                dividendsClaimed[msg.sender] = i + 1;
                claimDividend(i);
            }
        }
    }

    function recycleDividend(uint256 dividendId) public onlyOwner returns (bool success) {
        if(dividends.length - 1 < dividendId) {
            return false;
        }

        Dividend storage dividend = dividends[dividendId];

        if(dividend.recycled) {
            return false;
        }

        dividend.recycled = true;

        return true;
    }

    function refundUnclaimedEthers(uint256 dividendId) public onlyOwner returns (bool success) {
        if(dividends.length - 1 < dividendId) {
            return false;
        }

        Dividend storage dividend = dividends[dividendId];

        if(dividend.recycled == false) {
            if(now < dividend.time + dividend.recycleTime) {
                return false;
            }
        }

        uint256 claimedBackAmount = dividend.amount - dividend.claimedAmount;

        dividend.transferedBack = claimedBackAmount;

        if(claimedBackAmount > 0) {
            owner.transfer(claimedBackAmount);

            UnclaimedDividendTransfer(dividendId, claimedBackAmount);

            return true;
        }

        return false;
    }
}

contract LoggedPhaseICO is LoggedDividend {
    uint256 public icoSince;
    uint256 public icoTill;

    uint256 public collectedEthers;

    Phase[] public phases;

    struct Phase {
    uint256 price;
    uint256 maxAmount;
    }

    function LoggedPhaseICO(
    uint256 _icoSince,
    uint256 _icoTill,
    uint256 initialSupply,
    string tokenName,
    string tokenSymbol,
    uint8 precision,
    bool transferAllSupplyToOwner,
    bool _locked
    ) LoggedDividend(initialSupply, tokenName, precision, tokenSymbol, transferAllSupplyToOwner, _locked) {
        standard = 'LoggedPhaseICO 0.1';

        icoSince = _icoSince;
        icoTill = _icoTill;
    }

    function getIcoTokensAmount(uint256 collectedEthers, uint256 value) returns (uint256) {
        uint256 amount;

        uint256 newCollectedEthers = collectedEthers;
        uint256 remainingValue = value;

        for (uint i = 0; i < phases.length; i++) {
            Phase storage phase = phases[i];

            if(phase.maxAmount > newCollectedEthers) {
                if (newCollectedEthers + remainingValue > phase.maxAmount) {
                    uint256 diff = phase.maxAmount - newCollectedEthers;

                    amount += diff * 1 ether / phase.price;

                    remainingValue -= diff;
                    newCollectedEthers += diff;
                }
                else {
                    amount += remainingValue * 1 ether / phase.price;

                    newCollectedEthers += remainingValue;

                    remainingValue = 0;
                }
            }

            if (remainingValue == 0) {
                break;
            }
        }

        if (remainingValue > 0) {
            return 0;
        }

        return amount;
    }

    function buy(address _address, uint256 time, uint256 value) internal returns (bool) {
        if (locked == true) {
            return false;
        }

        if (time < icoSince) {
            return false;
        }

        if (time > icoTill) {
            return false;
        }

        if (value == 0) {
            return false;
        }

        uint256 amount = getIcoTokensAmount(collectedEthers, value);

        if(amount == 0) {
            return false;
        }

        uint256 selfBalance = valueAt(loggedBalances[this], block.number);
        uint256 holderBalance = valueAt(loggedBalances[_address], block.number);

        if (selfBalance < amount) {
            return false;
        }

        if (holderBalance + amount < holderBalance) {
            return false;
        }

        setBalance(_address, holderBalance + amount);
        setBalance(this, selfBalance - amount);

        collectedEthers += value;

        Transfer(this, _address, amount);

        return true;
    }

    function () payable {
        bool status = buy(msg.sender, now, msg.value);

        require(status == true);
    }
}

contract Cajutel is LoggedPhaseICO {
    function Cajutel(
    uint256 initialSupply,
    string tokenName,
    string tokenSymbol,
    address founder1,
    address founder2,
    address marketing,
    uint256 icoSince,
    uint256 icoTill
    ) LoggedPhaseICO(icoSince, icoTill, initialSupply, tokenName, tokenSymbol, 18, false, false) {
        standard = 'Cajutel 0.1';

        phases.push(Phase(0.05 ether, 500 ether));
        phases.push(Phase(0.075 ether, 750 ether + 500 ether));
        phases.push(Phase(0.1 ether, 10000 ether + 750 ether + 500 ether));
        phases.push(Phase(0.15 ether, 30000 ether + 10000 ether + 750 ether + 500 ether));
        phases.push(Phase(0.2 ether, 80000 ether + 30000 ether + 10000 ether + 750 ether + 500 ether));

        uint256 founder1Tokens = 900000000000000000000000;
        uint256 founder2Tokens = 100000000000000000000000;
        uint256 marketingTokens = 60000000000000000000000;

        setBalance(founder1, founder1Tokens);

        Transfer(this, founder1, founder1Tokens);

        setBalance(founder2, founder2Tokens);

        Transfer(this, founder2, founder2Tokens);

        setBalance(marketing, marketingTokens);

        Transfer(this, marketing, marketingTokens);

        setBalance(this, initialSupply - founder1Tokens - founder2Tokens - marketingTokens);
    }

    function transferEthers() onlyOwner {
        owner.transfer(this.balance);
    }

    function setLocked(bool _locked) onlyOwner {
        locked = _locked;
    }

    function setIcoDates(uint256 _icoSince, uint256 _icoTill) onlyOwner {
        icoSince = _icoSince;
        icoTill = _icoTill;
    }
}

Write Contract 32 functions

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

addDividend 0x752d2bfb
uint256 recycleTime
allowance 0xdd62ed3e
address
address
returns: uint256
approve 0x095ea7b3
address _spender
uint256 _value
returns: bool
approveAndCall 0xcae9ca51
address _spender
uint256 _value
bytes _extraData
returns: bool
balanceOf 0x70a08231
address _address
returns: uint256
claimDividend 0x9abd3572
uint256 dividendId
returns: bool
claimDividends 0x668038e0
No parameters
collectedEthers 0x0200b10d
No parameters
returns: uint256
creationBlock 0x17634514
No parameters
returns: uint256
decimals 0x313ce567
No parameters
returns: uint8
dividends 0x814b3fe0
uint256
returns: uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, bool
frozenAccount 0xb414d4b6
address
returns: bool
getIcoTokensAmount 0x0655c58b
uint256 collectedEthers
uint256 value
returns: uint256
icoSince 0x3f1b1267
No parameters
returns: uint256
icoTill 0x1e724447
No parameters
returns: uint256
locked 0xcf309012
No parameters
returns: bool
loggedBalances 0x37a366d8
address
uint256
returns: uint256, uint256
loggedTotalSupply 0xa713a3f7
uint256
returns: uint256, uint256
name 0x06fdde03
No parameters
returns: string
owner 0x8da5cb5b
No parameters
returns: address
phases 0x2e37eef6
uint256
returns: uint256, uint256
recycleDividend 0x22c9427e
uint256 dividendId
returns: bool
refundUnclaimedEthers 0x07a95e83
uint256 dividendId
returns: bool
setIcoDates 0x7c871d31
uint256 _icoSince
uint256 _icoTill
setLocked 0x211e28b6
bool _locked
standard 0x5a3b7e42
No parameters
returns: string
symbol 0x95d89b41
No parameters
returns: string
totalSupply 0x18160ddd
No parameters
returns: uint256
transfer 0xa9059cbb
address _to
uint256 _value
transferEthers 0xd271011d
No parameters
transferFrom 0x23b872dd
address _from
address _to
uint256 _value
returns: bool
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

This address has 1 on-chain transactions, but only 1.3% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →