Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 16870670 | 563 days ago | IN | 0.28646793 ETH | 0.00070384 | ||||
Transfer | 16870635 | 563 days ago | IN | 0.28709167 ETH | 0.00063515 | ||||
Transfer | 16870632 | 563 days ago | IN | 0.28680145 ETH | 0.00065642 | ||||
Transfer | 16854908 | 565 days ago | IN | 0.27493954 ETH | 0.00038698 | ||||
Transfer | 16834984 | 568 days ago | IN | 0.36948917 ETH | 0.00071549 | ||||
Transfer | 16834928 | 568 days ago | IN | 0.36847173 ETH | 0.00075953 | ||||
Transfer | 16834882 | 568 days ago | IN | 0.37341896 ETH | 0.00077385 | ||||
Transfer | 16834876 | 568 days ago | IN | 0.37307379 ETH | 0.00084065 | ||||
Transfer | 16834222 | 568 days ago | IN | 0.32244648 ETH | 0.00089286 | ||||
Claim For | 15881757 | 701 days ago | IN | 0 ETH | 0.00091592 | ||||
0x60806040 | 13847604 | 1018 days ago | IN | 0 ETH | 0.06579273 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Vesting
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-21 */ // File: @openzeppelin/contracts/utils/Context.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.9; /** * @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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) /** * @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); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: contracts/vesting/IVesting.sol // Author : Tokeny Solutions interface IVesting { // events event UpdatedTreasury(address newTreasury); event UpdatedTeam(address newTeam); event UpdatedEcosystemFund(address newEcosystemFund); event UpdatedLongTermLockUp(address newLongTermLockUp); event TokenSet(address token); event InitialDeposit(address _to, uint256 _amount, uint _cliff, uint _vesting); event TokensClaimed(address _holder, uint256 _amount); event ReferenceDateSet(uint256 _referenceDate); // functions function setToken(address token) external; function initialized() external view returns(bool); function treasury() external view returns(address); function updateTreasuryWallet(address newTreasury) external; function team() external view returns(address); function updateTeamWallet(address newTeam) external; function ecosystemFund() external view returns(address); function updateEcosystemFundWallet(address newEcosystemFund) external; function longTermLockUp() external view returns(address); function updateLongTermLockUpWallet(address newLongTermLockUp) external; function initialDeposit(address _to, uint256 _amount, uint _cliff, uint _vesting) external; function claim() external; function claimFor(address _holder) external; function claimAll() external; function getBalances(address _holder) external view returns(uint, uint, uint); } // File: contracts/vesting/Vesting.sol // Author : Tokeny Solutions contract Vesting is Ownable, IVesting { using SafeERC20 for IERC20Metadata; using SafeERC20 for IERC20; uint256 public referenceDate = 0; uint32 private constant MONTH = 30 days; struct VestingData { uint cliff; // Number of months during which the holder's tokens are locked in cliff uint vesting; // Total Number of months during which the holder's tokens are vested uint256 totalVestedAmount; // amount of tokens in vesting on the contract for a given address and a given vesting schema uint256 releasedAmount; // amount of tokens already released from totalVestedAmount } mapping(address => VestingData) public _vestingData; address private _treasury; address private _team; address private _ecosystemFund; address private _longTermLockUp; IERC20Metadata private _token; bool private _initialized; /** * @dev contract constructor * @param treasury_ the treasury address * @param team_ the team address * @param ecosystemFund_ the ecosystem fund address * @param longTermLockUp_ the long term lockup address * @param owner the owner address */ constructor( address treasury_, address team_, address ecosystemFund_, address longTermLockUp_, address owner, uint256 _referenceDate) { _treasury = treasury_; _team = team_; _ecosystemFund =ecosystemFund_; _longTermLockUp = longTermLockUp_; _initialized = false; _transferOwnership(owner); _setReferenceDate(_referenceDate); } /** * @dev internal function used to set the reference date for the start of vesting * @param _referenceDate the date of reference in UNIX time * can be called only once */ function _setReferenceDate(uint256 _referenceDate) internal { require(referenceDate == 0, 'Reference date has already been initialized'); require(_referenceDate != 0, 'Cannot set reference date to 0'); referenceDate = _referenceDate; emit ReferenceDateSet(_referenceDate); } /** * @dev initialization function setting the address of BMEX token * can be called only once, after that the contract is set to initialized */ function setToken(address token) external override { require(!initialized(), 'token address already set'); _token = IERC20Metadata(token); _initialized = true; emit TokenSet(token); } /** * @dev getter function for initialization status (token initialization) */ function initialized() public view override returns(bool) { return _initialized; } /** * @dev getter function for treasury wallet address */ function treasury() public view override returns(address) { return _treasury; } /** * @dev function used to update the wallet of treasury * the vesting data corresponding to the treasury will be transferred to the new wallet * @param newTreasury the new wallet used for treasury * only owner can call this function */ function updateTreasuryWallet(address newTreasury) external override onlyOwner { require(newTreasury != address(0), 'cannot be address zero'); require(_vestingData[newTreasury].totalVestedAmount == 0, 'address already set'); _vestingData[newTreasury] = _vestingData[_treasury]; delete _vestingData[_treasury]; _treasury = newTreasury; emit UpdatedTreasury(newTreasury); } /** * @dev getter function for team wallet address */ function team() public view override returns(address) { return _team; } /** * @dev function used to update the team wallet * the vesting data corresponding to the team will be transferred to the new wallet * @param newTeam the new wallet used for team * only owner can call this function */ function updateTeamWallet(address newTeam) external override onlyOwner { require(newTeam != address(0), 'cannot be address zero'); require(_vestingData[newTeam].totalVestedAmount == 0, 'address already set'); _vestingData[newTeam] = _vestingData[_team]; delete _vestingData[_team]; _team = newTeam; emit UpdatedTeam(newTeam); } /** * @dev getter function for ecosystemFund wallet address */ function ecosystemFund() public view override returns(address) { return _ecosystemFund; } /** * @dev function used to update the wallet of ecosystem fund * the vesting data corresponding to the ecosystem fund will be transferred to the new wallet * @param newEcosystemFund the new wallet used for ecosystem fund * only owner can call this function */ function updateEcosystemFundWallet(address newEcosystemFund) external override onlyOwner { require(newEcosystemFund != address(0), 'cannot be address zero'); require(_vestingData[newEcosystemFund].totalVestedAmount == 0, 'address already set'); _vestingData[newEcosystemFund] = _vestingData[_ecosystemFund]; delete _vestingData[_ecosystemFund]; _ecosystemFund = newEcosystemFund; emit UpdatedEcosystemFund(newEcosystemFund); } /** * @dev getter function for long term lockup wallet address */ function longTermLockUp() public view override returns(address) { return _longTermLockUp; } /** * @dev function used to update the wallet of long term lockup * the vesting data corresponding to the long term lockup will be transferred to the new wallet * @param newLongTermLockUp the new wallet used for long term lockup * only owner can call this function */ function updateLongTermLockUpWallet(address newLongTermLockUp) external override onlyOwner { require(newLongTermLockUp != address(0), 'cannot be address zero'); require(_vestingData[newLongTermLockUp].totalVestedAmount == 0, 'address already set'); _vestingData[newLongTermLockUp] = _vestingData[_longTermLockUp]; delete _vestingData[_longTermLockUp]; _longTermLockUp = newLongTermLockUp; emit UpdatedLongTermLockUp(newLongTermLockUp); } /** * @dev function allowing to make a deposit of tokens on the vesting contract for one of the 4 wallets * pre registered, if an initial deposit already exists, the function will fail * @param _to the address of the token holder * @param _amount the amount of tokens belonging to _to * @param _cliff the duration of cliff, in months * @param _vesting the duration of the vesting, in months, including the cliff */ function initialDeposit( address _to, uint256 _amount, uint _cliff, uint _vesting ) external override { // Validate input parameters require( _to == treasury() || _to == team() || _to == ecosystemFund() || _to == longTermLockUp(), 'invalid address parameter'); require(_amount > 0, 'Value must be positive'); require(_vestingData[_to].totalVestedAmount == 0, 'not initial deposit'); // transfer tokens on the vesting contract _token.safeTransferFrom(msg.sender, address(this), _amount); _vestingData[_to].totalVestedAmount = _amount; _vestingData[_to].releasedAmount = 0; _vestingData[_to].cliff = _cliff; _vestingData[_to].vesting = _vesting; emit InitialDeposit(_to, _amount, _cliff, _vesting); } /** * @dev internal function calculating the available tokens of a token holder, related to the vesting scheme * and holdings of this holder */ function _getAvailableBalance(address _holder) internal view returns (uint256) { if (_vestingData[_holder].totalVestedAmount == _vestingData[_holder].releasedAmount) { //All tokens released return 0; } // solhint-disable-next-line not-rely-on-time uint256 currentTime = block.timestamp; uint256 startVesting = referenceDate + (_vestingData[_holder].cliff * MONTH); if (currentTime < startVesting) { return 0; // All balance is still locked } uint256 vestingTicks = (currentTime - referenceDate) / MONTH; // Divide with 10^12 resolution uint256 tokensPerTick = (_vestingData[_holder].totalVestedAmount * (10**12 / _vestingData[_holder].vesting)) / 10**12; uint256 unlockedBalance = tokensPerTick * vestingTicks; if (vestingTicks >= _vestingData[_holder].vesting) { unlockedBalance = _vestingData[_holder].totalVestedAmount; } if (_vestingData[_holder].releasedAmount >= unlockedBalance) { return 0; } else { return unlockedBalance - _vestingData[_holder].releasedAmount; } } /** * @dev function that allows a token owner to claim tokens for himself * if there is some free tokens they will be sent out of the vesting contract to the owner wallet */ function claim() external override { claimFor(msg.sender); } /** * @dev function that claims tokens on behalf of a wallet * this function can be called by anyone * if there is some free tokens they will be sent out of the vesting contract to the owner wallet * owner needs to actually exist otherwise the function will fail */ function claimFor(address _holder) public override { require( _holder == treasury() || _holder == team() || _holder == ecosystemFund() || _holder == longTermLockUp(), 'invalid holder'); uint256 availableBalance = _getAvailableBalance(_holder); if (availableBalance > 0) { _token.safeTransfer(_holder, availableBalance); _vestingData[_holder].releasedAmount += availableBalance; emit TokensClaimed(_holder, availableBalance); } } /** * @dev function that claims tokens on behalf of all the wallets at the same time * this function can be called by anyone * if there is some free tokens they will be sent out of the vesting contract to their owners */ function claimAll() external override { claimFor(treasury()); claimFor(team()); claimFor(ecosystemFund()); claimFor(longTermLockUp()); } /** * @dev Get the balances of the holder on the vesting contract. * totalBalance is the balance that is on the vesting contract and belongs to the holder * lockedBalance is the share of total balance that is locked on the vesting contract * freeBalance is the share of the total balance that can be claimed by calling a claim function on the contract * @param _holder the wallet of the token holder, it has to be one of the 4 wallets holding tokens */ function getBalances(address _holder) external view override returns ( uint totalBalance, uint lockedBalance, uint freeBalance ) { require( _holder == treasury() || _holder == team() || _holder == ecosystemFund() || _holder == longTermLockUp(), 'invalid holder'); totalBalance = _vestingData[_holder].totalVestedAmount - _vestingData[_holder].releasedAmount; freeBalance = _getAvailableBalance(_holder); lockedBalance = totalBalance - freeBalance; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"treasury_","type":"address"},{"internalType":"address","name":"team_","type":"address"},{"internalType":"address","name":"ecosystemFund_","type":"address"},{"internalType":"address","name":"longTermLockUp_","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_referenceDate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_cliff","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_vesting","type":"uint256"}],"name":"InitialDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_referenceDate","type":"uint256"}],"name":"ReferenceDateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"TokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newEcosystemFund","type":"address"}],"name":"UpdatedEcosystemFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newLongTermLockUp","type":"address"}],"name":"UpdatedLongTermLockUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newTeam","type":"address"}],"name":"UpdatedTeam","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newTreasury","type":"address"}],"name":"UpdatedTreasury","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_vestingData","outputs":[{"internalType":"uint256","name":"cliff","type":"uint256"},{"internalType":"uint256","name":"vesting","type":"uint256"},{"internalType":"uint256","name":"totalVestedAmount","type":"uint256"},{"internalType":"uint256","name":"releasedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"claimFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ecosystemFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getBalances","outputs":[{"internalType":"uint256","name":"totalBalance","type":"uint256"},{"internalType":"uint256","name":"lockedBalance","type":"uint256"},{"internalType":"uint256","name":"freeBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_cliff","type":"uint256"},{"internalType":"uint256","name":"_vesting","type":"uint256"}],"name":"initialDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"longTermLockUp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referenceDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"team","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newEcosystemFund","type":"address"}],"name":"updateEcosystemFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLongTermLockUp","type":"address"}],"name":"updateLongTermLockUpWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTeam","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasury","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260006001553480156200001657600080fd5b50604051620017b8380380620017b883398101604081905262000039916200021e565b6200004433620000bd565b600380546001600160a01b038089166001600160a01b031992831617909255600480548884169083161790556005805487841690831617905560068054928616929091169190911790556007805460ff60a01b19169055620000a682620000bd565b620000b1816200010d565b50505050505062000296565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60015415620001775760405162461bcd60e51b815260206004820152602b60248201527f5265666572656e636520646174652068617320616c7265616479206265656e2060448201526a1a5b9a5d1a585b1a5e995960aa1b60648201526084015b60405180910390fd5b80620001c65760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f7420736574207265666572656e6365206461746520746f2030000060448201526064016200016e565b60018190556040518181527fe28808f45884db397c72dba109addd1e67f30aa833729b0dd3ca640cf9685aa39060200160405180910390a150565b80516001600160a01b03811681146200021957600080fd5b919050565b60008060008060008060c087890312156200023857600080fd5b620002438762000201565b9550620002536020880162000201565b9450620002636040880162000201565b9350620002736060880162000201565b9250620002836080880162000201565b915060a087015190509295509295509295565b61151280620002a66000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638da5cb5b116100ad578063d2c1996b11610071578063d2c1996b14610269578063ddeae0331461027c578063e14fc6eb1461028f578063f2fde38b146102e6578063fd9c190b146102f957600080fd5b80638da5cb5b146101f8578063c693e38414610209578063c84aae1714610220578063ce5662ce1461024e578063d1058e591461026157600080fd5b806361d027b3116100f457806361d027b3146101a8578063715018a6146101b95780637cb332bb146101c1578063809d458d146101d457806385f2aef2146101e757600080fd5b8063144fa6d714610131578063158ef93e146101465780631d0cf683146101685780633ee1dcdc1461018d5780634e71d92d146101a0575b600080fd5b61014461013f3660046112d3565b61030a565b005b600754600160a01b900460ff1660405190151581526020015b60405180910390f35b6005546001600160a01b03165b6040516001600160a01b03909116815260200161015f565b61014461019b3660046112d3565b6103c4565b6101446104f9565b6003546001600160a01b0316610175565b610144610504565b6101446101cf3660046112d3565b610538565b6101446101e23660046112d3565b61066d565b6004546001600160a01b0316610175565b6000546001600160a01b0316610175565b61021260015481565b60405190815260200161015f565b61023361022e3660046112d3565b61079c565b6040805193845260208401929092529082015260600161015f565b61014461025c3660046112d3565b610899565b6101446109ce565b6101446102773660046112ee565b610a22565b61014461028a3660046112d3565b610c05565b6102c661029d3660046112d3565b600260208190526000918252604090912080546001820154928201546003909201549092919084565b60408051948552602085019390935291830152606082015260800161015f565b6101446102f43660046112d3565b610d3c565b6006546001600160a01b0316610175565b600754600160a01b900460ff16156103695760405162461bcd60e51b815260206004820152601960248201527f746f6b656e206164647265737320616c7265616479207365740000000000000060448201526064015b60405180910390fd5b600780546001600160a81b0319166001600160a01b038316908117600160a01b179091556040519081527fa07c91c183e42229e705a9795a1c06d76528b673788b849597364528c96eefb7906020015b60405180910390a150565b6000546001600160a01b031633146103ee5760405162461bcd60e51b815260040161036090611327565b6001600160a01b0381166104145760405162461bcd60e51b81526004016103609061135c565b6001600160a01b038116600090815260026020819052604090912001541561044e5760405162461bcd60e51b81526004016103609061138c565b600580546001600160a01b039081166000908152600260208181526040808420878616808652828620825481556001808401548183015583870154828801556003938401549184019190915588549097168652828620868155968701869055938601859055949094019290925583546001600160a01b031916811790935590519182527f89e5aa133b9d4776e7613024c9e40930d10d04c8c4d6cb2bda37d4e91785712291016103b9565b61050233610c05565b565b6000546001600160a01b0316331461052e5760405162461bcd60e51b815260040161036090611327565b6105026000610dd7565b6000546001600160a01b031633146105625760405162461bcd60e51b815260040161036090611327565b6001600160a01b0381166105885760405162461bcd60e51b81526004016103609061135c565b6001600160a01b03811660009081526002602081905260409091200154156105c25760405162461bcd60e51b81526004016103609061138c565b600480546001600160a01b039081166000908152600260208181526040808420878616808652828620825481556001808401548183015583870154828801556003938401549184019190915588549097168652828620868155968701869055938601859055949094019290925583546001600160a01b031916811790935590519182527f40b549bfa0f997a5d35ae467a3ef53f5b65fde164db4076120a2bc9f4388667a91016103b9565b6000546001600160a01b031633146106975760405162461bcd60e51b815260040161036090611327565b6001600160a01b0381166106bd5760405162461bcd60e51b81526004016103609061135c565b6001600160a01b03811660009081526002602081905260409091200154156106f75760405162461bcd60e51b81526004016103609061138c565b600380546001600160a01b039081166000908152600260208181526040808420878616808652828620825481556001808401548183015583870154828801559289015490890155875490961685528185208581559081018590559283018490559185019290925583546001600160a01b031916831790935591519081527fa6df481f77da1f4c92eb330341e03585d46106fcf522f8e6b6b2afbea56eefdc91016103b9565b60008060006107b36003546001600160a01b031690565b6001600160a01b0316846001600160a01b031614806107df57506004546001600160a01b038581169116145b806107f757506005546001600160a01b038581169116145b8061080f57506006546001600160a01b038581169116145b61084c5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b2103437b63232b960911b6044820152606401610360565b6001600160a01b0384166000908152600260208190526040909120600381015491015461087991906113cf565b925061088484610e27565b905061089081846113cf565b91509193909250565b6000546001600160a01b031633146108c35760405162461bcd60e51b815260040161036090611327565b6001600160a01b0381166108e95760405162461bcd60e51b81526004016103609061135c565b6001600160a01b03811660009081526002602081905260409091200154156109235760405162461bcd60e51b81526004016103609061138c565b600680546001600160a01b039081166000908152600260208181526040808420878616808652828620825481556001808401548183015583870154828801556003938401549184019190915588549097168652828620868155968701869055938601859055949094019290925583546001600160a01b031916811790935590519182527f7d8808ceec67a617f74a07b62b596b69003a9f46ff918577db8d10b2683e106091016103b9565b6109e361028a6003546001600160a01b031690565b6109f861028a6004546001600160a01b031690565b610a0d61028a6005546001600160a01b031690565b61050261028a6006546001600160a01b031690565b6003546001600160a01b0385811691161480610a4b57506004546001600160a01b038581169116145b80610a6357506005546001600160a01b038581169116145b80610a7b57506006546001600160a01b038581169116145b610ac75760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206164647265737320706172616d65746572000000000000006044820152606401610360565b60008311610b105760405162461bcd60e51b815260206004820152601660248201527556616c7565206d75737420626520706f73697469766560501b6044820152606401610360565b6001600160a01b0384166000908152600260208190526040909120015415610b705760405162461bcd60e51b81526020600482015260136024820152721b9bdd081a5b9a5d1a585b0819195c1bdcda5d606a1b6044820152606401610360565b600754610b88906001600160a01b0316333086610fd5565b6001600160a01b038416600081815260026020818152604080842092830188905560038301939093558582556001909101849055815192835282018590528101839052606081018290527fc9408d6baf5231dd7ed4cdbdcf7cf05d95a696c5425e9533969ec692ff89e0a89060800160405180910390a150505050565b6003546001600160a01b0382811691161480610c2e57506004546001600160a01b038281169116145b80610c4657506005546001600160a01b038281169116145b80610c5e57506006546001600160a01b038281169116145b610c9b5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b2103437b63232b960911b6044820152606401610360565b6000610ca682610e27565b90508015610d3857600754610cc5906001600160a01b03168383611046565b6001600160a01b03821660009081526002602052604081206003018054839290610cf09084906113e6565b9091555050604080516001600160a01b0384168152602081018390527f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e430910160405180910390a15b5050565b6000546001600160a01b03163314610d665760405162461bcd60e51b815260040161036090611327565b6001600160a01b038116610dcb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610360565b610dd481610dd7565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166000908152600260208190526040822060038101549101541415610e5757506000919050565b6001600160a01b038216600090815260026020526040812054429190610e819062278d00906113fe565b600154610e8e91906113e6565b905080821015610ea2575060009392505050565b60015460009062278d0090610eb790856113cf565b610ec1919061141d565b6001600160a01b0386166000908152600260205260408120600101549192509064e8d4a5100090610ef2908261141d565b6001600160a01b03881660009081526002602081905260409091200154610f1991906113fe565b610f23919061141d565b90506000610f3183836113fe565b6001600160a01b0388166000908152600260205260409020600101549091508310610f7557506001600160a01b038616600090815260026020819052604090912001545b6001600160a01b0387166000908152600260205260409020600301548111610fa4575060009695505050505050565b6001600160a01b038716600090815260026020526040902060030154610fca90826113cf565b979650505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526110409085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261107b565b50505050565b6040516001600160a01b03831660248201526044810182905261107690849063a9059cbb60e01b90606401611009565b505050565b60006110d0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661114d9092919063ffffffff16565b80519091501561107657808060200190518101906110ee919061143f565b6110765760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610360565b606061115c8484600085611166565b90505b9392505050565b6060824710156111c75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610360565b843b6112155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610360565b600080866001600160a01b03168587604051611231919061148d565b60006040518083038185875af1925050503d806000811461126e576040519150601f19603f3d011682016040523d82523d6000602084013e611273565b606091505b5091509150610fca8282866060831561128d57508161115f565b82511561129d5782518084602001fd5b8160405162461bcd60e51b815260040161036091906114a9565b80356001600160a01b03811681146112ce57600080fd5b919050565b6000602082840312156112e557600080fd5b61115f826112b7565b6000806000806080858703121561130457600080fd5b61130d856112b7565b966020860135965060408601359560600135945092505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526016908201527563616e6e6f742062652061646472657373207a65726f60501b604082015260600190565b6020808252601390820152721859191c995cdcc8185b1c9958591e481cd95d606a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000828210156113e1576113e16113b9565b500390565b600082198211156113f9576113f96113b9565b500190565b6000816000190483118215151615611418576114186113b9565b500290565b60008261143a57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561145157600080fd5b8151801515811461115f57600080fd5b60005b8381101561147c578181015183820152602001611464565b838111156110405750506000910152565b6000825161149f818460208701611461565b9190910192915050565b60208152600082518060208401526114c8816040850160208701611461565b601f01601f1916919091016040019291505056fea2646970667358221220f13f4fc7c48485a694d289ab76d9fee44fe3cf496c01b4a4137d959bc766b69f64736f6c63430008090033000000000000000000000000c41e1f8a2d11af20dea4a228b20ee16a5184bf83000000000000000000000000c327855674831b97c5ee6d9eafbbbb0fd51f2631000000000000000000000000724606fe3d8fa673f0f7f8f5dc6704bf3cd07835000000000000000000000000cf9a927b40874a5157fc2a8ace5cd77c20f5d1200000000000000000000000008b0b1d6a3b46b676cd6da234cc1bf444fd2f6a320000000000000000000000000000000000000000000000000000000061cf2900
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80638da5cb5b116100ad578063d2c1996b11610071578063d2c1996b14610269578063ddeae0331461027c578063e14fc6eb1461028f578063f2fde38b146102e6578063fd9c190b146102f957600080fd5b80638da5cb5b146101f8578063c693e38414610209578063c84aae1714610220578063ce5662ce1461024e578063d1058e591461026157600080fd5b806361d027b3116100f457806361d027b3146101a8578063715018a6146101b95780637cb332bb146101c1578063809d458d146101d457806385f2aef2146101e757600080fd5b8063144fa6d714610131578063158ef93e146101465780631d0cf683146101685780633ee1dcdc1461018d5780634e71d92d146101a0575b600080fd5b61014461013f3660046112d3565b61030a565b005b600754600160a01b900460ff1660405190151581526020015b60405180910390f35b6005546001600160a01b03165b6040516001600160a01b03909116815260200161015f565b61014461019b3660046112d3565b6103c4565b6101446104f9565b6003546001600160a01b0316610175565b610144610504565b6101446101cf3660046112d3565b610538565b6101446101e23660046112d3565b61066d565b6004546001600160a01b0316610175565b6000546001600160a01b0316610175565b61021260015481565b60405190815260200161015f565b61023361022e3660046112d3565b61079c565b6040805193845260208401929092529082015260600161015f565b61014461025c3660046112d3565b610899565b6101446109ce565b6101446102773660046112ee565b610a22565b61014461028a3660046112d3565b610c05565b6102c661029d3660046112d3565b600260208190526000918252604090912080546001820154928201546003909201549092919084565b60408051948552602085019390935291830152606082015260800161015f565b6101446102f43660046112d3565b610d3c565b6006546001600160a01b0316610175565b600754600160a01b900460ff16156103695760405162461bcd60e51b815260206004820152601960248201527f746f6b656e206164647265737320616c7265616479207365740000000000000060448201526064015b60405180910390fd5b600780546001600160a81b0319166001600160a01b038316908117600160a01b179091556040519081527fa07c91c183e42229e705a9795a1c06d76528b673788b849597364528c96eefb7906020015b60405180910390a150565b6000546001600160a01b031633146103ee5760405162461bcd60e51b815260040161036090611327565b6001600160a01b0381166104145760405162461bcd60e51b81526004016103609061135c565b6001600160a01b038116600090815260026020819052604090912001541561044e5760405162461bcd60e51b81526004016103609061138c565b600580546001600160a01b039081166000908152600260208181526040808420878616808652828620825481556001808401548183015583870154828801556003938401549184019190915588549097168652828620868155968701869055938601859055949094019290925583546001600160a01b031916811790935590519182527f89e5aa133b9d4776e7613024c9e40930d10d04c8c4d6cb2bda37d4e91785712291016103b9565b61050233610c05565b565b6000546001600160a01b0316331461052e5760405162461bcd60e51b815260040161036090611327565b6105026000610dd7565b6000546001600160a01b031633146105625760405162461bcd60e51b815260040161036090611327565b6001600160a01b0381166105885760405162461bcd60e51b81526004016103609061135c565b6001600160a01b03811660009081526002602081905260409091200154156105c25760405162461bcd60e51b81526004016103609061138c565b600480546001600160a01b039081166000908152600260208181526040808420878616808652828620825481556001808401548183015583870154828801556003938401549184019190915588549097168652828620868155968701869055938601859055949094019290925583546001600160a01b031916811790935590519182527f40b549bfa0f997a5d35ae467a3ef53f5b65fde164db4076120a2bc9f4388667a91016103b9565b6000546001600160a01b031633146106975760405162461bcd60e51b815260040161036090611327565b6001600160a01b0381166106bd5760405162461bcd60e51b81526004016103609061135c565b6001600160a01b03811660009081526002602081905260409091200154156106f75760405162461bcd60e51b81526004016103609061138c565b600380546001600160a01b039081166000908152600260208181526040808420878616808652828620825481556001808401548183015583870154828801559289015490890155875490961685528185208581559081018590559283018490559185019290925583546001600160a01b031916831790935591519081527fa6df481f77da1f4c92eb330341e03585d46106fcf522f8e6b6b2afbea56eefdc91016103b9565b60008060006107b36003546001600160a01b031690565b6001600160a01b0316846001600160a01b031614806107df57506004546001600160a01b038581169116145b806107f757506005546001600160a01b038581169116145b8061080f57506006546001600160a01b038581169116145b61084c5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b2103437b63232b960911b6044820152606401610360565b6001600160a01b0384166000908152600260208190526040909120600381015491015461087991906113cf565b925061088484610e27565b905061089081846113cf565b91509193909250565b6000546001600160a01b031633146108c35760405162461bcd60e51b815260040161036090611327565b6001600160a01b0381166108e95760405162461bcd60e51b81526004016103609061135c565b6001600160a01b03811660009081526002602081905260409091200154156109235760405162461bcd60e51b81526004016103609061138c565b600680546001600160a01b039081166000908152600260208181526040808420878616808652828620825481556001808401548183015583870154828801556003938401549184019190915588549097168652828620868155968701869055938601859055949094019290925583546001600160a01b031916811790935590519182527f7d8808ceec67a617f74a07b62b596b69003a9f46ff918577db8d10b2683e106091016103b9565b6109e361028a6003546001600160a01b031690565b6109f861028a6004546001600160a01b031690565b610a0d61028a6005546001600160a01b031690565b61050261028a6006546001600160a01b031690565b6003546001600160a01b0385811691161480610a4b57506004546001600160a01b038581169116145b80610a6357506005546001600160a01b038581169116145b80610a7b57506006546001600160a01b038581169116145b610ac75760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206164647265737320706172616d65746572000000000000006044820152606401610360565b60008311610b105760405162461bcd60e51b815260206004820152601660248201527556616c7565206d75737420626520706f73697469766560501b6044820152606401610360565b6001600160a01b0384166000908152600260208190526040909120015415610b705760405162461bcd60e51b81526020600482015260136024820152721b9bdd081a5b9a5d1a585b0819195c1bdcda5d606a1b6044820152606401610360565b600754610b88906001600160a01b0316333086610fd5565b6001600160a01b038416600081815260026020818152604080842092830188905560038301939093558582556001909101849055815192835282018590528101839052606081018290527fc9408d6baf5231dd7ed4cdbdcf7cf05d95a696c5425e9533969ec692ff89e0a89060800160405180910390a150505050565b6003546001600160a01b0382811691161480610c2e57506004546001600160a01b038281169116145b80610c4657506005546001600160a01b038281169116145b80610c5e57506006546001600160a01b038281169116145b610c9b5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b2103437b63232b960911b6044820152606401610360565b6000610ca682610e27565b90508015610d3857600754610cc5906001600160a01b03168383611046565b6001600160a01b03821660009081526002602052604081206003018054839290610cf09084906113e6565b9091555050604080516001600160a01b0384168152602081018390527f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e430910160405180910390a15b5050565b6000546001600160a01b03163314610d665760405162461bcd60e51b815260040161036090611327565b6001600160a01b038116610dcb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610360565b610dd481610dd7565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166000908152600260208190526040822060038101549101541415610e5757506000919050565b6001600160a01b038216600090815260026020526040812054429190610e819062278d00906113fe565b600154610e8e91906113e6565b905080821015610ea2575060009392505050565b60015460009062278d0090610eb790856113cf565b610ec1919061141d565b6001600160a01b0386166000908152600260205260408120600101549192509064e8d4a5100090610ef2908261141d565b6001600160a01b03881660009081526002602081905260409091200154610f1991906113fe565b610f23919061141d565b90506000610f3183836113fe565b6001600160a01b0388166000908152600260205260409020600101549091508310610f7557506001600160a01b038616600090815260026020819052604090912001545b6001600160a01b0387166000908152600260205260409020600301548111610fa4575060009695505050505050565b6001600160a01b038716600090815260026020526040902060030154610fca90826113cf565b979650505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526110409085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261107b565b50505050565b6040516001600160a01b03831660248201526044810182905261107690849063a9059cbb60e01b90606401611009565b505050565b60006110d0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661114d9092919063ffffffff16565b80519091501561107657808060200190518101906110ee919061143f565b6110765760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610360565b606061115c8484600085611166565b90505b9392505050565b6060824710156111c75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610360565b843b6112155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610360565b600080866001600160a01b03168587604051611231919061148d565b60006040518083038185875af1925050503d806000811461126e576040519150601f19603f3d011682016040523d82523d6000602084013e611273565b606091505b5091509150610fca8282866060831561128d57508161115f565b82511561129d5782518084602001fd5b8160405162461bcd60e51b815260040161036091906114a9565b80356001600160a01b03811681146112ce57600080fd5b919050565b6000602082840312156112e557600080fd5b61115f826112b7565b6000806000806080858703121561130457600080fd5b61130d856112b7565b966020860135965060408601359560600135945092505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526016908201527563616e6e6f742062652061646472657373207a65726f60501b604082015260600190565b6020808252601390820152721859191c995cdcc8185b1c9958591e481cd95d606a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000828210156113e1576113e16113b9565b500390565b600082198211156113f9576113f96113b9565b500190565b6000816000190483118215151615611418576114186113b9565b500290565b60008261143a57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561145157600080fd5b8151801515811461115f57600080fd5b60005b8381101561147c578181015183820152602001611464565b838111156110405750506000910152565b6000825161149f818460208701611461565b9190910192915050565b60208152600082518060208401526114c8816040850160208701611461565b601f01601f1916919091016040019291505056fea2646970667358221220f13f4fc7c48485a694d289ab76d9fee44fe3cf496c01b4a4137d959bc766b69f64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c41e1f8a2d11af20dea4a228b20ee16a5184bf83000000000000000000000000c327855674831b97c5ee6d9eafbbbb0fd51f2631000000000000000000000000724606fe3d8fa673f0f7f8f5dc6704bf3cd07835000000000000000000000000cf9a927b40874a5157fc2a8ace5cd77c20f5d1200000000000000000000000008b0b1d6a3b46b676cd6da234cc1bf444fd2f6a320000000000000000000000000000000000000000000000000000000061cf2900
-----Decoded View---------------
Arg [0] : treasury_ (address): 0xc41E1f8a2d11af20dEA4A228B20Ee16A5184bF83
Arg [1] : team_ (address): 0xc327855674831b97C5Ee6D9eafbBbB0Fd51f2631
Arg [2] : ecosystemFund_ (address): 0x724606Fe3D8fA673F0F7f8F5Dc6704bf3cd07835
Arg [3] : longTermLockUp_ (address): 0xcF9a927B40874a5157fC2a8aCe5cd77C20F5d120
Arg [4] : owner (address): 0x8B0b1D6A3B46b676CD6DA234cC1bf444fD2f6A32
Arg [5] : _referenceDate (uint256): 1640966400
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000c41e1f8a2d11af20dea4a228b20ee16a5184bf83
Arg [1] : 000000000000000000000000c327855674831b97c5ee6d9eafbbbb0fd51f2631
Arg [2] : 000000000000000000000000724606fe3d8fa673f0f7f8f5dc6704bf3cd07835
Arg [3] : 000000000000000000000000cf9a927b40874a5157fc2a8ace5cd77c20f5d120
Arg [4] : 0000000000000000000000008b0b1d6a3b46b676cd6da234cc1bf444fd2f6a32
Arg [5] : 0000000000000000000000000000000000000000000000000000000061cf2900
Deployed Bytecode Sourcemap
20647:11906:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23008:224;;;;;;:::i;:::-;;:::i;:::-;;23336:96;23412:12;;-1:-1:-1;;;23412:12:0;;;;23336:96;;548:14:1;;541:22;523:41;;511:2;496:18;23336:96:0;;;;;;;;25219:103;25300:14;;-1:-1:-1;;;;;25300:14:0;25219:103;;;-1:-1:-1;;;;;739:32:1;;;721:51;;709:2;694:18;25219:103:0;575:203:1;25626:485:0;;;;;;:::i;:::-;;:::i;30080:74::-;;;:::i;23515:93::-;23591:9;;-1:-1:-1;;;;;23591:9:0;23515:93;;2606:103;;;:::i;24745:386::-;;;;;;:::i;:::-;;:::i;23889:430::-;;;;;;:::i;:::-;;:::i;24398:85::-;24470:5;;-1:-1:-1;;;;;24470:5:0;24398:85;;1955:87;2001:7;2028:6;-1:-1:-1;;;;;2028:6:0;1955:87;;20768:32;;;;;;;;;929:25:1;;;917:2;902:18;20768:32:0;783:177:1;31960:586:0;;;;;;:::i;:::-;;:::i;:::-;;;;1167:25:1;;;1223:2;1208:18;;1201:34;;;;1251:18;;;1244:34;1155:2;1140:18;31960:586:0;965:319:1;26618:496:0;;;;;;:::i;:::-;;:::i;31281:177::-;;;:::i;27584:897::-;;;;;;:::i;:::-;;:::i;30463:560::-;;;;;;:::i;:::-;;:::i;21300:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1916:25:1;;;1972:2;1957:18;;1950:34;;;;2000:18;;;1993:34;2058:2;2043:18;;2036:34;1903:3;1888:19;21300:51:0;1685:391:1;2864:201:0;;;;;;:::i;:::-;;:::i;26202:105::-;26284:15;;-1:-1:-1;;;;;26284:15:0;26202:105;;23008:224;23412:12;;-1:-1:-1;;;23412:12:0;;;;23078:14;23070:52;;;;-1:-1:-1;;;23070:52:0;;2283:2:1;23070:52:0;;;2265:21:1;2322:2;2302:18;;;2295:30;2361:27;2341:18;;;2334:55;2406:18;;23070:52:0;;;;;;;;;23133:6;:30;;-1:-1:-1;;;;;;23174:19:0;-1:-1:-1;;;;;23133:30:0;;23174:19;;;-1:-1:-1;;;23174:19:0;;;;23209:15;;721:51:1;;;23209:15:0;;709:2:1;694:18;23209:15:0;;;;;;;;23008:224;:::o;25626:485::-;2001:7;2028:6;-1:-1:-1;;;;;2028:6:0;790:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25734:30:0;::::1;25726:65;;;;-1:-1:-1::0;;;25726:65:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25810:30:0;::::1;;::::0;;;:12:::1;:30;::::0;;;;;;;:48:::1;::::0;:53;25802:85:::1;;;;-1:-1:-1::0;;;25802:85:0::1;;;;;;;:::i;:::-;25944:14;::::0;;-1:-1:-1;;;;;25944:14:0;;::::1;25931:28;::::0;;;:12:::1;:28;::::0;;;;;;;25898:30;;::::1;::::0;;;;;;:61;;;;25944:14;25898:61;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;25990:14;;;;::::1;25977:28:::0;;;;;25970:35;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;;;;26016:33;;-1:-1:-1;;;;;;26016:33:0::1;::::0;::::1;::::0;;;26065:38;;721:51:1;;;26065:38:0::1;::::0;694:18:1;26065:38:0::1;575:203:1::0;30080:74:0;30126:20;30135:10;30126:8;:20::i;:::-;30080:74::o;2606:103::-;2001:7;2028:6;-1:-1:-1;;;;;2028:6:0;790:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;2671:30:::1;2698:1;2671:18;:30::i;24745:386::-:0;2001:7;2028:6;-1:-1:-1;;;;;2028:6:0;790:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24835:21:0;::::1;24827:56;;;;-1:-1:-1::0;;;24827:56:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24902:21:0;::::1;;::::0;;;:12:::1;:21;::::0;;;;;;;:39:::1;::::0;:44;24894:76:::1;;;;-1:-1:-1::0;;;24894:76:0::1;;;;;;;:::i;:::-;25018:5;::::0;;-1:-1:-1;;;;;25018:5:0;;::::1;25005:19;::::0;;;:12:::1;:19;::::0;;;;;;;24981:21;;::::1;::::0;;;;;;:43;;;;25018:5;24981:43;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;25055:5;;;;::::1;25042:19:::0;;;;;25035:26;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;;;;25072:15;;-1:-1:-1;;;;;;25072:15:0::1;::::0;::::1;::::0;;;25103:20;;721:51:1;;;25103:20:0::1;::::0;694:18:1;25103:20:0::1;575:203:1::0;23889:430:0;2001:7;2028:6;-1:-1:-1;;;;;2028:6:0;790:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23987:25:0;::::1;23979:60;;;;-1:-1:-1::0;;;23979:60:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24058:25:0;::::1;;::::0;;;:12:::1;:25;::::0;;;;;;;:43:::1;::::0;:48;24050:80:::1;;;;-1:-1:-1::0;;;24050:80:0::1;;;;;;;:::i;:::-;24182:9;::::0;;-1:-1:-1;;;;;24182:9:0;;::::1;24169:23;::::0;;;:12:::1;:23;::::0;;;;;;;24141:25;;::::1;::::0;;;;;;:51;;;;24182:9;24141:51;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;24223:9;;;;::::1;24210:23:::0;;;;;24203:30;;;;;::::1;::::0;;;;;::::1;::::0;;;;;::::1;::::0;;;;24244:23;;-1:-1:-1;;;;;;24244:23:0::1;::::0;::::1;::::0;;;24283:28;;721:51:1;;;24283:28:0::1;::::0;694:18:1;24283:28:0::1;575:203:1::0;31960:586:0;32045:17;32073:18;32102:16;32175:10;23591:9;;-1:-1:-1;;;;;23591:9:0;;23515:93;32175:10;-1:-1:-1;;;;;32164:21:0;:7;-1:-1:-1;;;;;32164:21:0;;:55;;;-1:-1:-1;24470:5:0;;-1:-1:-1;;;;;32202:17:0;;;24470:5;;32202:17;32164:55;:98;;;-1:-1:-1;25300:14:0;;-1:-1:-1;;;;;32236:26:0;;;25300:14;;32236:26;32164:98;:142;;;-1:-1:-1;26284:15:0;;-1:-1:-1;;;;;32279:27:0;;;26284:15;;32279:27;32164:142;32142:183;;;;-1:-1:-1;;;32142:183:0;;3697:2:1;32142:183:0;;;3679:21:1;3736:2;3716:18;;;3709:30;-1:-1:-1;;;3755:18:1;;;3748:44;3809:18;;32142:183:0;3495:338:1;32142:183:0;-1:-1:-1;;;;;32395:21:0;;;;;;:12;:21;;;;;;;;:36;;;;32353:39;;;:78;;32395:36;32353:78;:::i;:::-;32338:93;;32456:29;32477:7;32456:20;:29::i;:::-;32442:43;-1:-1:-1;32512:26:0;32442:43;32512:12;:26;:::i;:::-;32496:42;;31960:586;;;;;:::o;26618:496::-;2001:7;2028:6;-1:-1:-1;;;;;2028:6:0;790:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26728:31:0;::::1;26720:66;;;;-1:-1:-1::0;;;26720:66:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26805:31:0;::::1;;::::0;;;:12:::1;:31;::::0;;;;;;;:49:::1;::::0;:54;26797:86:::1;;;;-1:-1:-1::0;;;26797:86:0::1;;;;;;;:::i;:::-;26941:15;::::0;;-1:-1:-1;;;;;26941:15:0;;::::1;26928:29;::::0;;;:12:::1;:29;::::0;;;;;;;26894:31;;::::1;::::0;;;;;;:63;;;;26941:15;26894:63;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;26988:15;;;;::::1;26975:29:::0;;;;;26968:36;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;;;;27015:35;;-1:-1:-1;;;;;;27015:35:0::1;::::0;::::1;::::0;;;27066:40;;721:51:1;;;27066:40:0::1;::::0;694:18:1;27066:40:0::1;575:203:1::0;31281:177:0;31330:20;31339:10;23591:9;;-1:-1:-1;;;;;23591:9:0;;23515:93;31330:20;31361:16;31370:6;24470:5;;-1:-1:-1;;;;;24470:5:0;;24398:85;31361:16;31388:25;31397:15;25300:14;;-1:-1:-1;;;;;25300:14:0;;25219:103;31388:25;31424:26;31433:16;26284:15;;-1:-1:-1;;;;;26284:15:0;;26202:105;27584:897;23591:9;;-1:-1:-1;;;;;27798:17:0;;;23591:9;;27798:17;;:47;;-1:-1:-1;24470:5:0;;-1:-1:-1;;;;;27832:13:0;;;24470:5;;27832:13;27798:47;:86;;;-1:-1:-1;25300:14:0;;-1:-1:-1;;;;;27862:22:0;;;25300:14;;27862:22;27798:86;:126;;;-1:-1:-1;26284:15:0;;-1:-1:-1;;;;;27901:23:0;;;26284:15;;27901:23;27798:126;27776:178;;;;-1:-1:-1;;;27776:178:0;;4302:2:1;27776:178:0;;;4284:21:1;4341:2;4321:18;;;4314:30;4380:27;4360:18;;;4353:55;4425:18;;27776:178:0;4100:349:1;27776:178:0;27983:1;27973:7;:11;27965:46;;;;-1:-1:-1;;;27965:46:0;;4656:2:1;27965:46:0;;;4638:21:1;4695:2;4675:18;;;4668:30;-1:-1:-1;;;4714:18:1;;;4707:52;4776:18;;27965:46:0;4454:346:1;27965:46:0;-1:-1:-1;;;;;28030:17:0;;;;;;:12;:17;;;;;;;;:35;;:40;28022:72;;;;-1:-1:-1;;;28022:72:0;;5007:2:1;28022:72:0;;;4989:21:1;5046:2;5026:18;;;5019:30;-1:-1:-1;;;5065:18:1;;;5058:49;5124:18;;28022:72:0;4805:343:1;28022:72:0;28157:6;;:59;;-1:-1:-1;;;;;28157:6:0;28181:10;28201:4;28208:7;28157:23;:59::i;:::-;-1:-1:-1;;;;;28227:17:0;;;;;;:12;:17;;;;;;;;:35;;;:45;;;28283:32;;;:36;;;;28330:32;;;28373:25;;;;:36;;;28427:46;;5384:51:1;;;5451:18;;5444:34;;;5494:18;;5487:34;;;5552:2;5537:18;;5530:34;;;28427:46:0;;5371:3:1;5356:19;28427:46:0;;;;;;;27584:897;;;;:::o;30463:560::-;23591:9;;-1:-1:-1;;;;;30547:21:0;;;23591:9;;30547:21;;:55;;-1:-1:-1;24470:5:0;;-1:-1:-1;;;;;30585:17:0;;;24470:5;;30585:17;30547:55;:98;;;-1:-1:-1;25300:14:0;;-1:-1:-1;;;;;30619:26:0;;;25300:14;;30619:26;30547:98;:142;;;-1:-1:-1;26284:15:0;;-1:-1:-1;;;;;30662:27:0;;;26284:15;;30662:27;30547:142;30525:183;;;;-1:-1:-1;;;30525:183:0;;3697:2:1;30525:183:0;;;3679:21:1;3736:2;3716:18;;;3709:30;-1:-1:-1;;;3755:18:1;;;3748:44;3809:18;;30525:183:0;3495:338:1;30525:183:0;30719:24;30746:29;30767:7;30746:20;:29::i;:::-;30719:56;-1:-1:-1;30790:20:0;;30786:230;;30827:6;;:46;;-1:-1:-1;;;;;30827:6:0;30847:7;30856:16;30827:19;:46::i;:::-;-1:-1:-1;;;;;30888:21:0;;;;;;:12;:21;;;;;:36;;:56;;30928:16;;30888:21;:56;;30928:16;;30888:56;:::i;:::-;;;;-1:-1:-1;;30964:40:0;;;-1:-1:-1;;;;;5900:32:1;;5882:51;;5964:2;5949:18;;5942:34;;;30964:40:0;;5855:18:1;30964:40:0;;;;;;;30786:230;30514:509;30463:560;:::o;2864:201::-;2001:7;2028:6;-1:-1:-1;;;;;2028:6:0;790:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2953:22:0;::::1;2945:73;;;::::0;-1:-1:-1;;;2945:73:0;;6189:2:1;2945:73:0::1;::::0;::::1;6171:21:1::0;6228:2;6208:18;;;6201:30;6267:34;6247:18;;;6240:62;-1:-1:-1;;;6318:18:1;;;6311:36;6364:19;;2945:73:0::1;5987:402:1::0;2945:73:0::1;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;3225:191::-;3299:16;3318:6;;-1:-1:-1;;;;;3335:17:0;;;-1:-1:-1;;;;;;3335:17:0;;;;;;3368:40;;3318:6;;;;;;;3368:40;;3299:16;3368:40;3288:128;3225:191;:::o;28656:1219::-;-1:-1:-1;;;;;28793:21:0;;28726:7;28793:21;;;:12;:21;;;;;;;:36;;;;28750:39;;;:79;28746:155;;;-1:-1:-1;28888:1:0;;28656:1219;-1:-1:-1;28656:1219:0:o;28746:155::-;-1:-1:-1;;;;;29058:21:0;;28968:19;29058:21;;;:12;:21;;;;;:27;28990:15;;28968:19;29058:35;;20839:7;;29058:35;:::i;:::-;29041:13;;:53;;;;:::i;:::-;29018:76;;29123:12;29109:11;:26;29105:98;;;-1:-1:-1;29159:1:0;;28656:1219;-1:-1:-1;;;28656:1219:0:o;29105:98::-;29253:13;;29215:20;;20839:7;;29239:27;;:11;:27;:::i;:::-;29238:37;;;;:::i;:::-;-1:-1:-1;;;;;29406:21:0;;29329;29406;;;:12;:21;;;;;:29;;;29215:60;;-1:-1:-1;29329:21:0;29449:6;;29397:38;;29449:6;29397:38;:::i;:::-;-1:-1:-1;;;;;29354:21:0;;;;;;:12;:21;;;;;;;;:39;;:82;;;;:::i;:::-;29353:102;;;;:::i;:::-;29329:126;-1:-1:-1;29466:23:0;29492:28;29508:12;29329:126;29492:28;:::i;:::-;-1:-1:-1;;;;;29551:21:0;;;;;;:12;:21;;;;;:29;;;29466:54;;-1:-1:-1;29535:45:0;;29531:135;;-1:-1:-1;;;;;;29615:21:0;;;;;;:12;:21;;;;;;;;:39;;29531:135;-1:-1:-1;;;;;29682:21:0;;;;;;:12;:21;;;;;:36;;;:55;-1:-1:-1;29678:190:0;;-1:-1:-1;29761:1:0;;28656:1219;-1:-1:-1;;;;;;28656:1219:0:o;29678:190::-;-1:-1:-1;;;;;29820:21:0;;;;;;:12;:21;;;;;:36;;;29802:54;;:15;:54;:::i;:::-;29795:61;28656:1219;-1:-1:-1;;;;;;;28656:1219:0:o;15293:248::-;15464:68;;-1:-1:-1;;;;;7047:15:1;;;15464:68:0;;;7029:34:1;7099:15;;7079:18;;;7072:43;7131:18;;;7124:34;;;15437:96:0;;15457:5;;-1:-1:-1;;;15487:27:0;6964:18:1;;15464:68:0;;;;-1:-1:-1;;15464:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;15464:68:0;-1:-1:-1;;;;;;15464:68:0;;;;;;;;;;15437:19;:96::i;:::-;15293:248;;;;:::o;15074:211::-;15218:58;;-1:-1:-1;;;;;5900:32:1;;15218:58:0;;;5882:51:1;5949:18;;;5942:34;;;15191:86:0;;15211:5;;-1:-1:-1;;;15241:23:0;5855:18:1;;15218:58:0;5708:274:1;15191:86:0;15074:211;;;:::o;17647:716::-;18071:23;18097:69;18125:4;18097:69;;;;;;;;;;;;;;;;;18105:5;-1:-1:-1;;;;;18097:27:0;;;:69;;;;;:::i;:::-;18181:17;;18071:95;;-1:-1:-1;18181:21:0;18177:179;;18278:10;18267:30;;;;;;;;;;;;:::i;:::-;18259:85;;;;-1:-1:-1;;;18259:85:0;;7653:2:1;18259:85:0;;;7635:21:1;7692:2;7672:18;;;7665:30;7731:34;7711:18;;;7704:62;-1:-1:-1;;;7782:18:1;;;7775:40;7832:19;;18259:85:0;7451:406:1;9883:229:0;10020:12;10052:52;10074:6;10082:4;10088:1;10091:12;10052:21;:52::i;:::-;10045:59;;9883:229;;;;;;:::o;11003:510::-;11173:12;11231:5;11206:21;:30;;11198:81;;;;-1:-1:-1;;;11198:81:0;;8064:2:1;11198:81:0;;;8046:21:1;8103:2;8083:18;;;8076:30;8142:34;8122:18;;;8115:62;-1:-1:-1;;;8193:18:1;;;8186:36;8239:19;;11198:81:0;7862:402:1;11198:81:0;7400:20;;11290:60;;;;-1:-1:-1;;;11290:60:0;;8471:2:1;11290:60:0;;;8453:21:1;8510:2;8490:18;;;8483:30;8549:31;8529:18;;;8522:59;8598:18;;11290:60:0;8269:353:1;11290:60:0;11364:12;11378:23;11405:6;-1:-1:-1;;;;;11405:11:0;11424:5;11431:4;11405:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11363:73;;;;11454:51;11471:7;11480:10;11492:12;13839;13868:7;13864:530;;;-1:-1:-1;13899:10:0;13892:17;;13864:530;14013:17;;:21;14009:374;;14211:10;14205:17;14272:15;14259:10;14255:2;14251:19;14244:44;14009:374;14354:12;14347:20;;-1:-1:-1;;;14347:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;1289:391::-;1375:6;1383;1391;1399;1452:3;1440:9;1431:7;1427:23;1423:33;1420:53;;;1469:1;1466;1459:12;1420:53;1492:29;1511:9;1492:29;:::i;:::-;1482:39;1568:2;1553:18;;1540:32;;-1:-1:-1;1619:2:1;1604:18;;1591:32;;1670:2;1655:18;1642:32;;-1:-1:-1;1289:391:1;-1:-1:-1;;;1289:391:1:o;2435:356::-;2637:2;2619:21;;;2656:18;;;2649:30;2715:34;2710:2;2695:18;;2688:62;2782:2;2767:18;;2435:356::o;2796:346::-;2998:2;2980:21;;;3037:2;3017:18;;;3010:30;-1:-1:-1;;;3071:2:1;3056:18;;3049:52;3133:2;3118:18;;2796:346::o;3147:343::-;3349:2;3331:21;;;3388:2;3368:18;;;3361:30;-1:-1:-1;;;3422:2:1;3407:18;;3400:49;3481:2;3466:18;;3147:343::o;3838:127::-;3899:10;3894:3;3890:20;3887:1;3880:31;3930:4;3927:1;3920:15;3954:4;3951:1;3944:15;3970:125;4010:4;4038:1;4035;4032:8;4029:34;;;4043:18;;:::i;:::-;-1:-1:-1;4080:9:1;;3970:125::o;5575:128::-;5615:3;5646:1;5642:6;5639:1;5636:13;5633:39;;;5652:18;;:::i;:::-;-1:-1:-1;5688:9:1;;5575:128::o;6394:168::-;6434:7;6500:1;6496;6492:6;6488:14;6485:1;6482:21;6477:1;6470:9;6463:17;6459:45;6456:71;;;6507:18;;:::i;:::-;-1:-1:-1;6547:9:1;;6394:168::o;6567:217::-;6607:1;6633;6623:132;;6677:10;6672:3;6668:20;6665:1;6658:31;6712:4;6709:1;6702:15;6740:4;6737:1;6730:15;6623:132;-1:-1:-1;6769:9:1;;6567:217::o;7169:277::-;7236:6;7289:2;7277:9;7268:7;7264:23;7260:32;7257:52;;;7305:1;7302;7295:12;7257:52;7337:9;7331:16;7390:5;7383:13;7376:21;7369:5;7366:32;7356:60;;7412:1;7409;7402:12;8627:258;8699:1;8709:113;8723:6;8720:1;8717:13;8709:113;;;8799:11;;;8793:18;8780:11;;;8773:39;8745:2;8738:10;8709:113;;;8840:6;8837:1;8834:13;8831:48;;;-1:-1:-1;;8875:1:1;8857:16;;8850:27;8627:258::o;8890:274::-;9019:3;9057:6;9051:13;9073:53;9119:6;9114:3;9107:4;9099:6;9095:17;9073:53;:::i;:::-;9142:16;;;;;8890:274;-1:-1:-1;;8890:274:1:o;9169:383::-;9318:2;9307:9;9300:21;9281:4;9350:6;9344:13;9393:6;9388:2;9377:9;9373:18;9366:34;9409:66;9468:6;9463:2;9452:9;9448:18;9443:2;9435:6;9431:15;9409:66;:::i;:::-;9536:2;9515:15;-1:-1:-1;;9511:29:1;9496:45;;;;9543:2;9492:54;;9169:383;-1:-1:-1;;9169:383:1:o
Swarm Source
ipfs://f13f4fc7c48485a694d289ab76d9fee44fe3cf496c01b4a4137d959bc766b69f
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.