More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,368 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Release Seed | 21523193 | 26 days ago | IN | 0 ETH | 0.0010854 | ||||
Release Seed | 21523192 | 26 days ago | IN | 0 ETH | 0.00102574 | ||||
Release Seed | 21523188 | 26 days ago | IN | 0 ETH | 0.00109482 | ||||
Release Seed | 21328577 | 53 days ago | IN | 0 ETH | 0.00171544 | ||||
Release Seed | 21268987 | 61 days ago | IN | 0 ETH | 0.0005504 | ||||
Release Seed | 21268981 | 61 days ago | IN | 0 ETH | 0.00070598 | ||||
Release Ibo | 21073810 | 88 days ago | IN | 0 ETH | 0.00065088 | ||||
Release Seed | 20721892 | 138 days ago | IN | 0 ETH | 0.00046344 | ||||
Release Wl | 20570221 | 159 days ago | IN | 0 ETH | 0.0002121 | ||||
Release Wl | 20564130 | 160 days ago | IN | 0 ETH | 0.00020725 | ||||
Release Wl | 20559571 | 160 days ago | IN | 0 ETH | 0.00019707 | ||||
Release Seed | 20558903 | 160 days ago | IN | 0 ETH | 0.00016524 | ||||
Release Seed | 20511337 | 167 days ago | IN | 0 ETH | 0.0002691 | ||||
Release Seed | 20433242 | 178 days ago | IN | 0 ETH | 0.00038025 | ||||
Release Seed | 20432566 | 178 days ago | IN | 0 ETH | 0.00053329 | ||||
Release Wl | 20426760 | 179 days ago | IN | 0 ETH | 0.00063509 | ||||
Release Seed | 20415520 | 180 days ago | IN | 0 ETH | 0.00014201 | ||||
Release Seed | 20415516 | 180 days ago | IN | 0 ETH | 0.00020977 | ||||
Release Seed | 20415512 | 180 days ago | IN | 0 ETH | 0.00015188 | ||||
Release Seed | 20413153 | 181 days ago | IN | 0 ETH | 0.00038496 | ||||
Release Seed | 20412147 | 181 days ago | IN | 0 ETH | 0.00033553 | ||||
Release Seed | 20410412 | 181 days ago | IN | 0 ETH | 0.00021075 | ||||
Release Seed | 20404099 | 182 days ago | IN | 0 ETH | 0.00011866 | ||||
Release Seed | 20403700 | 182 days ago | IN | 0 ETH | 0.00016148 | ||||
Release Wl | 20391337 | 184 days ago | IN | 0 ETH | 0.00056678 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
VestingCvg
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 250 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT /** _____ / __ \ | / \/ ___ _ ____ _____ _ __ __ _ ___ _ __ ___ ___ | | / _ \| '_ \ \ / / _ \ '__/ _` |/ _ \ '_ \ / __/ _ \ | \__/\ (_) | | | \ V / __/ | | (_| | __/ | | | (_| __/ \____/\___/|_| |_|\_/ \___|_| \__, |\___|_| |_|\___\___| __/ | |___/ */ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable2Step.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../interfaces/IPresaleCvgWl.sol"; import "../interfaces/IPresaleCvgSeed.sol"; import "../interfaces/IboInterface.sol"; contract VestingCvg is Ownable2Step { /// @dev Enum about vesting types enum VestingType { SEED, WL, IBO, TEAM, DAO } /// @dev Enum about the state of the vesting enum State { NOT_ACTIVE, SET, OPEN } /// @dev Struct Info about VestingSchedules struct VestingSchedule { uint80 daysBeforeCliff; uint80 daysAfterCliff; uint96 dropCliff; uint256 totalAmount; uint256 totalReleased; } struct InfoVestingTokenId { uint256 amountReleasable; uint256 totalCvg; uint256 amountRedeemed; } /// @dev Max supply TEAM & DAO uint256 public constant MAX_SUPPLY_TEAM = 12_750_000 * 10 ** 18; uint256 public constant MAX_SUPPLY_DAO = 14_250_000 * 10 ** 18; uint256 public constant ONE_DAY = 1 days; uint256 public constant ONE_GWEI = 10 ** 9; State public state; IPresaleCvgWl public presaleWl; IPresaleCvgSeed public presaleSeed; IboInterface public ibo; IERC20 public cvg; address public whitelistedTeam; address public whitelistedDao; /// @dev Timestamp shared between all vestingSchedules to mark the beginning of the vesting uint256 public startTimestamp; /// @dev VestingType associated to the vesting schedule info mapping(VestingType => VestingSchedule) public vestingSchedules; mapping(uint256 => uint256) public amountReleasedIdSeed; // tokenId => amountReleased mapping(uint256 => uint256) public amountReleasedIdWl; // tokenId => amountReleased mapping(uint256 => uint256) public amountReleasedIdIbo; // tokenId => amountReleased constructor(IPresaleCvgWl _presaleWl, IPresaleCvgSeed _presaleSeed, IboInterface _ibo) { presaleWl = _presaleWl; presaleSeed = _presaleSeed; ibo = _ibo; } /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= MODIFIERS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ modifier onlyOwnerOfSeed(uint256 _tokenId) { require(presaleSeed.ownerOf(_tokenId) == msg.sender, "NOT_OWNED"); _; } modifier onlyOwnerOfWl(uint256 _tokenId) { require(presaleWl.ownerOf(_tokenId) == msg.sender, "NOT_OWNED"); _; } modifier onlyOwnerOfIbo(uint256 _tokenId) { require(ibo.ownerOf(_tokenId) == msg.sender, "NOT_OWNED"); _; } /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= SETTERS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function setWhitelistTeam(address newWhitelistedTeam) external onlyOwner { whitelistedTeam = newWhitelistedTeam; } function setWhitelistDao(address newWhitelistedDao) external onlyOwner { whitelistedDao = newWhitelistedDao; } /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= GETTERS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function getTotalReleasedScheduleId(VestingType _vestingType) external view returns (uint256) { return (vestingSchedules[_vestingType].totalReleased); } function getInfoVestingTokenId( uint256 _tokenId, VestingType _vestingType ) external view returns (InfoVestingTokenId memory) { (uint256 amountReleasable, uint256 totalCvg, uint256 amountRedeemed) = _computeReleaseAmount( _tokenId, _vestingType ); return InfoVestingTokenId({ amountReleasable: amountReleasable, totalCvg: totalCvg, amountRedeemed: amountRedeemed }); } /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= EXTERNALS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ /// @notice Set vesting with current timestamp, creates vestingSchedules for all vesting types (only callable by owner) /// @dev Sum of all vesting schedule must be distributed in the contract before intializing it the vesting function setVesting(IERC20 _cvg) external onlyOwner { require(state == State.NOT_ACTIVE, "VESTING_ALREADY_SET"); state = State.SET; require( presaleSeed.saleState() == IPresaleCvgSeed.SaleState.OVER && presaleWl.saleState() == IPresaleCvgWl.SaleState.OVER, "PRESALE_ROUND_NOT_FINISHED" ); startTimestamp = block.timestamp; /// @dev SEED SCHEDULE uint256 seedAmount = presaleSeed.getTotalCvg(); vestingSchedules[VestingType.SEED] = VestingSchedule({ totalAmount: seedAmount, totalReleased: 0, daysBeforeCliff: 4 * 30, daysAfterCliff: 15 * 30, dropCliff: 50 }); /// @dev WL SCHEDULE uint256 wlAmount = presaleWl.MAX_SUPPLY_PRESALE(); vestingSchedules[VestingType.WL] = VestingSchedule({ totalAmount: wlAmount, totalReleased: 0, daysBeforeCliff: 0, daysAfterCliff: 3 * 30, dropCliff: 330 }); /// @dev IBO SCHEDULE uint256 iboAmount = ibo.getTotalCvgDue(); vestingSchedules[VestingType.IBO] = VestingSchedule({ totalAmount: iboAmount, totalReleased: 0, daysBeforeCliff: 0, daysAfterCliff: 2 * 30, dropCliff: 0 }); /// @dev TEAM SCHEDULE uint256 teamAmount = MAX_SUPPLY_TEAM; vestingSchedules[VestingType.TEAM] = VestingSchedule({ totalAmount: teamAmount, totalReleased: 0, daysBeforeCliff: 180, daysAfterCliff: 18 * 30, dropCliff: 50 }); /// @dev DAO SCHEDULE uint256 daoAmount = MAX_SUPPLY_DAO; vestingSchedules[VestingType.DAO] = VestingSchedule({ totalAmount: daoAmount, totalReleased: 0, daysBeforeCliff: 0, daysAfterCliff: 18 * 30, dropCliff: 50 }); require(address(_cvg) != address(0), "CVG_ZERO"); cvg = _cvg; require( _cvg.balanceOf(address(this)) >= seedAmount + wlAmount + iboAmount + teamAmount + daoAmount, "NOT_ENOUGH_CVG" ); } /// @notice Open vesting for all function openVesting() external onlyOwner { require(state == State.SET, "VESTING_ALREADY_OPENED"); state = State.OPEN; } /** * @notice Release CVG token available for SEED nft owner * @param _tokenId token Id SEED */ function releaseSeed(uint256 _tokenId) external onlyOwnerOfSeed(_tokenId) { require(state == State.OPEN, "VESTING_NOT_OPEN"); (uint256 amountToRelease, , ) = _computeReleaseAmount(_tokenId, VestingType.SEED); require(amountToRelease != 0, "NOT_RELEASABLE"); //update totalReleased & amountReleasedId vestingSchedules[VestingType.SEED].totalReleased += amountToRelease; amountReleasedIdSeed[_tokenId] += amountToRelease; //transfer Cvg amount to release cvg.transfer(msg.sender, amountToRelease); } /** * @notice Release CVG token available for WL nft owner * @param _tokenId token Id WL */ function releaseWl(uint256 _tokenId) external onlyOwnerOfWl(_tokenId) { require(state == State.OPEN, "VESTING_NOT_OPEN"); (uint256 amountToRelease, , ) = _computeReleaseAmount(_tokenId, VestingType.WL); require(amountToRelease != 0, "NOT_RELEASABLE"); //update totalReleased & amountReleasedIdSeed vestingSchedules[VestingType.WL].totalReleased += amountToRelease; amountReleasedIdWl[_tokenId] += amountToRelease; //transfer Cvg amount to release cvg.transfer(msg.sender, amountToRelease); } /** * @notice Release CVG token available for IBO nft owner * @param _tokenId token Id IBO */ function releaseIbo(uint256 _tokenId) external onlyOwnerOfIbo(_tokenId) { require(state == State.OPEN, "VESTING_NOT_OPEN"); (uint256 amountToRelease, , ) = _computeReleaseAmount(_tokenId, VestingType.IBO); require(amountToRelease != 0, "NOT_RELEASABLE"); //update totalReleased & amountReleasedIdSeed vestingSchedules[VestingType.IBO].totalReleased += amountToRelease; amountReleasedIdIbo[_tokenId] += amountToRelease; //transfer Cvg amount to release cvg.transfer(msg.sender, amountToRelease); } /// @notice Release CVG token available for whitelisted address TEAM or DAO function releaseTeamOrDao(bool _isTeam) external { uint256 amountToRelease; VestingType _vestingType; if (_isTeam) { require(msg.sender == whitelistedTeam, "NOT_TEAM"); _vestingType = VestingType.TEAM; } else { require(msg.sender == whitelistedDao, "NOT_DAO"); _vestingType = VestingType.DAO; } (amountToRelease, , ) = _computeReleaseAmount(0, _vestingType); require(amountToRelease != 0, "NOT_RELEASABLE"); vestingSchedules[_vestingType].totalReleased += amountToRelease; /// @dev transfer Cvg amount to release cvg.transfer(msg.sender, amountToRelease); } /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= INTERNALS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function _computeReleaseAmount( uint256 _tokenId, VestingType _vestingType ) internal view returns (uint256 amountToRelease, uint256 totalAmount, uint256 totalAmountReleased) { if (_vestingType == VestingType.SEED) { totalAmountReleased = amountReleasedIdSeed[_tokenId]; totalAmount = presaleSeed.presaleInfoTokenId(_tokenId).cvgAmount; } else if (_vestingType == VestingType.WL) { totalAmountReleased = amountReleasedIdWl[_tokenId]; totalAmount = presaleWl.presaleInfos(_tokenId).cvgAmount; } else if (_vestingType == VestingType.IBO) { totalAmountReleased = amountReleasedIdIbo[_tokenId]; totalAmount = ibo.totalCvgPerToken(_tokenId); } else if (_vestingType == VestingType.TEAM) { totalAmountReleased = vestingSchedules[_vestingType].totalReleased; totalAmount = MAX_SUPPLY_TEAM; } else { totalAmountReleased = vestingSchedules[_vestingType].totalReleased; totalAmount = MAX_SUPPLY_DAO; } amountToRelease = _calculateRelease(_vestingType, totalAmount, totalAmountReleased); } /** * @dev Calculate the releasable amount in function of the vestingSchedule params, the total amount vested for a tokenId * and the total amount already released. Calculated linearly between cliff release and the end of the vesting. */ function _calculateRelease( VestingType vestingType, uint256 totalAmount, uint256 totalAmountReleased ) private view returns (uint256 amountToRelease) { uint256 cliffTimestamp = startTimestamp + vestingSchedules[vestingType].daysBeforeCliff * ONE_DAY; uint256 endVestingTimestamp = cliffTimestamp + vestingSchedules[vestingType].daysAfterCliff * ONE_DAY; if (block.timestamp > cliffTimestamp) { if (block.timestamp > endVestingTimestamp) { amountToRelease = totalAmount - totalAmountReleased; } else { uint256 ratio = ((endVestingTimestamp - block.timestamp) * ONE_GWEI) / (endVestingTimestamp - cliffTimestamp); uint256 amountDroppedAtCliff = (totalAmount * vestingSchedules[vestingType].dropCliff) / 1000; uint256 totalAmountAfterCliff = totalAmount - amountDroppedAtCliff; amountToRelease = amountDroppedAtCliff + (((ONE_GWEI - ratio) * totalAmountAfterCliff) / ONE_GWEI) - totalAmountReleased; } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) 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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol) pragma solidity ^0.8.0; import "./Ownable.sol"; /** * @dev Contract module which provides 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} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; interface IboInterface is IERC721Enumerable { function totalCvgPerToken(uint256 tokenId) external view returns (uint256); function iboStartTimestamp() external view returns (uint256); function getTokenIdsForWallet(address _wallet) external view returns (uint256[] memory); function getTotalCvgDue() external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; interface IPresaleCvgSeed is IERC721Enumerable { /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= ENUMS & STRUCTS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ enum SaleState { NOT_ACTIVE, PRESEED, SEED, OVER } struct PresaleInfo { uint256 vestingType; // Define the presaler type uint256 cvgAmount; // Total CVG amount claimable for the nft owner } /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= SETTERS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function setSaleState(SaleState _saleState) external; function grantPreseed(address _wallet, uint256 _amount) external; function grantSeed(address _wallet, uint256 _amount) external; /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= EXTERNALS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function investMint(bool _isDai) external; /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= GETTERS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function presaleInfoTokenId(uint256 _tokenId) external view returns (PresaleInfo memory); function saleState() external view returns (SaleState); function tokenOfOwnerByIndex(address owner, uint256 index) external view override returns (uint256); function getTokenIdAndType( address _wallet, uint256 _index ) external view returns (uint256 tokenId, uint256 typeVesting); function getTokenIdsForWallet(address _wallet) external view returns (uint256[] memory); function getTotalCvg() external view returns (uint256); /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= WITHDRAW OWNER =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function withdrawFunds() external; function withdrawToken(address _token) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; interface IPresaleCvgWl is IERC721Enumerable { /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= ENUMS & STRUCTS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ enum SaleState { NOT_ACTIVE, WL, OVER } struct PresaleInfo { uint256 vestingType; uint256 cvgAmount; } /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= SETTERS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function setSaleState(SaleState _saleState) external; function setMerkleRootWlS(bytes32 _newMerkleRootWlS) external; function setMerkleRootWlM(bytes32 _newMerkleRootWlM) external; function setMerkleRootWlL(bytes32 _newMerkleRootWlL) external; /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= EXTERNALS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function investMint(bytes32[] calldata _merkleProof, uint256 _amount) external; /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= GETTERS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function presaleInfos(uint256 _tokenId) external view returns (PresaleInfo memory); function getAmountCvgForVesting() external view returns (uint256); function getTotalCvg() external view returns (uint256); function saleState() external view returns (SaleState); function tokenOfOwnerByIndex(address owner, uint256 index) external view override returns (uint256); function getTokenIdAndType( address _wallet, uint256 _index ) external view returns (uint256 tokenId, uint256 typeVesting); function getTokenIdsForWallet(address _wallet) external view returns (uint256[] memory); function MAX_SUPPLY_PRESALE() external view returns (uint256); /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= WITHDRAW OWNER =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= */ function withdrawFunds() external; function withdrawToken(address _token) external; }
{ "optimizer": { "enabled": true, "runs": 250 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IPresaleCvgWl","name":"_presaleWl","type":"address"},{"internalType":"contract IPresaleCvgSeed","name":"_presaleSeed","type":"address"},{"internalType":"contract IboInterface","name":"_ibo","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":"MAX_SUPPLY_DAO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY_TEAM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_GWEI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"amountReleasedIdIbo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"amountReleasedIdSeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"amountReleasedIdWl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cvg","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"enum VestingCvg.VestingType","name":"_vestingType","type":"uint8"}],"name":"getInfoVestingTokenId","outputs":[{"components":[{"internalType":"uint256","name":"amountReleasable","type":"uint256"},{"internalType":"uint256","name":"totalCvg","type":"uint256"},{"internalType":"uint256","name":"amountRedeemed","type":"uint256"}],"internalType":"struct VestingCvg.InfoVestingTokenId","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum VestingCvg.VestingType","name":"_vestingType","type":"uint8"}],"name":"getTotalReleasedScheduleId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ibo","outputs":[{"internalType":"contract IboInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleSeed","outputs":[{"internalType":"contract IPresaleCvgSeed","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleWl","outputs":[{"internalType":"contract IPresaleCvgWl","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"releaseIbo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"releaseSeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTeam","type":"bool"}],"name":"releaseTeamOrDao","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"releaseWl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_cvg","type":"address"}],"name":"setVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWhitelistedDao","type":"address"}],"name":"setWhitelistDao","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWhitelistedTeam","type":"address"}],"name":"setWhitelistTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"state","outputs":[{"internalType":"enum VestingCvg.State","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum VestingCvg.VestingType","name":"","type":"uint8"}],"name":"vestingSchedules","outputs":[{"internalType":"uint80","name":"daysBeforeCliff","type":"uint80"},{"internalType":"uint80","name":"daysAfterCliff","type":"uint80"},{"internalType":"uint96","name":"dropCliff","type":"uint96"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"totalReleased","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistedDao","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistedTeam","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200203d3803806200203d833981016040819052620000349162000112565b6200003f3362000082565b600280546001600160a01b039485166001600160a01b03199182161790915560038054938516938216939093179092556004805491909316911617905562000166565b600180546001600160a01b0319169055620000a981620000ac602090811b620016da17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000a957600080fd5b6000806000606084860312156200012857600080fd5b83516200013581620000fc565b60208501519093506200014881620000fc565b60408501519092506200015b81620000fc565b809150509250925092565b611ec780620001766000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806391fa50cc1161010f578063d8e6f063116100a2578063f0130f3911610071578063f0130f39146104af578063f2fde38b146104c2578063f8ff27ca146104d5578063fdc66991146104e857600080fd5b8063d8e6f0631461046f578063e1e2da2014610482578063e30c397814610495578063e6fd48bc146104a657600080fd5b8063c73cdb3d116100de578063c73cdb3d14610418578063ce51b7b21461042a578063d480fdad1461043c578063d73626df1461045c57600080fd5b806391fa50cc1461033c57806398998b3e1461034f578063b4a0dc0114610362578063c19d93fb146103f757600080fd5b80635c94cb1f11610187578063715018a611610156578063715018a61461031157806379ba509714610319578063863e76db146103215780638da5cb5b1461032b57600080fd5b80635c94cb1f146102cb57806363cb7b6c146102d6578063671cf8f3146102de5780636f6ff3bc146102fe57600080fd5b806339209df0116101c357806339209df01461025d5780633f64a6ee14610270578063493aadfa146102835780635a005887146102b857600080fd5b806312cb9668146101ea5780631e51daee1461021d578063333ef44514610232575b600080fd5b61020a6101f8366004611bd0565b600c6020526000908152604090205481565b6040519081526020015b60405180910390f35b61023061022b366004611bf7565b6104fb565b005b600754610245906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b600454610245906001600160a01b031681565b600554610245906001600160a01b031681565b610296610291366004611c2f565b610698565b6040805182518152602080840151908201529181015190820152606001610214565b6102306102c6366004611bd0565b6106f0565b61020a633b9aca0081565b6102306108ce565b61020a6102ec366004611bd0565b600a6020526000908152604090205481565b61023061030c366004611c70565b610957565b6102306111ff565b610230611213565b61020a6201518081565b6000546001600160a01b0316610245565b61023061034a366004611bd0565b61128d565b61023061035d366004611bd0565b611431565b6103b6610370366004611c8d565b6009602052600090815260409020805460018201546002909201546001600160501b0380831693600160501b840490911692600160a01b90046001600160601b03169185565b604080516001600160501b0396871681529590941660208601526001600160601b03909216928401929092526060830191909152608082015260a001610214565b60015461040b90600160a01b900460ff1681565b6040516102149190611cbe565b61020a6a0a8beae28cb4d5c4c0000081565b61020a6a0bc98e0c42e83a3640000081565b61020a61044a366004611bd0565b600b6020526000908152604090205481565b600654610245906001600160a01b031681565b61020a61047d366004611c8d565b6115d3565b610230610490366004611c70565b611615565b6001546001600160a01b0316610245565b61020a60085481565b600254610245906001600160a01b031681565b6102306104d0366004611c70565b61163f565b6102306104e3366004611c70565b6116b0565b600354610245906001600160a01b031681565b6000808215610556576006546001600160a01b0316331461054e5760405162461bcd60e51b81526020600482015260086024820152674e4f545f5445414d60c01b60448201526064015b60405180910390fd5b50600361059e565b6007546001600160a01b0316331461059a5760405162461bcd60e51b81526020600482015260076024820152664e4f545f44414f60c81b6044820152606401610545565b5060045b6105a960008261172a565b509092505060008290036105cf5760405162461bcd60e51b815260040161054590611ce6565b81600960008360048111156105e6576105e6611ca8565b60048111156105f7576105f7611ca8565b815260200190815260200160002060020160008282546106179190611d24565b909155505060055460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044015b6020604051808303816000875af115801561066e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106929190611d37565b50505050565b6106bc60405180606001604052806000815260200160008152602001600081525090565b60008060006106cb868661172a565b6040805160608101825293845260208401929092529082015293505050505b92915050565b600480546040516331a9108f60e11b8152918201839052829133916001600160a01b031690636352211e90602401602060405180830381865afa15801561073b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075f9190611d54565b6001600160a01b0316146107a15760405162461bcd60e51b81526020600482015260096024820152681393d517d3d5d3915160ba1b6044820152606401610545565b6002600154600160a01b900460ff1660028111156107c1576107c1611ca8565b146108015760405162461bcd60e51b815260206004820152601060248201526f2b22a9aa24a723afa727aa2fa7a822a760811b6044820152606401610545565b600061080e83600261172a565b50509050806000036108325760405162461bcd60e51b815260040161054590611ce6565b6002600090815260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c5805483929061086f908490611d24565b90915550506000838152600c602052604081208054839290610892908490611d24565b909155505060055460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb9060440161064f565b6108d661198d565b60018054600160a01b900460ff1660028111156108f5576108f5611ca8565b146109425760405162461bcd60e51b815260206004820152601660248201527f56455354494e475f414c52454144595f4f50454e4544000000000000000000006044820152606401610545565b6001805460ff60a01b1916600160a11b179055565b61095f61198d565b6000600154600160a01b900460ff16600281111561097f5761097f611ca8565b146109c25760405162461bcd60e51b8152602060048201526013602482015272159154d5125391d7d053149150511657d4d155606a1b6044820152606401610545565b6001805460ff60a01b1916600160a01b179055600380546040805163301fa6a960e11b815290516001600160a01b039092169163603f4d52916004808201926020929091908290030181865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190611d71565b6003811115610a5557610a55611ca8565b148015610ae8575060028060009054906101000a90046001600160a01b03166001600160a01b031663603f4d526040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad59190611d92565b6002811115610ae657610ae6611ca8565b145b610b345760405162461bcd60e51b815260206004820152601a60248201527f50524553414c455f524f554e445f4e4f545f46494e49534845440000000000006044820152606401610545565b426008556003546040805163d14f2ff160e01b815290516000926001600160a01b03169163d14f2ff19160048083019260209291908290030181865afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba69190611db3565b6040805160a081018252607881526101c260208083019182526032838501908152606084018681526000608086018181528180526009855295517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054965194516001600160601b0316600160a01b026001600160a01b036001600160501b03968716600160501b026001600160a01b0319909916969093169590951796909617811693909317909455517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6c5592517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6d55600254845163abcae5d560e01b815294519596509194919092169263abcae5d59260048083019391928290030181865afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfd9190611db3565b6040805160a0810182526000808252605a602080840191825261014a8486019081526060850187815260808601858152600186526009845295517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a368054955193516001600160601b0316600160a01b026001600160a01b036001600160501b03958616600160501b026001600160a01b031990981695909316949094179590951781169290921790935591517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a375592517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a38556004805485516349906b1f60e11b8152955196975092959290911693639320d63e9381830193909290918290030181865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190611db3565b6040805160a080820183526000808352603c60208085019182528486018381526060808701898152608080890187815260028852600980875299517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c38054985196516001600160601b0316600160a01b026001600160a01b036001600160501b03988916600160501b026001600160a01b0319909b169890931697909717989098171694909417909555517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c45590517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c5558651948501875260b4855261021c918501919091526032958401959095526a0a8beae28cb4d5c4c000009483018590528201819052939450919260038152602080820192909252604090810160009081208451815486860151878601516001600160601b0316600160a01b026001600160a01b036001600160501b03928316600160501b026001600160a01b0319909416929094169190911791909117919091161781556060808601516001830155608095860151600290920191909155825160a08101845282815261021c948101949094526032928401929092526a0bc98e0c42e83a364000009183018290529282018390529160099060048081111561105157611051611ca8565b815260208082019290925260409081016000208351815493850151928501516001600160601b0316600160a01b026001600160a01b036001600160501b03948516600160501b026001600160a01b0319909616949092169390931793909317831691909117815560608301516001820155608090920151600290920191909155861661110a5760405162461bcd60e51b81526020600482015260086024820152674356475f5a45524f60c01b6044820152606401610545565b600580546001600160a01b0319166001600160a01b0388161790558082846111328789611d24565b61113c9190611d24565b6111469190611d24565b6111509190611d24565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190611db3565b10156111f75760405162461bcd60e51b815260206004820152600e60248201526d4e4f545f454e4f5547485f43564760901b6044820152606401610545565b505050505050565b61120761198d565b61121160006119e7565b565b60015433906001600160a01b031681146112815760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610545565b61128a816119e7565b50565b6002546040516331a9108f60e11b815260048101839052829133916001600160a01b0390911690636352211e90602401602060405180830381865afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fe9190611d54565b6001600160a01b0316146113405760405162461bcd60e51b81526020600482015260096024820152681393d517d3d5d3915160ba1b6044820152606401610545565b6002600154600160a01b900460ff16600281111561136057611360611ca8565b146113a05760405162461bcd60e51b815260206004820152601060248201526f2b22a9aa24a723afa727aa2fa7a822a760811b6044820152606401610545565b60006113ad83600161172a565b50509050806000036113d15760405162461bcd60e51b815260040161054590611ce6565b6001600090815260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a38805483929061140e908490611d24565b90915550506000838152600b602052604081208054839290610892908490611d24565b6003546040516331a9108f60e11b815260048101839052829133916001600160a01b0390911690636352211e90602401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190611d54565b6001600160a01b0316146114e45760405162461bcd60e51b81526020600482015260096024820152681393d517d3d5d3915160ba1b6044820152606401610545565b6002600154600160a01b900460ff16600281111561150457611504611ca8565b146115445760405162461bcd60e51b815260206004820152601060248201526f2b22a9aa24a723afa727aa2fa7a822a760811b6044820152606401610545565b600061155183600061172a565b50509050806000036115755760405162461bcd60e51b815260040161054590611ce6565b600080805260096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6d80548392906115b0908490611d24565b90915550506000838152600a602052604081208054839290610892908490611d24565b6000600960008360048111156115eb576115eb611ca8565b60048111156115fc576115fc611ca8565b8152602001908152602001600020600201549050919050565b61161d61198d565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b61164761198d565b600180546001600160a01b0383166001600160a01b031990911681179091556116786000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6116b861198d565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080808084600481111561174157611741611ca8565b036117cf57506000848152600a602052604090819020546003549151635979d73d60e11b81526004810187905290916001600160a01b03169063b2f3ae7a906024015b6040805180830381865afa1580156117a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c49190611e29565b602001519150611979565b60018460048111156117e3576117e3611ca8565b0361182a57506000848152600b60205260409081902054600254915163afa1c81160e01b81526004810187905290916001600160a01b03169063afa1c81190602401611784565b600284600481111561183e5761183e611ca8565b036118c857506000848152600c60205260409081902054600480549251632a45731360e21b815290810187905290916001600160a01b03169063a915cc4c90602401602060405180830381865afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611db3565b9150611979565b60038460048111156118dc576118dc611ca8565b0361192f57600960008560048111156118f7576118f7611ca8565b600481111561190857611908611ca8565b81526020019081526020016000206002015490506a0a8beae28cb4d5c4c000009150611979565b6009600085600481111561194557611945611ca8565b600481111561195657611956611ca8565b81526020019081526020016000206002015490506a0bc98e0c42e83a3640000091505b611984848383611a00565b92509250925092565b6000546001600160a01b031633146112115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610545565b600180546001600160a01b031916905561128a816116da565b6000806201518060096000876004811115611a1d57611a1d611ca8565b6004811115611a2e57611a2e611ca8565b8152602081019190915260400160002054611a5291906001600160501b0316611e45565b600854611a5f9190611d24565b905060006201518060096000886004811115611a7d57611a7d611ca8565b6004811115611a8e57611a8e611ca8565b8152602081019190915260400160002054611ab99190600160501b90046001600160501b0316611e45565b611ac39083611d24565b905081421115611bc75780421115611ae657611adf8486611e5c565b9250611bc7565b6000611af28383611e5c565b633b9aca00611b014285611e5c565b611b0b9190611e45565b611b159190611e6f565b905060006103e8600960008a6004811115611b3257611b32611ca8565b6004811115611b4357611b43611ca8565b8152602081019190915260400160002054611b6e90600160a01b90046001600160601b031689611e45565b611b789190611e6f565b90506000611b868289611e5c565b905086633b9aca0082611b998683611e5c565b611ba39190611e45565b611bad9190611e6f565b611bb79084611d24565b611bc19190611e5c565b95505050505b50509392505050565b600060208284031215611be257600080fd5b5035919050565b801515811461128a57600080fd5b600060208284031215611c0957600080fd5b8135611c1481611be9565b9392505050565b803560058110611c2a57600080fd5b919050565b60008060408385031215611c4257600080fd5b82359150611c5260208401611c1b565b90509250929050565b6001600160a01b038116811461128a57600080fd5b600060208284031215611c8257600080fd5b8135611c1481611c5b565b600060208284031215611c9f57600080fd5b611c1482611c1b565b634e487b7160e01b600052602160045260246000fd5b6020810160038310611ce057634e487b7160e01b600052602160045260246000fd5b91905290565b6020808252600e908201526d4e4f545f52454c45415341424c4560901b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106ea576106ea611d0e565b600060208284031215611d4957600080fd5b8151611c1481611be9565b600060208284031215611d6657600080fd5b8151611c1481611c5b565b600060208284031215611d8357600080fd5b815160048110611c1457600080fd5b600060208284031215611da457600080fd5b815160038110611c1457600080fd5b600060208284031215611dc557600080fd5b5051919050565b600060408284031215611dde57600080fd5b6040516040810181811067ffffffffffffffff82111715611e0f57634e487b7160e01b600052604160045260246000fd5b604052825181526020928301519281019290925250919050565b600060408284031215611e3b57600080fd5b611c148383611dcc565b80820281158282048414176106ea576106ea611d0e565b818103818111156106ea576106ea611d0e565b600082611e8c57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220635fd3b2929731af40375d4dd52ec7820aebece709f4088960b88e7ce68ca4d764736f6c63430008110033000000000000000000000000c9740aa94a8a02a3373f5f1b493d7e10d99ae81100000000000000000000000006feb7a047e540b8d92620a2c13ec96e1ff5e19b0000000000000000000000005f02134c35449d9b6505723a56b02581356320fb
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806391fa50cc1161010f578063d8e6f063116100a2578063f0130f3911610071578063f0130f39146104af578063f2fde38b146104c2578063f8ff27ca146104d5578063fdc66991146104e857600080fd5b8063d8e6f0631461046f578063e1e2da2014610482578063e30c397814610495578063e6fd48bc146104a657600080fd5b8063c73cdb3d116100de578063c73cdb3d14610418578063ce51b7b21461042a578063d480fdad1461043c578063d73626df1461045c57600080fd5b806391fa50cc1461033c57806398998b3e1461034f578063b4a0dc0114610362578063c19d93fb146103f757600080fd5b80635c94cb1f11610187578063715018a611610156578063715018a61461031157806379ba509714610319578063863e76db146103215780638da5cb5b1461032b57600080fd5b80635c94cb1f146102cb57806363cb7b6c146102d6578063671cf8f3146102de5780636f6ff3bc146102fe57600080fd5b806339209df0116101c357806339209df01461025d5780633f64a6ee14610270578063493aadfa146102835780635a005887146102b857600080fd5b806312cb9668146101ea5780631e51daee1461021d578063333ef44514610232575b600080fd5b61020a6101f8366004611bd0565b600c6020526000908152604090205481565b6040519081526020015b60405180910390f35b61023061022b366004611bf7565b6104fb565b005b600754610245906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b600454610245906001600160a01b031681565b600554610245906001600160a01b031681565b610296610291366004611c2f565b610698565b6040805182518152602080840151908201529181015190820152606001610214565b6102306102c6366004611bd0565b6106f0565b61020a633b9aca0081565b6102306108ce565b61020a6102ec366004611bd0565b600a6020526000908152604090205481565b61023061030c366004611c70565b610957565b6102306111ff565b610230611213565b61020a6201518081565b6000546001600160a01b0316610245565b61023061034a366004611bd0565b61128d565b61023061035d366004611bd0565b611431565b6103b6610370366004611c8d565b6009602052600090815260409020805460018201546002909201546001600160501b0380831693600160501b840490911692600160a01b90046001600160601b03169185565b604080516001600160501b0396871681529590941660208601526001600160601b03909216928401929092526060830191909152608082015260a001610214565b60015461040b90600160a01b900460ff1681565b6040516102149190611cbe565b61020a6a0a8beae28cb4d5c4c0000081565b61020a6a0bc98e0c42e83a3640000081565b61020a61044a366004611bd0565b600b6020526000908152604090205481565b600654610245906001600160a01b031681565b61020a61047d366004611c8d565b6115d3565b610230610490366004611c70565b611615565b6001546001600160a01b0316610245565b61020a60085481565b600254610245906001600160a01b031681565b6102306104d0366004611c70565b61163f565b6102306104e3366004611c70565b6116b0565b600354610245906001600160a01b031681565b6000808215610556576006546001600160a01b0316331461054e5760405162461bcd60e51b81526020600482015260086024820152674e4f545f5445414d60c01b60448201526064015b60405180910390fd5b50600361059e565b6007546001600160a01b0316331461059a5760405162461bcd60e51b81526020600482015260076024820152664e4f545f44414f60c81b6044820152606401610545565b5060045b6105a960008261172a565b509092505060008290036105cf5760405162461bcd60e51b815260040161054590611ce6565b81600960008360048111156105e6576105e6611ca8565b60048111156105f7576105f7611ca8565b815260200190815260200160002060020160008282546106179190611d24565b909155505060055460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044015b6020604051808303816000875af115801561066e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106929190611d37565b50505050565b6106bc60405180606001604052806000815260200160008152602001600081525090565b60008060006106cb868661172a565b6040805160608101825293845260208401929092529082015293505050505b92915050565b600480546040516331a9108f60e11b8152918201839052829133916001600160a01b031690636352211e90602401602060405180830381865afa15801561073b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075f9190611d54565b6001600160a01b0316146107a15760405162461bcd60e51b81526020600482015260096024820152681393d517d3d5d3915160ba1b6044820152606401610545565b6002600154600160a01b900460ff1660028111156107c1576107c1611ca8565b146108015760405162461bcd60e51b815260206004820152601060248201526f2b22a9aa24a723afa727aa2fa7a822a760811b6044820152606401610545565b600061080e83600261172a565b50509050806000036108325760405162461bcd60e51b815260040161054590611ce6565b6002600090815260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c5805483929061086f908490611d24565b90915550506000838152600c602052604081208054839290610892908490611d24565b909155505060055460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb9060440161064f565b6108d661198d565b60018054600160a01b900460ff1660028111156108f5576108f5611ca8565b146109425760405162461bcd60e51b815260206004820152601660248201527f56455354494e475f414c52454144595f4f50454e4544000000000000000000006044820152606401610545565b6001805460ff60a01b1916600160a11b179055565b61095f61198d565b6000600154600160a01b900460ff16600281111561097f5761097f611ca8565b146109c25760405162461bcd60e51b8152602060048201526013602482015272159154d5125391d7d053149150511657d4d155606a1b6044820152606401610545565b6001805460ff60a01b1916600160a01b179055600380546040805163301fa6a960e11b815290516001600160a01b039092169163603f4d52916004808201926020929091908290030181865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190611d71565b6003811115610a5557610a55611ca8565b148015610ae8575060028060009054906101000a90046001600160a01b03166001600160a01b031663603f4d526040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad59190611d92565b6002811115610ae657610ae6611ca8565b145b610b345760405162461bcd60e51b815260206004820152601a60248201527f50524553414c455f524f554e445f4e4f545f46494e49534845440000000000006044820152606401610545565b426008556003546040805163d14f2ff160e01b815290516000926001600160a01b03169163d14f2ff19160048083019260209291908290030181865afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba69190611db3565b6040805160a081018252607881526101c260208083019182526032838501908152606084018681526000608086018181528180526009855295517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054965194516001600160601b0316600160a01b026001600160a01b036001600160501b03968716600160501b026001600160a01b0319909916969093169590951796909617811693909317909455517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6c5592517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6d55600254845163abcae5d560e01b815294519596509194919092169263abcae5d59260048083019391928290030181865afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfd9190611db3565b6040805160a0810182526000808252605a602080840191825261014a8486019081526060850187815260808601858152600186526009845295517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a368054955193516001600160601b0316600160a01b026001600160a01b036001600160501b03958616600160501b026001600160a01b031990981695909316949094179590951781169290921790935591517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a375592517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a38556004805485516349906b1f60e11b8152955196975092959290911693639320d63e9381830193909290918290030181865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190611db3565b6040805160a080820183526000808352603c60208085019182528486018381526060808701898152608080890187815260028852600980875299517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c38054985196516001600160601b0316600160a01b026001600160a01b036001600160501b03988916600160501b026001600160a01b0319909b169890931697909717989098171694909417909555517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c45590517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c5558651948501875260b4855261021c918501919091526032958401959095526a0a8beae28cb4d5c4c000009483018590528201819052939450919260038152602080820192909252604090810160009081208451815486860151878601516001600160601b0316600160a01b026001600160a01b036001600160501b03928316600160501b026001600160a01b0319909416929094169190911791909117919091161781556060808601516001830155608095860151600290920191909155825160a08101845282815261021c948101949094526032928401929092526a0bc98e0c42e83a364000009183018290529282018390529160099060048081111561105157611051611ca8565b815260208082019290925260409081016000208351815493850151928501516001600160601b0316600160a01b026001600160a01b036001600160501b03948516600160501b026001600160a01b0319909616949092169390931793909317831691909117815560608301516001820155608090920151600290920191909155861661110a5760405162461bcd60e51b81526020600482015260086024820152674356475f5a45524f60c01b6044820152606401610545565b600580546001600160a01b0319166001600160a01b0388161790558082846111328789611d24565b61113c9190611d24565b6111469190611d24565b6111509190611d24565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190611db3565b10156111f75760405162461bcd60e51b815260206004820152600e60248201526d4e4f545f454e4f5547485f43564760901b6044820152606401610545565b505050505050565b61120761198d565b61121160006119e7565b565b60015433906001600160a01b031681146112815760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610545565b61128a816119e7565b50565b6002546040516331a9108f60e11b815260048101839052829133916001600160a01b0390911690636352211e90602401602060405180830381865afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fe9190611d54565b6001600160a01b0316146113405760405162461bcd60e51b81526020600482015260096024820152681393d517d3d5d3915160ba1b6044820152606401610545565b6002600154600160a01b900460ff16600281111561136057611360611ca8565b146113a05760405162461bcd60e51b815260206004820152601060248201526f2b22a9aa24a723afa727aa2fa7a822a760811b6044820152606401610545565b60006113ad83600161172a565b50509050806000036113d15760405162461bcd60e51b815260040161054590611ce6565b6001600090815260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a38805483929061140e908490611d24565b90915550506000838152600b602052604081208054839290610892908490611d24565b6003546040516331a9108f60e11b815260048101839052829133916001600160a01b0390911690636352211e90602401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190611d54565b6001600160a01b0316146114e45760405162461bcd60e51b81526020600482015260096024820152681393d517d3d5d3915160ba1b6044820152606401610545565b6002600154600160a01b900460ff16600281111561150457611504611ca8565b146115445760405162461bcd60e51b815260206004820152601060248201526f2b22a9aa24a723afa727aa2fa7a822a760811b6044820152606401610545565b600061155183600061172a565b50509050806000036115755760405162461bcd60e51b815260040161054590611ce6565b600080805260096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6d80548392906115b0908490611d24565b90915550506000838152600a602052604081208054839290610892908490611d24565b6000600960008360048111156115eb576115eb611ca8565b60048111156115fc576115fc611ca8565b8152602001908152602001600020600201549050919050565b61161d61198d565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b61164761198d565b600180546001600160a01b0383166001600160a01b031990911681179091556116786000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6116b861198d565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080808084600481111561174157611741611ca8565b036117cf57506000848152600a602052604090819020546003549151635979d73d60e11b81526004810187905290916001600160a01b03169063b2f3ae7a906024015b6040805180830381865afa1580156117a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c49190611e29565b602001519150611979565b60018460048111156117e3576117e3611ca8565b0361182a57506000848152600b60205260409081902054600254915163afa1c81160e01b81526004810187905290916001600160a01b03169063afa1c81190602401611784565b600284600481111561183e5761183e611ca8565b036118c857506000848152600c60205260409081902054600480549251632a45731360e21b815290810187905290916001600160a01b03169063a915cc4c90602401602060405180830381865afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611db3565b9150611979565b60038460048111156118dc576118dc611ca8565b0361192f57600960008560048111156118f7576118f7611ca8565b600481111561190857611908611ca8565b81526020019081526020016000206002015490506a0a8beae28cb4d5c4c000009150611979565b6009600085600481111561194557611945611ca8565b600481111561195657611956611ca8565b81526020019081526020016000206002015490506a0bc98e0c42e83a3640000091505b611984848383611a00565b92509250925092565b6000546001600160a01b031633146112115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610545565b600180546001600160a01b031916905561128a816116da565b6000806201518060096000876004811115611a1d57611a1d611ca8565b6004811115611a2e57611a2e611ca8565b8152602081019190915260400160002054611a5291906001600160501b0316611e45565b600854611a5f9190611d24565b905060006201518060096000886004811115611a7d57611a7d611ca8565b6004811115611a8e57611a8e611ca8565b8152602081019190915260400160002054611ab99190600160501b90046001600160501b0316611e45565b611ac39083611d24565b905081421115611bc75780421115611ae657611adf8486611e5c565b9250611bc7565b6000611af28383611e5c565b633b9aca00611b014285611e5c565b611b0b9190611e45565b611b159190611e6f565b905060006103e8600960008a6004811115611b3257611b32611ca8565b6004811115611b4357611b43611ca8565b8152602081019190915260400160002054611b6e90600160a01b90046001600160601b031689611e45565b611b789190611e6f565b90506000611b868289611e5c565b905086633b9aca0082611b998683611e5c565b611ba39190611e45565b611bad9190611e6f565b611bb79084611d24565b611bc19190611e5c565b95505050505b50509392505050565b600060208284031215611be257600080fd5b5035919050565b801515811461128a57600080fd5b600060208284031215611c0957600080fd5b8135611c1481611be9565b9392505050565b803560058110611c2a57600080fd5b919050565b60008060408385031215611c4257600080fd5b82359150611c5260208401611c1b565b90509250929050565b6001600160a01b038116811461128a57600080fd5b600060208284031215611c8257600080fd5b8135611c1481611c5b565b600060208284031215611c9f57600080fd5b611c1482611c1b565b634e487b7160e01b600052602160045260246000fd5b6020810160038310611ce057634e487b7160e01b600052602160045260246000fd5b91905290565b6020808252600e908201526d4e4f545f52454c45415341424c4560901b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106ea576106ea611d0e565b600060208284031215611d4957600080fd5b8151611c1481611be9565b600060208284031215611d6657600080fd5b8151611c1481611c5b565b600060208284031215611d8357600080fd5b815160048110611c1457600080fd5b600060208284031215611da457600080fd5b815160038110611c1457600080fd5b600060208284031215611dc557600080fd5b5051919050565b600060408284031215611dde57600080fd5b6040516040810181811067ffffffffffffffff82111715611e0f57634e487b7160e01b600052604160045260246000fd5b604052825181526020928301519281019290925250919050565b600060408284031215611e3b57600080fd5b611c148383611dcc565b80820281158282048414176106ea576106ea611d0e565b818103818111156106ea576106ea611d0e565b600082611e8c57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220635fd3b2929731af40375d4dd52ec7820aebece709f4088960b88e7ce68ca4d764736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c9740aa94a8a02a3373f5f1b493d7e10d99ae81100000000000000000000000006feb7a047e540b8d92620a2c13ec96e1ff5e19b0000000000000000000000005f02134c35449d9b6505723a56b02581356320fb
-----Decoded View---------------
Arg [0] : _presaleWl (address): 0xc9740aa94A8A02a3373f5F1b493D7e10d99AE811
Arg [1] : _presaleSeed (address): 0x06FEB7a047e540B8d92620a2c13Ec96e1FF5E19b
Arg [2] : _ibo (address): 0x5F02134C35449D9b6505723A56b02581356320fB
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c9740aa94a8a02a3373f5f1b493d7e10d99ae811
Arg [1] : 00000000000000000000000006feb7a047e540b8d92620a2c13ec96e1ff5e19b
Arg [2] : 0000000000000000000000005f02134c35449d9b6505723a56b02581356320fb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.000867 | 24,951,779.7124 | $21,632.94 |
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.