More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add To Vesting | 12709909 | 1382 days ago | IN | 0 ETH | 0.00045757 |
Loading...
Loading
Contract Name:
Vesting
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; // pragma abicoder v2; pragma abicoder v2; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; contract Vesting { using SafeMath for uint256; address public immutable governance; IERC20 public token; mapping(address => uint256) public oneYearVesting; mapping(address => uint256) public twoYearVesting; // total supply allowed for one and two year vesting uint256 allowedOneYearVesting; uint256 claimedOneYearVesting; uint256 allowedTwoYearVesting; uint256 claimedTwoYearVesting; struct VestingData { address user; uint256 amount; } // strategic development supply details address public development; uint256 public developmentIndex; // founders and affilates supply details address public founders; uint256 public foundersIndex; // core team supply details address public coreTeam; uint256 public coreTeamIndex; uint256 constant QUARTER = 7776000; struct TimeLock { address team; uint256 amount; // tokens to release per quarter uint256 lastClaimed; // timestamp of last claimed uint256 claimedSupply; // total claimed supply till date uint256 allowedSupply; // total allowed supply } mapping(uint256 => TimeLock) public timelocks; uint256 public immutable startTime; uint256 constant BASE = 1000000000000000000; constructor( address _governance, address _development, address _founders, address _coreTeam ) { governance = _governance; development = _development; coreTeam = _coreTeam; // initiate Timlock struct TimeLock storage timelock; // set timelock for strategic development team, development team have id of 0 timelock = timelocks[0]; timelock.team = _development; timelock.amount = 13750000 * BASE; timelock.allowedSupply = 110000000 * BASE; developmentIndex = 0; // set timelock for founders and affilates, founders and affilates have id of 1 timelock = timelocks[1]; timelock.team = _founders; timelock.amount = 8250000 * BASE; timelock.allowedSupply = 66000000 * BASE; foundersIndex = 1; // set time lock for core time, core team have id of 2 timelock = timelocks[2]; timelock.team = _coreTeam; timelock.amount = 3437500 * BASE; timelock.allowedSupply = 27500000 * BASE; coreTeamIndex = 2; // set vesting data, tokens allowed to claim in vesting allowedOneYearVesting = 37125000 * BASE; allowedTwoYearVesting = 37125000 * BASE; // set start time startTime = block.timestamp; } // claim tokens function claimVested() public { require( oneYearVesting[msg.sender] > 0 || twoYearVesting[msg.sender] > 0, "not allowed" ); if (oneYearVesting[msg.sender] > 0) { uint256 amount = oneYearVesting[msg.sender]; // check if one year has been passed require(!(startTime + 31536000 >= block.timestamp), "prohibited"); require( claimedOneYearVesting.add(amount) <= allowedOneYearVesting, "limit exceeded" ); oneYearVesting[msg.sender] = 0; claimedOneYearVesting = claimedOneYearVesting.add(amount); IERC20(token).transfer(msg.sender, amount); } if (twoYearVesting[msg.sender] > 0) { uint256 amount = twoYearVesting[msg.sender]; // check if two years has been passed require(!(startTime + 31536000 * 2 >= block.timestamp), "prohibited"); require( claimedTwoYearVesting.add(amount) <= allowedTwoYearVesting, "limit exceeded" ); twoYearVesting[msg.sender] = 0; claimedTwoYearVesting = claimedTwoYearVesting.add(amount); IERC20(token).transfer(msg.sender, amount); } } function addToVesting(VestingData[] memory _users, uint256 _years) public { require(msg.sender == governance, "not authorised"); if (_years == 1) { for (uint256 i = 0; i < _users.length; i++) { oneYearVesting[_users[i].user] = oneYearVesting[_users[i].user] .add(_users[i].amount); } } else if (_years == 2) { for (uint256 i = 0; i < _users.length; i++) { twoYearVesting[_users[i].user] = twoYearVesting[_users[i].user] .add(_users[i].amount); } } } function claimForTeam(uint256 _id, address _to) public { TimeLock storage timelock = timelocks[_id]; // let people start claiming from 1 Jan 2022 require(block.timestamp >= 1640995200, "Claiming not started"); // check if the call is receiving from team require(timelock.team == msg.sender, "unauthorised call"); if (timelock.lastClaimed == 0) { timelock.lastClaimed = block.timestamp; timelock.claimedSupply = timelock.claimedSupply.add( timelock.amount ); token.transfer(_to, timelock.amount); } else { // check if the team is claiming more than allowed require( timelock.claimedSupply.add(timelock.amount) <= timelock.allowedSupply, "already claimed all" ); // check if the quarter is over or not require( timelock.lastClaimed.add(QUARTER) <= block.timestamp, "quater not over" ); // update last claimed tokens and total claimed supply till date timelock.lastClaimed = timelock.lastClaimed.add(QUARTER); timelock.claimedSupply = timelock.claimedSupply.add( timelock.amount ); // transfer tokens to the user token.transfer(_to, timelock.amount); } } function addToken(address _token) public { require(msg.sender == governance); require(address(token) == address(0), "token already has been set"); token = IERC20(_token); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "../../utils/Context.sol"; import "./IERC20.sol"; import "../../math/SafeMath.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) public { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_development","type":"address"},{"internalType":"address","name":"_founders","type":"address"},{"internalType":"address","name":"_coreTeam","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Vesting.VestingData[]","name":"_users","type":"tuple[]"},{"internalType":"uint256","name":"_years","type":"uint256"}],"name":"addToVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"claimForTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimVested","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coreTeam","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coreTeamIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"development","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"founders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foundersIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"oneYearVesting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"timelocks","outputs":[{"internalType":"address","name":"team","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lastClaimed","type":"uint256"},{"internalType":"uint256","name":"claimedSupply","type":"uint256"},{"internalType":"uint256","name":"allowedSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"twoYearVesting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b506040516110f93803806110f983398101604081905261002f9161025e565b60609390931b6001600160601b031916608052600780546001600160a01b03199081166001600160a01b03948516908117909255600b805482169585169586179055600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee805482169092179091556a0b5facfe5b81c365c000007f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef556a5afd67f2dc0e1b2e0000007f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29f255600060088190557ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c58054831693909416929092179092556a06d301656a1aa8704000007ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c6556a36980b2b50d543820000007ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c9556001600a556002908190527f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc249805490921690921790556a02d7eb3f96e070d97000007f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc24a556a16bf59fcb70386cb8000007f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc24d55600c556a1eb586485d77f5f920000060038190556005554260a0526102b1565b80516001600160a01b038116811461025957600080fd5b919050565b60008060008060808587031215610273578384fd5b61027c85610242565b935061028a60208601610242565b925061029860408601610242565b91506102a660608601610242565b905092959194509250565b60805160601c60a051610e0e6102eb600039806102a152806104d8528061061752508061027d52806102dd52806107335250610e0e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806378e9792511610097578063d48bfca711610066578063d48bfca7146101c7578063e1424876146101da578063f01c68b9146101e2578063fc0c546a146101f557610100565b806378e979251461019a5780637b929c27146101a2578063c2892072146101aa578063d01c44cd146101bf57610100565b80633ed96489116100d35780633ed964891461016d578063411b007e14610175578063439514da1461018a5780635aa6e6751461019257610100565b8063016213c61461010557806307f7574f1461012e5780630d7e149f146101415780632af3cf6814610165575b600080fd5b610118610113366004610a78565b6101fd565b6040516101259190610dab565b60405180910390f35b61011861013c366004610a78565b61020f565b61015461014f366004610b8e565b610221565b604051610125959493929190610bfe565b61011861025a565b610118610260565b61017d610266565b6040516101259190610bd1565b610118610275565b61017d61027b565b61011861029f565b61017d6102c3565b6101bd6101b8366004610a92565b6102d2565b005b6101bd610464565b6101bd6101d5366004610a78565b610728565b61017d6107a8565b6101bd6101f0366004610ba6565b6107b7565b61017d6109ec565b60016020526000908152604090205481565b60026020526000908152604090205481565b600d60205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919085565b60085481565b600c5481565b6009546001600160a01b031681565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6007546001600160a01b031681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103235760405162461bcd60e51b815260040161031a90610d32565b60405180910390fd5b80600114156103e15760005b82518110156103db5761039e83828151811061034757fe5b6020026020010151602001516001600086858151811061036357fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020546109fb90919063ffffffff16565b600160008584815181106103ae57fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205560010161032f565b50610460565b80600214156104605760005b825181101561045e5761042183828151811061040557fe5b6020026020010151602001516002600086858151811061036357fe5b6002600085848151811061043157fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020556001016103ed565b505b5050565b3360009081526001602052604090205415158061048f57503360009081526002602052604090205415155b6104ab5760405162461bcd60e51b815260040161031a90610cab565b33600090815260016020526040902054156105ea5733600090815260016020526040902054426301e133807f000000000000000000000000000000000000000000000000000000000000000001106105155760405162461bcd60e51b815260040161031a90610d87565b60035460045461052590836109fb565b11156105435760405162461bcd60e51b815260040161031a90610c2c565b3360009081526001602052604081205560045461056090826109fb565b600490815560005460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91610595913391869101610be5565b602060405180830381600087803b1580156105af57600080fd5b505af11580156105c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e79190610b6e565b50505b33600090815260026020526040902054156107265733600090815260026020526040902054426303c267007f000000000000000000000000000000000000000000000000000000000000000001106106545760405162461bcd60e51b815260040161031a90610d87565b60055460065461066490836109fb565b11156106825760405162461bcd60e51b815260040161031a90610c2c565b3360009081526002602052604081205560065461069f90826109fb565b60065560005460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906106d49033908590600401610be5565b602060405180830381600087803b1580156106ee57600080fd5b505af1158015610702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104609190610b6e565b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461075d57600080fd5b6000546001600160a01b0316156107865760405162461bcd60e51b815260040161031a90610cd0565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031681565b6000828152600d602052604090206361cf99804210156107e95760405162461bcd60e51b815260040161031a90610c54565b80546001600160a01b031633146108125760405162461bcd60e51b815260040161031a90610d07565b60028101546108c75742600282015560018101546003820154610834916109fb565b6003820155600054600182015460405163a9059cbb60e01b81526001600160a01b039092169163a9059cbb9161086f91869190600401610be5565b602060405180830381600087803b15801561088957600080fd5b505af115801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190610b6e565b5061045e565b6004810154600182015460038301546108df916109fb565b11156108fd5760405162461bcd60e51b815260040161031a90610d5a565b60028101544290610911906276a7006109fb565b111561092f5760405162461bcd60e51b815260040161031a90610c82565b6002810154610941906276a7006109fb565b600282015560018101546003820154610959916109fb565b6003820155600054600182015460405163a9059cbb60e01b81526001600160a01b039092169163a9059cbb9161099491869190600401610be5565b602060405180830381600087803b1580156109ae57600080fd5b505af11580156109c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e69190610b6e565b50505050565b6000546001600160a01b031681565b600082820183811015610a55576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b80356001600160a01b0381168114610a7357600080fd5b919050565b600060208284031215610a89578081fd5b610a5582610a5c565b6000806040808486031215610aa5578182fd5b833567ffffffffffffffff80821115610abc578384fd5b818601915086601f830112610acf578384fd5b8135602082821115610add57fe5b610aea8182840201610db4565b82815281810190858301878502870184018c1015610b06578889fd5b8896505b84871015610b5c5787818d031215610b20578889fd5b87518881018181108882111715610b3357fe5b8952610b3e82610a5c565b81528185013585820152835260019690960195918301918701610b0a565b509a9890910135985050505050505050565b600060208284031215610b7f578081fd5b81518015158114610a55578182fd5b600060208284031215610b9f578081fd5b5035919050565b60008060408385031215610bb8578182fd5b82359150610bc860208401610a5c565b90509250929050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b6020808252600e908201526d1b1a5b5a5d08195e18d95959195960921b604082015260600190565b60208082526014908201527310db185a5b5a5b99c81b9bdd081cdd185c9d195960621b604082015260600190565b6020808252600f908201526e38bab0ba32b9103737ba1037bb32b960891b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b6020808252601a908201527f746f6b656e20616c726561647920686173206265656e20736574000000000000604082015260600190565b6020808252601190820152701d5b985d5d1a1bdc9a5cd9590818d85b1b607a1b604082015260600190565b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5cd95960921b604082015260600190565b602080825260139082015272185b1c9958591e4818db185a5b595908185b1b606a1b604082015260600190565b6020808252600a90820152691c1c9bda1a589a5d195960b21b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715610dd057fe5b60405291905056fea2646970667358221220615e5fc14f68a9529320a19e0d9b02d3481731b1de813537c8324b1e61c4dd4064736f6c63430007060033000000000000000000000000f5123119e54f1f89722c3afe3e719abc33f79d80000000000000000000000000656bc2cbe2e7171ece773c35696d8c38539578f7000000000000000000000000fcfedcfe36cf665d60acb05ab57261f8b5ee393d000000000000000000000000453999c53bc67ac2a3dd54f30ed62b93a378c7eb
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c806378e9792511610097578063d48bfca711610066578063d48bfca7146101c7578063e1424876146101da578063f01c68b9146101e2578063fc0c546a146101f557610100565b806378e979251461019a5780637b929c27146101a2578063c2892072146101aa578063d01c44cd146101bf57610100565b80633ed96489116100d35780633ed964891461016d578063411b007e14610175578063439514da1461018a5780635aa6e6751461019257610100565b8063016213c61461010557806307f7574f1461012e5780630d7e149f146101415780632af3cf6814610165575b600080fd5b610118610113366004610a78565b6101fd565b6040516101259190610dab565b60405180910390f35b61011861013c366004610a78565b61020f565b61015461014f366004610b8e565b610221565b604051610125959493929190610bfe565b61011861025a565b610118610260565b61017d610266565b6040516101259190610bd1565b610118610275565b61017d61027b565b61011861029f565b61017d6102c3565b6101bd6101b8366004610a92565b6102d2565b005b6101bd610464565b6101bd6101d5366004610a78565b610728565b61017d6107a8565b6101bd6101f0366004610ba6565b6107b7565b61017d6109ec565b60016020526000908152604090205481565b60026020526000908152604090205481565b600d60205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919085565b60085481565b600c5481565b6009546001600160a01b031681565b600a5481565b7f000000000000000000000000f5123119e54f1f89722c3afe3e719abc33f79d8081565b7f0000000000000000000000000000000000000000000000000000000060d7176081565b6007546001600160a01b031681565b336001600160a01b037f000000000000000000000000f5123119e54f1f89722c3afe3e719abc33f79d8016146103235760405162461bcd60e51b815260040161031a90610d32565b60405180910390fd5b80600114156103e15760005b82518110156103db5761039e83828151811061034757fe5b6020026020010151602001516001600086858151811061036357fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020546109fb90919063ffffffff16565b600160008584815181106103ae57fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205560010161032f565b50610460565b80600214156104605760005b825181101561045e5761042183828151811061040557fe5b6020026020010151602001516002600086858151811061036357fe5b6002600085848151811061043157fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020556001016103ed565b505b5050565b3360009081526001602052604090205415158061048f57503360009081526002602052604090205415155b6104ab5760405162461bcd60e51b815260040161031a90610cab565b33600090815260016020526040902054156105ea5733600090815260016020526040902054426301e133807f0000000000000000000000000000000000000000000000000000000060d7176001106105155760405162461bcd60e51b815260040161031a90610d87565b60035460045461052590836109fb565b11156105435760405162461bcd60e51b815260040161031a90610c2c565b3360009081526001602052604081205560045461056090826109fb565b600490815560005460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91610595913391869101610be5565b602060405180830381600087803b1580156105af57600080fd5b505af11580156105c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e79190610b6e565b50505b33600090815260026020526040902054156107265733600090815260026020526040902054426303c267007f0000000000000000000000000000000000000000000000000000000060d7176001106106545760405162461bcd60e51b815260040161031a90610d87565b60055460065461066490836109fb565b11156106825760405162461bcd60e51b815260040161031a90610c2c565b3360009081526002602052604081205560065461069f90826109fb565b60065560005460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906106d49033908590600401610be5565b602060405180830381600087803b1580156106ee57600080fd5b505af1158015610702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104609190610b6e565b565b336001600160a01b037f000000000000000000000000f5123119e54f1f89722c3afe3e719abc33f79d80161461075d57600080fd5b6000546001600160a01b0316156107865760405162461bcd60e51b815260040161031a90610cd0565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031681565b6000828152600d602052604090206361cf99804210156107e95760405162461bcd60e51b815260040161031a90610c54565b80546001600160a01b031633146108125760405162461bcd60e51b815260040161031a90610d07565b60028101546108c75742600282015560018101546003820154610834916109fb565b6003820155600054600182015460405163a9059cbb60e01b81526001600160a01b039092169163a9059cbb9161086f91869190600401610be5565b602060405180830381600087803b15801561088957600080fd5b505af115801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190610b6e565b5061045e565b6004810154600182015460038301546108df916109fb565b11156108fd5760405162461bcd60e51b815260040161031a90610d5a565b60028101544290610911906276a7006109fb565b111561092f5760405162461bcd60e51b815260040161031a90610c82565b6002810154610941906276a7006109fb565b600282015560018101546003820154610959916109fb565b6003820155600054600182015460405163a9059cbb60e01b81526001600160a01b039092169163a9059cbb9161099491869190600401610be5565b602060405180830381600087803b1580156109ae57600080fd5b505af11580156109c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e69190610b6e565b50505050565b6000546001600160a01b031681565b600082820183811015610a55576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b80356001600160a01b0381168114610a7357600080fd5b919050565b600060208284031215610a89578081fd5b610a5582610a5c565b6000806040808486031215610aa5578182fd5b833567ffffffffffffffff80821115610abc578384fd5b818601915086601f830112610acf578384fd5b8135602082821115610add57fe5b610aea8182840201610db4565b82815281810190858301878502870184018c1015610b06578889fd5b8896505b84871015610b5c5787818d031215610b20578889fd5b87518881018181108882111715610b3357fe5b8952610b3e82610a5c565b81528185013585820152835260019690960195918301918701610b0a565b509a9890910135985050505050505050565b600060208284031215610b7f578081fd5b81518015158114610a55578182fd5b600060208284031215610b9f578081fd5b5035919050565b60008060408385031215610bb8578182fd5b82359150610bc860208401610a5c565b90509250929050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b6020808252600e908201526d1b1a5b5a5d08195e18d95959195960921b604082015260600190565b60208082526014908201527310db185a5b5a5b99c81b9bdd081cdd185c9d195960621b604082015260600190565b6020808252600f908201526e38bab0ba32b9103737ba1037bb32b960891b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b6020808252601a908201527f746f6b656e20616c726561647920686173206265656e20736574000000000000604082015260600190565b6020808252601190820152701d5b985d5d1a1bdc9a5cd9590818d85b1b607a1b604082015260600190565b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5cd95960921b604082015260600190565b602080825260139082015272185b1c9958591e4818db185a5b595908185b1b606a1b604082015260600190565b6020808252600a90820152691c1c9bda1a589a5d195960b21b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715610dd057fe5b60405291905056fea2646970667358221220615e5fc14f68a9529320a19e0d9b02d3481731b1de813537c8324b1e61c4dd4064736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f5123119e54f1f89722c3afe3e719abc33f79d80000000000000000000000000656bc2cbe2e7171ece773c35696d8c38539578f7000000000000000000000000fcfedcfe36cf665d60acb05ab57261f8b5ee393d000000000000000000000000453999c53bc67ac2a3dd54f30ed62b93a378c7eb
-----Decoded View---------------
Arg [0] : _governance (address): 0xF5123119e54f1f89722c3Afe3e719abC33F79D80
Arg [1] : _development (address): 0x656BC2Cbe2e7171ECE773C35696d8C38539578f7
Arg [2] : _founders (address): 0xfCFEDCfE36cF665D60acb05ab57261f8B5EE393d
Arg [3] : _coreTeam (address): 0x453999C53BC67Ac2A3DD54F30Ed62b93A378c7EB
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000f5123119e54f1f89722c3afe3e719abc33f79d80
Arg [1] : 000000000000000000000000656bc2cbe2e7171ece773c35696d8c38539578f7
Arg [2] : 000000000000000000000000fcfedcfe36cf665d60acb05ab57261f8b5ee393d
Arg [3] : 000000000000000000000000453999c53bc67ac2a3dd54f30ed62b93a378c7eb
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.