Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Multi Chain
Multichain Addresses
8 addresses found via
Latest 25 from a total of 75 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Claim | 18125625 | 13 days 21 hrs ago | IN | 0 ETH | 0.00252674 | ||||
Claim | 18090164 | 18 days 20 hrs ago | IN | 0 ETH | 0.00093781 | ||||
Claim | 18090152 | 18 days 21 hrs ago | IN | 0 ETH | 0.00115618 | ||||
Claim | 18056621 | 23 days 13 hrs ago | IN | 0 ETH | 0.00108374 | ||||
Claim | 18056615 | 23 days 13 hrs ago | IN | 0 ETH | 0.00166984 | ||||
Stop Vesting | 17923029 | 42 days 6 hrs ago | IN | 0 ETH | 0.00177626 | ||||
Withdraw | 17915488 | 43 days 7 hrs ago | IN | 0 ETH | 0.00330302 | ||||
Vest | 17872579 | 49 days 7 hrs ago | IN | 0 ETH | 0.00251874 | ||||
Stop Vesting | 17811519 | 57 days 20 hrs ago | IN | 0 ETH | 0.00075875 | ||||
Claim | 17790671 | 60 days 18 hrs ago | IN | 0 ETH | 0.00186634 | ||||
Claim | 16839493 | 194 days 18 hrs ago | IN | 0 ETH | 0.0027834 | ||||
Stop Vesting | 16726423 | 210 days 16 hrs ago | IN | 0 ETH | 0.001058 | ||||
Stop Vesting | 16726421 | 210 days 16 hrs ago | IN | 0 ETH | 0.00110715 | ||||
Claim | 16439943 | 250 days 18 hrs ago | IN | 0 ETH | 0.00123858 | ||||
Stop Vesting | 15889474 | 327 days 15 hrs ago | IN | 0 ETH | 0.00088149 | ||||
Stop Vesting | 15889473 | 327 days 15 hrs ago | IN | 0 ETH | 0.00099529 | ||||
Claim | 15862875 | 331 days 9 hrs ago | IN | 0 ETH | 0.00065309 | ||||
Claim | 15702636 | 353 days 18 hrs ago | IN | 0 ETH | 0.00061153 | ||||
Stop Vesting | 15684074 | 356 days 8 hrs ago | IN | 0 ETH | 0.00082272 | ||||
Stop Vesting | 15684072 | 356 days 8 hrs ago | IN | 0 ETH | 0.00106164 | ||||
Stop Vesting | 15684070 | 356 days 8 hrs ago | IN | 0 ETH | 0.00092894 | ||||
Claim | 15646305 | 361 days 15 hrs ago | IN | 0 ETH | 0.00188265 | ||||
Claim | 15635534 | 363 days 3 hrs ago | IN | 0 ETH | 0.00100101 | ||||
Vest | 15590074 | 369 days 11 hrs ago | IN | 0 ETH | 0.00117939 | ||||
Vest | 15590074 | 369 days 11 hrs ago | IN | 0 ETH | 0.00117954 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GROTeamVesting
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPLv3 pragma solidity 0.8.4; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; interface IMintable { function mint(address _receiver, uint256 _amount) external; function mintDao(address _receiver, uint256 _amount, bool community) external; } pragma solidity 0.8.4; /// @notice Vesting contract for Grwth labs - This vesting contract is responsible for /// distributing assets assigned to Grwth labs by the GRO DAO. This contract can: /// - Create vesting positions for individual Contributors /// - Stop a contributors vesting positions, leaving what has already vested as available /// to be claimed by the contributor, but removes and unvested assets from the position /// - Claim excess tokens directly, excess tokens being defined as tokens that have been /// vested globally, but hasnt beens assigned to an contributors vesting position. contract GROTeamVesting is Ownable { using SafeERC20 for IERC20; struct TeamPosition { uint256 total; uint256 withdrawn; uint256 startTime; uint256 stopTime; } uint256 internal constant ONE_YEAR_SECONDS = 31556952; // average year (including leap years) in seconds uint256 internal constant START_TIME_LOWER_BOUND = 2630000 * 6; // 6 months uint256 internal constant VESTING_TIME = ONE_YEAR_SECONDS * 3; // 3 years period uint256 internal constant VESTING_CLIFF = ONE_YEAR_SECONDS; // 1 years period uint256 public constant PERCENTAGE_DECIMAL_FACTOR = 10000; // BP uint256 public immutable QUOTA; uint256 public immutable VESTING_START_TIME; uint256 public vestingAssets; IMintable public distributer; mapping(address => uint256) public numberOfContributorPositions; mapping(address => mapping(uint256 => TeamPosition)) public contributorPositions; event LogNewVest(address indexed contributor, uint256 indexed id, uint256 amount); event LogClaimed(address indexed contributor, uint256 indexed id, uint256 amount, uint256 withdrawn, uint256 available); event LogWithdrawal(address indexed account, uint256 amount); event LogStoppedVesting(address indexed contributor, uint256 indexed id, uint256 unlocked, uint256 available); event LogNewDistributer(address indexed distributer); constructor(uint256 startTime, uint256 quota) { VESTING_START_TIME = startTime; QUOTA = quota; } function setDistributer(address _distributer) external onlyOwner { distributer = IMintable(_distributer); emit LogNewDistributer(_distributer); } /// @notice How much of the quota is unlocked, vesting and available function globallyUnlocked() public view returns (uint256 unlocked, uint256 vesting, uint256 available) { if (block.timestamp > VESTING_START_TIME + VESTING_TIME) { unlocked = QUOTA; } else if (block.timestamp < VESTING_START_TIME + VESTING_CLIFF) { unlocked = vestingAssets; } else { unlocked = (QUOTA) * (block.timestamp - VESTING_START_TIME) / (VESTING_TIME); } vesting = vestingAssets; available = unlocked - vesting; } /// @notice Get current vested balance of all positions /// @param account Target account function vestedBalance(address account) external view returns (uint256 vested, uint256 available) { for (uint256 i; i < numberOfContributorPositions[account]; i ++) { (uint256 _vested, uint256 _available, , ) = unlockedBalance(account, i); vested += _vested; available += _available; } } /// @notice Get current vested balance of a positions /// @param account Target account /// @param id of position function positionVestedBalance(address account, uint256 id) external view returns (uint256 vested, uint256 available) { (vested, available, , ) = unlockedBalance(account, id); } /// @notice Creates a vesting position /// @param account Account which to add vesting position for /// @param startTime when the positon should start /// @param amount Amount to add to vesting position /// @dev The startstime paramter allows some leeway when creating /// positions for new contributors function vest(address account, uint256 startTime, uint256 amount) external onlyOwner { require(account != address(0), "vest: !account"); require(amount > 0, "vest: !amount"); // 6 months moving windows to backset the vesting position if (startTime + START_TIME_LOWER_BOUND < block.timestamp) { startTime = block.timestamp - START_TIME_LOWER_BOUND; } uint256 userPositionId = numberOfContributorPositions[account]; TeamPosition storage ep = contributorPositions[account][userPositionId]; numberOfContributorPositions[account] += 1; ep.startTime = startTime; require((QUOTA - vestingAssets) >= amount, 'vest: not enough assets available'); ep.total = amount; vestingAssets += amount; emit LogNewVest(account, userPositionId, amount); } /// @notice owner can withdraw excess tokens /// @param amount amount to be withdrawns function withdraw(uint256 amount) external onlyOwner { ( , , uint256 available ) = globallyUnlocked(); require(amount <= available, 'withdraw: not enough assets available'); // Need to accoount for the withdrawn assets, they are no longer available // in the contributor pool vestingAssets += amount; distributer.mint(msg.sender, amount); emit LogWithdrawal(msg.sender, amount); } /// @notice claim an amount of tokens /// @param amount amount to be claimed /// @param id of position if applicable function claim(uint256 amount, uint256 id) external { require(amount > 0, "claim: No amount specified"); (uint256 unlocked, uint256 available, , ) = unlockedBalance(msg.sender, id); require(available >= amount, "claim: Not enough user assets available"); uint256 _withdrawn = unlocked - available + amount; TeamPosition storage ep = contributorPositions[msg.sender][id]; ep.withdrawn = _withdrawn; distributer.mint(msg.sender, amount); emit LogClaimed(msg.sender, id, amount, _withdrawn, available - amount); } /// @notice stops an contributors vesting position /// @param contributor contributors account /// @param id of position if applicable function stopVesting(address contributor, uint256 id) external onlyOwner { (uint256 unlocked, uint256 available, uint256 startTime, ) = unlockedBalance(contributor, id); TeamPosition storage ep = contributorPositions[contributor][id]; require(ep.stopTime == 0, "stopVesting: position already stopped"); vestingAssets -= ep.total - unlocked; ep.stopTime = block.timestamp; ep.total = unlocked; emit LogStoppedVesting(contributor, id, unlocked, available); } /// @notice see the amount of vested assets the account has accumulated /// @param account Account to get vested amount for /// @param id of position if applicable function unlockedBalance(address account, uint256 id) internal view returns ( uint256, uint256, uint256, uint256 ) { require(id < numberOfContributorPositions[account], "unlockedBalance: position does not exist"); TeamPosition storage ep = contributorPositions[account][id]; uint256 startTime = ep.startTime; if (block.timestamp < startTime + VESTING_CLIFF) { return (0, 0, startTime, startTime + VESTING_TIME); } uint256 unlocked; uint256 available; uint256 stopTime = ep.stopTime; uint256 _endTime = startTime + VESTING_TIME; uint256 total = ep.total; if (stopTime > 0) { unlocked = total; _endTime = stopTime; } else if (block.timestamp < _endTime) { unlocked = total * (block.timestamp - startTime) / (VESTING_TIME); } else { unlocked = total; } available = unlocked - ep.withdrawn; return (unlocked, available, startTime, _endTime); } /// @notice Get total size of all user positions, vested + vesting /// @param account target account function totalBalance(address account) external view returns (uint256 balance) { for (uint256 i; i < numberOfContributorPositions[account]; i ++) { balance += contributorPositions[account][i].total; } } /// @notice Get total size of a position, vested + vesting /// @param account target account /// @param id of position function positionBalance(address account, uint256 id) external view returns (uint256 balance) { TeamPosition storage ep = contributorPositions[account][id]; balance = ep.total; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; import "../../../utils/Address.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"); } } }
// SPDX-License-Identifier: MIT pragma solidity ^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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @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); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^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 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; } }
{ "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"quota","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contributor","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"LogClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"distributer","type":"address"}],"name":"LogNewDistributer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contributor","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogNewVest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contributor","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlocked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"LogStoppedVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogWithdrawal","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"},{"inputs":[],"name":"PERCENTAGE_DECIMAL_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUOTA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VESTING_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"contributorPositions","outputs":[{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"withdrawn","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"stopTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributer","outputs":[{"internalType":"contract IMintable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globallyUnlocked","outputs":[{"internalType":"uint256","name":"unlocked","type":"uint256"},{"internalType":"uint256","name":"vesting","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numberOfContributorPositions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"positionBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"positionVestedBalance","outputs":[{"internalType":"uint256","name":"vested","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_distributer","type":"address"}],"name":"setDistributer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contributor","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"stopVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"totalBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"vest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"vestedBalance","outputs":[{"internalType":"uint256","name":"vested","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b5060405161120038038061120083398101604081905261002f91610096565b61003833610046565b60a0919091526080526100b9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100a8578182fd5b505080516020909101519092909150565b60805160a0516110f8610108600039600081816101e101528181610964015281816109c10152610a0a01526000818161029e015281816104b6015281816109910152610a3501526110f86000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80639114557e116100ad578063b307119011610071578063b3071190146102dc578063c34902631461033c578063e268fecb1461034f578063e583077014610358578063f2fde38b1461036b57600080fd5b80639114557e146102635780639f6bca6a14610276578063a502303b14610299578063a898e0f4146102c0578063ae70b98a146102d357600080fd5b80636c0b1e8c116100f45780636c0b1e8c146101dc5780636eacd39814610203578063715018a61461021657806371cf84931461021e5780638da5cb5b1461023e57600080fd5b80632546de10146101315780632e1a7d4d1461014657806338943fbc146101595780634fe59f5e1461016c578063506336ca14610199575b600080fd5b61014461013f366004610f83565b61037e565b005b610144610154366004610fb5565b610596565b610144610167366004610f5a565b6106e0565b61017f61017a366004610f5a565b610821565b604080519283526020830191909152015b60405180910390f35b6101ce6101a7366004610f5a565b6001600160a01b039091166000908152600460209081526040808320938352929052205490565b604051908152602001610190565b6101ce7f000000000000000000000000000000000000000000000000000000000000000081565b6101ce610211366004610f39565b61083b565b6101446108a7565b6101ce61022c366004610f39565b60036020526000908152604090205481565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610190565b61017f610271366004610f39565b6108dd565b61027e61094b565b60408051938452602084019290925290820152606001610190565b6101ce7f000000000000000000000000000000000000000000000000000000000000000081565b60025461024b906001600160a01b031681565b6101ce61271081565b61031c6102ea366004610f5a565b600460209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610190565b61014461034a366004610fcd565b610a7c565b6101ce60015481565b610144610366366004610f39565b610c2f565b610144610379366004610f39565b610ca3565b6000546001600160a01b031633146103b15760405162461bcd60e51b81526004016103a890610fee565b60405180910390fd5b6001600160a01b0383166103f85760405162461bcd60e51b815260206004820152600e60248201526d1d995cdd0e88085858d8dbdd5b9d60921b60448201526064016103a8565b600081116104385760405162461bcd60e51b815260206004820152600d60248201526c1d995cdd0e8808585b5bdd5b9d609a1b60448201526064016103a8565b4261044662f0c8a084611023565b101561045c5761045962f0c8a04261107a565b91505b6001600160a01b038316600081815260036020818152604080842080546004845282862081875284529185209585529290915292916001919061049f8386611023565b90915550506002810184905560015483906104da907f000000000000000000000000000000000000000000000000000000000000000061107a565b10156105325760405162461bcd60e51b815260206004820152602160248201527f766573743a206e6f7420656e6f7567682061737365747320617661696c61626c6044820152606560f81b60648201526084016103a8565b8281556001805484919060009061054a908490611023565b909155505060405183815282906001600160a01b038716907f9ca6bd7f17be66921df87d41c606fc632ba5511380bfed8359cebc508ee01d3e9060200160405180910390a35050505050565b6000546001600160a01b031633146105c05760405162461bcd60e51b81526004016103a890610fee565b60006105ca61094b565b925050508082111561062c5760405162461bcd60e51b815260206004820152602560248201527f77697468647261773a206e6f7420656e6f7567682061737365747320617661696044820152646c61626c6560d81b60648201526084016103a8565b816001600082825461063e9190611023565b90915550506002546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b50506040518481523392507fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91915060200160405180910390a25050565b6000546001600160a01b0316331461070a5760405162461bcd60e51b81526004016103a890610fee565b60008060006107198585610d3e565b506001600160a01b03881660009081526004602090815260408083208a845290915290206003810154939650919450925090156107a65760405162461bcd60e51b815260206004820152602560248201527f73746f7056657374696e673a20706f736974696f6e20616c72656164792073746044820152641bdc1c195960da1b60648201526084016103a8565b80546107b390859061107a565b600160008282546107c4919061107a565b9091555050426003820155838155604080518581526020810185905286916001600160a01b038916917fa7bc2ad749915741d950138552ad6dd1d49b3917869df11b6fc806024ef4131b91015b60405180910390a3505050505050565b60008061082e8484610d3e565b5091969095509350505050565b6000805b6001600160a01b0383166000908152600360205260409020548110156108a1576001600160a01b038316600090815260046020908152604080832084845290915290205461088d9083611023565b91508061089981611091565b91505061083f565b50919050565b6000546001600160a01b031633146108d15760405162461bcd60e51b81526004016103a890610fee565b6108db6000610ecd565b565b60008060005b6001600160a01b038416600090815260036020526040902054811015610945576000806109108684610d3e565b50509150915081856109229190611023565b945061092e8185611023565b93505050808061093d90611091565b9150506108e3565b50915091565b6000808061095e6301e18558600361105b565b610988907f0000000000000000000000000000000000000000000000000000000000000000611023565b4211156109b7577f00000000000000000000000000000000000000000000000000000000000000009250610a66565b6109e56301e185587f0000000000000000000000000000000000000000000000000000000000000000611023565b4210156109f6576001549250610a66565b610a056301e18558600361105b565b610a2f7f00000000000000000000000000000000000000000000000000000000000000004261107a565b610a59907f000000000000000000000000000000000000000000000000000000000000000061105b565b610a63919061103b565b92505b6001549150610a75828461107a565b9050909192565b60008211610acc5760405162461bcd60e51b815260206004820152601a60248201527f636c61696d3a204e6f20616d6f756e742073706563696669656400000000000060448201526064016103a8565b600080610ad93384610d3e565b50509150915083811015610b3f5760405162461bcd60e51b815260206004820152602760248201527f636c61696d3a204e6f7420656e6f75676820757365722061737365747320617660448201526661696c61626c6560c81b60648201526084016103a8565b600084610b4c838561107a565b610b569190611023565b3360008181526004602081815260408084208a8552909152918290206001810185905560025492516340c10f1960e01b8152918201939093526024810189905292935090916001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610bca57600080fd5b505af1158015610bde573d6000803e3d6000fd5b508792503391507f590f558bcd6e7f9c9aec70c6745b66696ce8a74418d17f6f19e867c2549862d490508885610c14828961107a565b60408051938452602084019290925290820152606001610811565b6000546001600160a01b03163314610c595760405162461bcd60e51b81526004016103a890610fee565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f862b2acce08b11b4a0e27522a624de74641e1eecca1c273cad02b3677a0efe3090600090a250565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b81526004016103a890610fee565b6001600160a01b038116610d325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a8565b610d3b81610ecd565b50565b6001600160a01b0382166000908152600360205260408120548190819081908510610dbc5760405162461bcd60e51b815260206004820152602860248201527f756e6c6f636b656442616c616e63653a20706f736974696f6e20646f6573206e6044820152671bdd08195e1a5cdd60c21b60648201526084016103a8565b6001600160a01b038616600090815260046020908152604080832088845290915290206002810154610df26301e1855882611023565b421015610e255760008082610e0c6301e18558600361105b565b610e169085611023565b95509550955095505050610ec4565b60008060008460030154905060006301e185586003610e44919061105b565b610e4e9086611023565b86549091508215610e6457809450829150610ea4565b81421015610ea057610e7b6301e18558600361105b565b610e85874261107a565b610e8f908361105b565b610e99919061103b565b9450610ea4565b8094505b6001870154610eb3908661107a565b949a50939850939650929450505050505b92959194509250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610f3457600080fd5b919050565b600060208284031215610f4a578081fd5b610f5382610f1d565b9392505050565b60008060408385031215610f6c578081fd5b610f7583610f1d565b946020939093013593505050565b600080600060608486031215610f97578081fd5b610fa084610f1d565b95602085013595506040909401359392505050565b600060208284031215610fc6578081fd5b5035919050565b60008060408385031215610fdf578182fd5b50508035926020909101359150565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611036576110366110ac565b500190565b60008261105657634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611075576110756110ac565b500290565b60008282101561108c5761108c6110ac565b500390565b60006000198214156110a5576110a56110ac565b5060010190565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220787c34c14f285924e4452b117c0ba6247aa1ab66356c4d7448c8a9b960a034d864736f6c634300080400330000000000000000000000000000000000000000000000000000000061533c00000000000000000000000000000000000000000000129e8e441201b1105c0000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80639114557e116100ad578063b307119011610071578063b3071190146102dc578063c34902631461033c578063e268fecb1461034f578063e583077014610358578063f2fde38b1461036b57600080fd5b80639114557e146102635780639f6bca6a14610276578063a502303b14610299578063a898e0f4146102c0578063ae70b98a146102d357600080fd5b80636c0b1e8c116100f45780636c0b1e8c146101dc5780636eacd39814610203578063715018a61461021657806371cf84931461021e5780638da5cb5b1461023e57600080fd5b80632546de10146101315780632e1a7d4d1461014657806338943fbc146101595780634fe59f5e1461016c578063506336ca14610199575b600080fd5b61014461013f366004610f83565b61037e565b005b610144610154366004610fb5565b610596565b610144610167366004610f5a565b6106e0565b61017f61017a366004610f5a565b610821565b604080519283526020830191909152015b60405180910390f35b6101ce6101a7366004610f5a565b6001600160a01b039091166000908152600460209081526040808320938352929052205490565b604051908152602001610190565b6101ce7f0000000000000000000000000000000000000000000000000000000061533c0081565b6101ce610211366004610f39565b61083b565b6101446108a7565b6101ce61022c366004610f39565b60036020526000908152604090205481565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610190565b61017f610271366004610f39565b6108dd565b61027e61094b565b60408051938452602084019290925290820152606001610190565b6101ce7f000000000000000000000000000000000000000000129e8e441201b1105c000081565b60025461024b906001600160a01b031681565b6101ce61271081565b61031c6102ea366004610f5a565b600460209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610190565b61014461034a366004610fcd565b610a7c565b6101ce60015481565b610144610366366004610f39565b610c2f565b610144610379366004610f39565b610ca3565b6000546001600160a01b031633146103b15760405162461bcd60e51b81526004016103a890610fee565b60405180910390fd5b6001600160a01b0383166103f85760405162461bcd60e51b815260206004820152600e60248201526d1d995cdd0e88085858d8dbdd5b9d60921b60448201526064016103a8565b600081116104385760405162461bcd60e51b815260206004820152600d60248201526c1d995cdd0e8808585b5bdd5b9d609a1b60448201526064016103a8565b4261044662f0c8a084611023565b101561045c5761045962f0c8a04261107a565b91505b6001600160a01b038316600081815260036020818152604080842080546004845282862081875284529185209585529290915292916001919061049f8386611023565b90915550506002810184905560015483906104da907f000000000000000000000000000000000000000000129e8e441201b1105c000061107a565b10156105325760405162461bcd60e51b815260206004820152602160248201527f766573743a206e6f7420656e6f7567682061737365747320617661696c61626c6044820152606560f81b60648201526084016103a8565b8281556001805484919060009061054a908490611023565b909155505060405183815282906001600160a01b038716907f9ca6bd7f17be66921df87d41c606fc632ba5511380bfed8359cebc508ee01d3e9060200160405180910390a35050505050565b6000546001600160a01b031633146105c05760405162461bcd60e51b81526004016103a890610fee565b60006105ca61094b565b925050508082111561062c5760405162461bcd60e51b815260206004820152602560248201527f77697468647261773a206e6f7420656e6f7567682061737365747320617661696044820152646c61626c6560d81b60648201526084016103a8565b816001600082825461063e9190611023565b90915550506002546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b50506040518481523392507fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91915060200160405180910390a25050565b6000546001600160a01b0316331461070a5760405162461bcd60e51b81526004016103a890610fee565b60008060006107198585610d3e565b506001600160a01b03881660009081526004602090815260408083208a845290915290206003810154939650919450925090156107a65760405162461bcd60e51b815260206004820152602560248201527f73746f7056657374696e673a20706f736974696f6e20616c72656164792073746044820152641bdc1c195960da1b60648201526084016103a8565b80546107b390859061107a565b600160008282546107c4919061107a565b9091555050426003820155838155604080518581526020810185905286916001600160a01b038916917fa7bc2ad749915741d950138552ad6dd1d49b3917869df11b6fc806024ef4131b91015b60405180910390a3505050505050565b60008061082e8484610d3e565b5091969095509350505050565b6000805b6001600160a01b0383166000908152600360205260409020548110156108a1576001600160a01b038316600090815260046020908152604080832084845290915290205461088d9083611023565b91508061089981611091565b91505061083f565b50919050565b6000546001600160a01b031633146108d15760405162461bcd60e51b81526004016103a890610fee565b6108db6000610ecd565b565b60008060005b6001600160a01b038416600090815260036020526040902054811015610945576000806109108684610d3e565b50509150915081856109229190611023565b945061092e8185611023565b93505050808061093d90611091565b9150506108e3565b50915091565b6000808061095e6301e18558600361105b565b610988907f0000000000000000000000000000000000000000000000000000000061533c00611023565b4211156109b7577f000000000000000000000000000000000000000000129e8e441201b1105c00009250610a66565b6109e56301e185587f0000000000000000000000000000000000000000000000000000000061533c00611023565b4210156109f6576001549250610a66565b610a056301e18558600361105b565b610a2f7f0000000000000000000000000000000000000000000000000000000061533c004261107a565b610a59907f000000000000000000000000000000000000000000129e8e441201b1105c000061105b565b610a63919061103b565b92505b6001549150610a75828461107a565b9050909192565b60008211610acc5760405162461bcd60e51b815260206004820152601a60248201527f636c61696d3a204e6f20616d6f756e742073706563696669656400000000000060448201526064016103a8565b600080610ad93384610d3e565b50509150915083811015610b3f5760405162461bcd60e51b815260206004820152602760248201527f636c61696d3a204e6f7420656e6f75676820757365722061737365747320617660448201526661696c61626c6560c81b60648201526084016103a8565b600084610b4c838561107a565b610b569190611023565b3360008181526004602081815260408084208a8552909152918290206001810185905560025492516340c10f1960e01b8152918201939093526024810189905292935090916001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610bca57600080fd5b505af1158015610bde573d6000803e3d6000fd5b508792503391507f590f558bcd6e7f9c9aec70c6745b66696ce8a74418d17f6f19e867c2549862d490508885610c14828961107a565b60408051938452602084019290925290820152606001610811565b6000546001600160a01b03163314610c595760405162461bcd60e51b81526004016103a890610fee565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f862b2acce08b11b4a0e27522a624de74641e1eecca1c273cad02b3677a0efe3090600090a250565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b81526004016103a890610fee565b6001600160a01b038116610d325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a8565b610d3b81610ecd565b50565b6001600160a01b0382166000908152600360205260408120548190819081908510610dbc5760405162461bcd60e51b815260206004820152602860248201527f756e6c6f636b656442616c616e63653a20706f736974696f6e20646f6573206e6044820152671bdd08195e1a5cdd60c21b60648201526084016103a8565b6001600160a01b038616600090815260046020908152604080832088845290915290206002810154610df26301e1855882611023565b421015610e255760008082610e0c6301e18558600361105b565b610e169085611023565b95509550955095505050610ec4565b60008060008460030154905060006301e185586003610e44919061105b565b610e4e9086611023565b86549091508215610e6457809450829150610ea4565b81421015610ea057610e7b6301e18558600361105b565b610e85874261107a565b610e8f908361105b565b610e99919061103b565b9450610ea4565b8094505b6001870154610eb3908661107a565b949a50939850939650929450505050505b92959194509250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610f3457600080fd5b919050565b600060208284031215610f4a578081fd5b610f5382610f1d565b9392505050565b60008060408385031215610f6c578081fd5b610f7583610f1d565b946020939093013593505050565b600080600060608486031215610f97578081fd5b610fa084610f1d565b95602085013595506040909401359392505050565b600060208284031215610fc6578081fd5b5035919050565b60008060408385031215610fdf578182fd5b50508035926020909101359150565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611036576110366110ac565b500190565b60008261105657634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611075576110756110ac565b500290565b60008282101561108c5761108c6110ac565b500390565b60006000198214156110a5576110a56110ac565b5060010190565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220787c34c14f285924e4452b117c0ba6247aa1ab66356c4d7448c8a9b960a034d864736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000061533c00000000000000000000000000000000000000000000129e8e441201b1105c0000
-----Decoded View---------------
Arg [0] : startTime (uint256): 1632844800
Arg [1] : quota (uint256): 22509423000000000000000000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000061533c00
Arg [1] : 000000000000000000000000000000000000000000129e8e441201b1105c0000
Deployed Bytecode Sourcemap
1005:8099:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4386:856;;;;;;:::i;:::-;;:::i;:::-;;5343:450;;;;;;:::i;:::-;;:::i;6661:516::-;;;;;;:::i;:::-;;:::i;3859:189::-;;;;;;:::i;:::-;;:::i;:::-;;;;6363:25:6;;;6419:2;6404:18;;6397:34;;;;6336:18;3859:189:0;;;;;;;;8904:198;;;;;;:::i;:::-;-1:-1:-1;;;;;9034:29:0;;;8981:15;9034:29;;;:20;:29;;;;;;;;:33;;;;;;;9087:8;;8904:198;;;;6153:25:6;;;6141:2;6126:18;8904:198:0;6108:76:6;1676:43:0;;;;;8533:234;;;;;;:::i;:::-;;:::i;1605:92:1:-;;;:::i;1796:63:0:-;;;;;;:::i;:::-;;;;;;;;;;;;;;973:85:1;1019:7;1045:6;-1:-1:-1;;;;;1045:6:1;973:85;;;-1:-1:-1;;;;;1621:32:6;;;1603:51;;1591:2;1576:18;973:85:1;1558:102:6;3384:343:0;;;;;;:::i;:::-;;:::i;2770:510::-;;;:::i;:::-;;;;6644:25:6;;;6700:2;6685:18;;6678:34;;;;6728:18;;;6721:34;6632:2;6617:18;2770:510:0;6599:162:6;1640:30:0;;;;;1761:28;;;;;-1:-1:-1;;;;;1761:28:0;;;1571:57;;1623:5;1571:57;;1865:80;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6997:25:6;;;7053:2;7038:18;;7031:34;;;;7081:18;;;7074:34;7139:2;7124:18;;7117:34;6984:3;6969:19;1865:80:0;6951:206:6;5928:580:0;;;;;;:::i;:::-;;:::i;1726:28::-;;;;;;2526:165;;;;;;:::i;:::-;;:::i;1846:189:1:-;;;;;;:::i;:::-;;:::i;4386:856:0:-;1019:7:1;1045:6;-1:-1:-1;;;;;1045:6:1;666:10:5;1185:23:1;1177:68;;;;-1:-1:-1;;;1177:68:1;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;4489:21:0;::::1;4481:48;;;::::0;-1:-1:-1;;;4481:48:0;;2777:2:6;4481:48:0::1;::::0;::::1;2759:21:6::0;2816:2;2796:18;;;2789:30;-1:-1:-1;;;2835:18:6;;;2828:44;2889:18;;4481:48:0::1;2749:164:6::0;4481:48:0::1;4556:1;4547:6;:10;4539:36;;;::::0;-1:-1:-1;;;4539:36:0;;4339:2:6;4539:36:0::1;::::0;::::1;4321:21:6::0;4378:2;4358:18;;;4351:30;-1:-1:-1;;;4397:18:6;;;4390:43;4450:18;;4539:36:0::1;4311:163:6::0;4539:36:0::1;4693:15;4656:34;1375:11;4656:9:::0;:34:::1;:::i;:::-;:52;4652:135;;;4736:40;1375:11;4736:15;:40;:::i;:::-;4724:52;;4652:135;-1:-1:-1::0;;;;;4822:37:0;::::1;4797:22;4822:37:::0;;;:28:::1;:37;::::0;;;;;;;;;4895:20:::1;:29:::0;;;;;:45;;;;;;;;4950:37;;;;;;;4822;4895:45;4991:1:::1;::::0;4822:37;4950:42:::1;4991:1:::0;4822:37;4950:42:::1;:::i;:::-;::::0;;;-1:-1:-1;;5003:12:0::1;::::0;::::1;:24:::0;;;5054:13:::1;::::0;5072:6;;5046:21:::1;::::0;:5:::1;:21;:::i;:::-;5045:33;;5037:79;;;::::0;-1:-1:-1;;;5037:79:0;;3528:2:6;5037:79:0::1;::::0;::::1;3510:21:6::0;3567:2;3547:18;;;3540:30;3606:34;3586:18;;;3579:62;-1:-1:-1;;;3657:18:6;;;3650:31;3698:19;;5037:79:0::1;3500:223:6::0;5037:79:0::1;5126:17:::0;;;5153:13:::1;:23:::0;;5137:6;;5153:13;5126:8:::1;::::0;5153:23:::1;::::0;5137:6;;5153:23:::1;:::i;:::-;::::0;;;-1:-1:-1;;5192:43:0::1;::::0;6153:25:6;;;5212:14:0;;-1:-1:-1;;;;;5192:43:0;::::1;::::0;::::1;::::0;6141:2:6;6126:18;5192:43:0::1;;;;;;;1255:1:1;;4386:856:0::0;;;:::o;5343:450::-;1019:7:1;1045:6;-1:-1:-1;;;;;1045:6:1;666:10:5;1185:23:1;1177:68;;;;-1:-1:-1;;;1177:68:1;;;;;;;:::i;:::-;5412:17:0::1;5434:18;:16;:18::i;:::-;5406:46;;;;5480:9;5470:6;:19;;5462:69;;;::::0;-1:-1:-1;;;5462:69:0;;5803:2:6;5462:69:0::1;::::0;::::1;5785:21:6::0;5842:2;5822:18;;;5815:30;5881:34;5861:18;;;5854:62;-1:-1:-1;;;5932:18:6;;;5925:35;5977:19;;5462:69:0::1;5775:227:6::0;5462:69:0::1;5686:6;5669:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;5702:11:0::1;::::0;:36:::1;::::0;-1:-1:-1;;;5702:36:0;;5719:10:::1;5702:36;::::0;::::1;1839:51:6::0;1906:18;;;1899:34;;;-1:-1:-1;;;;;5702:11:0;;::::1;::::0;:16:::1;::::0;1812:18:6;;5702:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5753:33:0::1;::::0;6153:25:6;;;5767:10:0::1;::::0;-1:-1:-1;5753:33:0::1;::::0;-1:-1:-1;6141:2:6;6126:18;5753:33:0::1;;;;;;;1255:1:1;5343:450:0::0;:::o;6661:516::-;1019:7:1;1045:6;-1:-1:-1;;;;;1045:6:1;666:10:5;1185:23:1;1177:68;;;;-1:-1:-1;;;1177:68:1;;;;;;;:::i;:::-;6745:16:0::1;6763:17:::0;6782::::1;6805:32;6821:11;6834:2;6805:15;:32::i;:::-;-1:-1:-1::0;;;;;;6873:33:0;::::1;6847:23;6873:33:::0;;;:20:::1;:33;::::0;;;;;;;:37;;;;;;;;6928:11:::1;::::0;::::1;::::0;6744:93;;-1:-1:-1;6744:93:0;;-1:-1:-1;6744:93:0;-1:-1:-1;6873:37:0;6928:16;6920:66:::1;;;::::0;-1:-1:-1;;;6920:66:0;;5397:2:6;6920:66:0::1;::::0;::::1;5379:21:6::0;5436:2;5416:18;;;5409:30;5475:34;5455:18;;;5448:62;-1:-1:-1;;;5526:18:6;;;5519:35;5571:19;;6920:66:0::1;5369:227:6::0;6920:66:0::1;7013:8:::0;;:19:::1;::::0;7024:8;;7013:19:::1;:::i;:::-;6996:13;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;7056:15:0::1;7042:11;::::0;::::1;:29:::0;7081:19;;;7115:55:::1;::::0;;6363:25:6;;;6419:2;6404:18;;6397:34;;;7146:2:0;;-1:-1:-1;;;;;7115:55:0;::::1;::::0;::::1;::::0;6336:18:6;7115:55:0::1;;;;;;;;1255:1:1;;;;6661:516:0::0;;:::o;3859:189::-;3942:14;3958:17;4013:28;4029:7;4038:2;4013:15;:28::i;:::-;-1:-1:-1;3987:54:0;;;;-1:-1:-1;3859:189:0;-1:-1:-1;;;;3859:189:0:o;8533:234::-;8595:15;8627:9;8622:139;-1:-1:-1;;;;;8642:37:0;;;;;;:28;:37;;;;;;8638:41;;8622:139;;;-1:-1:-1;;;;;8712:29:0;;;;;;:20;:29;;;;;;;;:32;;;;;;;;:38;8701:49;;;;:::i;:::-;;-1:-1:-1;8681:4:0;;;;:::i;:::-;;;;8622:139;;;;8533:234;;;:::o;1605:92:1:-;1019:7;1045:6;-1:-1:-1;;;;;1045:6:1;666:10:5;1185:23:1;1177:68;;;;-1:-1:-1;;;1177:68:1;;;;;;;:::i;:::-;1669:21:::1;1687:1;1669:9;:21::i;:::-;1605:92::o:0;3384:343:0:-;3447:14;3463:17;3497:9;3492:229;-1:-1:-1;;;;;3512:37:0;;;;;;:28;:37;;;;;;3508:41;;3492:229;;;3572:15;3589:18;3615:27;3631:7;3640:1;3615:15;:27::i;:::-;3571:71;;;;;;3666:7;3656:17;;;;;:::i;:::-;;-1:-1:-1;3687:23:0;3700:10;3687:23;;:::i;:::-;;;3492:229;;3551:4;;;;;:::i;:::-;;;;3492:229;;;;3384:343;;;:::o;2770:510::-;2819:16;;;1445:20;1260:8;1464:1;1445:20;:::i;:::-;2905:33;;:18;:33;:::i;:::-;2887:15;:51;2883:318;;;2965:5;2954:16;;2883:318;;;3009:34;1260:8;3009:18;:34;:::i;:::-;2991:15;:52;2987:214;;;3070:13;;3059:24;;2987:214;;;1445:20;1260:8;1464:1;1445:20;:::i;:::-;3136:36;3154:18;3136:15;:36;:::i;:::-;3125:48;;3126:5;3125:48;:::i;:::-;:65;;;;:::i;:::-;3114:76;;2987:214;3220:13;;;-1:-1:-1;3255:18:0;3220:13;3255:8;:18;:::i;:::-;3243:30;;2770:510;;;:::o;5928:580::-;6008:1;5999:6;:10;5991:49;;;;-1:-1:-1;;;5991:49:0;;4681:2:6;5991:49:0;;;4663:21:6;4720:2;4700:18;;;4693:30;4759:28;4739:18;;;4732:56;4805:18;;5991:49:0;4653:176:6;5991:49:0;6051:16;6069:17;6094:31;6110:10;6122:2;6094:15;:31::i;:::-;6050:75;;;;;;6156:6;6143:9;:19;;6135:71;;;;-1:-1:-1;;;6135:71:0;;3120:2:6;6135:71:0;;;3102:21:6;3159:2;3139:18;;;3132:30;3198:34;3178:18;;;3171:62;-1:-1:-1;;;3249:18:6;;;3242:37;3296:19;;6135:71:0;3092:229:6;6135:71:0;6217:18;6261:6;6238:20;6249:9;6238:8;:20;:::i;:::-;:29;;;;:::i;:::-;6324:10;6277:23;6303:32;;;:20;:32;;;;;;;;:36;;;;;;;;;;6349:12;;;:25;;;6384:11;;:36;;-1:-1:-1;;;6384:36:0;;;;;1839:51:6;;;;1906:18;;;1899:34;;;6349:25:0;;-1:-1:-1;6303:36:0;;-1:-1:-1;;;;;6384:11:0;;;;:16;;1812:18:6;;6384:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6458:2:0;;-1:-1:-1;6446:10:0;;-1:-1:-1;6435:66:0;;-1:-1:-1;6462:6:0;6470:10;6482:18;6462:6;6482:9;:18;:::i;:::-;6435:66;;;6644:25:6;;;6700:2;6685:18;;6678:34;;;;6728:18;;;6721:34;6632:2;6617:18;6435:66:0;6599:162:6;2526:165:0;1019:7:1;1045:6;-1:-1:-1;;;;;1045:6:1;666:10:5;1185:23:1;1177:68;;;;-1:-1:-1;;;1177:68:1;;;;;;;:::i;:::-;2601:11:0::1;:37:::0;;-1:-1:-1;;;;;;2601:37:0::1;-1:-1:-1::0;;;;;2601:37:0;::::1;::::0;;::::1;::::0;;;2653:31:::1;::::0;::::1;::::0;-1:-1:-1;;2653:31:0::1;2526:165:::0;:::o;1846:189:1:-;1019:7;1045:6;-1:-1:-1;;;;;1045:6:1;666:10:5;1185:23:1;1177:68;;;;-1:-1:-1;;;1177:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;1934:22:1;::::1;1926:73;;;::::0;-1:-1:-1;;;1926:73:1;;2370:2:6;1926:73:1::1;::::0;::::1;2352:21:6::0;2409:2;2389:18;;;2382:30;2448:34;2428:18;;;2421:62;-1:-1:-1;;;2499:18:6;;;2492:36;2545:19;;1926:73:1::1;2342:228:6::0;1926:73:1::1;2009:19;2019:8;2009:9;:19::i;:::-;1846:189:::0;:::o;7359:1059:0:-;-1:-1:-1;;;;;7525:37:0;;7461:7;7525:37;;;:28;:37;;;;;;7461:7;;;;;;7520:42;;7512:95;;;;-1:-1:-1;;;7512:95:0;;3930:2:6;7512:95:0;;;3912:21:6;3969:2;3949:18;;;3942:30;4008:34;3988:18;;;3981:62;-1:-1:-1;;;4059:18:6;;;4052:38;4107:19;;7512:95:0;3902:230:6;7512:95:0;-1:-1:-1;;;;;7643:29:0;;7617:23;7643:29;;;:20;:29;;;;;;;;:33;;;;;;;;7706:12;;;;7750:25;1260:8;7706:12;7750:25;:::i;:::-;7732:15;:43;7728:124;;;7799:1;;7805:9;1445:20;1260:8;1464:1;1445:20;:::i;:::-;7816:24;;:9;:24;:::i;:::-;7791:50;;;;;;;;;;;;7728:124;7861:16;7887:17;7914:16;7933:2;:11;;;7914:30;;7954:16;1260:8;1464:1;1445:20;;;;:::i;:::-;7973:24;;:9;:24;:::i;:::-;8023:8;;7954:43;;-1:-1:-1;8045:12:0;;8041:267;;8084:5;8073:16;;8114:8;8103:19;;8041:267;;;8161:8;8143:15;:26;8139:169;;;1445:20;1260:8;1464:1;1445:20;:::i;:::-;8205:27;8223:9;8205:15;:27;:::i;:::-;8196:37;;:5;:37;:::i;:::-;:54;;;;:::i;:::-;8185:65;;8139:169;;;8292:5;8281:16;;8139:169;8340:12;;;;8329:23;;:8;:23;:::i;:::-;8370:8;;-1:-1:-1;8317:35:0;;-1:-1:-1;8391:9:0;;-1:-1:-1;8402:8:0;;-1:-1:-1;;;;;7359:1059:0;;;;;;;;:::o;2041:169:1:-;2096:16;2115:6;;-1:-1:-1;;;;;2131:17:1;;;-1:-1:-1;;;;;;2131:17:1;;;;;;2163:40;;2115:6;;;;;;;2163:40;;2096:16;2163:40;2041:169;;:::o;14:173:6:-;82:20;;-1:-1:-1;;;;;131:31:6;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:196::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;:::-;343:39;262:126;-1:-1:-1;;;262:126:6:o;393:264::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;647:2;632:18;;;;619:32;;-1:-1:-1;;;480:177:6:o;662:332::-;739:6;747;755;808:2;796:9;787:7;783:23;779:32;776:2;;;829:6;821;814:22;776:2;857:29;876:9;857:29;:::i;:::-;847:39;933:2;918:18;;905:32;;-1:-1:-1;984:2:6;969:18;;;956:32;;766:228;-1:-1:-1;;;766:228:6:o;999:190::-;1058:6;1111:2;1099:9;1090:7;1086:23;1082:32;1079:2;;;1132:6;1124;1117:22;1079:2;-1:-1:-1;1160:23:6;;1069:120;-1:-1:-1;1069:120:6:o;1194:258::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;-1:-1:-1;;1372:23:6;;;1442:2;1427:18;;;1414:32;;-1:-1:-1;1281:171:6:o;4834:356::-;5036:2;5018:21;;;5055:18;;;5048:30;5114:34;5109:2;5094:18;;5087:62;5181:2;5166:18;;5008:182::o;7162:128::-;7202:3;7233:1;7229:6;7226:1;7223:13;7220:2;;;7239:18;;:::i;:::-;-1:-1:-1;7275:9:6;;7210:80::o;7295:217::-;7335:1;7361;7351:2;;-1:-1:-1;;;7386:31:6;;7440:4;7437:1;7430:15;7468:4;7393:1;7458:15;7351:2;-1:-1:-1;7497:9:6;;7341:171::o;7517:168::-;7557:7;7623:1;7619;7615:6;7611:14;7608:1;7605:21;7600:1;7593:9;7586:17;7582:45;7579:2;;;7630:18;;:::i;:::-;-1:-1:-1;7670:9:6;;7569:116::o;7690:125::-;7730:4;7758:1;7755;7752:8;7749:2;;;7763:18;;:::i;:::-;-1:-1:-1;7800:9:6;;7739:76::o;7820:135::-;7859:3;-1:-1:-1;;7880:17:6;;7877:2;;;7900:18;;:::i;:::-;-1:-1:-1;7947:1:6;7936:13;;7867:88::o;7960:127::-;8021:10;8016:3;8012:20;8009:1;8002:31;8052:4;8049:1;8042:15;8076:4;8073:1;8066:15
Swarm Source
ipfs://787c34c14f285924e4452b117c0ba6247aa1ab66356c4d7448c8a9b960a034d8
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ 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.