Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0xa7d77697427F2569dE74f077728bd28ef4F94CCC
Balance 0 ETH
Nonce 1
Code Size 7255 bytes
Indexed Transactions 0 (1 on-chain, 1.5% indexed)
External Etherscan · Sourcify

Contract Bytecode

7255 bytes
Copy Bytecode
0x608060405234801561001057600080fd5b506004361061010a5760003560e01c8063736a83a1116100a2578063c243ce7411610071578063c243ce741461026c578063ce81015514610274578063dd2fde4d1461029a578063f2fde38b146102a2578063fc0c546a146102c85761010a565b8063736a83a1146102145780638da5cb5b1461021c5780638f32d59b1461022457806391b46a91146102405761010a565b806348c54b9d116100de57806348c54b9d146101b05780634b7e95e8146101b85780635645bddc14610204578063715018a61461020c5761010a565b80622ff4281461010f5780632a11ced0146101475780632e230b9b14610180578063415f1bea1461018a575b600080fd5b6101356004803603602081101561012557600080fd5b50356001600160a01b03166102d0565b60408051918252519081900360200190f35b6101646004803603602081101561015d57600080fd5b50356102eb565b604080516001600160a01b039092168252519081900360200190f35b610188610312565b005b610135600480360360208110156101a057600080fd5b50356001600160a01b0316610953565b610188610a1f565b6101e4600480360360408110156101ce57600080fd5b506001600160a01b038135169060200135610bed565b604080519384526020840192909252151582820152519081900360600190f35b610188610cd5565b610188611437565b610135611492565b61016461159e565b61022c6115ad565b604080519115158252519081900360200190f35b6101e46004803603604081101561025657600080fd5b506001600160a01b0381351690602001356115d6565b610135611618565b6101886004803603602081101561028a57600080fd5b50356001600160a01b0316611712565b610188611822565b610188600480360360208110156102b857600080fd5b50356001600160a01b0316611a0a565b610164611a27565b6001600160a01b031660009081526003602052604090205490565b600281815481106102f857fe5b6000918252602090912001546001600160a01b0316905081565b61031a6115ad565b61032357600080fd5b600454610100900460ff1615610376576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b6004805461ff001916610100179055601254600b546103aa916001600160a01b031690692cffa5e8bebf4bd0000090611a36565b601254600c546103cf916001600160a01b031690692cffa5e8bebf4bd0000090611a36565b601254600d546103f4916001600160a01b031690692cffa5e8bebf4bd0000090611a36565b601254600e54610419916001600160a01b031690692cffa5e8bebf4bd0000090611a36565b601354600b5461043e916001600160a01b03169069707f1ec5dcde3d88000090611a36565b601354600c54610463916001600160a01b03169069707f1ec5dcde3d88000090611a36565b601354600d54610488916001600160a01b03169069707f1ec5dcde3d88000090611a36565b601354600e546104ad916001600160a01b03169069707f1ec5dcde3d88000090611a36565b601454600b546104d2916001600160a01b031690690d7fe4f906063058000090611a36565b601454600c546104f7916001600160a01b031690690d7fe4f906063058000090611a36565b601454600d5461051c916001600160a01b031690690d7fe4f906063058000090611a36565b601454600e54610541916001600160a01b031690690d7fe4f906063058000090611a36565b601554600b54610566916001600160a01b031690698c9ee6775415ccea000090611a36565b601554600c5461058b916001600160a01b031690698c9ee6775415ccea000090611a36565b601554600d546105b0916001600160a01b031690698c9ee6775415ccea000090611a36565b601554600e546105d5916001600160a01b031690698c9ee6775415ccea000090611a36565b601654600b546105fa916001600160a01b031690690f9fe11a9ca3db6b000090611a36565b601654600c5461061f916001600160a01b031690690f9fe11a9ca3db6b000090611a36565b601654600d54610644916001600160a01b031690690f9fe11a9ca3db6b000090611a36565b601654600e54610669916001600160a01b031690690f9fe11a9ca3db6b000090611a36565b601754600b5461068f916001600160a01b0316906a0126ccc075e79ca6eb000090611a36565b601754600c546106b5916001600160a01b0316906a0126ccc075e79ca6eb000090611a36565b601754600d546106db916001600160a01b0316906a0126ccc075e79ca6eb000090611a36565b601754600e54610701916001600160a01b0316906a0126ccc075e79ca6eb000090611a36565b601854600b54610726916001600160a01b03169069023ffb7ed6565d64000090611a36565b601854600c5461074b916001600160a01b03169069023ffb7ed6565d64000090611a36565b601854600d54610770916001600160a01b03169069023ffb7ed6565d64000090611a36565b601854600e54610795916001600160a01b03169069023ffb7ed6565d64000090611a36565b601954600b546107ba916001600160a01b031690692abdac67ae1ea6d1000090611a36565b601954600c546107df916001600160a01b031690692abdac67ae1ea6d1000090611a36565b601954600d54610804916001600160a01b031690692abdac67ae1ea6d1000090611a36565b601954600e54610829916001600160a01b031690692abdac67ae1ea6d1000090611a36565b601a54600b5461084e916001600160a01b031690692cffa5e8bebf4bd0000090611a36565b601a54600c54610873916001600160a01b031690692cffa5e8bebf4bd0000090611a36565b601a54600d54610898916001600160a01b031690692cffa5e8bebf4bd0000090611a36565b601a54600e546108bd916001600160a01b031690692cffa5e8bebf4bd0000090611a36565b601b54600b546108e2916001600160a01b03169069167fd2f45f5fa5e8000090611a36565b601b54600c54610907916001600160a01b03169069167fd2f45f5fa5e8000090611a36565b601b54600d5461092c916001600160a01b03169069167fd2f45f5fa5e8000090611a36565b601b54600e54610951916001600160a01b03169069167fd2f45f5fa5e8000090611a36565b565b600080805b6001600160a01b038416600090815260036020526040902054811015610a1857610980611bd7565b6001600160a01b03851660009081526003602052604090208054839081106109a457fe5b60009182526020918290206040805160608101825260039093029091018054835260018101549383019390935260029092015460ff16158015928201839052909250906109f45750806020015142115b15610a0f578051610a0c90849063ffffffff611ab516565b92505b50600101610958565b5092915050565b6000610a2a33610953565b905060008111610a74576040805162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b60005b33600090815260036020526040902054811015610be957336000908152600360205260408120805483908110610aa957fe5b60009182526020909120600390910201600281015490915060ff16158015610ad45750806001015442115b15610be05760028101805460ff19166001908117909155546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015610b3d57600080fd5b505af1158015610b51573d6000803e3d6000fd5b505050506040513d6020811015610b6757600080fd5b5051610ba45760405162461bcd60e51b8152600401808060200182810382526028815260200180611bfb6028913960400191505060405180910390fd5b604080513381526020810185905281517fc7798891864187665ac6dd119286e44ec13f014527aeeb2b8eb3fd413df93179929181900390910190a15b50600101610a77565b5050565b6001600160a01b038216600090815260036020526040812054819081908410610c5d576040805162461bcd60e51b815260206004820152601960248201527f54686520686f6c64696e6720646f65736e277420657869737400000000000000604482015290519081900360640190fd5b610c65611bd7565b6001600160a01b0386166000908152600360205260409020805486908110610c8957fe5b60009182526020918290206040805160608101825260039093029091018054808452600182015494840185905260029091015460ff161515929091018290529891975095509350505050565b610cdd6115ad565b610ce657600080fd5b60045462010000900460ff1615610d3a576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b6004805462ff0000191662010000179055601c54600b54610d70916001600160a01b03169069035ff93e41818c16000090611a36565b601c54600c54610d95916001600160a01b03169069035ff93e41818c16000090611a36565b601c54600d54610dba916001600160a01b03169069035ff93e41818c16000090611a36565b601c54600e54610ddf916001600160a01b03169069035ff93e41818c16000090611a36565b601d54600b54610e04916001600160a01b03169069035ff93e41818c16000090611a36565b601d54600c54610e29916001600160a01b03169069035ff93e41818c16000090611a36565b601d54600d54610e4e916001600160a01b03169069035ff93e41818c16000090611a36565b601d54600e54610e73916001600160a01b03169069035ff93e41818c16000090611a36565b601e54600b54610e98916001600160a01b03169069011ffdbf6b2b2eb2000090611a36565b601e54600c54610ebd916001600160a01b03169069011ffdbf6b2b2eb2000090611a36565b601e54600d54610ee2916001600160a01b03169069011ffdbf6b2b2eb2000090611a36565b601e54600e54610f07916001600160a01b03169069011ffdbf6b2b2eb2000090611a36565b601f54600b54610f2c916001600160a01b031690690b3fe97a2fafd2f4000090611a36565b601f54600c54610f51916001600160a01b031690690b3fe97a2fafd2f4000090611a36565b601f54600d54610f76916001600160a01b031690690b3fe97a2fafd2f4000090611a36565b601f54600e54610f9b916001600160a01b031690690b3fe97a2fafd2f4000090611a36565b602054600b54610fc0916001600160a01b031690692024526e45a1578f000090611a36565b602054600c54610fe5916001600160a01b031690692024526e45a1578f000090611a36565b602054600d5461100a916001600160a01b031690692024526e45a1578f000090611a36565b602054600e5461102f916001600160a01b031690692024526e45a1578f000090611a36565b602154600b54611053916001600160a01b031690684f7c4e6e797c81000090611a36565b602154600c54611077916001600160a01b031690684f7c4e6e797c81000090611a36565b602154600d5461109b916001600160a01b031690684f7c4e6e797c81000090611a36565b602154600e546110bf916001600160a01b031690684f7c4e6e797c81000090611a36565b602254600b546110e4916001600160a01b03169069209fbeaf23e44a2a000090611a36565b602254600c54611109916001600160a01b03169069209fbeaf23e44a2a000090611a36565b602254600d5461112e916001600160a01b03169069209fbeaf23e44a2a000090611a36565b602254600e54611153916001600160a01b03169069209fbeaf23e44a2a000090611a36565b602354600b54611178916001600160a01b03169069104fdf5791f22515000090611a36565b602354600c5461119d916001600160a01b03169069104fdf5791f22515000090611a36565b602354600d546111c2916001600160a01b03169069104fdf5791f22515000090611a36565b602354600e546111e7916001600160a01b03169069104fdf5791f22515000090611a36565b602454600b5461120c916001600160a01b03169069035ff93e41818c16000090611a36565b602454600c54611231916001600160a01b03169069035ff93e41818c16000090611a36565b602454600d54611256916001600160a01b03169069035ff93e41818c16000090611a36565b602454600e5461127b916001600160a01b03169069035ff93e41818c16000090611a36565b602554600b546112a0916001600160a01b0316906935ff93e41818c160000090611a36565b602554600c546112c5916001600160a01b0316906935ff93e41818c160000090611a36565b602554600d546112ea916001600160a01b0316906935ff93e41818c160000090611a36565b602554600e5461130f916001600160a01b0316906935ff93e41818c160000090611a36565b602654600b54611334916001600160a01b03169069107bcf4a01bb9b2f000090611a36565b602654600c54611359916001600160a01b03169069107bcf4a01bb9b2f000090611a36565b602654600d5461137e916001600160a01b03169069107bcf4a01bb9b2f000090611a36565b602654600e546113a3916001600160a01b03169069107bcf4a01bb9b2f000090611a36565b602754600b546113c8916001600160a01b03169069569f52933bfd0b8a000090611a36565b602754600c546113ed916001600160a01b03169069569f52933bfd0b8a000090611a36565b602754600d54611412916001600160a01b03169069569f52933bfd0b8a000090611a36565b602754600e54610951916001600160a01b03169069569f52933bfd0b8a000090611a36565b61143f6115ad565b61144857600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080805b6002548110156115985760005b60036000600284815481106114b557fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205481101561158f576114e9611bd7565b60036000600285815481106114fa57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902080548390811061152a57fe5b60009182526020918290206040805160608101825260039093029091018054835260018101549383019390935260029092015460ff1615801592820192909252915061158657805161158390859063ffffffff611ab516565b93505b506001016114a4565b50600101611497565b50905090565b6000546001600160a01b031690565b600080546001600160a01b03163314806115d157506000546001600160a01b031632145b905090565b600360205281600052604060002081815481106115ef57fe5b600091825260209091206003909102018054600182015460029092015490935090915060ff1683565b600080805b6002548110156115985760005b600360006002848154811061163b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548110156117095761166f611bd7565b600360006002858154811061168057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190208054839081106116b057fe5b600091825260209182902060408051606081018252600390930290910180548084526001820154948401949094526002015460ff1615159082015291506116fe90859063ffffffff611ab516565b93505060010161162a565b5060010161161d565b61171a6115ad565b61172357600080fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561176e57600080fd5b505afa158015611782573d6000803e3d6000fd5b505050506040513d602081101561179857600080fd5b50516001546040805163a9059cbb60e01b81526001600160a01b03868116600483015260248201859052915193945091169163a9059cbb916044808201926020929091908290030181600087803b1580156117f257600080fd5b505af1158015611806573d6000803e3d6000fd5b505050506040513d602081101561181c57600080fd5b50505050565b61182a6115ad565b61183357600080fd5b60045460ff1615611881576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b6004805460ff19166001179055600f546005546118b4916001600160a01b0316906a0270afd208762367c0000090611a36565b6010546006546118da916001600160a01b0316906a01abc06b5f2d50a680000090611a36565b601054600754611900916001600160a01b0316906a01abc06b5f2d50a680000090611a36565b601054600854611926916001600160a01b0316906a01abc06b5f2d50a680000090611a36565b60105460095461194c916001600160a01b0316906a01abc06b5f2d50a680000090611a36565b601154600654611972916001600160a01b0316906a017a8491b4db1bf630000090611a36565b601154600754611998916001600160a01b0316906a017a8491b4db1bf630000090611a36565b6011546008546119be916001600160a01b0316906a017a8491b4db1bf630000090611a36565b6011546009546119e4916001600160a01b0316906a017a8491b4db1bf630000090611a36565b601154600a54610951916001600160a01b0316906a017a8491b4db1bf630000090611a36565b611a126115ad565b611a1b57600080fd5b611a2481611acb565b50565b6001546001600160a01b031681565b611a3f83611b39565b611a47611bd7565b5060408051606081018252928352602080840192835260008483018181526001600160a01b0396909616815260038083529281208054600180820183559183529290912094519190920290930192835590519082015590516002909101805460ff1916911515919091179055565b600082820183811015611ac457fe5b9392505050565b6001600160a01b038116611ade57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600254811015611b8657816001600160a01b031660028281548110611b5d57fe5b6000918252602090912001546001600160a01b03161415611b7e5750611a24565b600101611b3c565b50600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0383166001600160a01b031990911617905550565b60405180606001604052806000815260200160008152602001600015158152509056fe496e73756666696369656e742062616c616e636520696e2076657374696e6720636f6e7472616374a265627a7a72315820d7eb4740abddda03926fcd7ec4e21da047dce3a5b246418354f90977a539e29564736f6c63430005110032

