Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 154 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 20460758 | 120 days ago | IN | 0 ETH | 0.00630869 | ||||
Claim | 20460758 | 120 days ago | IN | 0 ETH | 0.00630869 | ||||
Claim | 20460758 | 120 days ago | IN | 0 ETH | 0.00630869 | ||||
Claim | 20371529 | 132 days ago | IN | 0 ETH | 0.00061704 | ||||
Claim | 20371529 | 132 days ago | IN | 0 ETH | 0.00061704 | ||||
Claim | 20299241 | 142 days ago | IN | 0 ETH | 0.00022078 | ||||
Claim | 20248761 | 149 days ago | IN | 0 ETH | 0.00047825 | ||||
Claim | 20207713 | 155 days ago | IN | 0 ETH | 0.00035077 | ||||
Claim | 20195207 | 157 days ago | IN | 0 ETH | 0.00036329 | ||||
Claim | 20194182 | 157 days ago | IN | 0 ETH | 0.00031932 | ||||
Transfer Ownersh... | 20194033 | 157 days ago | IN | 0 ETH | 0.00004548 | ||||
Claim | 20193871 | 157 days ago | IN | 0 ETH | 0.00028082 | ||||
Claim | 20193868 | 157 days ago | IN | 0 ETH | 0.00031527 | ||||
Claim | 20193760 | 157 days ago | IN | 0 ETH | 0.00025361 | ||||
Claim | 20193749 | 157 days ago | IN | 0 ETH | 0.00032057 | ||||
Claim | 20193598 | 157 days ago | IN | 0 ETH | 0.00032352 | ||||
Claim | 20193498 | 157 days ago | IN | 0 ETH | 0.00032362 | ||||
Claim | 20193479 | 157 days ago | IN | 0 ETH | 0.00031573 | ||||
Claim | 20193471 | 157 days ago | IN | 0 ETH | 0.0003156 | ||||
Claim | 20193336 | 157 days ago | IN | 0 ETH | 0.00030641 | ||||
Claim | 20193319 | 157 days ago | IN | 0 ETH | 0.00032459 | ||||
Claim | 20193306 | 157 days ago | IN | 0 ETH | 0.00021444 | ||||
Claim | 20193302 | 157 days ago | IN | 0 ETH | 0.00090067 | ||||
Claim | 20193268 | 157 days ago | IN | 0 ETH | 0.00013528 | ||||
Claim | 20193254 | 157 days ago | IN | 0 ETH | 0.00029924 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Presale
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-06-24 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. * * ==== Security Considerations * * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be * considered as an intention to spend the allowance in any specific way. The second is that because permits have * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be * generally recommended is: * * ```solidity * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} * doThing(..., value); * } * * function doThing(..., uint256 value) public { * token.safeTransferFrom(msg.sender, address(this), value); * ... * } * ``` * * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also * {SafeERC20-safeTransferFrom}). * * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so * contracts should have entry points that don't rely on permit. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. * * CAUTION: See Security Considerations above. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @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 or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * 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. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @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`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; /** * @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; /** * @dev An operation with an ERC20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. */ function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); _callOptionalReturn(token, approvalCall); } } /** * @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); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation(address(token)); } } /** * @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). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // 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 cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: IPresale.sol // Website: https://genesisdao.io/ // X: https://x.com/0xGenesisDAO // Discord: https://discord.gg/genesisdao // & // (&&&&&&&&&&&&&&&&&&&&&&&&&&&* // &&&&&&&&&&&&&&&&&&&&&@,,@@@@&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&,,,,,,,,,*@@@&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&,,,,,,,,,,,@@@@@@@&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&@,,,,,,,,,,,@@@@@@@@@@&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&@,,,,,,,,,,,*@@@@@@@@@@&&&&&&&&&@,,,,,#@@@@&&&&&& // &&&&&&&&&&&&#,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&&*,,,,,,,,,,,,@@@@&&&&&& // &&&&&&&&&@..,,.,,,,,@@@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,,,,,,@@@@&&&&&&& // #&&&&&&&&&&@..,,,,,%@@@@@@@@&&&&&&&&&@,,,,,,,,,,,,@@,,,,,,,,@@@@&&&&&&&& // &&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&&..,,,,,,,,,,@@@@@@@@,,,,,,,@@@@&&&&&&&&&& // &&&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&@..,,,,,@@@@@@@@@@@@@,,,,,,,@@@@&&&&&&&&&&* // &&&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&@@@@@@@@@@@@@@&&&&&&@,,,,,,,@@@@&&&&&&&&&&& // &&&&&&&&&&&&&&@..,,,,@@@@@@&&&&&&&&&&&&@@@@@@&&&&&&&&&&@@,,,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@@@@@@@@//*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@@@@@@@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&&@@@/**,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*@@@@@@@@@&&&&&&&&&&&&& // &&&&&&&&&&&&&&&@.....,.,,@@@@@@@@@@@@@@@@@@@@@@@@@@&&%@@@@@@/*,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@....,,,,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/**,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@....,,,,@@@@&&&&&&&&&&&&&&&&&&&&&&&&&&&&@,,,,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@....,,,,@@@@&&&&&&&&&@,,,,,@@@@&&&&&&&&&@,,,,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&@....,,,,@@@@&&&&&,,,,,,,,,,,,@@@@&&&&&&&@,,,,,,,@@@@&&&&&&&&&&& // &&&&&&&&&&&&&@....,,,,@@@@,,,,,,,,,,,,,,@@@@@@@&&&&&&&@,,,,,,,@@@@&&&&&&&&&&* // &&&&&&&&&&&&@....,,,,,,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&,,,,,,,,@@@@&&&&&&&&&& // /&&&&&&&&&&@....,,,,,,,,,,,@@@@@@@@@@@@&&&&&&&&@,,,,,,,,,,,,@@@@&&&&&&&& // &&&&&&&&&@@....,,,,,@@@@@@@@@@@@&&&&&&&&&,,,,,,,,,,,,,@@@@@@@@&&&&&&& // &&&&&&&&&@@@@@@@@@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&& // &&&&&&&&&&@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&..,,,,,,,,,,(@@@@@@@@@@&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&@...,,,,,,@@@@@@@@@@&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&@@@@@@@@@@@@@@@@&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&@@@@@@@@@&&&&&&&&&&&&&&&&&& // *&&&&&&&&&&&&&&&&&&&&&&&&&&& interface IPresale { /** * @dev Emitted when an unauthorized address attempts an action requiring specific permissions. */ error Unauthorized(); /** * @dev Emitted when an action is performed in an invalid state. * @param currentState The current state of the contract. */ error InvalidState(uint8 currentState); /** * @dev Emitted when attempting to finalize a presale that has not reached its soft cap. */ error SoftCapNotReached(); /** * @dev Emitted when a purchase attempt exceeds the presale's hard cap. */ error HardCapExceed(); /** * @dev Emitted when user with no contribution attempts to claim tokens. */ error NotClaimable(); /** * @dev Emitted when a purchase or refund attempt is made outside the presale period. */ error NotInPurchasePeriod(); /** * @dev Emitted when a purchase amount is below the minimum allowed. */ error PurchaseBelowMinimum(); /** * @dev Emitted when a participant's purchase would exceed the maximum allowed contribution. */ error PurchaseLimitExceed(); /** * @dev Emitted when a refund is requested under conditions that do not permit refunds. */ error NotRefundable(); /** * @dev Emitted when the process of adding liquidity to a liquidity pool fails. */ error LiquificationFailed(); /** * @dev Emitted when the initialization parameters provided to the contract are invalid. */ error InvalidInitializationParameters(); /** * @dev Emitted when the pool validation parameters provided to the contract are invalid. */ error InvalidCapValue(); /** * @dev Emitted when the pool validation parameters provided to the contract are invalid. */ error InvalidLimitValue(); /** * @dev Emitted when the pool validation parameters provided to the contract are invalid. */ error InvalidLiquidityValue(); /** * @dev Emitted when the pool validation parameters provided to the contract are invalid. */ error InvalidTimestampValue(); /** * @dev Emitted when the presale contract owner deposits tokens for sale. * This is usually done before the presale starts to ensure tokens are available for purchase. * @param creator Address of the contract owner who performs the deposit. * @param amount Amount of tokens deposited. * @param timestamp Block timestamp when the deposit occurred. */ event Deposit(address indexed creator, uint256 amount, uint256 timestamp); /** * @dev Emitted for each purchase made during the presale. Tracks the buyer, the amount of ETH contributed, * and the amount of tokens purchased. * @param beneficiary Address of the participant who made the purchase. * @param contribution Amount of ETH contributed by the participant. */ event Purchase(address indexed beneficiary, uint256 contribution); /** * @dev Emitted when the presale is successfully finalized. Finalization may involve distributing tokens, * transferring raised funds to a designated wallet, and/or enabling token claim functionality. * @param creator Address of the contract owner who finalized the presale. * @param amount Total amount of ETH raised in the presale. * @param timestamp Block timestamp when the finalization occurred. */ event Finalized(address indexed creator, uint256 amount, uint256 timestamp); /** * @dev Emitted when a participant successfully claims a refund. This is typically allowed when the presale * is cancelled or does not meet its funding goals. * @param beneficiary Address of the participant receiving the refund. * @param amount Amount of wei refunded. * @param timestamp Block timestamp when the refund occurred. */ event Refund(address indexed beneficiary, uint256 amount, uint256 timestamp); /** * @dev Emitted when participants claim their purchased tokens after the presale is finalized. * @param beneficiary Address of the participant claiming tokens. * @param amount Amount of tokens claimed. * @param timestamp Block timestamp when the claim occurred. */ event TokenClaim(address indexed beneficiary, uint256 amount, uint256 timestamp); /** * @dev Emitted when the presale is cancelled by the contract owner. A cancellation may allow participants * to claim refunds for their contributions. * @param creator Address of the contract owner who cancelled the presale. * @param timestamp Block timestamp when the cancellation occurred. */ event Cancel(address indexed creator, uint256 timestamp); /** * @dev Allows for the deposit of presale tokens by the owner. * This function is intended to be called by the presale contract owner to * deposit the tokens that are to be sold during the presale. * * @return The amount of tokens deposited for the presale. */ function deposit() external returns (uint256); /** * @dev Finalizes the presale, allowing for the distribution of tokens to * participants and the withdrawal of funds raised to the beneficiary. This * function is typically called after the presale ends, assuming it meets * any predefined criteria such as minimum funding goals. * * @return A boolean value indicating whether the presale was successfully * finalized. */ function finalize() external returns (bool); /** * @dev Cancels the presale and enables the refund process for participants. * This function can be used in scenarios where the presale does not meet * its goals or if the organizer decides to cancel the event for any reason. * * @return A boolean value indicating whether the presale was successfully * cancelled. */ function cancel() external returns (bool); /** * @dev Allows participants to claim their purchased tokens after the presale * is finalized. Participants call this function to receive the tokens they * are entitled to. * * @return The amount of tokens claimed by the caller. */ function claim() external returns (uint256); /** * @dev Allows contributors to get a refund when the presale fails or is canceled. */ function unlockClaim() external; /** * @dev Enables participants to request a refund of their contribution if the * presale is cancelled or if they are otherwise eligible for a refund * according to the presale's terms. * * @return The amount of funds refunded to the caller. */ function refund() external returns (uint256); } // File: Presale.sol // Website: https://genesisdao.io/ // X: https://x.com/0xGenesisDAO // Discord: https://discord.gg/genesisdao pragma solidity ^0.8.24; // & // (&&&&&&&&&&&&&&&&&&&&&&&&&&&* // &&&&&&&&&&&&&&&&&&&&&@,,@@@@&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&,,,,,,,,,*@@@&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&,,,,,,,,,,,@@@@@@@&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&@,,,,,,,,,,,@@@@@@@@@@&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&@,,,,,,,,,,,*@@@@@@@@@@&&&&&&&&&@,,,,,#@@@@&&&&&& // &&&&&&&&&&&&#,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&&*,,,,,,,,,,,,@@@@&&&&&& // &&&&&&&&&@..,,.,,,,,@@@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,,,,,,@@@@&&&&&&& // #&&&&&&&&&&@..,,,,,%@@@@@@@@&&&&&&&&&@,,,,,,,,,,,,@@,,,,,,,,@@@@&&&&&&&& // &&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&&..,,,,,,,,,,@@@@@@@@,,,,,,,@@@@&&&&&&&&&& // &&&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&@..,,,,,@@@@@@@@@@@@@,,,,,,,@@@@&&&&&&&&&&* // &&&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&@@@@@@@@@@@@@@&&&&&&@,,,,,,,@@@@&&&&&&&&&&& // &&&&&&&&&&&&&&@..,,,,@@@@@@&&&&&&&&&&&&@@@@@@&&&&&&&&&&@@,,,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@@@@@@@@//*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@@@@@@@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&&@@@/**,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*@@@@@@@@@&&&&&&&&&&&&& // &&&&&&&&&&&&&&&@.....,.,,@@@@@@@@@@@@@@@@@@@@@@@@@@&&%@@@@@@/*,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@....,,,,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/**,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@....,,,,@@@@&&&&&&&&&&&&&&&&&&&&&&&&&&&&@,,,,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@....,,,,@@@@&&&&&&&&&@,,,,,@@@@&&&&&&&&&@,,,,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&@....,,,,@@@@&&&&&,,,,,,,,,,,,@@@@&&&&&&&@,,,,,,,@@@@&&&&&&&&&&& // &&&&&&&&&&&&&@....,,,,@@@@,,,,,,,,,,,,,,@@@@@@@&&&&&&&@,,,,,,,@@@@&&&&&&&&&&* // &&&&&&&&&&&&@....,,,,,,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&,,,,,,,,@@@@&&&&&&&&&& // /&&&&&&&&&&@....,,,,,,,,,,,@@@@@@@@@@@@&&&&&&&&@,,,,,,,,,,,,@@@@&&&&&&&& // &&&&&&&&&@@....,,,,,@@@@@@@@@@@@&&&&&&&&&,,,,,,,,,,,,,@@@@@@@@&&&&&&& // &&&&&&&&&@@@@@@@@@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&& // &&&&&&&&&&@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&..,,,,,,,,,,(@@@@@@@@@@&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&@...,,,,,,@@@@@@@@@@&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&@@@@@@@@@@@@@@@@&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&@@@@@@@@@&&&&&&&&&&&&&&&&&& // *&&&&&&&&&&&&&&&&&&&&&&&&&&& /** * @title Presale contract * @notice Create and manage a presales of an ERC20 token */ contract Presale is IPresale, Ownable { using SafeERC20 for IERC20; using Address for address payable; /// Scaling factor to maintain precision. uint256 constant SCALE = 10**18; /** * @notice Presale options * @param tokenDeposit Total tokens deposited for sale and liquidity. * @param softCap Minimum Wei to be raised to consider the presale successful. * @param max Maximum Wei contribution per address. * @param min Minimum Wei contribution per address. * @param start Start timestamp of the presale. * @param end End timestamp of the presale. * @param liquidityBps Basis points of funds raised to be allocated to liquidity. * @param launchIncreaseBps The price increase from presale to launch. * @param seederNum The amount of seeders. * @param seederPremiumBps The premium seeders will get. */ struct PresaleOptions{ uint256 tokenDeposit; uint256 softCap; uint256 hardCap; uint256 max; uint256 min; uint112 start; uint112 end; uint32 liquidityBps; uint32 launchIncreaseBps; uint256 seederRaisedWei; uint32 seederPremiumBps; } /** * @notice Presale pool * @param token Address of the token. * @param uniswapV2Router02 * @param tokenBalance Token balance in this contract * @param tokensClaimable * @param tokensLiquidity * @param weiRaised * @param weth * @param state Current state of the presale {1: Initialized, 2: Active, 3: Canceled, 4: Finalized, 5: Claimable}. * @param options PresaleOptions struct containing configuration for the presale. */ struct Pool { IERC20 token; IUniswapV2Router02 uniswapV2Router02; address routerAddress; uint256 tokenBalance; uint256 tokensClaimable; uint256 tokensLiquidity; uint256 weiRaised; address weth; uint8 state; PresaleOptions options; } mapping(address => uint256) public contributions; Pool public pool; /// @notice Canceled or NOT softcapped and expired modifier onlyRefundable() { require(pool.state == 3 || (block.timestamp > pool.options.end && pool.weiRaised < pool.options.softCap), "Presale has to be cancelled, or softcap not met during active period."); _; } /** * @param _weth Address of WETH. * @param _token Address of the presale token. * @param _uniswapV2Router02 Address of the Uniswap V2 router. * @param _options Configuration options for the presale. */ constructor (address _weth, address _token, address _uniswapV2Router02, PresaleOptions memory _options) Ownable(msg.sender) { _prevalidatePool(_options); pool.uniswapV2Router02 = IUniswapV2Router02(_uniswapV2Router02); pool.routerAddress = _uniswapV2Router02; pool.token = IERC20(_token); pool.state = 1; pool.weth = _weth; pool.options = _options; } receive() external payable { _purchase(msg.sender, msg.value); } /** * @notice Calling this function deposits tokens into the contract. Contributions are unavailable until this * function is called by the owner of the presale. * NOTE This function uses { transferFrom } method from { IERC20 } to handle token deposits into the contract, make sure to approve this contract to spend the required tokens for deposit. * @return The amount of tokens deposited. */ function deposit() external onlyOwner returns (uint256) { if(pool.state != 1) revert InvalidState(pool.state); pool.state = 2; pool.tokenBalance += pool.options.tokenDeposit; pool.tokensLiquidity = _tokensForLiquidity(); pool.tokensClaimable = _tokensForPresale(); IERC20(pool.token).safeTransferFrom(msg.sender, address(this), pool.options.tokenDeposit); emit Deposit(msg.sender, pool.options.tokenDeposit, block.timestamp); return pool.options.tokenDeposit; } /** * @notice Call this function to finalize a succesful presale. * This will allocate the share of seeder tokens for redist, and calculate the amount of ETH needed for LP. * The remaining ETH is transfered to the sender. * @return True if the finalization was successful. */ function finalize() external onlyOwner returns(bool) { if(pool.state != 2) revert InvalidState(pool.state); if(pool.weiRaised < pool.options.softCap) revert SoftCapNotReached(); require(block.timestamp > pool.options.end, "Presale still in active period"); pool.state = 4; // Calculate the tokens owed to the seed investors uint256 seederTokens = _seederTokens(); // Send seed investor tokens to owner, for further redistribution IERC20(pool.token).safeTransfer(msg.sender, seederTokens); pool.tokenBalance -= seederTokens; // Subtract the seed investor tokens from the amount allocated to the LP pool.tokensLiquidity -= seederTokens; uint256 liquidityWei = _liquidityWei(); if(pool.weiRaised < liquidityWei) revert InvalidLiquidityValue(); uint256 withdrawable = pool.weiRaised - liquidityWei; if (withdrawable > 0) payable(msg.sender).sendValue(withdrawable); // Add LP _liquify(liquidityWei, pool.tokensLiquidity); pool.tokenBalance -= pool.tokensLiquidity; emit Finalized(msg.sender, pool.weiRaised, block.timestamp); return true; } /** * @notice Call this function to cancel a presale. Calling this function withdraws deposited tokens and allows contributors * to refund their contributions. Can only cancel NOT finalized presale. * @return True if the cancellation was successful. */ function cancel() external onlyOwner returns(bool){ if(pool.state > 2) revert InvalidState(pool.state); pool.state = 3; if (pool.tokenBalance > 0) { uint256 amount = pool.tokenBalance; pool.tokenBalance = 0; IERC20(pool.token).safeTransfer(msg.sender, amount); } emit Cancel(msg.sender, block.timestamp); return true; } /** * @notice Allows the owner to extend the active period of the presale, but only while the presale is ongoing. */ function extendEndTime(uint112 end) external onlyOwner { if(block.timestamp < pool.options.start || block.timestamp > pool.options.end) revert NotInPurchasePeriod(); // Presale can only be extended during active period if(pool.state != 2) revert InvalidState(pool.state); pool.options.end = end; } /** * @notice Allows contributors to claim their tokens after the presale is finalized. * @return The amount of tokens claimed. */ function claim() external returns (uint256) { if(pool.state != 5) revert InvalidState(pool.state); if (contributions[msg.sender] == 0) revert NotClaimable(); uint256 amount = userTokens(msg.sender); pool.tokenBalance -= amount; contributions[msg.sender] = 0; IERC20(pool.token).safeTransfer(msg.sender, amount); emit TokenClaim(msg.sender, amount, block.timestamp); return amount; } /* * @notice must be called manually by owner post finalize. Will allow investors to claim their tokens from the presale. */ function unlockClaim() external onlyOwner { if(pool.state != 4) revert InvalidState(pool.state); pool.state = 5; } /** * @notice Allows contributors to get a refund when the presale fails or is canceled. * @return The amount of Wei refunded. */ function refund() external onlyRefundable returns (uint256) { if(contributions[msg.sender] == 0) revert NotRefundable(); uint256 amount = contributions[msg.sender]; if(address(this).balance >= amount) { contributions[msg.sender] = 0; payable(msg.sender).sendValue(amount); emit Refund(msg.sender, amount, block.timestamp); } return amount; } /** * @notice Handles token purchase. * @param beneficiary The address making the purchase. * @param amount The amount of Wei contributed. */ function _purchase(address beneficiary, uint256 amount) private { _prevalidatePurchase(beneficiary, amount); pool.weiRaised += amount; contributions[beneficiary] += amount; emit Purchase(beneficiary, amount); } /** * @notice Handles liquidity provisioning. * @param _weiAmount The amount of Wei to be added to liquidity. * @param _tokenAmount The amount of tokens to be added to liquidity. */ function _liquify(uint256 _weiAmount, uint256 _tokenAmount) private { IERC20(pool.token).approve(pool.routerAddress, _tokenAmount); IERC20(pool.weth).approve(pool.routerAddress, _weiAmount); (uint amountToken, uint amountETH,) = pool.uniswapV2Router02.addLiquidityETH{value : _weiAmount}( address(pool.token), _tokenAmount, _tokenAmount, _weiAmount, owner(), block.timestamp + 600 ); if(amountToken != _tokenAmount && amountETH != _weiAmount) revert LiquificationFailed(); } /** * @notice Validates the purchase conditions before accepting funds. * @param _beneficiary The address attempting to make a purchase. * @param _amount The amount of Wei being contributed. * @return True if the purchase is valid. */ function _prevalidatePurchase(address _beneficiary, uint256 _amount) internal view returns(bool) { if(pool.state != 2) revert InvalidState(pool.state); if(block.timestamp < pool.options.start || block.timestamp > pool.options.end) revert NotInPurchasePeriod(); if(pool.options.hardCap > 0 && pool.weiRaised + _amount > pool.options.hardCap) revert HardCapExceed(); if(_amount < pool.options.min) revert PurchaseBelowMinimum(); if(_amount + contributions[_beneficiary] > pool.options.max) revert PurchaseLimitExceed(); return true; } /** * @param _options The presale options. * @return True if the pool configuration is valid. */ function _prevalidatePool(PresaleOptions memory _options) internal pure returns(bool) { if (_options.softCap == 0) revert InvalidCapValue(); if (_options.min == 0 || _options.min > _options.max) revert InvalidLimitValue(); if (_options.liquidityBps < 0 || _options.liquidityBps > 10000) revert InvalidLiquidityValue(); if (_options.end < _options.start) revert InvalidTimestampValue(); return true; } /** * @notice Tokens per user rate is dynamically calculated using the proportional allocation of current raise amount in Wei. * @param contributor The address of the contributor. * @return The amount of tokens claimable by the contributor. */ function userTokens(address contributor) public view returns(uint256){ return ((contributions[contributor] * SCALE) / pool.weiRaised * pool.tokensClaimable) / SCALE; } /** * @notice Tokens per seed investor rate is dynamically calculated using the proportional allocation of current raise amount in Wei. * @return The total amount of tokens allocated to the seed investors */ function _seederTokens() internal view returns(uint256) { return ((_seederTotalValue() * SCALE) / pool.weiRaised * pool.tokensClaimable) / SCALE; } /** * @notice Calculates the amount of effective wei the seeders have raised. * For example, at a 30% premium (seederPremiumBps = 3000), and 10 ETH seed funds raised, the total value will be 13 ETH. * @return The amount of token value in wei the seeders have raised. */ function _seederTotalValue() internal view returns (uint256) { return pool.options.seederRaisedWei + (pool.options.seederRaisedWei * pool.options.seederPremiumBps / 10_000); } /** * @notice Calculates the amount of ETH going to LP based on the number of tokens, and liquidity raised. * Launch value of the token should be at launchIncreaseBps% below presale price (1000 = 10%). * @return the number of ETH in wei to be added to the LP. */ function _liquidityWei() internal view returns (uint256) { uint256 tokensPerWei = ((pool.tokensClaimable * SCALE) / pool.weiRaised) / SCALE; uint256 tokensPerWeiLaunch = tokensPerWei - (tokensPerWei * pool.options.launchIncreaseBps / 10_000); uint256 liquidityWei = ((pool.tokensLiquidity * SCALE) / tokensPerWeiLaunch) / SCALE; return liquidityWei; } /** * @notice Calculates the amount of tokens allocated for liquidity. * @return The amount of tokens for liquidity. */ function _tokensForLiquidity() internal view returns (uint256){ return pool.options.tokenDeposit * pool.options.liquidityBps / 10_000; } /** * @notice Calculates the amount of tokens allocated for the presale. * @return The amount of tokens available for the presale. */ function _tokensForPresale() internal view returns (uint256){ return pool.options.tokenDeposit - (pool.options.tokenDeposit * pool.options.liquidityBps / 10_000); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_uniswapV2Router02","type":"address"},{"components":[{"internalType":"uint256","name":"tokenDeposit","type":"uint256"},{"internalType":"uint256","name":"softCap","type":"uint256"},{"internalType":"uint256","name":"hardCap","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"},{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint112","name":"start","type":"uint112"},{"internalType":"uint112","name":"end","type":"uint112"},{"internalType":"uint32","name":"liquidityBps","type":"uint32"},{"internalType":"uint32","name":"launchIncreaseBps","type":"uint32"},{"internalType":"uint256","name":"seederRaisedWei","type":"uint256"},{"internalType":"uint32","name":"seederPremiumBps","type":"uint32"}],"internalType":"struct Presale.PresaleOptions","name":"_options","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"HardCapExceed","type":"error"},{"inputs":[],"name":"InvalidCapValue","type":"error"},{"inputs":[],"name":"InvalidInitializationParameters","type":"error"},{"inputs":[],"name":"InvalidLimitValue","type":"error"},{"inputs":[],"name":"InvalidLiquidityValue","type":"error"},{"inputs":[{"internalType":"uint8","name":"currentState","type":"uint8"}],"name":"InvalidState","type":"error"},{"inputs":[],"name":"InvalidTimestampValue","type":"error"},{"inputs":[],"name":"LiquificationFailed","type":"error"},{"inputs":[],"name":"NotClaimable","type":"error"},{"inputs":[],"name":"NotInPurchasePeriod","type":"error"},{"inputs":[],"name":"NotRefundable","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PurchaseBelowMinimum","type":"error"},{"inputs":[],"name":"PurchaseLimitExceed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SoftCapNotReached","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"contribution","type":"uint256"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenClaim","type":"event"},{"inputs":[],"name":"cancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint112","name":"end","type":"uint112"}],"name":"extendEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"contract IUniswapV2Router02","name":"uniswapV2Router02","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"uint256","name":"tokenBalance","type":"uint256"},{"internalType":"uint256","name":"tokensClaimable","type":"uint256"},{"internalType":"uint256","name":"tokensLiquidity","type":"uint256"},{"internalType":"uint256","name":"weiRaised","type":"uint256"},{"internalType":"address","name":"weth","type":"address"},{"internalType":"uint8","name":"state","type":"uint8"},{"components":[{"internalType":"uint256","name":"tokenDeposit","type":"uint256"},{"internalType":"uint256","name":"softCap","type":"uint256"},{"internalType":"uint256","name":"hardCap","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"},{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint112","name":"start","type":"uint112"},{"internalType":"uint112","name":"end","type":"uint112"},{"internalType":"uint32","name":"liquidityBps","type":"uint32"},{"internalType":"uint32","name":"launchIncreaseBps","type":"uint32"},{"internalType":"uint256","name":"seederRaisedWei","type":"uint256"},{"internalType":"uint32","name":"seederPremiumBps","type":"uint32"}],"internalType":"struct Presale.PresaleOptions","name":"options","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refund","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contributor","type":"address"}],"name":"userTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561000f575f80fd5b506040516119e63803806119e683398101604081905261002e91610314565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c81610181565b50610066816101d0565b50600380546001600160a01b03199081166001600160a01b03948516908117909255600480548216909217909155600280549091169383169390931790925560098054600160a01b6001600160a81b03199091169490921693909317179091558051600a556020810151600b556040810151600c556060810151600d556080810151600e5560a0810151600f805460c084015160e08501516001600160701b039485166001600160e01b031990931692909217600160701b9490911693909302929092176001600160e01b0316600160e01b63ffffffff938416021790556101008201516010805463ffffffff1990811692841692909217905561012083015160115561014090920151601280549093169116179055610410565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f81602001515f036101f5576040516314c0d94f60e31b815260040160405180910390fd5b6080820151158061020d575081606001518260800151115b1561022b5760405163b581346160e01b815260040160405180910390fd5b6127108260e0015163ffffffff161115610258576040516383b087d360e01b815260040160405180910390fd5b8160a001516001600160701b03168260c001516001600160701b03161015610293576040516377f960c160e11b815260040160405180910390fd5b506001919050565b80516001600160a01b03811681146102b1575f80fd5b919050565b60405161016081016001600160401b03811182821017156102e557634e487b7160e01b5f52604160045260245ffd5b60405290565b80516001600160701b03811681146102b1575f80fd5b805163ffffffff811681146102b1575f80fd5b5f805f808486036101c0811215610329575f80fd5b6103328661029b565b94506103406020870161029b565b935061034e6040870161029b565b9250610160605f1982011215610362575f80fd5b5061036b6102b6565b6060868101518252608080880151602084015260a0880151604084015260c08801519183019190915260e0870151908201526103aa61010087016102eb565b60a08201526103bc61012087016102eb565b60c08201526103ce6101408701610301565b60e08201526103e06101608701610301565b6101008201526101808601516101208201526103ff6101a08701610301565b610140820152939692955090935050565b6115c98061041d5f395ff3fe6080604052600436106100c2575f3560e01c80638da5cb5b1161007c578063ea8a1af011610057578063ea8a1af0146102bd578063ed498fa8146102d1578063f2fde38b146102f0578063feafaa6b1461030f575f80fd5b80638da5cb5b14610264578063ceb976a91461028a578063d0e30db0146102a9575f80fd5b806316f0115b146100d757806342e94c90146101cb5780634bb278f3146102045780634e71d92d14610228578063590e1ae31461023c578063715018a614610250575f80fd5b366100d3576100d13334610323565b005b5f80fd5b3480156100e2575f80fd5b506002546003546004546005546006546007546008546009546040805161016081018252600a548152600b546020820152600c5491810191909152600d546060820152600e546080820152600f546001600160701b0380821660a0840152600160701b82041660c0830152600160e01b900463ffffffff90811660e08301526010548116610100830152601154610120830152601254166101408201526101ac986001600160a01b03908116988116978116969594939290811691600160a01b90910460ff16908a565b6040516101c29a9998979695949392919061135f565b60405180910390f35b3480156101d6575f80fd5b506101f66101e5366004611477565b60016020525f908152604090205481565b6040519081526020016101c2565b34801561020f575f80fd5b506102186103b5565b60405190151581526020016101c2565b348015610233575f80fd5b506101f66105b1565b348015610247575f80fd5b506101f66106aa565b34801561025b575f80fd5b506100d16107ff565b34801561026f575f80fd5b505f546040516001600160a01b0390911681526020016101c2565b348015610295575f80fd5b506100d16102a436600461149d565b610812565b3480156102b4575f80fd5b506101f66108d2565b3480156102c8575f80fd5b506102186109bd565b3480156102dc575f80fd5b506101f66102eb366004611477565b610a7b565b3480156102fb575f80fd5b506100d161030a366004611477565b610ad6565b34801561031a575f80fd5b506100d1610b13565b61032d8282610b6c565b508060026006015f82825461034291906114d7565b90915550506001600160a01b0382165f908152600160205260408120805483929061036e9084906114d7565b90915550506040518181526001600160a01b038316907f2499a5330ab0979cc612135e7883ebc3cd5c9f7a8508f042540c34723348f6329060200160405180910390a25050565b5f6103be610ca0565b60095460ff600160a01b909104166002146104005760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024015b60405180910390fd5b600b54600854101561042557604051632bdc91ad60e01b815260040160405180910390fd5b600f54600160701b90046001600160701b031642116104865760405162461bcd60e51b815260206004820152601e60248201527f50726573616c65207374696c6c20696e2061637469766520706572696f64000060448201526064016103f7565b6009805460ff60a01b1916600160a21b1790555f6104a2610ccc565b6002549091506104bc906001600160a01b03163383610d0f565b8060026003015f8282546104d091906114ea565b9091555050600780548291905f906104e99084906114ea565b909155505f90506104f8610d73565b9050806002600601541015610520576040516383b087d360e01b815260040160405180910390fd5b6008545f906105309083906114ea565b90508015610542576105423382610e23565b61055182600260050154610eb6565b600754600580545f906105659084906114ea565b90915550506008546040805191825242602083015233917f616c9469db50815ae0f1d0a020d9fc9060da7c57f03559afb0d4ebdaa0a3a05e910160405180910390a26001935050505090565b6009545f90600160a01b900460ff166005146105ef5760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b335f90815260016020526040812054900361061d57604051633123d42760e11b815260040160405180910390fd5b5f61062733610a7b565b90508060026003015f82825461063d91906114ea565b9091555050335f8181526001602052604081205560025461066a916001600160a01b039091169083610d0f565b6040805182815242602082015233917f30c2341ba3f2142e78472f07dcf018a42044ae1c2c2e7ce867b327257f07ef2b91015b60405180910390a2919050565b6009545f90600160a01b900460ff16600314806106e65750600f54600160701b90046001600160701b0316421180156106e65750600b54600854105b6107665760405162461bcd60e51b815260206004820152604560248201527f50726573616c652068617320746f2062652063616e63656c6c65642c206f722060448201527f736f6674636170206e6f74206d657420647572696e67206163746976652070656064820152643934b7b21760d91b608482015260a4016103f7565b335f90815260016020526040812054900361079457604051631ba168fb60e11b815260040160405180910390fd5b335f908152600160205260409020544781116107fa57335f818152600160205260408120556107c39082610e23565b6040805182815242602082015233917f73f04af9dcc582a923ec15d3eea990fe34adabfff2879e28d44572e01a54abb6910161069d565b905090565b610807610ca0565b6108105f6110b4565b565b61081a610ca0565b600f546001600160701b03164210806108445750600f54600160701b90046001600160701b031642115b15610862576040516338e102f160e21b815260040160405180910390fd5b60095460ff600160a01b9091041660021461089f5760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b600f80546001600160701b03909216600160701b026dffffffffffffffffffffffffffff60701b19909216919091179055565b5f6108db610ca0565b600954600160a01b900460ff166001146109175760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b6009805460ff60a01b1916600160a11b179055600a54600580545f9061093e9084906114d7565b9091555061094c9050611103565b600755610957611126565b600655600a54600254610979916001600160a01b039091169033903090611160565b600a546040805191825242602083015233917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a250600a5490565b5f6109c6610ca0565b6009546002600160a01b90910460ff161115610a045760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b6009805460ff60a01b1916600360a01b17905560055415610a4057600580545f909155600254610a3e906001600160a01b03163383610d0f565b505b60405142815233907f27f83af92b39768b17fe0c8d6922452702717efb8626d97e7a754e0b27d4f6d29060200160405180910390a250600190565b6006546008546001600160a01b0383165f908152600160205260408120549092670de0b6b3a7640000929091610ab29084906114fd565b610abc9190611514565b610ac691906114fd565b610ad09190611514565b92915050565b610ade610ca0565b6001600160a01b038116610b0757604051631e4fbdf760e01b81525f60048201526024016103f7565b610b10816110b4565b50565b610b1b610ca0565b600954600160a01b900460ff16600414610b575760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b6009805460ff60a01b1916600560a01b179055565b6009545f9060ff600160a01b90910416600214610bab5760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b600f546001600160701b0316421080610bd55750600f54600160701b90046001600160701b031642115b15610bf3576040516338e102f160e21b815260040160405180910390fd5b600c5415801590610c125750600c54600854610c109084906114d7565b115b15610c305760405163141a296d60e11b815260040160405180910390fd5b600e54821015610c535760405163bd70f35d60e01b815260040160405180910390fd5b600d546001600160a01b0384165f90815260016020526040902054610c7890846114d7565b1115610c97576040516316a65a0760e21b815260040160405180910390fd5b50600192915050565b5f546001600160a01b031633146108105760405163118cdaa760e01b81523360048201526024016103f7565b6006546008545f91670de0b6b3a76400009182610ce7611199565b610cf191906114fd565b610cfb9190611514565b610d0591906114fd565b6107fa9190611514565b6040516001600160a01b03838116602483015260448201839052610d6e91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506111cc565b505050565b5f80670de0b6b3a7640000600260060154670de0b6b3a7640000600260040154610d9d91906114fd565b610da79190611514565b610db19190611514565b6010549091505f9061271090610dcd9063ffffffff16846114fd565b610dd79190611514565b610de190836114ea565b90505f670de0b6b3a764000082670de0b6b3a7640000600260050154610e0791906114fd565b610e119190611514565b610e1b9190611514565b949350505050565b80471015610e465760405163cd78605960e01b81523060048201526024016103f7565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610e8f576040519150601f19603f3d011682016040523d82523d5f602084013e610e94565b606091505b5050905080610d6e57604051630a12f52160e11b815260040160405180910390fd5b6002546004805460405163095ea7b360e01b81526001600160a01b0391821692810192909252602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610f0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f309190611533565b506009546004805460405163095ea7b360e01b81526001600160a01b0391821692810192909252602482018590529091169063095ea7b3906044016020604051808303815f875af1158015610f87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fab9190611533565b506003546002545f9182916001600160a01b039182169163f305d71991879116868083610fdf5f546001600160a01b031690565b610feb426102586114d7565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015611056573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061107b9190611552565b50915091508282141580156110905750838114155b156110ae576040516376d097f360e11b815260040160405180910390fd5b50505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600f54600a545f9161271091610d0591600160e01b900463ffffffff16906114fd565b600f54600a545f916127109161114991600160e01b900463ffffffff16906114fd565b6111539190611514565b600a546107fa91906114ea565b6040516001600160a01b0384811660248301528381166044830152606482018390526110ae9186918216906323b872dd90608401610d3c565b6012546011545f91612710916111b59163ffffffff16906114fd565b6111bf9190611514565b6011546107fa91906114d7565b5f6111e06001600160a01b0384168361122d565b905080515f141580156112045750808060200190518101906112029190611533565b155b15610d6e57604051635274afe760e01b81526001600160a01b03841660048201526024016103f7565b606061123a83835f611241565b9392505050565b6060814710156112665760405163cd78605960e01b81523060048201526024016103f7565b5f80856001600160a01b03168486604051611281919061157d565b5f6040518083038185875af1925050503d805f81146112bb576040519150601f19603f3d011682016040523d82523d5f602084013e6112c0565b606091505b50915091506112d08683836112da565b9695505050505050565b6060826112ef576112ea82611336565b61123a565b815115801561130657506001600160a01b0384163b155b1561132f57604051639996b31560e01b81526001600160a01b03851660048201526024016103f7565b508061123a565b8051156113465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160a01b038b811682528a81166020808401919091528a821660408085019190915260608085018c905260808086018c905260a08087018c905260c08088018c9052958a1660e088015260ff8916610100880152875161012088019081529488015161014088015292870151610160870152908601516101808601528501516101a08501528401516001600160701b039081166101c0850152918401519182166101e08401526102808301915060e084015161142660e083018263ffffffff169052565b5061010084015161144061010083018263ffffffff169052565b5061012084015161012082015261014084015161146661014083018263ffffffff169052565b50509b9a5050505050505050505050565b5f60208284031215611487575f80fd5b81356001600160a01b038116811461123a575f80fd5b5f602082840312156114ad575f80fd5b81356001600160701b038116811461123a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ad057610ad06114c3565b81810381811115610ad057610ad06114c3565b8082028115828204841417610ad057610ad06114c3565b5f8261152e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611543575f80fd5b8151801515811461123a575f80fd5b5f805f60608486031215611564575f80fd5b5050815160208301516040909301519094929350919050565b5f82518060208501845e5f92019182525091905056fea2646970667358221220cb24d8c88ca8f42da6cf21b9dfa03b79785e1eb99dc75852d1cbcf381abef43864736f6c634300081a0033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000099999999999997fceb5549c58ab66df52385ca4d0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000003225d7d5d947c640a00000000000000000000000000000000000000000000000000000195ece006e02d0000000000000000000000000000000000000000000000000004c1c6a014a08700000000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000006679ec6000000000000000000000000000000000000000000000000000000000667c8f60000000000000000000000000000000000000000000000000000000000000101c00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000028a97379e7e500000000000000000000000000000000000000000000000000000000000000000bb8
Deployed Bytecode
0x6080604052600436106100c2575f3560e01c80638da5cb5b1161007c578063ea8a1af011610057578063ea8a1af0146102bd578063ed498fa8146102d1578063f2fde38b146102f0578063feafaa6b1461030f575f80fd5b80638da5cb5b14610264578063ceb976a91461028a578063d0e30db0146102a9575f80fd5b806316f0115b146100d757806342e94c90146101cb5780634bb278f3146102045780634e71d92d14610228578063590e1ae31461023c578063715018a614610250575f80fd5b366100d3576100d13334610323565b005b5f80fd5b3480156100e2575f80fd5b506002546003546004546005546006546007546008546009546040805161016081018252600a548152600b546020820152600c5491810191909152600d546060820152600e546080820152600f546001600160701b0380821660a0840152600160701b82041660c0830152600160e01b900463ffffffff90811660e08301526010548116610100830152601154610120830152601254166101408201526101ac986001600160a01b03908116988116978116969594939290811691600160a01b90910460ff16908a565b6040516101c29a9998979695949392919061135f565b60405180910390f35b3480156101d6575f80fd5b506101f66101e5366004611477565b60016020525f908152604090205481565b6040519081526020016101c2565b34801561020f575f80fd5b506102186103b5565b60405190151581526020016101c2565b348015610233575f80fd5b506101f66105b1565b348015610247575f80fd5b506101f66106aa565b34801561025b575f80fd5b506100d16107ff565b34801561026f575f80fd5b505f546040516001600160a01b0390911681526020016101c2565b348015610295575f80fd5b506100d16102a436600461149d565b610812565b3480156102b4575f80fd5b506101f66108d2565b3480156102c8575f80fd5b506102186109bd565b3480156102dc575f80fd5b506101f66102eb366004611477565b610a7b565b3480156102fb575f80fd5b506100d161030a366004611477565b610ad6565b34801561031a575f80fd5b506100d1610b13565b61032d8282610b6c565b508060026006015f82825461034291906114d7565b90915550506001600160a01b0382165f908152600160205260408120805483929061036e9084906114d7565b90915550506040518181526001600160a01b038316907f2499a5330ab0979cc612135e7883ebc3cd5c9f7a8508f042540c34723348f6329060200160405180910390a25050565b5f6103be610ca0565b60095460ff600160a01b909104166002146104005760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024015b60405180910390fd5b600b54600854101561042557604051632bdc91ad60e01b815260040160405180910390fd5b600f54600160701b90046001600160701b031642116104865760405162461bcd60e51b815260206004820152601e60248201527f50726573616c65207374696c6c20696e2061637469766520706572696f64000060448201526064016103f7565b6009805460ff60a01b1916600160a21b1790555f6104a2610ccc565b6002549091506104bc906001600160a01b03163383610d0f565b8060026003015f8282546104d091906114ea565b9091555050600780548291905f906104e99084906114ea565b909155505f90506104f8610d73565b9050806002600601541015610520576040516383b087d360e01b815260040160405180910390fd5b6008545f906105309083906114ea565b90508015610542576105423382610e23565b61055182600260050154610eb6565b600754600580545f906105659084906114ea565b90915550506008546040805191825242602083015233917f616c9469db50815ae0f1d0a020d9fc9060da7c57f03559afb0d4ebdaa0a3a05e910160405180910390a26001935050505090565b6009545f90600160a01b900460ff166005146105ef5760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b335f90815260016020526040812054900361061d57604051633123d42760e11b815260040160405180910390fd5b5f61062733610a7b565b90508060026003015f82825461063d91906114ea565b9091555050335f8181526001602052604081205560025461066a916001600160a01b039091169083610d0f565b6040805182815242602082015233917f30c2341ba3f2142e78472f07dcf018a42044ae1c2c2e7ce867b327257f07ef2b91015b60405180910390a2919050565b6009545f90600160a01b900460ff16600314806106e65750600f54600160701b90046001600160701b0316421180156106e65750600b54600854105b6107665760405162461bcd60e51b815260206004820152604560248201527f50726573616c652068617320746f2062652063616e63656c6c65642c206f722060448201527f736f6674636170206e6f74206d657420647572696e67206163746976652070656064820152643934b7b21760d91b608482015260a4016103f7565b335f90815260016020526040812054900361079457604051631ba168fb60e11b815260040160405180910390fd5b335f908152600160205260409020544781116107fa57335f818152600160205260408120556107c39082610e23565b6040805182815242602082015233917f73f04af9dcc582a923ec15d3eea990fe34adabfff2879e28d44572e01a54abb6910161069d565b905090565b610807610ca0565b6108105f6110b4565b565b61081a610ca0565b600f546001600160701b03164210806108445750600f54600160701b90046001600160701b031642115b15610862576040516338e102f160e21b815260040160405180910390fd5b60095460ff600160a01b9091041660021461089f5760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b600f80546001600160701b03909216600160701b026dffffffffffffffffffffffffffff60701b19909216919091179055565b5f6108db610ca0565b600954600160a01b900460ff166001146109175760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b6009805460ff60a01b1916600160a11b179055600a54600580545f9061093e9084906114d7565b9091555061094c9050611103565b600755610957611126565b600655600a54600254610979916001600160a01b039091169033903090611160565b600a546040805191825242602083015233917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a250600a5490565b5f6109c6610ca0565b6009546002600160a01b90910460ff161115610a045760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b6009805460ff60a01b1916600360a01b17905560055415610a4057600580545f909155600254610a3e906001600160a01b03163383610d0f565b505b60405142815233907f27f83af92b39768b17fe0c8d6922452702717efb8626d97e7a754e0b27d4f6d29060200160405180910390a250600190565b6006546008546001600160a01b0383165f908152600160205260408120549092670de0b6b3a7640000929091610ab29084906114fd565b610abc9190611514565b610ac691906114fd565b610ad09190611514565b92915050565b610ade610ca0565b6001600160a01b038116610b0757604051631e4fbdf760e01b81525f60048201526024016103f7565b610b10816110b4565b50565b610b1b610ca0565b600954600160a01b900460ff16600414610b575760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b6009805460ff60a01b1916600560a01b179055565b6009545f9060ff600160a01b90910416600214610bab5760095460405163683f44bb60e11b8152600160a01b90910460ff1660048201526024016103f7565b600f546001600160701b0316421080610bd55750600f54600160701b90046001600160701b031642115b15610bf3576040516338e102f160e21b815260040160405180910390fd5b600c5415801590610c125750600c54600854610c109084906114d7565b115b15610c305760405163141a296d60e11b815260040160405180910390fd5b600e54821015610c535760405163bd70f35d60e01b815260040160405180910390fd5b600d546001600160a01b0384165f90815260016020526040902054610c7890846114d7565b1115610c97576040516316a65a0760e21b815260040160405180910390fd5b50600192915050565b5f546001600160a01b031633146108105760405163118cdaa760e01b81523360048201526024016103f7565b6006546008545f91670de0b6b3a76400009182610ce7611199565b610cf191906114fd565b610cfb9190611514565b610d0591906114fd565b6107fa9190611514565b6040516001600160a01b03838116602483015260448201839052610d6e91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506111cc565b505050565b5f80670de0b6b3a7640000600260060154670de0b6b3a7640000600260040154610d9d91906114fd565b610da79190611514565b610db19190611514565b6010549091505f9061271090610dcd9063ffffffff16846114fd565b610dd79190611514565b610de190836114ea565b90505f670de0b6b3a764000082670de0b6b3a7640000600260050154610e0791906114fd565b610e119190611514565b610e1b9190611514565b949350505050565b80471015610e465760405163cd78605960e01b81523060048201526024016103f7565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610e8f576040519150601f19603f3d011682016040523d82523d5f602084013e610e94565b606091505b5050905080610d6e57604051630a12f52160e11b815260040160405180910390fd5b6002546004805460405163095ea7b360e01b81526001600160a01b0391821692810192909252602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610f0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f309190611533565b506009546004805460405163095ea7b360e01b81526001600160a01b0391821692810192909252602482018590529091169063095ea7b3906044016020604051808303815f875af1158015610f87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fab9190611533565b506003546002545f9182916001600160a01b039182169163f305d71991879116868083610fdf5f546001600160a01b031690565b610feb426102586114d7565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015611056573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061107b9190611552565b50915091508282141580156110905750838114155b156110ae576040516376d097f360e11b815260040160405180910390fd5b50505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600f54600a545f9161271091610d0591600160e01b900463ffffffff16906114fd565b600f54600a545f916127109161114991600160e01b900463ffffffff16906114fd565b6111539190611514565b600a546107fa91906114ea565b6040516001600160a01b0384811660248301528381166044830152606482018390526110ae9186918216906323b872dd90608401610d3c565b6012546011545f91612710916111b59163ffffffff16906114fd565b6111bf9190611514565b6011546107fa91906114d7565b5f6111e06001600160a01b0384168361122d565b905080515f141580156112045750808060200190518101906112029190611533565b155b15610d6e57604051635274afe760e01b81526001600160a01b03841660048201526024016103f7565b606061123a83835f611241565b9392505050565b6060814710156112665760405163cd78605960e01b81523060048201526024016103f7565b5f80856001600160a01b03168486604051611281919061157d565b5f6040518083038185875af1925050503d805f81146112bb576040519150601f19603f3d011682016040523d82523d5f602084013e6112c0565b606091505b50915091506112d08683836112da565b9695505050505050565b6060826112ef576112ea82611336565b61123a565b815115801561130657506001600160a01b0384163b155b1561132f57604051639996b31560e01b81526001600160a01b03851660048201526024016103f7565b508061123a565b8051156113465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160a01b038b811682528a81166020808401919091528a821660408085019190915260608085018c905260808086018c905260a08087018c905260c08088018c9052958a1660e088015260ff8916610100880152875161012088019081529488015161014088015292870151610160870152908601516101808601528501516101a08501528401516001600160701b039081166101c0850152918401519182166101e08401526102808301915060e084015161142660e083018263ffffffff169052565b5061010084015161144061010083018263ffffffff169052565b5061012084015161012082015261014084015161146661014083018263ffffffff169052565b50509b9a5050505050505050505050565b5f60208284031215611487575f80fd5b81356001600160a01b038116811461123a575f80fd5b5f602082840312156114ad575f80fd5b81356001600160701b038116811461123a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ad057610ad06114c3565b81810381811115610ad057610ad06114c3565b8082028115828204841417610ad057610ad06114c3565b5f8261152e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611543575f80fd5b8151801515811461123a575f80fd5b5f805f60608486031215611564575f80fd5b5050815160208301516040909301519094929350919050565b5f82518060208501845e5f92019182525091905056fea2646970667358221220cb24d8c88ca8f42da6cf21b9dfa03b79785e1eb99dc75852d1cbcf381abef43864736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000099999999999997fceb5549c58ab66df52385ca4d0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000003225d7d5d947c640a00000000000000000000000000000000000000000000000000000195ece006e02d0000000000000000000000000000000000000000000000000004c1c6a014a08700000000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000006679ec6000000000000000000000000000000000000000000000000000000000667c8f60000000000000000000000000000000000000000000000000000000000000101c00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000028a97379e7e500000000000000000000000000000000000000000000000000000000000000000bb8
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _token (address): 0x99999999999997fceB5549c58aB66dF52385ca4d
Arg [2] : _uniswapV2Router02 (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [3] : _options (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 00000000000000000000000099999999999997fceb5549c58ab66df52385ca4d
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [3] : 000000000000000000000000000000000000000003225d7d5d947c640a000000
Arg [4] : 00000000000000000000000000000000000000000000000195ece006e02d0000
Arg [5] : 000000000000000000000000000000000000000000000004c1c6a014a0870000
Arg [6] : 0000000000000000000000000000000000000000000000001bc16d674ec80000
Arg [7] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [8] : 000000000000000000000000000000000000000000000000000000006679ec60
Arg [9] : 00000000000000000000000000000000000000000000000000000000667c8f60
Arg [10] : 000000000000000000000000000000000000000000000000000000000000101c
Arg [11] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [12] : 00000000000000000000000000000000000000000000000028a97379e7e50000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000bb8
Deployed Bytecode Sourcemap
41105:13905:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44277:32;44287:10;44299:9;44277;:32::i;:::-;41105:13905;;;;;43239:16;;;;;;;;;;-1:-1:-1;43239:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43239:16:0;;;;;;;-1:-1:-1;;;43239:16:0;;;;;;;-1:-1:-1;;;43239:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43239:16:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43239:16:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;43182:48;;;;;;;;;;-1:-1:-1;43182:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2603:25:1;;;2591:2;2576:18;43182:48:0;2457:177:1;45631:1266:0;;;;;;;;;;;;;:::i;:::-;;;2804:14:1;;2797:22;2779:41;;2767:2;2752:18;45631:1266:0;2639:187:1;48246:471:0;;;;;;;;;;;;;:::i;49163:439::-;;;;;;;;;;;;;:::i;6249:103::-;;;;;;;;;;;;;:::i;5574:87::-;;;;;;;;;;-1:-1:-1;5620:7:0;5647:6;5574:87;;-1:-1:-1;;;;;5647:6:0;;;2977:51:1;;2965:2;2950:18;5574:87:0;2831:203:1;47755:329:0;;;;;;;;;;-1:-1:-1;47755:329:0;;;;;:::i;:::-;;:::i;44755:552::-;;;;;;;;;;;;;:::i;47189:425::-;;;;;;;;;;;;;:::i;52600:181::-;;;;;;;;;;-1:-1:-1;52600:181:0;;;;;:::i;:::-;;:::i;6507:220::-;;;;;;;;;;-1:-1:-1;6507:220:0;;;;;:::i;:::-;;:::i;48865:137::-;;;;;;;;;;;;;:::i;49781:263::-;49856:41;49877:11;49890:6;49856:20;:41::i;:::-;;49928:6;49910:4;:14;;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;49945:26:0;;;;;;:13;:26;;;;;:36;;49975:6;;49945:26;:36;;49975:6;;49945:36;:::i;:::-;;;;-1:-1:-1;;50007:29:0;;2603:25:1;;;-1:-1:-1;;;;;50007:29:0;;;;;2591:2:1;2576:18;50007:29:0;;;;;;;49781:263;;:::o;45631:1266::-;45678:4;5460:13;:11;:13::i;:::-;45698:10;;::::1;-1:-1:-1::0;;;45698:10:0;;::::1;;:4;:15;45695:51;;45735:10:::0;;45722:24:::1;::::0;-1:-1:-1;;;45722:24:0;;-1:-1:-1;;;45735:10:0;;::::1;;;45722:24;::::0;::::1;3745:36:1::0;3718:18;;45722:24:0::1;;;;;;;;45695:51;45777:20:::0;;:12:::1;45760:14:::0;:37:::1;45757:68;;;45806:19;;-1:-1:-1::0;;;45806:19:0::1;;;;;;;;;;;45757:68;45862:16:::0;;-1:-1:-1;;;45862:16:0;::::1;-1:-1:-1::0;;;;;45862:16:0::1;45844:15;:34;45836:77;;;::::0;-1:-1:-1;;;45836:77:0;;3994:2:1;45836:77:0::1;::::0;::::1;3976:21:1::0;4033:2;4013:18;;;4006:30;4072:32;4052:18;;;4045:60;4122:18;;45836:77:0::1;3792:354:1::0;45836:77:0::1;45927:10:::0;:14;;-1:-1:-1;;;;45927:14:0::1;-1:-1:-1::0;;;45927:14:0::1;::::0;;-1:-1:-1;46037:15:0::1;:13;:15::i;:::-;46147:4;:10:::0;46014:38;;-1:-1:-1;46140:57:0::1;::::0;-1:-1:-1;;;;;46147:10:0::1;46172;46014:38:::0;46140:31:::1;:57::i;:::-;46229:12;46208:4;:17;;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;46344:20:0;:36;;46368:12;;46344:20;::::1;::::0;:36:::1;::::0;46368:12;;46344:36:::1;:::i;:::-;::::0;;;-1:-1:-1;46401:20:0::1;::::0;-1:-1:-1;46424:15:0::1;:13;:15::i;:::-;46401:38;;46472:12;46455:4;:14;;;:29;46452:64;;;46493:23;;-1:-1:-1::0;;;46493:23:0::1;;;;;;;;;;;46452:64;46552:14:::0;;46529:20:::1;::::0;46552:29:::1;::::0;46569:12;;46552:29:::1;:::i;:::-;46529:52:::0;-1:-1:-1;46596:16:0;;46592:65:::1;;46614:43;46622:10;46644:12:::0;46614:29:::1;:43::i;:::-;46689:44;46698:12;46712:4;:20;;;46689:8;:44::i;:::-;46765:20:::0;;::::1;46744:41:::0;;:17:::1;::::0;:41:::1;::::0;46765:20;;46744:41:::1;:::i;:::-;::::0;;;-1:-1:-1;;46825:14:0;;46803:54:::1;::::0;;4458:25:1;;;46841:15:0::1;4514:2:1::0;4499:18;;4492:34;46813:10:0::1;::::0;46803:54:::1;::::0;4431:18:1;46803:54:0::1;;;;;;;46885:4;46878:11;;;;;45631:1266:::0;:::o;48246:471::-;48304:10;;48281:7;;-1:-1:-1;;;48304:10:0;;;;48318:1;48304:15;48301:51;;48341:10;;48328:24;;-1:-1:-1;;;48328:24:0;;-1:-1:-1;;;48341:10:0;;;;;48328:24;;;3745:36:1;3718:18;;48328:24:0;3603:184:1;48301:51:0;48381:10;48367:25;;;;:13;:25;;;;;;:30;;48363:57;;48406:14;;-1:-1:-1;;;48406:14:0;;;;;;;;;;;48363:57;48433:14;48450:22;48461:10;48450;:22::i;:::-;48433:39;;48504:6;48483:4;:17;;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;48535:10:0;48549:1;48521:25;;;:13;:25;;;;;:29;48578:4;:10;48571:51;;-1:-1:-1;;;;;48578:10:0;;;;48615:6;48571:31;:51::i;:::-;48638:47;;;4458:25:1;;;48669:15:0;4514:2:1;4499:18;;4492:34;48649:10:0;;48638:47;;4431:18:1;48638:47:0;;;;;;;;48703:6;48246:471;-1:-1:-1;48246:471:0:o;49163:439::-;43365:10;;49214:7;;-1:-1:-1;;;43365:10:0;;;;43379:1;43365:15;;:96;;-1:-1:-1;43403:16:0;;-1:-1:-1;;;43403:16:0;;-1:-1:-1;;;;;43403:16:0;43385:15;:34;:75;;;;-1:-1:-1;43440:20:0;;:12;43423:14;:37;43385:75;43357:188;;;;-1:-1:-1;;;43357:188:0;;4739:2:1;43357:188:0;;;4721:21:1;4778:2;4758:18;;;4751:30;4817:34;4797:18;;;4790:62;4888:34;4868:18;;;4861:62;-1:-1:-1;;;4939:19:1;;;4932:36;4985:19;;43357:188:0;4537:473:1;43357:188:0;49251:10:::1;49237:25;::::0;;;:13:::1;:25;::::0;;;;;:30;;49234:57:::1;;49276:15;;-1:-1:-1::0;;;49276:15:0::1;;;;;;;;;;;49234:57;49335:10;49304:14;49321:25:::0;;;:13:::1;:25;::::0;;;;;49362:21:::1;:31:::0;-1:-1:-1;49359:210:0::1;;49427:10;49441:1;49413:25:::0;;;:13:::1;:25;::::0;;;;:29;49457:37:::1;::::0;49487:6;49457:29:::1;:37::i;:::-;49514:43;::::0;;4458:25:1;;;49541:15:0::1;4514:2:1::0;4499:18;;4492:34;49521:10:0::1;::::0;49514:43:::1;::::0;4431:18:1;49514:43:0::1;4284:248:1::0;49359:210:0::1;49588:6:::0;-1:-1:-1;49163:439:0;:::o;6249:103::-;5460:13;:11;:13::i;:::-;6314:30:::1;6341:1;6314:18;:30::i;:::-;6249:103::o:0;47755:329::-;5460:13;:11;:13::i;:::-;47842:18;;-1:-1:-1;;;;;47842:18:0::1;47824:15;:36;::::0;:74:::1;;-1:-1:-1::0;47882:16:0;;-1:-1:-1;;;47882:16:0;::::1;-1:-1:-1::0;;;;;47882:16:0::1;47864:15;:34;47824:74;47821:107;;;47907:21;;-1:-1:-1::0;;;47907:21:0::1;;;;;;;;;;;47821:107;47995:10:::0;;::::1;-1:-1:-1::0;;;47995:10:0;;::::1;;:4;:15;47992:51;;48032:10:::0;;48019:24:::1;::::0;-1:-1:-1;;;48019:24:0;;-1:-1:-1;;;48032:10:0;;::::1;;;48019:24;::::0;::::1;3745:36:1::0;3718:18;;48019:24:0::1;3603:184:1::0;47992:51:0::1;48054:16:::0;:22;;-1:-1:-1;;;;;48054:22:0;;::::1;-1:-1:-1::0;;;48054:22:0::1;-1:-1:-1::0;;;;48054:22:0;;::::1;::::0;;;::::1;::::0;;47755:329::o;44755:552::-;44802:7;5460:13;:11;:13::i;:::-;44825:10;;-1:-1:-1;;;44825:10:0;::::1;;;44839:1;44825:15;44822:51;;44862:10:::0;;44849:24:::1;::::0;-1:-1:-1;;;44849:24:0;;-1:-1:-1;;;44862:10:0;;::::1;;;44849:24;::::0;::::1;3745:36:1::0;3718:18;;44849:24:0::1;3603:184:1::0;44822:51:0::1;44884:10:::0;:14;;-1:-1:-1;;;;44884:14:0::1;-1:-1:-1::0;;;44884:14:0::1;::::0;;44940:12;:25;44919:17;:46;;-1:-1:-1;;44919:46:0::1;::::0;44940:25;;44919:46:::1;:::i;:::-;::::0;;;-1:-1:-1;44999:21:0::1;::::0;-1:-1:-1;44999:19:0::1;:21::i;:::-;44976:20:::0;:44;45054:19:::1;:17;:19::i;:::-;45031:20:::0;:42;45149:12;:25;45031:4:::1;45093:10:::0;45086:89:::1;::::0;-1:-1:-1;;;;;45093:10:0;;::::1;::::0;45122::::1;::::0;45142:4:::1;::::0;45086:35:::1;:89::i;:::-;45213:12:::0;:25;45193:63:::1;::::0;;4458:25:1;;;45240:15:0::1;4514:2:1::0;4499:18;;4492:34;45201:10:0::1;::::0;45193:63:::1;::::0;4431:18:1;45193:63:0::1;;;;;;;-1:-1:-1::0;45274:12:0;:25;44755:552;:::o;47189:425::-;47234:4;5460:13;:11;:13::i;:::-;47253:10;;47266:1:::1;-1:-1:-1::0;;;47253:10:0;;::::1;;;:14;47250:50;;;47289:10:::0;;47276:24:::1;::::0;-1:-1:-1;;;47276:24:0;;-1:-1:-1;;;47289:10:0;;::::1;;;47276:24;::::0;::::1;3745:36:1::0;3718:18;;47276:24:0::1;3603:184:1::0;47250:50:0::1;47313:10:::0;:14;;-1:-1:-1;;;;47313:14:0::1;-1:-1:-1::0;;;47313:14:0::1;::::0;;47344:17;;:21;47340:190:::1;;47399:17:::0;;;47382:14:::1;47431:21:::0;;;47399:4:::1;47474:10:::0;47467:51:::1;::::0;-1:-1:-1;;;;;47474:10:0::1;47499;47399:17:::0;47467:31:::1;:51::i;:::-;47367:163;47340:190;47547:35;::::0;47566:15:::1;2603:25:1::0;;47554:10:0::1;::::0;47547:35:::1;::::0;2591:2:1;2576:18;47547:35:0::1;;;;;;;-1:-1:-1::0;47602:4:0::1;47189:425:::0;:::o;52600:181::-;52744:20;;52727:14;;-1:-1:-1;;;;;52689:26:0;;52661:7;52689:26;;;:13;:26;;;;;;52661:7;;41297:6;;52744:20;;52689:34;;41297:6;;52689:34;:::i;:::-;52688:53;;;;:::i;:::-;:76;;;;:::i;:::-;52687:86;;;;:::i;:::-;52680:93;52600:181;-1:-1:-1;;52600:181:0:o;6507:220::-;5460:13;:11;:13::i;:::-;-1:-1:-1;;;;;6592:22:0;::::1;6588:93;;6638:31;::::0;-1:-1:-1;;;6638:31:0;;6666:1:::1;6638:31;::::0;::::1;2977:51:1::0;2950:18;;6638:31:0::1;2831:203:1::0;6588:93:0::1;6691:28;6710:8;6691:18;:28::i;:::-;6507:220:::0;:::o;48865:137::-;5460:13;:11;:13::i;:::-;48921:10;;-1:-1:-1;;;48921:10:0;::::1;;;48935:1;48921:15;48918:51;;48958:10:::0;;48945:24:::1;::::0;-1:-1:-1;;;48945:24:0;;-1:-1:-1;;;48958:10:0;;::::1;;;48945:24;::::0;::::1;3745:36:1::0;3718:18;;48945:24:0::1;3603:184:1::0;48918:51:0::1;48980:10:::0;:14;;-1:-1:-1;;;;48980:14:0::1;-1:-1:-1::0;;;48980:14:0::1;::::0;;48865:137::o;51152:591::-;51263:10;;51243:4;;51263:10;-1:-1:-1;;;51263:10:0;;;;:4;:15;51260:51;;51300:10;;51287:24;;-1:-1:-1;;;51287:24:0;;-1:-1:-1;;;51300:10:0;;;;;51287:24;;;3745:36:1;3718:18;;51287:24:0;3603:184:1;51260:51:0;51343:18;;-1:-1:-1;;;;;51343:18:0;51325:15;:36;;:74;;-1:-1:-1;51383:16:0;;-1:-1:-1;;;51383:16:0;;-1:-1:-1;;;;;51383:16:0;51365:15;:34;51325:74;51322:107;;;51408:21;;-1:-1:-1;;;51408:21:0;;;;;;;;;;;51322:107;51443:20;;:24;;;;:75;;-1:-1:-1;51498:20:0;;:12;51471:14;:24;;51488:7;;51471:24;:::i;:::-;:47;51443:75;51440:102;;;51527:15;;-1:-1:-1;;;51527:15:0;;;;;;;;;;;51440:102;51566:16;;51556:26;;51553:60;;;51591:22;;-1:-1:-1;;;51591:22:0;;;;;;;;;;;51553:60;51667:16;;-1:-1:-1;;;;;51637:27:0;;;;;;:13;:27;;;;;;51627:37;;:7;:37;:::i;:::-;:56;51624:89;;;51692:21;;-1:-1:-1;;;51692:21:0;;;;;;;;;;;51624:89;-1:-1:-1;51731:4:0;51152:591;;;;:::o;5739:166::-;5620:7;5647:6;-1:-1:-1;;;;;5647:6:0;3663:10;5799:23;5795:103;;5846:40;;-1:-1:-1;;;5846:40:0;;3663:10;5846:40;;;2977:51:1;2950:18;;5846:40:0;2831:203:1;53019:161:0;53143:20;;53126:14;;53066:7;;41297:6;;;53095:19;:17;:19::i;:::-;:27;;;;:::i;:::-;53094:46;;;;:::i;:::-;:69;;;;:::i;:::-;53093:79;;;;:::i;18696:162::-;18806:43;;-1:-1:-1;;;;;5602:32:1;;;18806:43:0;;;5584:51:1;5651:18;;;5644:34;;;18779:71:0;;18799:5;;18821:14;;;;;5557:18:1;;18806:43:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18806:43:0;;;;;;;;;;;18779:19;:71::i;:::-;18696:162;;;:::o;53973:392::-;54021:7;54041:20;41297:6;54098:4;:14;;;41297:6;54066:4;:20;;;:28;;;;:::i;:::-;54065:47;;;;:::i;:::-;54064:57;;;;:::i;:::-;54192:30;;54041:80;;-1:-1:-1;54132:26:0;;54225:6;;54177:45;;54192:30;;54041:80;54177:45;:::i;:::-;:54;;;;:::i;:::-;54161:71;;:12;:71;:::i;:::-;54132:100;;54243:20;41297:6;54300:18;41297:6;54268:4;:20;;;:28;;;;:::i;:::-;54267:51;;;;:::i;:::-;54266:61;;;;:::i;:::-;54243:84;53973:392;-1:-1:-1;;;;53973:392:0:o;12619:340::-;12729:6;12705:21;:30;12701:111;;;12759:41;;-1:-1:-1;;;12759:41:0;;12794:4;12759:41;;;2977:51:1;2950:18;;12759:41:0;2831:203:1;12701:111:0;12825:12;12843:9;-1:-1:-1;;;;;12843:14:0;12865:6;12843:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12824:52;;;12892:7;12887:65;;12923:17;;-1:-1:-1;;;12923:17:0;;;;;;;;;;;50262:613;50348:4;:10;50368:18;;;50341:60;;-1:-1:-1;;;50341:60:0;;-1:-1:-1;;;;;50368:18:0;;;50341:60;;;5584:51:1;;;;5651:18;;;5644:34;;;50348:10:0;;;;50341:26;;5557:18:1;;50341:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;50419:9:0;;50438:18;;;50412:57;;-1:-1:-1;;;50412:57:0;;-1:-1:-1;;;;;50438:18:0;;;50412:57;;;5584:51:1;;;;5651:18;;;5644:34;;;50419:9:0;;;;50412:25;;5557:18:1;;50412:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;50519:22:0;;:4;50600:10;50482:16;;;;-1:-1:-1;;;;;50519:22:0;;;;:38;;50566:10;;50600;50626:12;;50566:10;50705:7;5620;5647:6;-1:-1:-1;;;;;5647:6:0;;5574:87;50705:7;50727:21;:15;50745:3;50727:21;:::i;:::-;50519:240;;;;;;-1:-1:-1;;;;;;50519:240:0;;;-1:-1:-1;;;;;6486:32:1;;;50519:240:0;;;6468:51:1;6535:18;;;6528:34;;;;6578:18;;;6571:34;;;;6621:18;;;6614:34;;;;6685:32;;;6664:19;;;6657:61;6734:19;;;6727:35;;;;6440:19;;50519:240:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50481:278;;;;;50798:12;50783:11;:27;;:54;;;;;50827:10;50814:9;:23;;50783:54;50780:87;;;50846:21;;-1:-1:-1;;;50846:21:0;;;;;;;;;;;50780:87;50330:545;;50262:613;;:::o;6887:191::-;6961:16;6980:6;;-1:-1:-1;;;;;6997:17:0;;;-1:-1:-1;;;;;;6997:17:0;;;;;;7030:40;;6980:6;;;;;;;7030:40;;6961:16;7030:40;6950:128;6887:191;:::o;54515:150::-;54623:25;;:12;54595:25;54569:7;;54651:6;;54595:53;;-1:-1:-1;;;54623:25:0;;;;;54595:53;:::i;54829:178::-;54964:25;;:12;54936:25;54881:7;;54992:6;;54936:53;;-1:-1:-1;;;54964:25:0;;;;;54936:53;:::i;:::-;:62;;;;:::i;:::-;54907:12;:25;:92;;;;:::i;19103:190::-;19231:53;;-1:-1:-1;;;;;7454:32:1;;;19231:53:0;;;7436:51:1;7523:32;;;7503:18;;;7496:60;7572:18;;;7565:34;;;19204:81:0;;19224:5;;19246:18;;;;;7409::1;;19231:53:0;7234:371:1;53486:189:0;53628:29;;53597:28;;53538:7;;53660:6;;53597:60;;53628:29;;;53597:60;:::i;:::-;:69;;;;:::i;:::-;53565:28;;:102;;;;:::i;21507:638::-;21931:23;21957:33;-1:-1:-1;;;;;21957:27:0;;21985:4;21957:27;:33::i;:::-;21931:59;;22005:10;:17;22026:1;22005:22;;:57;;;;;22043:10;22032:30;;;;;;;;;;;;:::i;:::-;22031:31;22005:57;22001:137;;;22086:40;;-1:-1:-1;;;22086:40:0;;-1:-1:-1;;;;;2995:32:1;;22086:40:0;;;2977:51:1;2950:18;;22086:40:0;2831:203:1;13822:153:0;13897:12;13929:38;13951:6;13959:4;13965:1;13929:21;:38::i;:::-;13922:45;13822:153;-1:-1:-1;;;13822:153:0:o;14310:398::-;14409:12;14462:5;14438:21;:29;14434:110;;;14491:41;;-1:-1:-1;;;14491:41:0;;14526:4;14491:41;;;2977:51:1;2950:18;;14491:41:0;2831:203:1;14434:110:0;14555:12;14569:23;14596:6;-1:-1:-1;;;;;14596:11:0;14615:5;14622:4;14596:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14554:73;;;;14645:55;14672:6;14680:7;14689:10;14645:26;:55::i;:::-;14638:62;14310:398;-1:-1:-1;;;;;;14310:398:0:o;15786:597::-;15934:12;15964:7;15959:417;;15988:19;15996:10;15988:7;:19::i;:::-;15959:417;;;16216:17;;:22;:49;;;;-1:-1:-1;;;;;;16242:18:0;;;:23;16216:49;16212:121;;;16293:24;;-1:-1:-1;;;16293:24:0;;-1:-1:-1;;;;;2995:32:1;;16293:24:0;;;2977:51:1;2950:18;;16293:24:0;2831:203:1;16212:121:0;-1:-1:-1;16354:10:0;16347:17;;16936:528;17069:17;;:21;17065:392;;17301:10;17295:17;17358:15;17345:10;17341:2;17337:19;17330:44;17065:392;17428:17;;-1:-1:-1;;;17428:17:0;;;;;;;;;;;233:1928:1;-1:-1:-1;;;;;750:32:1;;;732:51;;819:32;;;814:2;799:18;;;792:60;;;;888:32;;;883:2;868:18;;;861:60;;;;952:2;937:18;;;930:34;;;995:3;980:19;;;973:35;;;770:3;1024:19;;;1017:35;;;1083:3;1068:19;;;1061:35;;;1133:32;;;1127:3;1112:19;;1105:61;1215:4;1203:17;;1197:3;1182:19;;1175:46;1281:13;;1256:3;1241:19;;1269:26;;;1333:17;;;1327:24;1311:14;;;1304:48;1390:17;;;1384:24;1368:14;;;1361:48;1447:17;;;1441:24;1425:14;;;1418:48;1504:17;;1498:24;1482:14;;;1475:48;1558:17;;1552:24;-1:-1:-1;;;;;80:42:1;;;1618:14;;;68:55;1670:17;;;1664:24;80:42;;;1732:14;;;68:55;719:3;704:19;;;1697:50;1796:4;1788:6;1784:17;1778:24;1811:49;1854:4;1849:3;1845:14;1829;210:10;199:22;187:35;;134:94;1811:49;;1909:6;1901;1897:19;1891:26;1926:51;1969:6;1964:3;1960:16;1944:14;210:10;199:22;187:35;;134:94;1926:51;;2029:6;2021;2017:19;2011:26;2002:6;1997:3;1993:16;1986:52;2087:6;2079;2075:19;2069:26;2104:51;2147:6;2142:3;2138:16;2122:14;210:10;199:22;187:35;;134:94;2104:51;;;233:1928;;;;;;;;;;;;;:::o;2166:286::-;2225:6;2278:2;2266:9;2257:7;2253:23;2249:32;2246:52;;;2294:1;2291;2284:12;2246:52;2320:23;;-1:-1:-1;;;;;2372:31:1;;2362:42;;2352:70;;2418:1;2415;2408:12;3039:297;3098:6;3151:2;3139:9;3130:7;3126:23;3122:32;3119:52;;;3167:1;3164;3157:12;3119:52;3206:9;3193:23;-1:-1:-1;;;;;3249:5:1;3245:42;3238:5;3235:53;3225:81;;3302:1;3299;3292:12;3341:127;3402:10;3397:3;3393:20;3390:1;3383:31;3433:4;3430:1;3423:15;3457:4;3454:1;3447:15;3473:125;3538:9;;;3559:10;;;3556:36;;;3572:18;;:::i;4151:128::-;4218:9;;;4239:11;;;4236:37;;;4253:18;;:::i;5015:168::-;5088:9;;;5119;;5136:15;;;5130:22;;5116:37;5106:71;;5157:18;;:::i;5188:217::-;5228:1;5254;5244:132;;5298:10;5293:3;5289:20;5286:1;5279:31;5333:4;5330:1;5323:15;5361:4;5358:1;5351:15;5244:132;-1:-1:-1;5390:9:1;;5188:217::o;5899:277::-;5966:6;6019:2;6007:9;5998:7;5994:23;5990:32;5987:52;;;6035:1;6032;6025:12;5987:52;6067:9;6061:16;6120:5;6113:13;6106:21;6099:5;6096:32;6086:60;;6142:1;6139;6132:12;6773:456;6861:6;6869;6877;6930:2;6918:9;6909:7;6905:23;6901:32;6898:52;;;6946:1;6943;6936:12;6898:52;-1:-1:-1;;6991:16:1;;7097:2;7082:18;;7076:25;7193:2;7178:18;;;7172:25;6991:16;;7076:25;;-1:-1:-1;7172:25:1;6773:456;-1:-1:-1;6773:456:1:o;7610:301::-;7739:3;7777:6;7771:13;7823:6;7816:4;7808:6;7804:17;7799:3;7793:37;7885:1;7849:16;;7874:13;;;-1:-1:-1;7849:16:1;7610:301;-1:-1:-1;7610:301:1:o
Swarm Source
ipfs://cb24d8c88ca8f42da6cf21b9dfa03b79785e1eb99dc75852d1cbcf381abef438
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 29 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.00049 | 51,968,589.371 | $25,442.78 |
Loading...
Loading
[ Download: CSV Export ]
[ 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.