Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 75 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw USDT | 19140680 | 258 days ago | IN | 0 ETH | 0.00089675 | ||||
Withdraw Pre Tok... | 19140666 | 258 days ago | IN | 0 ETH | 0.00084198 | ||||
Withdraw Pre Tok... | 19140652 | 258 days ago | IN | 0 ETH | 0.00092304 | ||||
Withdraw Pre Tok... | 19118449 | 262 days ago | IN | 0 ETH | 0.00108054 | ||||
Withdraw Pre Tok... | 19118424 | 262 days ago | IN | 0 ETH | 0.00103298 | ||||
Buy Tokens | 19084644 | 266 days ago | IN | 0 ETH | 0.00549364 | ||||
Withdraw USDT | 19084635 | 266 days ago | IN | 0 ETH | 0.0023706 | ||||
Withdraw USDT | 19084630 | 266 days ago | IN | 0 ETH | 0.00261732 | ||||
Buy Tokens | 19084624 | 266 days ago | IN | 0 ETH | 0.00455292 | ||||
Buy Tokens | 19070465 | 268 days ago | IN | 0 ETH | 0.00345376 | ||||
Withdraw USDT | 19047787 | 272 days ago | IN | 0 ETH | 0.00067669 | ||||
Buy Tokens | 19047736 | 272 days ago | IN | 0 ETH | 0.00143617 | ||||
Buy Tokens | 19035164 | 273 days ago | IN | 0 ETH | 0.00742146 | ||||
Buy Tokens | 19011636 | 277 days ago | IN | 0 ETH | 0.00297281 | ||||
Buy Tokens | 18997680 | 279 days ago | IN | 0 ETH | 0.00198928 | ||||
Buy Tokens | 18993547 | 279 days ago | IN | 0 ETH | 0.00286292 | ||||
Buy Tokens | 18993318 | 279 days ago | IN | 0 ETH | 0.00317276 | ||||
Buy Tokens | 18993117 | 279 days ago | IN | 0 ETH | 0.00336367 | ||||
Buy Tokens | 18990140 | 280 days ago | IN | 0 ETH | 0.00198008 | ||||
Buy Tokens | 18986392 | 280 days ago | IN | 0 ETH | 0.00327341 | ||||
Buy Tokens | 18983826 | 280 days ago | IN | 0 ETH | 0.00315448 | ||||
Buy Tokens | 18983538 | 280 days ago | IN | 0 ETH | 0.00292172 | ||||
Buy Tokens | 18978961 | 281 days ago | IN | 0 ETH | 0.00561266 | ||||
Buy Tokens | 18978627 | 281 days ago | IN | 0 ETH | 0.00433864 | ||||
Withdraw USDT | 18978598 | 281 days ago | IN | 0 ETH | 0.00261773 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
CasineoCrowdSale
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-12-01 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.6; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } library BokkyPooBahsDateTimeLibrary { uint constant SECONDS_PER_DAY = 24 * 60 * 60; uint constant SECONDS_PER_HOUR = 60 * 60; uint constant SECONDS_PER_MINUTE = 60; int constant OFFSET19700101 = 2440588; uint constant DOW_MON = 1; uint constant DOW_TUE = 2; uint constant DOW_WED = 3; uint constant DOW_THU = 4; uint constant DOW_FRI = 5; uint constant DOW_SAT = 6; uint constant DOW_SUN = 7; // ------------------------------------------------------------------------ // Calculate the number of days from 1970/01/01 to year/month/day using // the date conversion algorithm from // http://aa.usno.navy.mil/faq/docs/JD_Formula.php // and subtracting the offset 2440588 so that 1970/01/01 is day 0 // // days = day // - 32075 // + 1461 * (year + 4800 + (month - 14) / 12) / 4 // + 367 * (month - 2 - (month - 14) / 12 * 12) / 12 // - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4 // - offset // ------------------------------------------------------------------------ function _daysFromDate(uint year, uint month, uint day) internal pure returns (uint _days) { require(year >= 1970); int _year = int(year); int _month = int(month); int _day = int(day); int __days = _day - 32075 + 1461 * (_year + 4800 + (_month - 14) / 12) / 4 + 367 * (_month - 2 - (_month - 14) / 12 * 12) / 12 - 3 * ((_year + 4900 + (_month - 14) / 12) / 100) / 4 - OFFSET19700101; _days = uint(__days); } // ------------------------------------------------------------------------ // Calculate year/month/day from the number of days since 1970/01/01 using // the date conversion algorithm from // http://aa.usno.navy.mil/faq/docs/JD_Formula.php // and adding the offset 2440588 so that 1970/01/01 is day 0 // // int L = days + 68569 + offset // int N = 4 * L / 146097 // L = L - (146097 * N + 3) / 4 // year = 4000 * (L + 1) / 1461001 // L = L - 1461 * year / 4 + 31 // month = 80 * L / 2447 // dd = L - 2447 * month / 80 // L = month / 11 // month = month + 2 - 12 * L // year = 100 * (N - 49) + year + L // ------------------------------------------------------------------------ function _daysToDate(uint _days) internal pure returns (uint year, uint month, uint day) { int __days = int(_days); int L = __days + 68569 + OFFSET19700101; int N = 4 * L / 146097; L = L - (146097 * N + 3) / 4; int _year = 4000 * (L + 1) / 1461001; L = L - 1461 * _year / 4 + 31; int _month = 80 * L / 2447; int _day = L - 2447 * _month / 80; L = _month / 11; _month = _month + 2 - 12 * L; _year = 100 * (N - 49) + _year + L; year = uint(_year); month = uint(_month); day = uint(_day); } function timestampFromDate(uint year, uint month, uint day) internal pure returns (uint timestamp) { timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY; } function timestampFromDateTime(uint year, uint month, uint day, uint hour, uint minute, uint second) internal pure returns (uint timestamp) { timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR + minute * SECONDS_PER_MINUTE + second; } function timestampToDate(uint timestamp) internal pure returns (uint year, uint month, uint day) { (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); } function timestampToDateTime(uint timestamp) internal pure returns (uint year, uint month, uint day, uint hour, uint minute, uint second) { (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); uint secs = timestamp % SECONDS_PER_DAY; hour = secs / SECONDS_PER_HOUR; secs = secs % SECONDS_PER_HOUR; minute = secs / SECONDS_PER_MINUTE; second = secs % SECONDS_PER_MINUTE; } function isValidDate(uint year, uint month, uint day) internal pure returns (bool valid) { if (year >= 1970 && month > 0 && month <= 12) { uint daysInMonth = _getDaysInMonth(year, month); if (day > 0 && day <= daysInMonth) { valid = true; } } } function isValidDateTime(uint year, uint month, uint day, uint hour, uint minute, uint second) internal pure returns (bool valid) { if (isValidDate(year, month, day)) { if (hour < 24 && minute < 60 && second < 60) { valid = true; } } } function isLeapYear(uint timestamp) internal pure returns (bool leapYear) { uint year; uint month; uint day; (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); leapYear = _isLeapYear(year); } function _isLeapYear(uint year) internal pure returns (bool leapYear) { leapYear = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); } function isWeekDay(uint timestamp) internal pure returns (bool weekDay) { weekDay = getDayOfWeek(timestamp) <= DOW_FRI; } function isWeekEnd(uint timestamp) internal pure returns (bool weekEnd) { weekEnd = getDayOfWeek(timestamp) >= DOW_SAT; } function getDaysInMonth(uint timestamp) internal pure returns (uint daysInMonth) { uint year; uint month; uint day; (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); daysInMonth = _getDaysInMonth(year, month); } function _getDaysInMonth(uint year, uint month) internal pure returns (uint daysInMonth) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { daysInMonth = 31; } else if (month != 2) { daysInMonth = 30; } else { daysInMonth = _isLeapYear(year) ? 29 : 28; } } // 1 = Monday, 7 = Sunday function getDayOfWeek(uint timestamp) internal pure returns (uint dayOfWeek) { uint _days = timestamp / SECONDS_PER_DAY; dayOfWeek = (_days + 3) % 7 + 1; } function getYear(uint timestamp) internal pure returns (uint year) { uint month; uint day; (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); } function getMonth(uint timestamp) internal pure returns (uint month) { uint year; uint day; (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); } function getDay(uint timestamp) internal pure returns (uint day) { uint year; uint month; (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); } function getHour(uint timestamp) internal pure returns (uint hour) { uint secs = timestamp % SECONDS_PER_DAY; hour = secs / SECONDS_PER_HOUR; } function getMinute(uint timestamp) internal pure returns (uint minute) { uint secs = timestamp % SECONDS_PER_HOUR; minute = secs / SECONDS_PER_MINUTE; } function getSecond(uint timestamp) internal pure returns (uint second) { second = timestamp % SECONDS_PER_MINUTE; } function addYears(uint timestamp, uint _years) internal pure returns (uint newTimestamp) { uint year; uint month; uint day; (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); year += _years; uint daysInMonth = _getDaysInMonth(year, month); if (day > daysInMonth) { day = daysInMonth; } newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY; require(newTimestamp >= timestamp); } function addMonths(uint timestamp, uint _months) internal pure returns (uint newTimestamp) { uint year; uint month; uint day; (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); month += _months; year += (month - 1) / 12; month = (month - 1) % 12 + 1; uint daysInMonth = _getDaysInMonth(year, month); if (day > daysInMonth) { day = daysInMonth; } newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY; require(newTimestamp >= timestamp); } function addDays(uint timestamp, uint _days) internal pure returns (uint newTimestamp) { newTimestamp = timestamp + _days * SECONDS_PER_DAY; require(newTimestamp >= timestamp); } function addHours(uint timestamp, uint _hours) internal pure returns (uint newTimestamp) { newTimestamp = timestamp + _hours * SECONDS_PER_HOUR; require(newTimestamp >= timestamp); } function addMinutes(uint timestamp, uint _minutes) internal pure returns (uint newTimestamp) { newTimestamp = timestamp + _minutes * SECONDS_PER_MINUTE; require(newTimestamp >= timestamp); } function addSeconds(uint timestamp, uint _seconds) internal pure returns (uint newTimestamp) { newTimestamp = timestamp + _seconds; require(newTimestamp >= timestamp); } function subYears(uint timestamp, uint _years) internal pure returns (uint newTimestamp) { uint year; uint month; uint day; (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); year -= _years; uint daysInMonth = _getDaysInMonth(year, month); if (day > daysInMonth) { day = daysInMonth; } newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY; require(newTimestamp <= timestamp); } function subMonths(uint timestamp, uint _months) internal pure returns (uint newTimestamp) { uint year; uint month; uint day; (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); uint yearMonth = year * 12 + (month - 1) - _months; year = yearMonth / 12; month = yearMonth % 12 + 1; uint daysInMonth = _getDaysInMonth(year, month); if (day > daysInMonth) { day = daysInMonth; } newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY; require(newTimestamp <= timestamp); } function subDays(uint timestamp, uint _days) internal pure returns (uint newTimestamp) { newTimestamp = timestamp - _days * SECONDS_PER_DAY; require(newTimestamp <= timestamp); } function subHours(uint timestamp, uint _hours) internal pure returns (uint newTimestamp) { newTimestamp = timestamp - _hours * SECONDS_PER_HOUR; require(newTimestamp <= timestamp); } function subMinutes(uint timestamp, uint _minutes) internal pure returns (uint newTimestamp) { newTimestamp = timestamp - _minutes * SECONDS_PER_MINUTE; require(newTimestamp <= timestamp); } function subSeconds(uint timestamp, uint _seconds) internal pure returns (uint newTimestamp) { newTimestamp = timestamp - _seconds; require(newTimestamp <= timestamp); } function diffYears(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _years) { require(fromTimestamp <= toTimestamp); uint fromYear; uint fromMonth; uint fromDay; uint toYear; uint toMonth; uint toDay; (fromYear, fromMonth, fromDay) = _daysToDate(fromTimestamp / SECONDS_PER_DAY); (toYear, toMonth, toDay) = _daysToDate(toTimestamp / SECONDS_PER_DAY); _years = toYear - fromYear; } function diffMonths(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _months) { require(fromTimestamp <= toTimestamp); uint fromYear; uint fromMonth; uint fromDay; uint toYear; uint toMonth; uint toDay; (fromYear, fromMonth, fromDay) = _daysToDate(fromTimestamp / SECONDS_PER_DAY); (toYear, toMonth, toDay) = _daysToDate(toTimestamp / SECONDS_PER_DAY); _months = toYear * 12 + toMonth - fromYear * 12 - fromMonth; } function diffDays(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _days) { require(fromTimestamp <= toTimestamp); _days = (toTimestamp - fromTimestamp) / SECONDS_PER_DAY; } function diffHours(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _hours) { require(fromTimestamp <= toTimestamp); _hours = (toTimestamp - fromTimestamp) / SECONDS_PER_HOUR; } function diffMinutes(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _minutes) { require(fromTimestamp <= toTimestamp); _minutes = (toTimestamp - fromTimestamp) / SECONDS_PER_MINUTE; } function diffSeconds(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _seconds) { require(fromTimestamp <= toTimestamp); _seconds = toTimestamp - fromTimestamp; } } contract CasineoCrowdSale is Ownable { using BokkyPooBahsDateTimeLibrary for uint; using SafeERC20 for IERC20; IERC20 public myToken; IERC20 public usdtToken; uint256 public currentRound = 0; uint256 public constant totalRounds = 15; mapping(uint256 => Round) public rounds; mapping(address => uint256) public amountPurchased; uint256 public globalPurchaseLimit; struct Round { uint256 startTime; uint256 endTime; uint256 tokenPrice; uint256 fundingCap; uint256 fundsRaised; bool isActive; } // Events event RoundSet(uint256 indexed round, uint256 startTime, uint256 endTime, uint256 tokenPrice, uint256 fundingCap); event TokensPurchased(address indexed buyer, uint256 amount); event RoundAdvanced(uint256 newRound); event RoundEnded(uint256 round); event USDTWithdrawn(uint256 amount); event GlobalPurchaseLimitUpdated(uint256 newLimit); event RoundEditted(uint256 roundNumber, uint256 newStartTime, uint256 newEndTime); event myTokenWithdrawn(uint256 amount); constructor(address _myToken, address _usdtToken, uint256 _globalPurchaseLimit) { myToken = IERC20(_myToken); usdtToken = IERC20(_usdtToken); globalPurchaseLimit = _globalPurchaseLimit; } //function to set rounds by owner, startTime & endTime in UTC /** * @dev Sets the rounds by owner. * @param round The number of the round. * @param startYear The Year of the start time for the round. * @param startMonth The Month of the start time for the round. * @param startDay The Day of the start time for the round. * @param startHour The Hour of the start time for the round. Time is in UTC. * @param endYear The Year of the end time for the round. * @param endMonth The Month of the end time for the round. * @param endDay The Day of the end time for the round. * @param endHour The Hour of the end time for the round. Time is in UTC. * @param tokenPrice The price per token in USDT. * @param fundingCap Maximum funds that are aiming to raised for the round. */ function setRound(uint256 round, uint256 startYear, uint256 startMonth, uint256 startDay, uint256 startHour, uint256 endYear, uint256 endMonth, uint256 endDay, uint256 endHour, uint256 tokenPrice, uint256 fundingCap) external onlyOwner { require(round < totalRounds, "Invalid round"); uint256 startTime = BokkyPooBahsDateTimeLibrary.timestampFromDate(startYear, startMonth, startDay) + startHour * 1 hours; uint256 endTime = BokkyPooBahsDateTimeLibrary.timestampFromDate(endYear, endMonth, endDay) + endHour * 1 hours; require(endTime > startTime, "End time must be after start time"); rounds[round] = Round(startTime, endTime, tokenPrice, fundingCap, 0, true); emit RoundSet(round, startTime, endTime, tokenPrice, fundingCap); } /** * @dev Edits the start and end times of a specified round. * Includes checks to ensure no overlap with other rounds. * @param roundNumber The number of the round to edit. * @param newStartTime The new start time for the round. * @param newEndTime The new end time for the round. */ function editRoundTiming(uint256 roundNumber, uint256 newStartTime, uint256 newEndTime) external onlyOwner { require(roundNumber < totalRounds, "Invalid round number"); require(newEndTime > newStartTime, "End time must be after start time"); // Check for time overlaps with other rounds for (uint256 i = 0; i < totalRounds; i++) { if (i != roundNumber) { Round memory otherRound = rounds[i]; bool isOverlapping = (newStartTime < otherRound.endTime && newEndTime > otherRound.startTime) || (newEndTime > otherRound.startTime && newStartTime < otherRound.endTime); require(!isOverlapping, "New timing overlaps with another round"); } } // Edit the round timing Round storage round = rounds[roundNumber]; round.startTime = newStartTime; round.endTime = newEndTime; emit RoundEditted(roundNumber, newStartTime, newEndTime); } /** * @dev buy tokens by external users. * @param amount The number of the round to edit. */ function buyTokens(uint256 amount) external { require(currentRound < totalRounds, "Crowdsale ended"); Round storage round = rounds[currentRound]; require(block.timestamp >= round.startTime && block.timestamp <= round.endTime, "Round not active"); require(round.isActive, "Round is not active"); require(amountPurchased[msg.sender] + amount <= globalPurchaseLimit, "Global purchase limit exceeded"); amount = amount / 1 ether; uint256 cost = amount * round.tokenPrice; IERC20(usdtToken).safeTransferFrom(msg.sender, address(this), cost); round.fundsRaised += cost; if (round.fundsRaised >= round.fundingCap) { round.isActive = false; emit RoundEnded(currentRound); } amountPurchased[msg.sender] += amount * (10 ** 18); IERC20(myToken).safeTransfer(msg.sender, amount * (10 ** 18)); emit TokensPurchased(msg.sender, amount); } function advanceRound() external onlyOwner { require(currentRound < totalRounds - 1, "All rounds completed"); currentRound++; Round storage round = rounds[currentRound]; round.startTime = block.timestamp; emit RoundAdvanced(currentRound); } /** * @dev withdraws funds from the crowdsale contract by owner. * @param amount that supposed to be withdrawn. */ function withdrawUSDT(uint256 amount) external onlyOwner { IERC20(usdtToken).safeTransfer(msg.sender, amount); emit USDTWithdrawn(amount); } /** * @dev withdraws preTokens - sale tokens from the crowdsale contract by owner. * @param amount that supposed to be withdrawn. */ function withdrawPreToken(uint256 amount) external onlyOwner { IERC20(myToken).safeTransfer(msg.sender, amount); emit myTokenWithdrawn(amount); } /** * @dev sets the purchase limit for a particular user to avoid whales. * @param limit as the number of tokens can be bought by a particular wallet address. */ function setGlobalPurchaseLimit(uint256 limit) external onlyOwner { globalPurchaseLimit = limit; emit GlobalPurchaseLimitUpdated(limit); } /** * @dev checks and manually end a round if needed. * @param round number to be ended. */ function endRoundIfCapMet(uint256 round) external onlyOwner { require(round < totalRounds, "Invalid round"); Round storage r = rounds[round]; require(block.timestamp >= r.startTime && block.timestamp <= r.endTime, "Round not within time bounds"); require(r.isActive, "Round already ended"); if (r.fundsRaised >= r.fundingCap) { r.isActive = false; r.endTime = block.timestamp; emit RoundEnded(round); } } /** * @dev Manually ends a specified round before its scheduled end time. * @param roundNumber The number of the round to end. */ function endRoundManually(uint256 roundNumber) external onlyOwner { require(roundNumber < totalRounds, "Invalid round number"); Round storage round = rounds[roundNumber]; require(round.isActive, "Specified round is already inactive"); // Set the specified round to inactive round.isActive = false; round.endTime = block.timestamp; // Emit an event to indicate the round has ended emit RoundEnded(roundNumber); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_myToken","type":"address"},{"internalType":"address","name":"_usdtToken","type":"address"},{"internalType":"uint256","name":"_globalPurchaseLimit","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"GlobalPurchaseLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRound","type":"uint256"}],"name":"RoundAdvanced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"roundNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newStartTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newEndTime","type":"uint256"}],"name":"RoundEditted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"}],"name":"RoundEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fundingCap","type":"uint256"}],"name":"RoundSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"USDTWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"myTokenWithdrawn","type":"event"},{"inputs":[],"name":"advanceRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundNumber","type":"uint256"},{"internalType":"uint256","name":"newStartTime","type":"uint256"},{"internalType":"uint256","name":"newEndTime","type":"uint256"}],"name":"editRoundTiming","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"round","type":"uint256"}],"name":"endRoundIfCapMet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundNumber","type":"uint256"}],"name":"endRoundManually","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"globalPurchaseLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rounds","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"tokenPrice","type":"uint256"},{"internalType":"uint256","name":"fundingCap","type":"uint256"},{"internalType":"uint256","name":"fundsRaised","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setGlobalPurchaseLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"round","type":"uint256"},{"internalType":"uint256","name":"startYear","type":"uint256"},{"internalType":"uint256","name":"startMonth","type":"uint256"},{"internalType":"uint256","name":"startDay","type":"uint256"},{"internalType":"uint256","name":"startHour","type":"uint256"},{"internalType":"uint256","name":"endYear","type":"uint256"},{"internalType":"uint256","name":"endMonth","type":"uint256"},{"internalType":"uint256","name":"endDay","type":"uint256"},{"internalType":"uint256","name":"endHour","type":"uint256"},{"internalType":"uint256","name":"tokenPrice","type":"uint256"},{"internalType":"uint256","name":"fundingCap","type":"uint256"}],"name":"setRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalRounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdtToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawPreToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260006003553480156200001657600080fd5b5060405162001708380380620017088339810160408190526200003991620000ea565b62000044336200007d565b600180546001600160a01b039485166001600160a01b03199182161790915560028054939094169216919091179091556006556200012b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000e557600080fd5b919050565b6000806000606084860312156200010057600080fd5b6200010b84620000cd565b92506200011b60208501620000cd565b9150604084015190509250925092565b6115cd806200013b6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80637f645936116100ad578063a5fee8c911610071578063a5fee8c914610291578063a98ad46c146102a4578063b8fcf937146102b7578063cab580ef146102ca578063f2fde38b146102dd57600080fd5b80637f645936146101d35780638a19c8bc146101e65780638a568299146101ef5780638c65c81f146101f75780638da5cb5b1461026c57600080fd5b8063386df914116100f4578063386df914146101895780633cb7da251461019c5780633ea521ef146101af578063503e97d4146101c2578063715018a6146101cb57600080fd5b8063074ba79d146101265780631ba9998b146101595780631c4465b7146101635780633610724e14610176575b600080fd5b610146610134366004611298565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b6101616102f0565b005b6101616101713660046112c1565b6103b4565b6101616101843660046112c1565b6103f1565b6101616101973660046112c1565b610696565b6101616101aa3660046112c1565b6107f1565b6101616101bd3660046112c1565b6108f0565b61014660065481565b61016161093f565b6101616101e13660046112da565b610953565b61014660035481565b610146600f81565b61023d6102053660046112c1565b600460208190526000918252604090912080546001820154600283015460038401549484015460059094015492949193909260ff1686565b6040805196875260208701959095529385019290925260608401526080830152151560a082015260c001610150565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610150565b61016161029f3660046112c1565b610b00565b600254610279906001600160a01b031681565b600154610279906001600160a01b031681565b6101616102d836600461134c565b610b4f565b6101616102eb366004611298565b610d26565b6102f8610d9f565b6103046001600f61138e565b600354106103505760405162461bcd60e51b8152602060048201526014602482015273105b1b081c9bdd5b991cc818dbdb5c1b195d195960621b60448201526064015b60405180910390fd5b60038054906000610360836113a7565b909155505060038054600090815260046020908152604091829020428155925491519182527f023811fd72d20a3eb734785eed809172b5c9c24019d493039c70ef9c276d4d9791015b60405180910390a150565b6103bc610d9f565b60068190556040518181527f9cae9f123aa12df9d12baf1969766d73a5ecea0ba88d0ec65ddff4bdc0b599de906020016103a9565b600f600354106104355760405162461bcd60e51b815260206004820152600f60248201526e10dc9bddd91cd85b1948195b991959608a1b6044820152606401610347565b60035460009081526004602052604090208054421080159061045b575080600101544211155b61049a5760405162461bcd60e51b815260206004820152601060248201526f526f756e64206e6f742061637469766560801b6044820152606401610347565b600581015460ff166104e45760405162461bcd60e51b8152602060048201526013602482015272526f756e64206973206e6f742061637469766560681b6044820152606401610347565b600654336000908152600560205260409020546105029084906113c0565b11156105505760405162461bcd60e51b815260206004820152601e60248201527f476c6f62616c207075726368617365206c696d697420657863656564656400006044820152606401610347565b610562670de0b6b3a7640000836113e9565b9150600081600201548361057691906113fd565b600254909150610591906001600160a01b0316333084610df9565b808260040160008282546105a591906113c0565b909155505060038201546004830154106105fc5760058201805460ff191690556003546040519081527faa97d4a7b3afec5f55c25ca8593dde6929d4455fad650a16fa4334004293a6189060200160405180910390a15b61060e83670de0b6b3a76400006113fd565b336000908152600560205260408120805490919061062d9084906113c0565b9091555061065c90503361064985670de0b6b3a76400006113fd565b6001546001600160a01b03169190610e6a565b60405183815233907f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc2719060200160405180910390a2505050565b61069e610d9f565b600f81106106de5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081c9bdd5b99609a1b6044820152606401610347565b600081815260046020526040902080544210801590610701575080600101544211155b61074d5760405162461bcd60e51b815260206004820152601c60248201527f526f756e64206e6f742077697468696e2074696d6520626f756e6473000000006044820152606401610347565b600581015460ff166107975760405162461bcd60e51b8152602060048201526013602482015272149bdd5b9908185b1c9958591e48195b991959606a1b6044820152606401610347565b80600301548160040154106107ed5760058101805460ff191690554260018201556040518281527faa97d4a7b3afec5f55c25ca8593dde6929d4455fad650a16fa4334004293a618906020015b60405180910390a15b5050565b6107f9610d9f565b600f81106108405760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b2103937bab73210373ab6b132b960611b6044820152606401610347565b6000818152600460205260409020600581015460ff166108ae5760405162461bcd60e51b815260206004820152602360248201527f53706563696669656420726f756e6420697320616c726561647920696e61637460448201526269766560e81b6064820152608401610347565b60058101805460ff191690554260018201556040518281527faa97d4a7b3afec5f55c25ca8593dde6929d4455fad650a16fa4334004293a618906020016107e4565b6108f8610d9f565b60025461090f906001600160a01b03163383610e6a565b6040518181527f7fca92c9929b53120be04d990950b67da0dc00465c2b07a3a9c7d7c7f4d7d26a906020016103a9565b610947610d9f565b6109516000610e9f565b565b61095b610d9f565b600f8b1061099b5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081c9bdd5b99609a1b6044820152606401610347565b60006109a988610e106113fd565b6109b48c8c8c610eef565b6109be91906113c0565b905060006109ce85610e106113fd565b6109d9898989610eef565b6109e391906113c0565b9050818111610a045760405162461bcd60e51b815260040161034790611414565b6040518060c001604052808381526020018281526020018581526020018481526020016000815260200160011515815250600460008f8152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff0219169083151502179055509050508c7f35381f5c914bda88ca9ff05360c3b87d3e3f791ce86c8136706c7d0d8242594183838787604051610ae9949392919093845260208401929092526040830152606082015260800190565b60405180910390a250505050505050505050505050565b610b08610d9f565b600154610b1f906001600160a01b03163383610e6a565b6040518181527f1c647730c586b6474035a573d1a6f40e1de75653098f1ac7e4909f4462334b68906020016103a9565b610b57610d9f565b600f8310610b9e5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b2103937bab73210373ab6b132b960611b6044820152606401610347565b818111610bbd5760405162461bcd60e51b815260040161034790611414565b60005b600f811015610cc557838114610cb3576000818152600460208181526040808420815160c0810183528154815260018201549381018490526002820154928101929092526003810154606083015292830154608082015260059092015460ff16151560a083015290919085108015610c385750815184115b80610c515750815184118015610c515750816020015185105b90508015610cb05760405162461bcd60e51b815260206004820152602660248201527f4e65772074696d696e67206f7665726c617073207769746820616e6f74686572604482015265081c9bdd5b9960d21b6064820152608401610347565b50505b80610cbd816113a7565b915050610bc0565b506000838152600460209081526040918290208481556001810184905582518681529182018590529181018390527fc930e8848528cbcf7ee2467eaccaa9e2fc50d558d3246da83405019cd618ead69060600160405180910390a150505050565b610d2e610d9f565b6001600160a01b038116610d935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610347565b610d9c81610e9f565b50565b6000546001600160a01b031633146109515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610347565b6040516001600160a01b0380851660248301528316604482015260648101829052610e649085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f12565b50505050565b6040516001600160a01b038316602482015260448101829052610e9a90849063a9059cbb60e01b90606401610e2d565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600062015180610f00858585610fe4565b610f0a91906113fd565b949350505050565b6000610f67826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111219092919063ffffffff16565b805190915015610e9a5780806020019051810190610f859190611455565b610e9a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610347565b60006107b2841015610ff557600080fd5b838383600062253d8c60046064600c61100f600e88611477565b611019919061149e565b611025886113246114cc565b61102f91906114cc565b611039919061149e565b6110449060036114f4565b61104e919061149e565b600c8061105c600e88611477565b611066919061149e565b61107190600c6114f4565b61107c600288611477565b6110869190611477565b6110929061016f6114f4565b61109c919061149e565b6004600c6110ab600e89611477565b6110b5919061149e565b6110c1896112c06114cc565b6110cb91906114cc565b6110d7906105b56114f4565b6110e1919061149e565b6110ed617d4b87611477565b6110f791906114cc565b61110191906114cc565b61110b9190611477565b6111159190611477565b98975050505050505050565b6060610f0a8484600085611137565b9392505050565b6060824710156111985760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610347565b843b6111e65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610347565b600080866001600160a01b031685876040516112029190611548565b60006040518083038185875af1925050503d806000811461123f576040519150601f19603f3d011682016040523d82523d6000602084013e611244565b606091505b509150915061125482828661125f565b979650505050505050565b6060831561126e575081611130565b82511561127e5782518084602001fd5b8160405162461bcd60e51b81526004016103479190611564565b6000602082840312156112aa57600080fd5b81356001600160a01b038116811461113057600080fd5b6000602082840312156112d357600080fd5b5035919050565b60008060008060008060008060008060006101608c8e0312156112fc57600080fd5b505089359b60208b01359b5060408b01359a60608101359a506080810135995060a0810135985060c0810135975060e0810135965061010081013595506101208101359450610140013592509050565b60008060006060848603121561136157600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156113a1576113a1611378565b92915050565b6000600182016113b9576113b9611378565b5060010190565b808201808211156113a1576113a1611378565b634e487b7160e01b600052601260045260246000fd5b6000826113f8576113f86113d3565b500490565b80820281158282048414176113a1576113a1611378565b60208082526021908201527f456e642074696d65206d7573742062652061667465722073746172742074696d6040820152606560f81b606082015260800190565b60006020828403121561146757600080fd5b8151801515811461113057600080fd5b818103600083128015838313168383128216171561149757611497611378565b5092915050565b6000826114ad576114ad6113d3565b600160ff1b8214600019841416156114c7576114c7611378565b500590565b80820182811260008312801582168215821617156114ec576114ec611378565b505092915050565b80820260008212600160ff1b8414161561151057611510611378565b81810583148215176113a1576113a1611378565b60005b8381101561153f578181015183820152602001611527565b50506000910152565b6000825161155a818460208701611524565b9190910192915050565b6020815260008251806020840152611583816040850160208701611524565b601f01601f1916919091016040019291505056fea2646970667358221220f1fa9c6e295a2808df4bee7f19b6e1bcacb0fafbd76cb1a65b44050b3232692d64736f6c634300081200330000000000000000000000001bea6f8d402a8a546a8fff48f60791535c9f8584000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c80637f645936116100ad578063a5fee8c911610071578063a5fee8c914610291578063a98ad46c146102a4578063b8fcf937146102b7578063cab580ef146102ca578063f2fde38b146102dd57600080fd5b80637f645936146101d35780638a19c8bc146101e65780638a568299146101ef5780638c65c81f146101f75780638da5cb5b1461026c57600080fd5b8063386df914116100f4578063386df914146101895780633cb7da251461019c5780633ea521ef146101af578063503e97d4146101c2578063715018a6146101cb57600080fd5b8063074ba79d146101265780631ba9998b146101595780631c4465b7146101635780633610724e14610176575b600080fd5b610146610134366004611298565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b6101616102f0565b005b6101616101713660046112c1565b6103b4565b6101616101843660046112c1565b6103f1565b6101616101973660046112c1565b610696565b6101616101aa3660046112c1565b6107f1565b6101616101bd3660046112c1565b6108f0565b61014660065481565b61016161093f565b6101616101e13660046112da565b610953565b61014660035481565b610146600f81565b61023d6102053660046112c1565b600460208190526000918252604090912080546001820154600283015460038401549484015460059094015492949193909260ff1686565b6040805196875260208701959095529385019290925260608401526080830152151560a082015260c001610150565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610150565b61016161029f3660046112c1565b610b00565b600254610279906001600160a01b031681565b600154610279906001600160a01b031681565b6101616102d836600461134c565b610b4f565b6101616102eb366004611298565b610d26565b6102f8610d9f565b6103046001600f61138e565b600354106103505760405162461bcd60e51b8152602060048201526014602482015273105b1b081c9bdd5b991cc818dbdb5c1b195d195960621b60448201526064015b60405180910390fd5b60038054906000610360836113a7565b909155505060038054600090815260046020908152604091829020428155925491519182527f023811fd72d20a3eb734785eed809172b5c9c24019d493039c70ef9c276d4d9791015b60405180910390a150565b6103bc610d9f565b60068190556040518181527f9cae9f123aa12df9d12baf1969766d73a5ecea0ba88d0ec65ddff4bdc0b599de906020016103a9565b600f600354106104355760405162461bcd60e51b815260206004820152600f60248201526e10dc9bddd91cd85b1948195b991959608a1b6044820152606401610347565b60035460009081526004602052604090208054421080159061045b575080600101544211155b61049a5760405162461bcd60e51b815260206004820152601060248201526f526f756e64206e6f742061637469766560801b6044820152606401610347565b600581015460ff166104e45760405162461bcd60e51b8152602060048201526013602482015272526f756e64206973206e6f742061637469766560681b6044820152606401610347565b600654336000908152600560205260409020546105029084906113c0565b11156105505760405162461bcd60e51b815260206004820152601e60248201527f476c6f62616c207075726368617365206c696d697420657863656564656400006044820152606401610347565b610562670de0b6b3a7640000836113e9565b9150600081600201548361057691906113fd565b600254909150610591906001600160a01b0316333084610df9565b808260040160008282546105a591906113c0565b909155505060038201546004830154106105fc5760058201805460ff191690556003546040519081527faa97d4a7b3afec5f55c25ca8593dde6929d4455fad650a16fa4334004293a6189060200160405180910390a15b61060e83670de0b6b3a76400006113fd565b336000908152600560205260408120805490919061062d9084906113c0565b9091555061065c90503361064985670de0b6b3a76400006113fd565b6001546001600160a01b03169190610e6a565b60405183815233907f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc2719060200160405180910390a2505050565b61069e610d9f565b600f81106106de5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081c9bdd5b99609a1b6044820152606401610347565b600081815260046020526040902080544210801590610701575080600101544211155b61074d5760405162461bcd60e51b815260206004820152601c60248201527f526f756e64206e6f742077697468696e2074696d6520626f756e6473000000006044820152606401610347565b600581015460ff166107975760405162461bcd60e51b8152602060048201526013602482015272149bdd5b9908185b1c9958591e48195b991959606a1b6044820152606401610347565b80600301548160040154106107ed5760058101805460ff191690554260018201556040518281527faa97d4a7b3afec5f55c25ca8593dde6929d4455fad650a16fa4334004293a618906020015b60405180910390a15b5050565b6107f9610d9f565b600f81106108405760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b2103937bab73210373ab6b132b960611b6044820152606401610347565b6000818152600460205260409020600581015460ff166108ae5760405162461bcd60e51b815260206004820152602360248201527f53706563696669656420726f756e6420697320616c726561647920696e61637460448201526269766560e81b6064820152608401610347565b60058101805460ff191690554260018201556040518281527faa97d4a7b3afec5f55c25ca8593dde6929d4455fad650a16fa4334004293a618906020016107e4565b6108f8610d9f565b60025461090f906001600160a01b03163383610e6a565b6040518181527f7fca92c9929b53120be04d990950b67da0dc00465c2b07a3a9c7d7c7f4d7d26a906020016103a9565b610947610d9f565b6109516000610e9f565b565b61095b610d9f565b600f8b1061099b5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081c9bdd5b99609a1b6044820152606401610347565b60006109a988610e106113fd565b6109b48c8c8c610eef565b6109be91906113c0565b905060006109ce85610e106113fd565b6109d9898989610eef565b6109e391906113c0565b9050818111610a045760405162461bcd60e51b815260040161034790611414565b6040518060c001604052808381526020018281526020018581526020018481526020016000815260200160011515815250600460008f8152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff0219169083151502179055509050508c7f35381f5c914bda88ca9ff05360c3b87d3e3f791ce86c8136706c7d0d8242594183838787604051610ae9949392919093845260208401929092526040830152606082015260800190565b60405180910390a250505050505050505050505050565b610b08610d9f565b600154610b1f906001600160a01b03163383610e6a565b6040518181527f1c647730c586b6474035a573d1a6f40e1de75653098f1ac7e4909f4462334b68906020016103a9565b610b57610d9f565b600f8310610b9e5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b2103937bab73210373ab6b132b960611b6044820152606401610347565b818111610bbd5760405162461bcd60e51b815260040161034790611414565b60005b600f811015610cc557838114610cb3576000818152600460208181526040808420815160c0810183528154815260018201549381018490526002820154928101929092526003810154606083015292830154608082015260059092015460ff16151560a083015290919085108015610c385750815184115b80610c515750815184118015610c515750816020015185105b90508015610cb05760405162461bcd60e51b815260206004820152602660248201527f4e65772074696d696e67206f7665726c617073207769746820616e6f74686572604482015265081c9bdd5b9960d21b6064820152608401610347565b50505b80610cbd816113a7565b915050610bc0565b506000838152600460209081526040918290208481556001810184905582518681529182018590529181018390527fc930e8848528cbcf7ee2467eaccaa9e2fc50d558d3246da83405019cd618ead69060600160405180910390a150505050565b610d2e610d9f565b6001600160a01b038116610d935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610347565b610d9c81610e9f565b50565b6000546001600160a01b031633146109515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610347565b6040516001600160a01b0380851660248301528316604482015260648101829052610e649085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f12565b50505050565b6040516001600160a01b038316602482015260448101829052610e9a90849063a9059cbb60e01b90606401610e2d565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600062015180610f00858585610fe4565b610f0a91906113fd565b949350505050565b6000610f67826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111219092919063ffffffff16565b805190915015610e9a5780806020019051810190610f859190611455565b610e9a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610347565b60006107b2841015610ff557600080fd5b838383600062253d8c60046064600c61100f600e88611477565b611019919061149e565b611025886113246114cc565b61102f91906114cc565b611039919061149e565b6110449060036114f4565b61104e919061149e565b600c8061105c600e88611477565b611066919061149e565b61107190600c6114f4565b61107c600288611477565b6110869190611477565b6110929061016f6114f4565b61109c919061149e565b6004600c6110ab600e89611477565b6110b5919061149e565b6110c1896112c06114cc565b6110cb91906114cc565b6110d7906105b56114f4565b6110e1919061149e565b6110ed617d4b87611477565b6110f791906114cc565b61110191906114cc565b61110b9190611477565b6111159190611477565b98975050505050505050565b6060610f0a8484600085611137565b9392505050565b6060824710156111985760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610347565b843b6111e65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610347565b600080866001600160a01b031685876040516112029190611548565b60006040518083038185875af1925050503d806000811461123f576040519150601f19603f3d011682016040523d82523d6000602084013e611244565b606091505b509150915061125482828661125f565b979650505050505050565b6060831561126e575081611130565b82511561127e5782518084602001fd5b8160405162461bcd60e51b81526004016103479190611564565b6000602082840312156112aa57600080fd5b81356001600160a01b038116811461113057600080fd5b6000602082840312156112d357600080fd5b5035919050565b60008060008060008060008060008060006101608c8e0312156112fc57600080fd5b505089359b60208b01359b5060408b01359a60608101359a506080810135995060a0810135985060c0810135975060e0810135965061010081013595506101208101359450610140013592509050565b60008060006060848603121561136157600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156113a1576113a1611378565b92915050565b6000600182016113b9576113b9611378565b5060010190565b808201808211156113a1576113a1611378565b634e487b7160e01b600052601260045260246000fd5b6000826113f8576113f86113d3565b500490565b80820281158282048414176113a1576113a1611378565b60208082526021908201527f456e642074696d65206d7573742062652061667465722073746172742074696d6040820152606560f81b606082015260800190565b60006020828403121561146757600080fd5b8151801515811461113057600080fd5b818103600083128015838313168383128216171561149757611497611378565b5092915050565b6000826114ad576114ad6113d3565b600160ff1b8214600019841416156114c7576114c7611378565b500590565b80820182811260008312801582168215821617156114ec576114ec611378565b505092915050565b80820260008212600160ff1b8414161561151057611510611378565b81810583148215176113a1576113a1611378565b60005b8381101561153f578181015183820152602001611527565b50506000910152565b6000825161155a818460208701611524565b9190910192915050565b6020815260008251806020840152611583816040850160208701611524565b601f01601f1916919091016040019291505056fea2646970667358221220f1fa9c6e295a2808df4bee7f19b6e1bcacb0fafbd76cb1a65b44050b3232692d64736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001bea6f8d402a8a546a8fff48f60791535c9f8584000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
-----Decoded View---------------
Arg [0] : _myToken (address): 0x1bEa6F8D402a8a546a8fFf48f60791535C9F8584
Arg [1] : _usdtToken (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [2] : _globalPurchaseLimit (uint256): 100000000000000000000000000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001bea6f8d402a8a546a8fff48f60791535c9f8584
Arg [1] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [2] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Deployed Bytecode Sourcemap
31380:8153:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31699:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;451:25:1;;;439:2;424:18;31699:50:0;;;;;;;;36957:290;;;:::i;:::-;;38085:161;;;;;;:::i;:::-;;:::i;35962:987::-;;;;;;:::i;:::-;;:::i;38369:504::-;;;;;;:::i;:::-;;:::i;39034:494::-;;;;;;:::i;:::-;;:::i;37393:163::-;;;;;;:::i;:::-;;:::i;31756:34::-;;;;;;2699:103;;;:::i;33597:862::-;;;;;;:::i;:::-;;:::i;31568:31::-;;;;;;31606:40;;31644:2;31606:40;;31653:39;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1828:25:1;;;1884:2;1869:18;;1862:34;;;;1912:18;;;1905:34;;;;1970:2;1955:18;;1948:34;2013:3;1998:19;;1991:35;2070:14;2063:22;2057:3;2042:19;;2035:51;1815:3;1800:19;31653:39:0;1547:545:1;2051:87:0;2097:7;2124:6;-1:-1:-1;;;;;2124:6:0;2051:87;;;-1:-1:-1;;;;;2261:32:1;;;2243:51;;2231:2;2216:18;2051:87:0;2097:203:1;37720:168:0;;;;;;:::i;:::-;;:::i;31536:23::-;;;;;-1:-1:-1;;;;;31536:23:0;;;31508:21;;;;;-1:-1:-1;;;;;31508:21:0;;;34799:1039;;;;;;:::i;:::-;;:::i;2957:201::-;;;;;;:::i;:::-;;:::i;36957:290::-;1937:13;:11;:13::i;:::-;37034:15:::1;37048:1;31644:2;37034:15;:::i;:::-;37019:12;;:30;37011:63;;;::::0;-1:-1:-1;;;37011:63:0;;3315:2:1;37011:63:0::1;::::0;::::1;3297:21:1::0;3354:2;3334:18;;;3327:30;-1:-1:-1;;;3373:18:1;;;3366:50;3433:18;;37011:63:0::1;;;;;;;;;37085:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;37139:12:0::1;::::0;;37110:19:::1;37132:20:::0;;;:6:::1;:20;::::0;;;;;;;;37181:15:::1;37163:33:::0;;37226:12;;37212:27;;451:25:1;;;37212:27:0::1;::::0;424:18:1;37212:27:0::1;;;;;;;;37000:247;36957:290::o:0;38085:161::-;1937:13;:11;:13::i;:::-;38162:19:::1;:27:::0;;;38205:33:::1;::::0;451:25:1;;;38205:33:0::1;::::0;439:2:1;424:18;38205:33:0::1;305:177:1::0;35962:987:0;31644:2;36025:12;;:26;36017:54;;;;-1:-1:-1;;;36017:54:0;;3804:2:1;36017:54:0;;;3786:21:1;3843:2;3823:18;;;3816:30;-1:-1:-1;;;3862:18:1;;;3855:45;3917:18;;36017:54:0;3602:339:1;36017:54:0;36111:12;;36082:19;36104:20;;;:6;:20;;;;;36162:15;;36143;:34;;;;:70;;;36200:5;:13;;;36181:15;:32;;36143:70;36135:99;;;;-1:-1:-1;;;36135:99:0;;4148:2:1;36135:99:0;;;4130:21:1;4187:2;4167:18;;;4160:30;-1:-1:-1;;;4206:18:1;;;4199:46;4262:18;;36135:99:0;3946:340:1;36135:99:0;36253:14;;;;;;36245:46;;;;-1:-1:-1;;;36245:46:0;;4493:2:1;36245:46:0;;;4475:21:1;4532:2;4512:18;;;4505:30;-1:-1:-1;;;4551:18:1;;;4544:49;4610:18;;36245:46:0;4291:343:1;36245:46:0;36350:19;;36326:10;36310:27;;;;:15;:27;;;;;;:36;;36340:6;;36310:36;:::i;:::-;:59;;36302:102;;;;-1:-1:-1;;;36302:102:0;;4971:2:1;36302:102:0;;;4953:21:1;5010:2;4990:18;;;4983:30;5049:32;5029:18;;;5022:60;5099:18;;36302:102:0;4769:354:1;36302:102:0;36426:16;36435:7;36426:6;:16;:::i;:::-;36417:25;;36455:12;36479:5;:16;;;36470:6;:25;;;;:::i;:::-;36513:9;;36455:40;;-1:-1:-1;36506:67:0;;-1:-1:-1;;;;;36513:9:0;36541:10;36561:4;36455:40;36506:34;:67::i;:::-;36605:4;36584:5;:17;;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;36645:16:0;;;;36624:17;;;;:37;36620:136;;36678:14;;;:22;;-1:-1:-1;;36678:22:0;;;36731:12;;36720:24;;451:25:1;;;36720:24:0;;439:2:1;424:18;36720:24:0;;;;;;;36620:136;36799:19;:6;36809:8;36799:19;:::i;:::-;36784:10;36768:27;;;;:15;:27;;;;;:50;;:27;;;:50;;;;;:::i;:::-;;;;-1:-1:-1;36829:61:0;;-1:-1:-1;36858:10:0;36870:19;:6;36880:8;36870:19;:::i;:::-;36836:7;;-1:-1:-1;;;;;36836:7:0;;36829:61;:28;:61::i;:::-;36906:35;;451:25:1;;;36922:10:0;;36906:35;;439:2:1;424:18;36906:35:0;;;;;;;36006:943;;35962:987;:::o;38369:504::-;1937:13;:11;:13::i;:::-;31644:2:::1;38448:5;:19;38440:45;;;::::0;-1:-1:-1;;;38440:45:0;;5760:2:1;38440:45:0::1;::::0;::::1;5742:21:1::0;5799:2;5779:18;;;5772:30;-1:-1:-1;;;5818:18:1;;;5811:43;5871:18;;38440:45:0::1;5558:337:1::0;38440:45:0::1;38496:15;38514:13:::0;;;:6:::1;:13;::::0;;;;38565:11;;38546:15:::1;:30;::::0;::::1;::::0;:62:::1;;;38599:1;:9;;;38580:15;:28;;38546:62;38538:103;;;::::0;-1:-1:-1;;;38538:103:0;;6102:2:1;38538:103:0::1;::::0;::::1;6084:21:1::0;6141:2;6121:18;;;6114:30;6180;6160:18;;;6153:58;6228:18;;38538:103:0::1;5900:352:1::0;38538:103:0::1;38660:10;::::0;::::1;::::0;::::1;;38652:42;;;::::0;-1:-1:-1;;;38652:42:0;;6459:2:1;38652:42:0::1;::::0;::::1;6441:21:1::0;6498:2;6478:18;;;6471:30;-1:-1:-1;;;6517:18:1;;;6510:49;6576:18;;38652:42:0::1;6257:343:1::0;38652:42:0::1;38728:1;:12;;;38711:1;:13;;;:29;38707:159;;38757:10;::::0;::::1;:18:::0;;-1:-1:-1;;38757:18:0::1;::::0;;38802:15:::1;-1:-1:-1::0;38790:9:0;::::1;:27:::0;38837:17:::1;::::0;451:25:1;;;38837:17:0::1;::::0;439:2:1;424:18;38837:17:0::1;;;;;;;;38707:159;38429:444;38369:504:::0;:::o;39034:494::-;1937:13;:11;:13::i;:::-;31644:2:::1;39119:11;:25;39111:58;;;::::0;-1:-1:-1;;;39111:58:0;;6807:2:1;39111:58:0::1;::::0;::::1;6789:21:1::0;6846:2;6826:18;;;6819:30;-1:-1:-1;;;6865:18:1;;;6858:50;6925:18;;39111:58:0::1;6605:344:1::0;39111:58:0::1;39182:19;39204::::0;;;:6:::1;:19;::::0;;;;39242:14:::1;::::0;::::1;::::0;::::1;;39234:62;;;::::0;-1:-1:-1;;;39234:62:0;;7156:2:1;39234:62:0::1;::::0;::::1;7138:21:1::0;7195:2;7175:18;;;7168:30;7234:34;7214:18;;;7207:62;-1:-1:-1;;;7285:18:1;;;7278:33;7328:19;;39234:62:0::1;6954:399:1::0;39234:62:0::1;39357:14;::::0;::::1;:22:::0;;-1:-1:-1;;39357:22:0::1;::::0;;39406:15:::1;-1:-1:-1::0;39390:13:0;::::1;:31:::0;39497:23:::1;::::0;451:25:1;;;39497:23:0::1;::::0;439:2:1;424:18;39497:23:0::1;305:177:1::0;37393:163:0;1937:13;:11;:13::i;:::-;37468:9:::1;::::0;37461:50:::1;::::0;-1:-1:-1;;;;;37468:9:0::1;37492:10;37504:6:::0;37461:30:::1;:50::i;:::-;37527:21;::::0;451:25:1;;;37527:21:0::1;::::0;439:2:1;424:18;37527:21:0::1;305:177:1::0;2699:103:0;1937:13;:11;:13::i;:::-;2764:30:::1;2791:1;2764:18;:30::i;:::-;2699:103::o:0;33597:862::-;1937:13;:11;:13::i;:::-;31644:2:::1;33922:5;:19;33914:45;;;::::0;-1:-1:-1;;;33914:45:0;;5760:2:1;33914:45:0::1;::::0;::::1;5742:21:1::0;5799:2;5779:18;;;5772:30;-1:-1:-1;;;5818:18:1;;;5811:43;5871:18;;33914:45:0::1;5558:337:1::0;33914:45:0::1;33970:17;34071:19;:9:::0;34083:7:::1;34071:19;:::i;:::-;33990:78;34036:9;34047:10;34059:8;33990:45;:78::i;:::-;:100;;;;:::i;:::-;33970:120:::0;-1:-1:-1;34101:15:0::1;34194:17;:7:::0;34204::::1;34194:17;:::i;:::-;34119:72;34165:7;34174:8;34184:6;34119:45;:72::i;:::-;:92;;;;:::i;:::-;34101:110;;34242:9;34232:7;:19;34224:65;;;;-1:-1:-1::0;;;34224:65:0::1;;;;;;;:::i;:::-;34318:58;;;;;;;;34324:9;34318:58;;;;34335:7;34318:58;;;;34344:10;34318:58;;;;34356:10;34318:58;;;;34368:1;34318:58;;;;34371:4;34318:58;;;;::::0;34302:6:::1;:13;34309:5;34302:13;;;;;;;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34401:5;34392:59;34408:9;34419:7;34428:10;34440;34392:59;;;;;;;;7991:25:1::0;;;8047:2;8032:18;;8025:34;;;;8090:2;8075:18;;8068:34;8133:2;8118:18;;8111:34;7978:3;7963:19;;7760:391;34392:59:0::1;;;;;;;;33903:556;;33597:862:::0;;;;;;;;;;;:::o;37720:168::-;1937:13;:11;:13::i;:::-;37799:7:::1;::::0;37792:48:::1;::::0;-1:-1:-1;;;;;37799:7:0::1;37821:10;37833:6:::0;37792:28:::1;:48::i;:::-;37856:24;::::0;451:25:1;;;37856:24:0::1;::::0;439:2:1;424:18;37856:24:0::1;305:177:1::0;34799:1039:0;1937:13;:11;:13::i;:::-;31644:2:::1;34925:11;:25;34917:58;;;::::0;-1:-1:-1;;;34917:58:0;;6807:2:1;34917:58:0::1;::::0;::::1;6789:21:1::0;6846:2;6826:18;;;6819:30;-1:-1:-1;;;6865:18:1;;;6858:50;6925:18;;34917:58:0::1;6605:344:1::0;34917:58:0::1;35007:12;34994:10;:25;34986:71;;;;-1:-1:-1::0;;;34986:71:0::1;;;;;;;:::i;:::-;35129:9;35124:472;31644:2;35144:1;:15;35124:472;;;35190:11;35185:1;:16;35181:404;;35222:23;35248:9:::0;;;:6:::1;:9;::::0;;;;;;;35222:35;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;::::1;;;;::::0;;;;;;:23;35298:33;::::1;:70:::0;::::1;;;-1:-1:-1::0;35348:20:0;;35335:33;::::1;35298:70;35297:188;;;-1:-1:-1::0;35427:20:0;;35414:33;::::1;:70:::0;::::1;;;;35466:10;:18;;;35451:12;:33;35414:70;35276:209;;35513:13;35512:14;35504:65;;;::::0;-1:-1:-1;;;35504:65:0;;8358:2:1;35504:65:0::1;::::0;::::1;8340:21:1::0;8397:2;8377:18;;;8370:30;8436:34;8416:18;;;8409:62;-1:-1:-1;;;8487:18:1;;;8480:36;8533:19;;35504:65:0::1;8156:402:1::0;35504:65:0::1;35203:382;;35181:404;35161:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35124:472;;;-1:-1:-1::0;35642:19:0::1;35664::::0;;;:6:::1;:19;::::0;;;;;;;;35694:30;;;35735:13:::1;::::0;::::1;:26:::0;;;35779:51;;8765:25:1;;;8806:18;;;8799:34;;;8849:18;;;8842:34;;;35779:51:0::1;::::0;8753:2:1;8738:18;35779:51:0::1;;;;;;;34906:932;34799:1039:::0;;;:::o;2957:201::-;1937:13;:11;:13::i;:::-;-1:-1:-1;;;;;3046:22:0;::::1;3038:73;;;::::0;-1:-1:-1;;;3038:73:0;;9089:2:1;3038:73:0::1;::::0;::::1;9071:21:1::0;9128:2;9108:18;;;9101:30;9167:34;9147:18;;;9140:62;-1:-1:-1;;;9218:18:1;;;9211:36;9264:19;;3038:73:0::1;8887:402:1::0;3038:73:0::1;3122:28;3141:8;3122:18;:28::i;:::-;2957:201:::0;:::o;2216:132::-;2097:7;2124:6;-1:-1:-1;;;;;2124:6:0;682:10;2280:23;2272:68;;;;-1:-1:-1;;;2272:68:0;;9496:2:1;2272:68:0;;;9478:21:1;;;9515:18;;;9508:30;9574:34;9554:18;;;9547:62;9626:18;;2272:68:0;9294:356:1;14882:248:0;15053:68;;-1:-1:-1;;;;;9913:15:1;;;15053:68:0;;;9895:34:1;9965:15;;9945:18;;;9938:43;9997:18;;;9990:34;;;15026:96:0;;15046:5;;-1:-1:-1;;;15076:27:0;9830:18:1;;15053:68:0;;;;-1:-1:-1;;15053:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;15053:68:0;-1:-1:-1;;;;;;15053:68:0;;;;;;;;;;15026:19;:96::i;:::-;14882:248;;;;:::o;14663:211::-;14807:58;;-1:-1:-1;;;;;10227:32:1;;14807:58:0;;;10209:51:1;10276:18;;;10269:34;;;14780:86:0;;14800:5;;-1:-1:-1;;;14830:23:0;10182:18:1;;14807:58:0;10035:274:1;14780:86:0;14663:211;;;:::o;3318:191::-;3392:16;3411:6;;-1:-1:-1;;;;;3428:17:0;;;-1:-1:-1;;;;;;3428:17:0;;;;;;3461:40;;3411:6;;;;;;;3461:40;;3392:16;3461:40;3381:128;3318:191;:::o;21016:179::-;21099:14;18038:12;21138:31;21152:4;21158:5;21165:3;21138:13;:31::i;:::-;:49;;;;:::i;:::-;21126:61;21016:179;-1:-1:-1;;;;21016:179:0:o;17236:716::-;17660:23;17686:69;17714:4;17686:69;;;;;;;;;;;;;;;;;17694:5;-1:-1:-1;;;;;17686:27:0;;;:69;;;;;:::i;:::-;17770:17;;17660:95;;-1:-1:-1;17770:21:0;17766:179;;17867:10;17856:30;;;;;;;;;;;;:::i;:::-;17848:85;;;;-1:-1:-1;;;17848:85:0;;10798:2:1;17848:85:0;;;10780:21:1;10837:2;10817:18;;;10810:30;10876:34;10856:18;;;10849:62;-1:-1:-1;;;10927:18:1;;;10920:40;10977:19;;17848:85:0;10596:406:1;19089:525:0;19168:10;19207:4;19199;:12;;19191:21;;;;;;19239:4;19272:5;19304:3;19223:9;18178:7;19544:1;19537:3;19531:2;19516:11;19525:2;19272:5;19516:11;:::i;:::-;19515:18;;;;:::i;:::-;19500:12;:5;19508:4;19500:12;:::i;:::-;:33;;;;:::i;:::-;19499:41;;;;:::i;:::-;19494:47;;:1;:47;:::i;:::-;:51;;;;:::i;:::-;19478:2;;19452:11;19461:2;19452:6;:11;:::i;:::-;19451:18;;;;:::i;:::-;:23;;19472:2;19451:23;:::i;:::-;19438:10;19447:1;19438:6;:10;:::i;:::-;:36;;;;:::i;:::-;19431:44;;:3;:44;:::i;:::-;:49;;;;:::i;:::-;19416:1;19410:2;19395:11;19404:2;19395:6;:11;:::i;:::-;19394:18;;;;:::i;:::-;19379:12;:5;19387:4;19379:12;:::i;:::-;:33;;;;:::i;:::-;19371:42;;:4;:42;:::i;:::-;:46;;;;:::i;:::-;19334:23;19352:5;19334:4;:23;:::i;:::-;:83;;;;:::i;:::-;:146;;;;:::i;:::-;:211;;;;:::i;:::-;:239;;;;:::i;:::-;19321:252;19089:525;-1:-1:-1;;;;;;;;19089:525:0:o;7030:229::-;7167:12;7199:52;7221:6;7229:4;7235:1;7238:12;7199:21;:52::i;7030:229::-;;;;;;:::o;8150:511::-;8320:12;8378:5;8353:21;:30;;8345:81;;;;-1:-1:-1;;;8345:81:0;;12075:2:1;8345:81:0;;;12057:21:1;12114:2;12094:18;;;12087:30;12153:34;12133:18;;;12126:62;-1:-1:-1;;;12204:18:1;;;12197:36;12250:19;;8345:81:0;11873:402:1;8345:81:0;4547:20;;8437:60;;;;-1:-1:-1;;;8437:60:0;;12482:2:1;8437:60:0;;;12464:21:1;12521:2;12501:18;;;12494:30;12560:31;12540:18;;;12533:59;12609:18;;8437:60:0;12280:353:1;8437:60:0;8511:12;8525:23;8552:6;-1:-1:-1;;;;;8552:11:0;8571:5;8578:4;8552:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8510:73;;;;8601:52;8619:7;8628:10;8640:12;8601:17;:52::i;:::-;8594:59;8150:511;-1:-1:-1;;;;;;;8150:511:0:o;10619:712::-;10769:12;10798:7;10794:530;;;-1:-1:-1;10829:10:0;10822:17;;10794:530;10943:17;;:21;10939:374;;11141:10;11135:17;11202:15;11189:10;11185:2;11181:19;11174:44;10939:374;11284:12;11277:20;;-1:-1:-1;;;11277:20:0;;;;;;;;:::i;14:286:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:1;;210:42;;200:70;;266:1;263;256:12;487:180;546:6;599:2;587:9;578:7;574:23;570:32;567:52;;;615:1;612;605:12;567:52;-1:-1:-1;638:23:1;;487:180;-1:-1:-1;487:180:1:o;672:870::-;821:6;829;837;845;853;861;869;877;885;893;901:7;955:3;943:9;934:7;930:23;926:33;923:53;;;972:1;969;962:12;923:53;-1:-1:-1;;995:23:1;;;1065:2;1050:18;;1037:32;;-1:-1:-1;1116:2:1;1101:18;;1088:32;;1167:2;1152:18;;1139:32;;-1:-1:-1;1218:3:1;1203:19;;1190:33;;-1:-1:-1;1270:3:1;1255:19;;1242:33;;-1:-1:-1;1322:3:1;1307:19;;1294:33;;-1:-1:-1;1374:3:1;1359:19;;1346:33;;-1:-1:-1;1426:3:1;1411:19;;1398:33;;-1:-1:-1;1478:3:1;1463:19;;1450:33;;-1:-1:-1;1531:3:1;1516:19;1503:33;;-1:-1:-1;672:870:1;-1:-1:-1;672:870:1:o;2527:316::-;2604:6;2612;2620;2673:2;2661:9;2652:7;2648:23;2644:32;2641:52;;;2689:1;2686;2679:12;2641:52;-1:-1:-1;;2712:23:1;;;2782:2;2767:18;;2754:32;;-1:-1:-1;2833:2:1;2818:18;;;2805:32;;2527:316;-1:-1:-1;2527:316:1:o;2848:127::-;2909:10;2904:3;2900:20;2897:1;2890:31;2940:4;2937:1;2930:15;2964:4;2961:1;2954:15;2980:128;3047:9;;;3068:11;;;3065:37;;;3082:18;;:::i;:::-;2980:128;;;;:::o;3462:135::-;3501:3;3522:17;;;3519:43;;3542:18;;:::i;:::-;-1:-1:-1;3589:1:1;3578:13;;3462:135::o;4639:125::-;4704:9;;;4725:10;;;4722:36;;;4738:18;;:::i;5128:127::-;5189:10;5184:3;5180:20;5177:1;5170:31;5220:4;5217:1;5210:15;5244:4;5241:1;5234:15;5260:120;5300:1;5326;5316:35;;5331:18;;:::i;:::-;-1:-1:-1;5365:9:1;;5260:120::o;5385:168::-;5458:9;;;5489;;5506:15;;;5500:22;;5486:37;5476:71;;5527:18;;:::i;7358:397::-;7560:2;7542:21;;;7599:2;7579:18;;;7572:30;7638:34;7633:2;7618:18;;7611:62;-1:-1:-1;;;7704:2:1;7689:18;;7682:31;7745:3;7730:19;;7358:397::o;10314:277::-;10381:6;10434:2;10422:9;10413:7;10409:23;10405:32;10402:52;;;10450:1;10447;10440:12;10402:52;10482:9;10476:16;10535:5;10528:13;10521:21;10514:5;10511:32;10501:60;;10557:1;10554;10547:12;11007:200;11073:9;;;11046:4;11101:9;;11129:10;;11141:12;;;11125:29;11164:12;;;11156:21;;11122:56;11119:82;;;11181:18;;:::i;:::-;11119:82;11007:200;;;;:::o;11212:193::-;11251:1;11277;11267:35;;11282:18;;:::i;:::-;-1:-1:-1;;;11318:18:1;;-1:-1:-1;;11338:13:1;;11314:38;11311:64;;;11355:18;;:::i;:::-;-1:-1:-1;11389:10:1;;11212:193::o;11410:216::-;11474:9;;;11502:11;;;11449:3;11532:9;;11560:10;;11556:19;;11585:10;;11577:19;;11553:44;11550:70;;;11600:18;;:::i;:::-;11550:70;;11410:216;;;;:::o;11631:237::-;11703:9;;;11670:7;11728:9;;-1:-1:-1;;;11739:18:1;;11724:34;11721:60;;;11761:18;;:::i;:::-;11834:1;11825:7;11820:16;11817:1;11814:23;11810:1;11803:9;11800:38;11790:72;;11842:18;;:::i;12638:250::-;12723:1;12733:113;12747:6;12744:1;12741:13;12733:113;;;12823:11;;;12817:18;12804:11;;;12797:39;12769:2;12762:10;12733:113;;;-1:-1:-1;;12880:1:1;12862:16;;12855:27;12638:250::o;12893:287::-;13022:3;13060:6;13054:13;13076:66;13135:6;13130:3;13123:4;13115:6;13111:17;13076:66;:::i;:::-;13158:16;;;;;12893:287;-1:-1:-1;;12893:287:1:o;13185:396::-;13334:2;13323:9;13316:21;13297:4;13366:6;13360:13;13409:6;13404:2;13393:9;13389:18;13382:34;13425:79;13497:6;13492:2;13481:9;13477:18;13472:2;13464:6;13460:15;13425:79;:::i;:::-;13565:2;13544:15;-1:-1:-1;;13540:29:1;13525:45;;;;13572:2;13521:54;;13185:396;-1:-1:-1;;13185:396:1:o
Swarm Source
ipfs://f1fa9c6e295a2808df4bee7f19b6e1bcacb0fafbd76cb1a65b44050b3232692d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.