Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 55 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Buy MDU Token Wi... | 19944759 | 41 days ago | IN | 0 ETH | 0.00093461 | ||||
Buy MDU Token Wi... | 19934420 | 43 days ago | IN | 0 ETH | 0.00250371 | ||||
Buy MDU Token Wi... | 19921060 | 45 days ago | IN | 1.45 ETH | 0.00110657 | ||||
Buy MDU Token Wi... | 19904812 | 47 days ago | IN | 0.0001 ETH | 0.00083009 | ||||
Buy MDU Token Wi... | 19895920 | 48 days ago | IN | 0.04 ETH | 0.00060477 | ||||
Buy MDU Token Wi... | 19866666 | 52 days ago | IN | 0.1 ETH | 0.00123096 | ||||
Buy MDU Token Wi... | 19862890 | 53 days ago | IN | 3.55 ETH | 0.0013918 | ||||
Buy MDU Token Wi... | 19862662 | 53 days ago | IN | 0 ETH | 0.00261712 | ||||
Buy MDU Token Wi... | 19861658 | 53 days ago | IN | 0 ETH | 0.00305608 | ||||
Buy MDU Token Wi... | 19854833 | 54 days ago | IN | 0.036 ETH | 0.0007343 | ||||
Buy MDU Token Wi... | 19854594 | 54 days ago | IN | 0.013 ETH | 0.00157468 | ||||
Buy MDU Token Wi... | 19854507 | 54 days ago | IN | 0.032 ETH | 0.00093824 | ||||
Buy MDU Token Wi... | 19854121 | 54 days ago | IN | 1.75 ETH | 0.00067033 | ||||
Buy MDU Token Wi... | 19852012 | 54 days ago | IN | 0.1 ETH | 0.00057317 | ||||
Buy MDU Token Wi... | 19851794 | 54 days ago | IN | 0.1 ETH | 0.00050169 | ||||
Buy MDU Token Wi... | 19851766 | 54 days ago | IN | 0.1 ETH | 0.00056677 | ||||
Buy MDU Token Wi... | 19850427 | 54 days ago | IN | 0.038 ETH | 0.0006001 | ||||
Buy MDU Token Wi... | 19850413 | 54 days ago | IN | 0.7 ETH | 0.00058546 | ||||
Buy MDU Token Wi... | 19850349 | 54 days ago | IN | 0 ETH | 0.0006036 | ||||
Buy MDU Token Wi... | 19850119 | 55 days ago | IN | 0.002 ETH | 0.00051394 | ||||
Buy MDU Token Wi... | 19848338 | 55 days ago | IN | 0.75 ETH | 0.00063415 | ||||
Buy MDU Token Wi... | 19847879 | 55 days ago | IN | 0.049 ETH | 0.00087894 | ||||
Buy MDU Token Wi... | 19847137 | 55 days ago | IN | 0 ETH | 0.00115213 | ||||
Buy MDU Token Wi... | 19845728 | 55 days ago | IN | 0.001 ETH | 0.0008311 | ||||
Buy MDU Token Wi... | 19844105 | 55 days ago | IN | 0 ETH | 0.00069856 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
19921060 | 45 days ago | 1.45 ETH | ||||
19904812 | 47 days ago | 0.0001 ETH | ||||
19895920 | 48 days ago | 0.04 ETH | ||||
19866666 | 52 days ago | 0.1 ETH | ||||
19862890 | 53 days ago | 3.55 ETH | ||||
19854833 | 54 days ago | 0.036 ETH | ||||
19854594 | 54 days ago | 0.013 ETH | ||||
19854507 | 54 days ago | 0.032 ETH | ||||
19854121 | 54 days ago | 1.75 ETH | ||||
19852012 | 54 days ago | 0.1 ETH | ||||
19851794 | 54 days ago | 0.1 ETH | ||||
19851766 | 54 days ago | 0.1 ETH | ||||
19850427 | 54 days ago | 0.038 ETH | ||||
19850413 | 54 days ago | 0.7 ETH | ||||
19850119 | 55 days ago | 0.002 ETH | ||||
19848338 | 55 days ago | 0.75 ETH | ||||
19847879 | 55 days ago | 0.049 ETH | ||||
19845728 | 55 days ago | 0.001 ETH | ||||
19842756 | 56 days ago | 0.021 ETH | ||||
19842734 | 56 days ago | 0.02 ETH | ||||
19842718 | 56 days ago | 1 ETH | ||||
19842564 | 56 days ago | 0.03 ETH | ||||
19842555 | 56 days ago | 0.067 ETH | ||||
19842547 | 56 days ago | 2.5 ETH | ||||
19841754 | 56 days ago | 0.253 ETH |
Loading...
Loading
Contract Name:
MDUTokenSale
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-05-05 */ // 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/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // 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/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/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/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: @chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData( uint80 _roundId ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); } // File: contracts/ico_eth.sol pragma solidity ^0.8.20; contract MDUTokenSale is Pausable { AggregatorV3Interface internal ethUsdPriceFeed; IERC20 public usdtToken; // USDT token contract address public owner; // Contract owner uint256 public tokenPriceInWei; // Price in wei using SafeERC20 for IERC20; struct Purchase { address payable userAddress; // Buyer's address uint256 tokens; // Amount of tokens purchased uint256 amountPaid; // Amount paid string method; // Purchase method (e.g., "ETH" or "USDT") } mapping(address => Purchase[]) public purchases; // Stores user purchase history event TokensPurchased( address indexed userAddress, uint256 tokensPurchased, uint256 amountPaid, string method ); modifier onlyOwner() { require(msg.sender == owner, "Only the owner can call this function"); _; } constructor(address payable _recipient) { owner = _recipient; usdtToken = IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7); // USDT token address ethUsdPriceFeed = AggregatorV3Interface( 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419 ); // Ethereum price feed } // Function to set the token price in wei, only callable by the owner. function setTokenPriceInWei(uint256 _price) public onlyOwner { tokenPriceInWei = _price; // Set the token price in wei } function calculateMduTokensForEth(uint256 eth) public view returns(uint256) { uint256 ethPrice = uint256(getEthUsdPrice()); return (eth/(tokenPriceInWei*10**18/(ethPrice*10**10)))*10**18; } // Allow the owner to pause the contract function pause() public onlyOwner { _pause(); } // Allow the owner to unpause the contract function unpause() public onlyOwner { _unpause(); } // Function to allow users to buy MDU tokens using Ether. function buyMDUTokenWithEth() public payable whenNotPaused returns (bool) { require(msg.sender != address(0), "Invalid recipient address"); require(msg.value > 0, "ETH amount should not be 0"); // require(isPresaleLive, "Presale is not live"); // uint256 mduTokens = convertToken(msg.value, true); uint256 mduTokens = calculateMduTokensForEth(msg.value); require(mduTokens > 0, "Insufficient value for tokens"); (bool success, ) = payable(owner).call{value: msg.value}(""); require(success, "ETH transfer failed"); // Record the purchase purchases[msg.sender].push( Purchase(payable(msg.sender), mduTokens, msg.value, "ETH") ); emit TokensPurchased(msg.sender, mduTokens, msg.value, "ETH"); return true; } function getMduTokensForUsdt(uint256 _usdtAmount) public view returns(uint256) { // return (_usdtAmount*10**12)/tokenPriceInWei; return (_usdtAmount*10**12)/tokenPriceInWei*10**18; } // Function to allow users to buy MDU tokens using USDT. function buyMDUTokenWithUsdt( uint256 usdtAmount ) public whenNotPaused returns (bool) { // require(msg.sender == recipient, "Only owner can claim"); require(msg.sender != address(0), "Invalid recipient address"); require(usdtAmount != 0, "Amount must be positive"); // Calculate the required amount of Ether based on the number of tokens and the chosen method ("ETH" or "USDT") // uint256 mduTokens = convertToken(usdtAmount, false); uint mduTokens = getMduTokensForUsdt(usdtAmount); usdtToken.safeTransferFrom(_msgSender(), owner, usdtAmount); // Record the purchase purchases[msg.sender].push( Purchase(payable(msg.sender), mduTokens, usdtAmount, "USDT") ); emit TokensPurchased(msg.sender, mduTokens, usdtAmount, "USDT"); return true; } // Function to check the USDT allowance granted to this contract by the caller. function checkUSDTAllowance() public view returns (uint256) { require(msg.sender != address(0), "Invalid recipient address"); return usdtToken.allowance(msg.sender, address(this)); } // Function to retrieve a user's purchase history. function getUserPurchases() public view returns (Purchase[] memory) { require(msg.sender != address(0), "Invalid recipient address"); return purchases[msg.sender]; } // Function to get the latest ETH/USD price from the Chainlink aggregator. function getEthUsdPrice() public view returns (int256) { (, int256 price, , , ) = ethUsdPriceFeed.latestRoundData(); return price; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"_recipient","type":"address"}],"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":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensPurchased","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"string","name":"method","type":"string"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"buyMDUTokenWithEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdtAmount","type":"uint256"}],"name":"buyMDUTokenWithUsdt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"eth","type":"uint256"}],"name":"calculateMduTokensForEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkUSDTAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthUsdPrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdtAmount","type":"uint256"}],"name":"getMduTokensForUsdt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUserPurchases","outputs":[{"components":[{"internalType":"address payable","name":"userAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"amountPaid","type":"uint256"},{"internalType":"string","name":"method","type":"string"}],"internalType":"struct MDUTokenSale.Purchase[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"purchases","outputs":[{"internalType":"address payable","name":"userAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"amountPaid","type":"uint256"},{"internalType":"string","name":"method","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setTokenPriceInWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenPriceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdtToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b5060405161132b38038061132b83398101604081905261002e9161009c565b5f8054600280546001600160a01b039094166001600160a01b03199485161790556001805490931673dac17f958d2ee523a2206206994597c13d831ec717909255745f4ec3df9cbd43714fe2740f5e3616155c5b8419006001600160a81b03199092169190911790556100c9565b5f602082840312156100ac575f80fd5b81516001600160a01b03811681146100c2575f80fd5b9392505050565b611255806100d65f395ff3fe6080604052600436106100e4575f3560e01c80638530108811610087578063a98ad46c11610057578063a98ad46c14610236578063b597e78414610255578063ea40421d14610274578063ee90b75b14610293575f80fd5b806385301088146101b857806387033da3146101cc5780638da5cb5b146101eb578063a0a8045e14610222575f80fd5b806352d3f849116100c257806352d3f8491461013e5780635c975abb1461016d57806365e2b553146101835780638456cb59146101a4575f80fd5b806324c199ac146100e85780632f8de810146101055780633f4ba83a14610128575b5f80fd5b6100f06102b2565b60405190151581526020015b60405180910390f35b348015610110575f80fd5b5061011a60035481565b6040519081526020016100fc565b348015610133575f80fd5b5061013c61051d565b005b348015610149575f80fd5b5061015d610158366004610dff565b610551565b6040516100fc9493929190610e81565b348015610178575f80fd5b505f5460ff166100f0565b34801561018e575f80fd5b50610197610627565b6040516100fc9190610ead565b3480156101af575f80fd5b5061013c610764565b3480156101c3575f80fd5b5061011a610796565b3480156101d7575f80fd5b5061011a6101e6366004610f3f565b610829565b3480156101f6575f80fd5b5060025461020a906001600160a01b031681565b6040516001600160a01b0390911681526020016100fc565b34801561022d575f80fd5b5061011a61085f565b348015610241575f80fd5b5060015461020a906001600160a01b031681565b348015610260575f80fd5b5061013c61026f366004610f3f565b6108e0565b34801561027f575f80fd5b506100f061028e366004610f3f565b61090f565b34801561029e575f80fd5b5061011a6102ad366004610f3f565b610ac0565b5f6102bb610b1d565b336102e15760405162461bcd60e51b81526004016102d890610f56565b60405180910390fd5b5f34116103305760405162461bcd60e51b815260206004820152601a60248201527f45544820616d6f756e742073686f756c64206e6f74206265203000000000000060448201526064016102d8565b5f61033a34610ac0565b90505f811161038b5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742076616c756520666f7220746f6b656e7300000060448201526064016102d8565b6002546040515f916001600160a01b03169034908381818185875af1925050503d805f81146103d5576040519150601f19603f3d011682016040523d82523d5f602084013e6103da565b606091505b50509050806104215760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016102d8565b335f818152600460208181526040808420815160808101835295865285830188815234878401908152835180850190945260038085526208aa8960eb1b85870152606089019485528354600180820186559489529590972088519590960290950180546001600160a01b0319166001600160a01b03909516949094178455519083015591516002820155905190918201906104bc9082611026565b50506040805184815234602082015260608183018190526003908201526208aa8960eb1b608082015290513392507fe8e3aa9086f33aa1d89447fc3a792fafabd987374e660b040e31787d68b5fe069181900360a00190a260019250505090565b6002546001600160a01b031633146105475760405162461bcd60e51b81526004016102d8906110e2565b61054f610b62565b565b6004602052815f5260405f20818154811061056a575f80fd5b5f91825260209091206004909102018054600182015460028301546003840180546001600160a01b03909416965091945092916105a690610fa1565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290610fa1565b801561061d5780601f106105f45761010080835404028352916020019161061d565b820191905f5260205f20905b81548152906001019060200180831161060057829003601f168201915b5050505050905084565b6060336106465760405162461bcd60e51b81526004016102d890610f56565b335f90815260046020908152604080832080548251818502810185019093528083529193909284015b8282101561075b575f848152602090819020604080516080810182526004860290920180546001600160a01b031683526001810154938301939093526002830154908201526003820180549192916060840191906106cc90610fa1565b80601f01602080910402602001604051908101604052809291908181526020018280546106f890610fa1565b80156107435780601f1061071a57610100808354040283529160200191610743565b820191905f5260205f20905b81548152906001019060200180831161072657829003601f168201915b5050505050815250508152602001906001019061066f565b50505050905090565b6002546001600160a01b0316331461078e5760405162461bcd60e51b81526004016102d8906110e2565b61054f610bb3565b5f336107b45760405162461bcd60e51b81526004016102d890610f56565b600154604051636eb1769f60e11b81523360048201523060248201526001600160a01b039091169063dd62ed3e90604401602060405180830381865afa158015610800573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108249190611127565b905090565b6003545f9061083d8364e8d4a5100061113e565b6108479190611161565b61085990670de0b6b3a764000061113e565b92915050565b5f805f60019054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d59190611199565b509195945050505050565b6002546001600160a01b0316331461090a5760405162461bcd60e51b81526004016102d8906110e2565b600355565b5f610918610b1d565b336109355760405162461bcd60e51b81526004016102d890610f56565b815f036109845760405162461bcd60e51b815260206004820152601760248201527f416d6f756e74206d75737420626520706f73697469766500000000000000000060448201526064016102d8565b5f61098e83610829565b90506109ae336002546001546001600160a01b0390811692911686610bef565b335f81815260046020818152604080842081516080810183529586528583018781528683018a81528351808501909452858452631554d11560e21b84860152606088019384528254600180820185559388529490962087519490950290940180546001600160a01b0319166001600160a01b0390941693909317835592519282019290925591516002830155516003820190610a4a9082611026565b505050336001600160a01b03167fe8e3aa9086f33aa1d89447fc3a792fafabd987374e660b040e31787d68b5fe068285604051610aad9291909182526020820152606060408201819052600490820152631554d11560e21b608082015260a00190565b60405180910390a260019150505b919050565b5f80610aca61085f565b9050610adb816402540be40061113e565b600354610af090670de0b6b3a764000061113e565b610afa9190611161565b610b049084611161565b610b1690670de0b6b3a764000061113e565b9392505050565b5f5460ff161561054f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016102d8565b610b6a610c4f565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610bbb610b1d565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b963390565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c49908590610c97565b50505050565b5f5460ff1661054f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016102d8565b5f610cab6001600160a01b03841683610cfd565b905080515f14158015610ccf575080806020019051810190610ccd91906111e5565b155b15610cf857604051635274afe760e01b81526001600160a01b03841660048201526024016102d8565b505050565b6060610b1683835f845f80856001600160a01b03168486604051610d219190611204565b5f6040518083038185875af1925050503d805f8114610d5b576040519150601f19603f3d011682016040523d82523d5f602084013e610d60565b606091505b5091509150610d70868383610d7a565b9695505050505050565b606082610d8f57610d8a82610dd6565b610b16565b8151158015610da657506001600160a01b0384163b155b15610dcf57604051639996b31560e01b81526001600160a01b03851660048201526024016102d8565b5080610b16565b805115610de65780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f8060408385031215610e10575f80fd5b82356001600160a01b0381168114610e26575f80fd5b946020939093013593505050565b5f5b83811015610e4e578181015183820152602001610e36565b50505f910152565b5f8151808452610e6d816020860160208601610e34565b601f01601f19169290920160200192915050565b60018060a01b0385168152836020820152826040820152608060608201525f610d706080830184610e56565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015610f3157888303603f19018552815180516001600160a01b0316845287810151888501528681015187850152606090810151608091850182905290610f1d81860183610e56565b968901969450505090860190600101610ed2565b509098975050505050505050565b5f60208284031215610f4f575f80fd5b5035919050565b60208082526019908201527f496e76616c696420726563697069656e74206164647265737300000000000000604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680610fb557607f821691505b602082108103610fd357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610cf8575f81815260208120601f850160051c81016020861015610fff5750805b601f850160051c820191505b8181101561101e5782815560010161100b565b505050505050565b815167ffffffffffffffff81111561104057611040610f8d565b6110548161104e8454610fa1565b84610fd9565b602080601f831160018114611087575f84156110705750858301515b5f19600386901b1c1916600185901b17855561101e565b5f85815260208120601f198616915b828110156110b557888601518255948401946001909101908401611096565b50858210156110d257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526025908201527f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e60408201526431ba34b7b760d91b606082015260800190565b5f60208284031215611137575f80fd5b5051919050565b808202811582820484141761085957634e487b7160e01b5f52601160045260245ffd5b5f8261117b57634e487b7160e01b5f52601260045260245ffd5b500490565b805169ffffffffffffffffffff81168114610abb575f80fd5b5f805f805f60a086880312156111ad575f80fd5b6111b686611180565b94506020860151935060408601519250606086015191506111d960808701611180565b90509295509295909350565b5f602082840312156111f5575f80fd5b81518015158114610b16575f80fd5b5f8251611215818460208701610e34565b919091019291505056fea264697066735822122041cfa210dcb9416a098913fbc199cd3d3782b75fbd63cb068ee70e7d6128c2fd64736f6c6343000814003300000000000000000000000075a03452a7fb9764fbc851ad977938340b94d675
Deployed Bytecode
0x6080604052600436106100e4575f3560e01c80638530108811610087578063a98ad46c11610057578063a98ad46c14610236578063b597e78414610255578063ea40421d14610274578063ee90b75b14610293575f80fd5b806385301088146101b857806387033da3146101cc5780638da5cb5b146101eb578063a0a8045e14610222575f80fd5b806352d3f849116100c257806352d3f8491461013e5780635c975abb1461016d57806365e2b553146101835780638456cb59146101a4575f80fd5b806324c199ac146100e85780632f8de810146101055780633f4ba83a14610128575b5f80fd5b6100f06102b2565b60405190151581526020015b60405180910390f35b348015610110575f80fd5b5061011a60035481565b6040519081526020016100fc565b348015610133575f80fd5b5061013c61051d565b005b348015610149575f80fd5b5061015d610158366004610dff565b610551565b6040516100fc9493929190610e81565b348015610178575f80fd5b505f5460ff166100f0565b34801561018e575f80fd5b50610197610627565b6040516100fc9190610ead565b3480156101af575f80fd5b5061013c610764565b3480156101c3575f80fd5b5061011a610796565b3480156101d7575f80fd5b5061011a6101e6366004610f3f565b610829565b3480156101f6575f80fd5b5060025461020a906001600160a01b031681565b6040516001600160a01b0390911681526020016100fc565b34801561022d575f80fd5b5061011a61085f565b348015610241575f80fd5b5060015461020a906001600160a01b031681565b348015610260575f80fd5b5061013c61026f366004610f3f565b6108e0565b34801561027f575f80fd5b506100f061028e366004610f3f565b61090f565b34801561029e575f80fd5b5061011a6102ad366004610f3f565b610ac0565b5f6102bb610b1d565b336102e15760405162461bcd60e51b81526004016102d890610f56565b60405180910390fd5b5f34116103305760405162461bcd60e51b815260206004820152601a60248201527f45544820616d6f756e742073686f756c64206e6f74206265203000000000000060448201526064016102d8565b5f61033a34610ac0565b90505f811161038b5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742076616c756520666f7220746f6b656e7300000060448201526064016102d8565b6002546040515f916001600160a01b03169034908381818185875af1925050503d805f81146103d5576040519150601f19603f3d011682016040523d82523d5f602084013e6103da565b606091505b50509050806104215760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016102d8565b335f818152600460208181526040808420815160808101835295865285830188815234878401908152835180850190945260038085526208aa8960eb1b85870152606089019485528354600180820186559489529590972088519590960290950180546001600160a01b0319166001600160a01b03909516949094178455519083015591516002820155905190918201906104bc9082611026565b50506040805184815234602082015260608183018190526003908201526208aa8960eb1b608082015290513392507fe8e3aa9086f33aa1d89447fc3a792fafabd987374e660b040e31787d68b5fe069181900360a00190a260019250505090565b6002546001600160a01b031633146105475760405162461bcd60e51b81526004016102d8906110e2565b61054f610b62565b565b6004602052815f5260405f20818154811061056a575f80fd5b5f91825260209091206004909102018054600182015460028301546003840180546001600160a01b03909416965091945092916105a690610fa1565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290610fa1565b801561061d5780601f106105f45761010080835404028352916020019161061d565b820191905f5260205f20905b81548152906001019060200180831161060057829003601f168201915b5050505050905084565b6060336106465760405162461bcd60e51b81526004016102d890610f56565b335f90815260046020908152604080832080548251818502810185019093528083529193909284015b8282101561075b575f848152602090819020604080516080810182526004860290920180546001600160a01b031683526001810154938301939093526002830154908201526003820180549192916060840191906106cc90610fa1565b80601f01602080910402602001604051908101604052809291908181526020018280546106f890610fa1565b80156107435780601f1061071a57610100808354040283529160200191610743565b820191905f5260205f20905b81548152906001019060200180831161072657829003601f168201915b5050505050815250508152602001906001019061066f565b50505050905090565b6002546001600160a01b0316331461078e5760405162461bcd60e51b81526004016102d8906110e2565b61054f610bb3565b5f336107b45760405162461bcd60e51b81526004016102d890610f56565b600154604051636eb1769f60e11b81523360048201523060248201526001600160a01b039091169063dd62ed3e90604401602060405180830381865afa158015610800573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108249190611127565b905090565b6003545f9061083d8364e8d4a5100061113e565b6108479190611161565b61085990670de0b6b3a764000061113e565b92915050565b5f805f60019054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d59190611199565b509195945050505050565b6002546001600160a01b0316331461090a5760405162461bcd60e51b81526004016102d8906110e2565b600355565b5f610918610b1d565b336109355760405162461bcd60e51b81526004016102d890610f56565b815f036109845760405162461bcd60e51b815260206004820152601760248201527f416d6f756e74206d75737420626520706f73697469766500000000000000000060448201526064016102d8565b5f61098e83610829565b90506109ae336002546001546001600160a01b0390811692911686610bef565b335f81815260046020818152604080842081516080810183529586528583018781528683018a81528351808501909452858452631554d11560e21b84860152606088019384528254600180820185559388529490962087519490950290940180546001600160a01b0319166001600160a01b0390941693909317835592519282019290925591516002830155516003820190610a4a9082611026565b505050336001600160a01b03167fe8e3aa9086f33aa1d89447fc3a792fafabd987374e660b040e31787d68b5fe068285604051610aad9291909182526020820152606060408201819052600490820152631554d11560e21b608082015260a00190565b60405180910390a260019150505b919050565b5f80610aca61085f565b9050610adb816402540be40061113e565b600354610af090670de0b6b3a764000061113e565b610afa9190611161565b610b049084611161565b610b1690670de0b6b3a764000061113e565b9392505050565b5f5460ff161561054f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016102d8565b610b6a610c4f565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610bbb610b1d565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b963390565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c49908590610c97565b50505050565b5f5460ff1661054f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016102d8565b5f610cab6001600160a01b03841683610cfd565b905080515f14158015610ccf575080806020019051810190610ccd91906111e5565b155b15610cf857604051635274afe760e01b81526001600160a01b03841660048201526024016102d8565b505050565b6060610b1683835f845f80856001600160a01b03168486604051610d219190611204565b5f6040518083038185875af1925050503d805f8114610d5b576040519150601f19603f3d011682016040523d82523d5f602084013e610d60565b606091505b5091509150610d70868383610d7a565b9695505050505050565b606082610d8f57610d8a82610dd6565b610b16565b8151158015610da657506001600160a01b0384163b155b15610dcf57604051639996b31560e01b81526001600160a01b03851660048201526024016102d8565b5080610b16565b805115610de65780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f8060408385031215610e10575f80fd5b82356001600160a01b0381168114610e26575f80fd5b946020939093013593505050565b5f5b83811015610e4e578181015183820152602001610e36565b50505f910152565b5f8151808452610e6d816020860160208601610e34565b601f01601f19169290920160200192915050565b60018060a01b0385168152836020820152826040820152608060608201525f610d706080830184610e56565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015610f3157888303603f19018552815180516001600160a01b0316845287810151888501528681015187850152606090810151608091850182905290610f1d81860183610e56565b968901969450505090860190600101610ed2565b509098975050505050505050565b5f60208284031215610f4f575f80fd5b5035919050565b60208082526019908201527f496e76616c696420726563697069656e74206164647265737300000000000000604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680610fb557607f821691505b602082108103610fd357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610cf8575f81815260208120601f850160051c81016020861015610fff5750805b601f850160051c820191505b8181101561101e5782815560010161100b565b505050505050565b815167ffffffffffffffff81111561104057611040610f8d565b6110548161104e8454610fa1565b84610fd9565b602080601f831160018114611087575f84156110705750858301515b5f19600386901b1c1916600185901b17855561101e565b5f85815260208120601f198616915b828110156110b557888601518255948401946001909101908401611096565b50858210156110d257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526025908201527f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e60408201526431ba34b7b760d91b606082015260800190565b5f60208284031215611137575f80fd5b5051919050565b808202811582820484141761085957634e487b7160e01b5f52601160045260245ffd5b5f8261117b57634e487b7160e01b5f52601260045260245ffd5b500490565b805169ffffffffffffffffffff81168114610abb575f80fd5b5f805f805f60a086880312156111ad575f80fd5b6111b686611180565b94506020860151935060408601519250606086015191506111d960808701611180565b90509295509295909350565b5f602082840312156111f5575f80fd5b81518015158114610b16575f80fd5b5f8251611215818460208701610e34565b919091019291505056fea264697066735822122041cfa210dcb9416a098913fbc199cd3d3782b75fbd63cb068ee70e7d6128c2fd64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000075a03452a7fb9764fbc851ad977938340b94d675
-----Decoded View---------------
Arg [0] : _recipient (address): 0x75A03452A7FB9764FBc851AD977938340b94d675
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000075a03452a7fb9764fbc851ad977938340b94d675
Deployed Bytecode Sourcemap
23457:4799:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25436:854;;;:::i;:::-;;;179:14:1;;172:22;154:41;;142:2;127:18;25436:854:0;;;;;;;;23649:30;;;;;;;;;;;;;;;;;;;352:25:1;;;340:2;325:18;23649:30:0;206:177:1;25298:65:0;;;;;;;;;;;;;:::i;:::-;;23994:47;;;;;;;;;;-1:-1:-1;23994:47:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;2689:86::-;;;;;;;;;;-1:-1:-1;2736:4:0;2760:7;;;2689:86;;27822:188;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25181:61::-;;;;;;;;;;;;;:::i;27553:205::-;;;;;;;;;;;;;:::i;26298:::-;;;;;;;;;;-1:-1:-1;26298:205:0;;;;;:::i;:::-;;:::i;23604:20::-;;;;;;;;;;-1:-1:-1;23604:20:0;;;;-1:-1:-1;;;;;23604:20:0;;;;;;-1:-1:-1;;;;;3333:32:1;;;3315:51;;3303:2;3288:18;23604:20:0;3169:203:1;28098:155:0;;;;;;;;;;;;;:::i;23551:23::-;;;;;;;;;;-1:-1:-1;23551:23:0;;;;-1:-1:-1;;;;;23551:23:0;;;24773:134;;;;;;;;;;-1:-1:-1;24773:134:0;;;;;:::i;:::-;;:::i;26574:886::-;;;;;;;;;;-1:-1:-1;26574:886:0;;;;;:::i;:::-;;:::i;24915:212::-;;;;;;;;;;-1:-1:-1;24915:212:0;;;;;:::i;:::-;;:::i;25436:854::-;25504:4;2294:19;:17;:19::i;:::-;25529:10:::1;25521:62;;;;-1:-1:-1::0;;;25521:62:0::1;;;;;;;:::i;:::-;;;;;;;;;25614:1;25602:9;:13;25594:52;;;::::0;-1:-1:-1;;;25594:52:0;;4335:2:1;25594:52:0::1;::::0;::::1;4317:21:1::0;4374:2;4354:18;;;4347:30;4413:28;4393:18;;;4386:56;4459:18;;25594:52:0::1;4133:350:1::0;25594:52:0::1;25783:17;25803:35;25828:9;25803:24;:35::i;:::-;25783:55;;25871:1;25859:9;:13;25851:55;;;::::0;-1:-1:-1;;;25851:55:0;;4690:2:1;25851:55:0::1;::::0;::::1;4672:21:1::0;4729:2;4709:18;;;4702:30;4768:31;4748:18;;;4741:59;4817:18;;25851:55:0::1;4488:353:1::0;25851:55:0::1;25946:5;::::0;25938:41:::1;::::0;25920:12:::1;::::0;-1:-1:-1;;;;;25946:5:0::1;::::0;25965:9:::1;::::0;25920:12;25938:41;25920:12;25938:41;25965:9;25946:5;25938:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25919:60;;;26000:7;25992:39;;;::::0;-1:-1:-1;;;25992:39:0;;5258:2:1;25992:39:0::1;::::0;::::1;5240:21:1::0;5297:2;5277:18;;;5270:30;-1:-1:-1;;;5316:18:1;;;5309:49;5375:18;;25992:39:0::1;5056:343:1::0;25992:39:0::1;26086:10;26076:21;::::0;;;:9:::1;:21;::::0;;;;;;;26117:58;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;26158:9:::1;26117:58:::0;;;;;;;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;26117:58:0;;::::1;::::0;;;;;;;26076:110;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;26076:110:0::1;-1:-1:-1::0;;;;;26076:110:0;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;26204:56:0::1;::::0;;8365:25:1;;;26243:9:0::1;8421:2:1::0;8406:18;;8399:34;8469:2;8449:18;;;8442:30;;;8508:1;8488:18;;;8481:29;-1:-1:-1;;;8541:3:1;8526:19;;8519:34;26204:56:0;;26220:10:::1;::::0;-1:-1:-1;26204:56:0::1;::::0;;;;8585:3:1;26204:56:0;;::::1;26278:4;26271:11;;;;25436:854:::0;:::o;25298:65::-;24298:5;;-1:-1:-1;;;;;24298:5:0;24284:10;:19;24276:69;;;;-1:-1:-1;;;24276:69:0;;;;;;;:::i;:::-;25345:10:::1;:8;:10::i;:::-;25298:65::o:0;23994:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23994:47:0;;;;-1:-1:-1;23994:47:0;;-1:-1:-1;23994:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27822:188::-;27871:17;27909:10;27901:62;;;;-1:-1:-1;;;27901:62:0;;;;;;;:::i;:::-;27991:10;27981:21;;;;:9;:21;;;;;;;;27974:28;;;;;;;;;;;;;;;;;;;27981:21;;27974:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27974:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27822:188;:::o;25181:61::-;24298:5;;-1:-1:-1;;;;;24298:5:0;24284:10;:19;24276:69;;;;-1:-1:-1;;;24276:69:0;;;;;;;:::i;:::-;25226:8:::1;:6;:8::i;27553:205::-:0;27604:7;27632:10;27624:62;;;;-1:-1:-1;;;27624:62:0;;;;;;;:::i;:::-;27704:9;;:46;;-1:-1:-1;;;27704:46:0;;27724:10;27704:46;;;9218:34:1;27744:4:0;9268:18:1;;;9261:43;-1:-1:-1;;;;;27704:9:0;;;;:19;;9153:18:1;;27704:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27697:53;;27553:205;:::o;26298:::-;26473:15;;26368:7;;26453:18;:11;26465:6;26453:18;:::i;:::-;26452:36;;;;:::i;:::-;:43;;26489:6;26452:43;:::i;:::-;26445:50;26298:205;-1:-1:-1;;26298:205:0:o;28098:155::-;28145:6;28167:12;28189:15;;;;;;;;;-1:-1:-1;;;;;28189:15:0;-1:-1:-1;;;;;28189:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28164:58:0;;28098:155;-1:-1:-1;;;;;28098:155:0:o;24773:134::-;24298:5;;-1:-1:-1;;;;;24298:5:0;24284:10;:19;24276:69;;;;-1:-1:-1;;;24276:69:0;;;;;;;:::i;:::-;24845:15:::1;:24:::0;24773:134::o;26574:886::-;26669:4;2294:19;:17;:19::i;:::-;26764:10:::1;26756:62;;;;-1:-1:-1::0;;;26756:62:0::1;;;;;;;:::i;:::-;26837:10;26851:1;26837:15:::0;26829:51:::1;;;::::0;-1:-1:-1;;;26829:51:0;;10860:2:1;26829:51:0::1;::::0;::::1;10842:21:1::0;10899:2;10879:18;;;10872:30;10938:25;10918:18;;;10911:53;10981:18;;26829:51:0::1;10658:347:1::0;26829:51:0::1;27079:14;27096:31;27116:10;27096:19;:31::i;:::-;27079:48:::0;-1:-1:-1;27140:59:0::1;775:10:::0;27181:5:::1;::::0;;27140:9;-1:-1:-1;;;;;27140:9:0;;::::1;::::0;:59;27181:5:::1;27188:10:::0;27140:26:::1;:59::i;:::-;27254:10;27244:21;::::0;;;:9:::1;:21;::::0;;;;;;;27285:60;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;27285:60:0;;::::1;::::0;;;;;;;27244:112;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;27244:112:0::1;-1:-1:-1::0;;;;;27244:112:0;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;27388:10;-1:-1:-1::0;;;;;27372:58:0::1;;27400:9;27411:10;27372:58;;;;;;11250:25:1::0;;;11306:2;11291:18;;11284:34;11354:2;11349;11334:18;;11327:30;;;11393:1;11373:18;;;11366:29;-1:-1:-1;;;11426:3:1;11411:19;;11404:35;11471:3;11456:19;;11010:471;27372:58:0::1;;;;;;;;27448:4;27441:11;;;2324:1;26574:886:::0;;;:::o;24915:212::-;24982:7;25002:16;25029;:14;:16::i;:::-;25002:44;-1:-1:-1;25094:15:0;25002:44;25103:6;25094:15;:::i;:::-;25070;;:22;;25086:6;25070:22;:::i;:::-;:40;;;;:::i;:::-;25065:46;;:3;:46;:::i;:::-;25064:55;;25113:6;25064:55;:::i;:::-;25057:62;24915:212;-1:-1:-1;;;24915:212:0:o;2848:108::-;2736:4;2760:7;;;2918:9;2910:38;;;;-1:-1:-1;;;2910:38:0;;11688:2:1;2910:38:0;;;11670:21:1;11727:2;11707:18;;;11700:30;-1:-1:-1;;;11746:18:1;;;11739:46;11802:18;;2910:38:0;11486:340:1;3544:120:0;2553:16;:14;:16::i;:::-;3613:5:::1;3603:15:::0;;-1:-1:-1;;3603:15:0::1;::::0;;3634:22:::1;775:10:::0;3643:12:::1;3634:22;::::0;-1:-1:-1;;;;;3333:32:1;;;3315:51;;3303:2;3288:18;3634:22:0::1;;;;;;;3544:120::o:0;3285:118::-;2294:19;:17;:19::i;:::-;3345:7:::1;:14:::0;;-1:-1:-1;;3345:14:0::1;3355:4;3345:14;::::0;;3375:20:::1;3382:12;775:10:::0;;695:98;18577:190;18705:53;;;-1:-1:-1;;;;;12089:15:1;;;18705:53:0;;;12071:34:1;12141:15;;12121:18;;;12114:43;12173:18;;;;12166:34;;;18705:53:0;;;;;;;;;;12006:18:1;;;;18705:53:0;;;;;;;;-1:-1:-1;;;;;18705:53:0;-1:-1:-1;;;18705:53:0;;;18678:81;;18698:5;;18678:19;:81::i;:::-;18577:190;;;;:::o;3033:108::-;2736:4;2760:7;;;3092:41;;;;-1:-1:-1;;;3092:41:0;;12413:2:1;3092:41:0;;;12395:21:1;12452:2;12432:18;;;12425:30;-1:-1:-1;;;12471:18:1;;;12464:50;12531:18;;3092:41:0;12211:344:1;20981:638:0;21405:23;21431:33;-1:-1:-1;;;;;21431:27:0;;21459:4;21431:27;:33::i;:::-;21405:59;;21479:10;:17;21500:1;21479:22;;:57;;;;;21517:10;21506:30;;;;;;;;;;;;:::i;:::-;21505:31;21479:57;21475:137;;;21560:40;;-1:-1:-1;;;21560:40:0;;-1:-1:-1;;;;;3333:32:1;;21560:40:0;;;3315:51:1;3288:18;;21560:40:0;3169:203:1;21475:137:0;21051:568;20981:638;;:::o;6468:153::-;6543:12;6575:38;6597:6;6605:4;6611:1;6543:12;7201;7215:23;7242:6;-1:-1:-1;;;;;7242:11:0;7261:5;7268:4;7242:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7200:73;;;;7291:55;7318:6;7326:7;7335:10;7291:26;:55::i;:::-;7284:62;6956:398;-1:-1:-1;;;;;;6956:398:0:o;8432:597::-;8580:12;8610:7;8605:417;;8634:19;8642:10;8634:7;:19::i;:::-;8605:417;;;8862:17;;:22;:49;;;;-1:-1:-1;;;;;;8888:18:0;;;:23;8862:49;8858:121;;;8939:24;;-1:-1:-1;;;8939:24:0;;-1:-1:-1;;;;;3333:32:1;;8939:24:0;;;3315:51:1;3288:18;;8939:24:0;3169:203:1;8858:121:0;-1:-1:-1;9000:10:0;8993:17;;9582:528;9715:17;;:21;9711:392;;9947:10;9941:17;10004:15;9991:10;9987:2;9983:19;9976:44;9711:392;10074:17;;-1:-1:-1;;;10074:17:0;;;;;;;;;;;388:354:1;456:6;464;517:2;505:9;496:7;492:23;488:32;485:52;;;533:1;530;523:12;485:52;559:23;;-1:-1:-1;;;;;611:31:1;;601:42;;591:70;;657:1;654;647:12;591:70;680:5;732:2;717:18;;;;704:32;;-1:-1:-1;;;388:354:1:o;747:250::-;832:1;842:113;856:6;853:1;850:13;842:113;;;932:11;;;926:18;913:11;;;906:39;878:2;871:10;842:113;;;-1:-1:-1;;989:1:1;971:16;;964:27;747:250::o;1002:271::-;1044:3;1082:5;1076:12;1109:6;1104:3;1097:19;1125:76;1194:6;1187:4;1182:3;1178:14;1171:4;1164:5;1160:16;1125:76;:::i;:::-;1255:2;1234:15;-1:-1:-1;;1230:29:1;1221:39;;;;1262:4;1217:50;;1002:271;-1:-1:-1;;1002:271:1:o;1278:477::-;1556:1;1552;1547:3;1543:11;1539:19;1531:6;1527:32;1516:9;1509:51;1596:6;1591:2;1580:9;1576:18;1569:34;1639:6;1634:2;1623:9;1619:18;1612:34;1682:3;1677:2;1666:9;1662:18;1655:31;1490:4;1703:46;1744:3;1733:9;1729:19;1721:6;1703:46;:::i;1760:1219::-;1952:4;1981:2;2021;2010:9;2006:18;2051:2;2040:9;2033:21;2074:6;2109;2103:13;2140:6;2132;2125:22;2166:2;2156:12;;2199:2;2188:9;2184:18;2177:25;;2261:2;2251:6;2248:1;2244:14;2233:9;2229:30;2225:39;2299:2;2291:6;2287:15;2320:1;2330:620;2344:6;2341:1;2338:13;2330:620;;;2409:22;;;-1:-1:-1;;2405:36:1;2393:49;;2465:13;;2537:9;;-1:-1:-1;;;;;2533:35:1;2518:51;;2612:11;;;2606:18;2589:15;;;2582:43;2668:11;;;2662:18;2645:15;;;2638:43;2704:4;2747:11;;;2741:18;2501:4;2779:15;;;2772:27;;;2741:18;2822:48;2854:15;;;2741:18;2822:48;:::i;:::-;2928:12;;;;2812:58;-1:-1:-1;;;2893:15:1;;;;2366:1;2359:9;2330:620;;;-1:-1:-1;2967:6:1;;1760:1219;-1:-1:-1;;;;;;;;1760:1219:1:o;2984:180::-;3043:6;3096:2;3084:9;3075:7;3071:23;3067:32;3064:52;;;3112:1;3109;3102:12;3064:52;-1:-1:-1;3135:23:1;;2984:180;-1:-1:-1;2984:180:1:o;3779:349::-;3981:2;3963:21;;;4020:2;4000:18;;;3993:30;4059:27;4054:2;4039:18;;4032:55;4119:2;4104:18;;3779:349::o;5404:127::-;5465:10;5460:3;5456:20;5453:1;5446:31;5496:4;5493:1;5486:15;5520:4;5517:1;5510:15;5536:380;5615:1;5611:12;;;;5658;;;5679:61;;5733:4;5725:6;5721:17;5711:27;;5679:61;5786:2;5778:6;5775:14;5755:18;5752:38;5749:161;;5832:10;5827:3;5823:20;5820:1;5813:31;5867:4;5864:1;5857:15;5895:4;5892:1;5885:15;5749:161;;5536:380;;;:::o;6047:545::-;6149:2;6144:3;6141:11;6138:448;;;6185:1;6210:5;6206:2;6199:17;6255:4;6251:2;6241:19;6325:2;6313:10;6309:19;6306:1;6302:27;6296:4;6292:38;6361:4;6349:10;6346:20;6343:47;;;-1:-1:-1;6384:4:1;6343:47;6439:2;6434:3;6430:12;6427:1;6423:20;6417:4;6413:31;6403:41;;6494:82;6512:2;6505:5;6502:13;6494:82;;;6557:17;;;6538:1;6527:13;6494:82;;;6498:3;;;6047:545;;;:::o;6768:1352::-;6894:3;6888:10;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6972:97;7062:6;7022:38;7054:4;7048:11;7022:38;:::i;:::-;7016:4;6972:97;:::i;:::-;7124:4;;7188:2;7177:14;;7205:1;7200:663;;;;7907:1;7924:6;7921:89;;;-1:-1:-1;7976:19:1;;;7970:26;7921:89;-1:-1:-1;;6725:1:1;6721:11;;;6717:24;6713:29;6703:40;6749:1;6745:11;;;6700:57;8023:81;;7170:944;;7200:663;5994:1;5987:14;;;6031:4;6018:18;;-1:-1:-1;;7236:20:1;;;7354:236;7368:7;7365:1;7362:14;7354:236;;;7457:19;;;7451:26;7436:42;;7549:27;;;;7517:1;7505:14;;;;7384:19;;7354:236;;;7358:3;7618:6;7609:7;7606:19;7603:201;;;7679:19;;;7673:26;-1:-1:-1;;7762:1:1;7758:14;;;7774:3;7754:24;7750:37;7746:42;7731:58;7716:74;;7603:201;-1:-1:-1;;;;;7850:1:1;7834:14;;;7830:22;7817:36;;-1:-1:-1;6768:1352:1:o;8600:401::-;8802:2;8784:21;;;8841:2;8821:18;;;8814:30;8880:34;8875:2;8860:18;;8853:62;-1:-1:-1;;;8946:2:1;8931:18;;8924:35;8991:3;8976:19;;8600:401::o;9315:184::-;9385:6;9438:2;9426:9;9417:7;9413:23;9409:32;9406:52;;;9454:1;9451;9444:12;9406:52;-1:-1:-1;9477:16:1;;9315:184;-1:-1:-1;9315:184:1:o;9504:265::-;9577:9;;;9608;;9625:15;;;9619:22;;9605:37;9595:168;;9685:10;9680:3;9676:20;9673:1;9666:31;9720:4;9717:1;9710:15;9748:4;9745:1;9738:15;9774:217;9814:1;9840;9830:132;;9884:10;9879:3;9875:20;9872:1;9865:31;9919:4;9916:1;9909:15;9947:4;9944:1;9937:15;9830:132;-1:-1:-1;9976:9:1;;9774:217::o;9996:179::-;10074:13;;10127:22;10116:34;;10106:45;;10096:73;;10165:1;10162;10155:12;10180:473;10283:6;10291;10299;10307;10315;10368:3;10356:9;10347:7;10343:23;10339:33;10336:53;;;10385:1;10382;10375:12;10336:53;10408:39;10437:9;10408:39;:::i;:::-;10398:49;;10487:2;10476:9;10472:18;10466:25;10456:35;;10531:2;10520:9;10516:18;10510:25;10500:35;;10575:2;10564:9;10560:18;10554:25;10544:35;;10598:49;10642:3;10631:9;10627:19;10598:49;:::i;:::-;10588:59;;10180:473;;;;;;;;:::o;12560:277::-;12627:6;12680:2;12668:9;12659:7;12655:23;12651:32;12648:52;;;12696:1;12693;12686:12;12648:52;12728:9;12722:16;12781:5;12774:13;12767:21;12760:5;12757:32;12747:60;;12803:1;12800;12793:12;12842:287;12971:3;13009:6;13003:13;13025:66;13084:6;13079:3;13072:4;13064:6;13060:17;13025:66;:::i;:::-;13107:16;;;;;12842:287;-1:-1:-1;;12842:287:1:o
Swarm Source
ipfs://41cfa210dcb9416a098913fbc199cd3d3782b75fbd63cb068ee70e7d6128c2fd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.