Verified Source Code Partial Match

Compiler: v0.5.17+commit.d19bba13 EVM: istanbul Optimization: Yes (200 runs)
LitionVesting.sol 449 lines
pragma solidity ^0.5.17;

contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner || tx.origin == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @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));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure 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;
    }

    /**
    * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

interface TokenInterface {
    function totalSupply() external view returns (uint256);
    function balanceOf(address _owner) external view returns (uint256 balance);
    function transfer(address _to, uint256 _value) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title  Lition Vesting Contract
 * @author Patricio Mosse
 **/
contract LitionVesting is Ownable {
    using SafeMath for uint256;

    TokenInterface public token;
    
    address[] public holders;
    
    mapping (address => Holding[]) public holdings;

    struct Holding {
        uint256 totalTokens;
        uint256 unlockDate;
        bool claimed;
    }
    
    bool teamEcosystemCommunityInitialized = false;
    bool investorsAdvisors1Initialized = false;
    bool investorsAdvisors2Initialized = false;

    // Events
    event TokensReleased(address _to, uint256 _tokensReleased);
    
    // Dates
    uint256 april_01_2021 = 1617228000;
    
    uint256 july_15_2020 = 1594764000;
    uint256 october_15_2020 = 1602712800;
    uint256 january_15_2021 = 1610665200;
    uint256 april_15_2021 = 1618437600;
    
    uint256 july_15_2021 = 1626300000;
    
    uint256 june_30_2020 = 1593468000;
    uint256 december_31_2020 = 1609369200;
    uint256 june_30_2021 = 1625004000;
    uint256 december_31_2021 = 1640905200;
    
    // Wallets
    address teamWallet = 0x80BCd5a881A159d84521c8d06ab2c10edc486341;
    address ecosystemWallet = 0x25a13Edb1651DC729691134dB3a450f5D94292e9;
    address communityWallet = 0xA443e7c9EB6F0855eD237817CFbC2D74b87F60Fd;
    
    address investor_1_Wallet = 0xfe568f98dF64e7B49050FfE810D9f78952bb4f92;
    address investor_2_Wallet = 0x47C2F58aC01770e4bbeF401FDde1821c370BF5b0;
    address investor_3_Wallet = 0xeea95625332612fdbAB0713417d09e900028D9Fd;
    address investor_4_Wallet = 0xa9053549B32Ea35daf4999212d8Cb9f7b4ce3A7B;
    address investor_5_Wallet = 0xBf16D4B69619FbbeB878bb2D86c081aF1fc127b6;
    address investor_6_Wallet = 0xCcbc8e2713b96CC821bDdb74b6D71acd7d29c172;
    address investor_7_Wallet = 0x8121f802237A70C8D1220220D6B55786a436B78d;
    address investor_8_Wallet = 0x3f19FC15a62De71eaf5E8003c176f16b3c99822C;
    address investor_9_Wallet = 0xA579672BD4044f4f6C3502e571e370ECadeC9258;
    address investor_10_Wallet = 0x710a630B2409f3f702939FEAB09512c07eD140Ef;
    address investor_11_Wallet = 0x88FA0266C1036f52D20366a0203f9b3782CF794B;
    address investor_12_Wallet = 0xE1ED0F1a13515552fe0d5f779cCD56DB30f6DBa2;
    address investor_13_Wallet = 0x763c7C7Bf6b39FC5062E6FB8fd287dd3a3CF5f55;
    address investor_14_Wallet = 0x92cfdcEEb276a6Bc2f13B6907CD8E6aC245dD0FE;
    address investor_15_Wallet = 0xA21880528906dd770e22db5Bb1E2835fd693d8D8;
    address investor_16_Wallet = 0x7E3ace45Ffe3b6b7E5815057A4e29E6e18d6dD19;
    address investor_17_Wallet = 0xD1d4c1c16aEb26528D731dDB54Bb0Bff9608b6ca;
    address investor_18_Wallet = 0x8B4D7019c40084Ceb95a7B6FA6880312CF78be6a;
    address investor_19_Wallet = 0x055c484fF3592211eC2DA416edF9eAf900767E35;
    address investor_20_Wallet = 0x8f34031645D5609D0898e80566AFad1182232B63;
    address investor_21_Wallet = 0xEF4F09580673910d9FdcE1bc8D26389DBB75C7a0;
    address investor_22_Wallet = 0xa27A3A45Ed3218506c9d825990C80208DcEce99E;
    
    function getVestingByBeneficiary(address _beneficiary, uint256 _index) external view returns (uint256 totalTokens, uint256 unlockDate, bool claimed) {
        require(holdings[_beneficiary].length > _index, "The holding doesn't exist");
        Holding memory holding = holdings[_beneficiary][_index];
        totalTokens = holding.totalTokens;
        unlockDate = holding.unlockDate;
        claimed = holding.claimed;
    }
    
    function getTotalVestingsByBeneficiary(address _beneficiary) external view returns (uint256) {
        return holdings[_beneficiary].length;
    }

    function getTotalToClaimNowByBeneficiary(address _beneficiary) public view returns(uint256) {
        uint256 total = 0;
        
        for (uint256 i = 0; i < holdings[_beneficiary].length; i++) {
            Holding memory holding = holdings[_beneficiary][i];
            if (!holding.claimed && now > holding.unlockDate) {
                total = total.add(holding.totalTokens);
            }
        }

        return total;
    }
    
    function getTotalVested() public view returns(uint256) {
        uint256 total = 0;
        
        for (uint256 i = 0; i < holders.length; i++) {
            for (uint256 j = 0; j < holdings[holders[i]].length; j++) {
                Holding memory holding = holdings[holders[i]][j];
                total = total.add(holding.totalTokens);
            }
        }

        return total;
    }
    
    function getTotalClaimed() public view returns(uint256) {
        uint256 total = 0;
        
        for (uint256 i = 0; i < holders.length; i++) {
            for (uint256 j = 0; j < holdings[holders[i]].length; j++) {
                Holding memory holding = holdings[holders[i]][j];
                if (holding.claimed) {
                    total = total.add(holding.totalTokens);
                }
            }
        }

        return total;
    }

    function claimTokens() external
    {
        uint256 tokensToClaim = getTotalToClaimNowByBeneficiary(msg.sender);
        
        require(tokensToClaim > 0, "Nothing to claim");
        
        for (uint256 i = 0; i < holdings[msg.sender].length; i++) {
            Holding storage holding = holdings[msg.sender][i];
            if (!holding.claimed && now > holding.unlockDate) {
                holding.claimed = true;
                require(token.transfer(msg.sender, tokensToClaim), "Insufficient balance in vesting contract");
                emit TokensReleased(msg.sender, tokensToClaim);
            }
        }
    }
    
    function _addHolderToList(address _beneficiary) internal {
        for (uint256 i = 0; i < holders.length; i++) {
            if (holders[i] == _beneficiary) {
                return;
            }
        }
        holders.push(_beneficiary);
    }

    function _createVesting(address _beneficiary, uint256 _tokens, uint256 _unlockDate) internal {
        _addHolderToList(_beneficiary);
        Holding memory holding = Holding(_tokens, _unlockDate, false);
        holdings[_beneficiary].push(holding);
    }
    
    constructor(address _token) public {
        token = TokenInterface(_token);
    }
    
    function _initializeTeamEcosystemCommunity() public onlyOwner {
        require(!teamEcosystemCommunityInitialized, "Already initialized");
        teamEcosystemCommunityInitialized = true;
        
        // Team: 2.950.000
        _createVesting(teamWallet, 2950000000000000000000000, april_01_2021); 
        
        // Ecosystem: 8.080.000
        _createVesting(ecosystemWallet, 2020000000000000000000000, july_15_2020); 
        _createVesting(ecosystemWallet, 2020000000000000000000000, october_15_2020); 
        _createVesting(ecosystemWallet, 2020000000000000000000000, january_15_2021); 
        _createVesting(ecosystemWallet, 2020000000000000000000000, april_15_2021); 
        
        // Community: 8.937.500
        _createVesting(communityWallet, 1787500000000000000000000, july_15_2020); 
        _createVesting(communityWallet, 1787500000000000000000000, october_15_2020); 
        _createVesting(communityWallet, 1787500000000000000000000, january_15_2021); 
        _createVesting(communityWallet, 1787500000000000000000000, april_15_2021); 
        _createVesting(communityWallet, 1787500000000000000000000, july_15_2021); 
    }
    
    // Investors and advisors: 18.793.753
    function _initializeInvestorsAdvisors1() public onlyOwner {
        require(!investorsAdvisors1Initialized, "Already initialized");
        investorsAdvisors1Initialized = true;
        
        // - Total: 850.000
        _createVesting(investor_1_Wallet, 212500000000000000000000, june_30_2020); 
        _createVesting(investor_1_Wallet, 212500000000000000000000, december_31_2020); 
        _createVesting(investor_1_Wallet, 212500000000000000000000, june_30_2021); 
        _createVesting(investor_1_Wallet, 212500000000000000000000, december_31_2021); 
        
        // - Total: 2.125.000
        _createVesting(investor_2_Wallet, 531250000000000000000000, june_30_2020); 
        _createVesting(investor_2_Wallet, 531250000000000000000000, december_31_2020); 
        _createVesting(investor_2_Wallet, 531250000000000000000000, june_30_2021); 
        _createVesting(investor_2_Wallet, 531250000000000000000000, december_31_2021); 
        
        // - Total: 255.000
        _createVesting(investor_3_Wallet, 63750000000000000000000, june_30_2020); 
        _createVesting(investor_3_Wallet, 63750000000000000000000, december_31_2020); 
        _createVesting(investor_3_Wallet, 63750000000000000000000, june_30_2021); 
        _createVesting(investor_3_Wallet, 63750000000000000000000, december_31_2021); 

        // - Total: 2.656.250
        _createVesting(investor_4_Wallet, 664062500000000000000000, june_30_2020); 
        _createVesting(investor_4_Wallet, 664062500000000000000000, december_31_2020); 
        _createVesting(investor_4_Wallet, 664062500000000000000000, june_30_2021); 
        _createVesting(investor_4_Wallet, 664062500000000000000000, december_31_2021); 

        // - Total: 295.139 
        _createVesting(investor_5_Wallet, 73784750000000000000000, june_30_2020); 
        _createVesting(investor_5_Wallet, 73784750000000000000000, december_31_2020); 
        _createVesting(investor_5_Wallet, 73784750000000000000000, june_30_2021); 
        _createVesting(investor_5_Wallet, 73784750000000000000000, december_31_2021); 

        // - Total: 5.568.611
        _createVesting(investor_6_Wallet, 1392152750000000000000000, june_30_2020); 
        _createVesting(investor_6_Wallet, 1392152750000000000000000, december_31_2020); 
        _createVesting(investor_6_Wallet, 1392152750000000000000000, june_30_2021); 
        _createVesting(investor_6_Wallet, 1392152750000000000000000, december_31_2021); 

        // - Total: 42.500 
        _createVesting(investor_7_Wallet, 10625000000000000000000, june_30_2020); 
        _createVesting(investor_7_Wallet, 10625000000000000000000, december_31_2020); 
        _createVesting(investor_7_Wallet, 10625000000000000000000, june_30_2021); 
        _createVesting(investor_7_Wallet, 10625000000000000000000, december_31_2021); 

        // - Total: 807.353 
        _createVesting(investor_8_Wallet, 201838250000000000000000, june_30_2020); 
        _createVesting(investor_8_Wallet, 201838250000000000000000, december_31_2020); 
        _createVesting(investor_8_Wallet, 201838250000000000000000, june_30_2021); 
        _createVesting(investor_8_Wallet, 201838250000000000000000, december_31_2021); 

        // - Total: 850.000 
        _createVesting(investor_9_Wallet, 212500000000000000000000, june_30_2020); 
        _createVesting(investor_9_Wallet, 212500000000000000000000, december_31_2020); 
        _createVesting(investor_9_Wallet, 212500000000000000000000, june_30_2021); 
        _createVesting(investor_9_Wallet, 212500000000000000000000, december_31_2021); 

        // - Total: 425.000 
        _createVesting(investor_10_Wallet, 106250000000000000000000, june_30_2020); 
        _createVesting(investor_10_Wallet, 106250000000000000000000, december_31_2020); 
        _createVesting(investor_10_Wallet, 106250000000000000000000, june_30_2021); 
        _createVesting(investor_10_Wallet, 106250000000000000000000, december_31_2021); 

    }
    
    function _initializeInvestorsAdvisors2() public onlyOwner {
        require(!investorsAdvisors2Initialized, "Already initialized");
        investorsAdvisors2Initialized = true;

        // - Total: 63.750 
        _createVesting(investor_11_Wallet, 15937500000000000000000, june_30_2020); 
        _createVesting(investor_11_Wallet, 15937500000000000000000, december_31_2020); 
        _createVesting(investor_11_Wallet, 15937500000000000000000, june_30_2021); 
        _createVesting(investor_11_Wallet, 15937500000000000000000, december_31_2021); 

        // - Total: 63.750 
        _createVesting(investor_12_Wallet, 15937500000000000000000, june_30_2020); 
        _createVesting(investor_12_Wallet, 15937500000000000000000, december_31_2020); 
        _createVesting(investor_12_Wallet, 15937500000000000000000, june_30_2021); 
        _createVesting(investor_12_Wallet, 15937500000000000000000, december_31_2021); 

        // - Total: 21.250 
        _createVesting(investor_13_Wallet, 5312500000000000000000, june_30_2020); 
        _createVesting(investor_13_Wallet, 5312500000000000000000, december_31_2020); 
        _createVesting(investor_13_Wallet, 5312500000000000000000, june_30_2021); 
        _createVesting(investor_13_Wallet, 5312500000000000000000, december_31_2021); 

        // - Total: 212.500 
        _createVesting(investor_14_Wallet, 53125000000000000000000, june_30_2020); 
        _createVesting(investor_14_Wallet, 53125000000000000000000, december_31_2020); 
        _createVesting(investor_14_Wallet, 53125000000000000000000, june_30_2021); 
        _createVesting(investor_14_Wallet, 53125000000000000000000, december_31_2021); 

        // - Total: 607.143 
        _createVesting(investor_15_Wallet, 151785750000000000000000, june_30_2020); 
        _createVesting(investor_15_Wallet, 151785750000000000000000, december_31_2020); 
        _createVesting(investor_15_Wallet, 151785750000000000000000, june_30_2021); 
        _createVesting(investor_15_Wallet, 151785750000000000000000, december_31_2021); 

        // - Total: 5.865 
        _createVesting(investor_16_Wallet, 1466250000000000000000, june_30_2020); 
        _createVesting(investor_16_Wallet, 1466250000000000000000, december_31_2020); 
        _createVesting(investor_16_Wallet, 1466250000000000000000, june_30_2021); 
        _createVesting(investor_16_Wallet, 1466250000000000000000, december_31_2021); 

        // - Total: 616.250 
        _createVesting(investor_17_Wallet, 154062500000000000000000, june_30_2020); 
        _createVesting(investor_17_Wallet, 154062500000000000000000, december_31_2020); 
        _createVesting(investor_17_Wallet, 154062500000000000000000, june_30_2021); 
        _createVesting(investor_17_Wallet, 154062500000000000000000, december_31_2021); 

        // - Total: 308.125 
        _createVesting(investor_18_Wallet, 77031250000000000000000, june_30_2020); 
        _createVesting(investor_18_Wallet, 77031250000000000000000, december_31_2020); 
        _createVesting(investor_18_Wallet, 77031250000000000000000, june_30_2021); 
        _createVesting(investor_18_Wallet, 77031250000000000000000, december_31_2021); 

        // - Total: 63.750 
        _createVesting(investor_19_Wallet, 15937500000000000000000, june_30_2020); 
        _createVesting(investor_19_Wallet, 15937500000000000000000, december_31_2020); 
        _createVesting(investor_19_Wallet, 15937500000000000000000, june_30_2021); 
        _createVesting(investor_19_Wallet, 15937500000000000000000, december_31_2021); 

        // - Total: 1.020.000 
        _createVesting(investor_20_Wallet, 255000000000000000000000, june_30_2020); 
        _createVesting(investor_20_Wallet, 255000000000000000000000, december_31_2020); 
        _createVesting(investor_20_Wallet, 255000000000000000000000, june_30_2021); 
        _createVesting(investor_20_Wallet, 255000000000000000000000, december_31_2021); 

        // - Total: 311.367 
        _createVesting(investor_21_Wallet, 77841750000000000000000, june_30_2020); 
        _createVesting(investor_21_Wallet, 77841750000000000000000, december_31_2020); 
        _createVesting(investor_21_Wallet, 77841750000000000000000, june_30_2021); 
        _createVesting(investor_21_Wallet, 77841750000000000000000, december_31_2021); 

        // - Total: 1.636.250
        _createVesting(investor_22_Wallet, 409062500000000000000000, june_30_2020); 
        _createVesting(investor_22_Wallet, 409062500000000000000000, december_31_2020); 
        _createVesting(investor_22_Wallet, 409062500000000000000000, june_30_2021); 
        _createVesting(investor_22_Wallet, 409062500000000000000000, december_31_2021); 
    }

    function _claimUnallocated( address _sendTo) external onlyOwner{
        uint256 allTokens = token.balanceOf(address(this));
        token.transfer(_sendTo, allTokens);
    }
}

Read Contract

getTotalClaimed 0x736a83a1 → uint256
getTotalToClaimNowByBeneficiary 0x415f1bea → uint256
getTotalVested 0xc243ce74 → uint256
getTotalVestingsByBeneficiary 0x002ff428 → uint256
getVestingByBeneficiary 0x4b7e95e8 → uint256, uint256, bool
holders 0x2a11ced0 → address
holdings 0x91b46a91 → uint256, uint256, bool
isOwner 0x8f32d59b → bool
owner 0x8da5cb5b → address
token 0xfc0c546a → address

Write Contract 7 functions

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

_claimUnallocated 0xce810155
address _sendTo
_initializeInvestorsAdvisors1 0x2e230b9b
No parameters
_initializeInvestorsAdvisors2 0x5645bddc
No parameters
_initializeTeamEcosystemCommunity 0xdd2fde4d
No parameters
claimTokens 0x48c54b9d
No parameters
renounceOwnership 0x715018a6
No parameters
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

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