Source Code
Latest 25 from a total of 880 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Give Away | 17327778 | 1005 days ago | IN | 0 ETH | 0.00183015 | ||||
| Set Allowable SC... | 17280026 | 1012 days ago | IN | 0 ETH | 0.00459476 | ||||
| Buy | 17277593 | 1012 days ago | IN | 0.21 ETH | 0.0036534 | ||||
| Buy | 17277504 | 1013 days ago | IN | 0.42 ETH | 0.00346027 | ||||
| Buy | 17275681 | 1013 days ago | IN | 0.84 ETH | 0.00462014 | ||||
| Buy | 17274948 | 1013 days ago | IN | 0.84 ETH | 0.0040724 | ||||
| Buy | 17274580 | 1013 days ago | IN | 0.21 ETH | 0.00376891 | ||||
| Buy | 17274557 | 1013 days ago | IN | 0.21 ETH | 0.0046866 | ||||
| Buy | 17274451 | 1013 days ago | IN | 0.42 ETH | 0.00348693 | ||||
| Buy | 17274424 | 1013 days ago | IN | 0.21 ETH | 0.0039398 | ||||
| Buy | 17274218 | 1013 days ago | IN | 1.05 ETH | 0.0048504 | ||||
| Buy | 17274185 | 1013 days ago | IN | 1.26 ETH | 0.00525888 | ||||
| Buy | 17274072 | 1013 days ago | IN | 0.21 ETH | 0.00414865 | ||||
| Buy | 17274042 | 1013 days ago | IN | 0.21 ETH | 0.00447451 | ||||
| Buy | 17274030 | 1013 days ago | IN | 0.21 ETH | 0.00411429 | ||||
| Buy | 17273949 | 1013 days ago | IN | 0.21 ETH | 0.0057404 | ||||
| Buy | 17273921 | 1013 days ago | IN | 1.05 ETH | 0.00595908 | ||||
| Buy | 17273900 | 1013 days ago | IN | 0.21 ETH | 0.0052257 | ||||
| Buy | 17273884 | 1013 days ago | IN | 0.63 ETH | 0.00492816 | ||||
| Buy | 17273852 | 1013 days ago | IN | 0.21 ETH | 0.00412839 | ||||
| Buy | 17273796 | 1013 days ago | IN | 0.84 ETH | 0.00458818 | ||||
| Buy | 17273791 | 1013 days ago | IN | 0.21 ETH | 0.00587778 | ||||
| Buy | 17273773 | 1013 days ago | IN | 0.21 ETH | 0.00490328 | ||||
| Buy | 17273766 | 1013 days ago | IN | 0.21 ETH | 0.00500139 | ||||
| Buy | 17273761 | 1013 days ago | IN | 0.21 ETH | 0.00513701 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 17277593 | 1012 days ago | 0.21 ETH | ||||
| Transfer | 17277504 | 1013 days ago | 0.42 ETH | ||||
| Transfer | 17275681 | 1013 days ago | 0.84 ETH | ||||
| Transfer | 17274948 | 1013 days ago | 0.84 ETH | ||||
| Transfer | 17274580 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17274557 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17274451 | 1013 days ago | 0.42 ETH | ||||
| Transfer | 17274424 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17274218 | 1013 days ago | 1.05 ETH | ||||
| Transfer | 17274185 | 1013 days ago | 1.26 ETH | ||||
| Transfer | 17274072 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17274042 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17274030 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17273949 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17273921 | 1013 days ago | 1.05 ETH | ||||
| Transfer | 17273900 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17273884 | 1013 days ago | 0.63 ETH | ||||
| Transfer | 17273852 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17273796 | 1013 days ago | 0.84 ETH | ||||
| Transfer | 17273791 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17273773 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17273766 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17273761 | 1013 days ago | 0.21 ETH | ||||
| Transfer | 17273730 | 1013 days ago | 1.47 ETH | ||||
| Transfer | 17273716 | 1013 days ago | 1.05 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
UnchartedMarketplace
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-11-09
*/
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// 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);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @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
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC1155 compliant contract, as defined in the
* https://eips.ethereum.org/EIPS/eip-1155[EIP].
*
* _Available since v3.1._
*/
interface IERC1155 is IERC165 {
/**
* @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
*/
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
/**
* @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
* transfers.
*/
event TransferBatch(
address indexed operator,
address indexed from,
address indexed to,
uint256[] ids,
uint256[] values
);
/**
* @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
* `approved`.
*/
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
/**
* @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
*
* If an {URI} event was emitted for `id`, the standard
* https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
* returned by {IERC1155MetadataURI-uri}.
*/
event URI(string value, uint256 indexed id);
/**
* @dev Returns the amount of tokens of token type `id` owned by `account`.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) external view returns (uint256);
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
external
view
returns (uint256[] memory);
/**
* @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
*
* Emits an {ApprovalForAll} event.
*
* Requirements:
*
* - `operator` cannot be the caller.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
*
* See {setApprovalForAll}.
*/
function isApprovedForAll(address account, address operator) external view returns (bool);
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes calldata data
) external;
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] calldata ids,
uint256[] calldata amounts,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the optional ERC1155MetadataExtension interface, as defined
* in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
*
* _Available since v3.1._
*/
interface IERC1155MetadataURI is IERC1155 {
/**
* @dev Returns the URI for token type `id`.
*
* If the `\{id\}` substring is present in the URI, it must be replaced by
* clients with the actual token type ID.
*/
function uri(uint256 id) external view returns (string memory);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)
pragma solidity ^0.8.0;
/**
* @dev _Available since v3.1._
*/
interface IERC1155Receiver is IERC165 {
/**
* @dev Handles the receipt of a single ERC1155 token type. This function is
* called at the end of a `safeTransferFrom` after the balance has been updated.
*
* NOTE: To accept the transfer, this must return
* `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
* (i.e. 0xf23a6e61, or its own function selector).
*
* @param operator The address which initiated the transfer (i.e. msg.sender)
* @param from The address which previously owned the token
* @param id The ID of the token being transferred
* @param value The amount of tokens being transferred
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
*/
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
) external returns (bytes4);
/**
* @dev Handles the receipt of a multiple ERC1155 token types. This function
* is called at the end of a `safeBatchTransferFrom` after the balances have
* been updated.
*
* NOTE: To accept the transfer(s), this must return
* `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
* (i.e. 0xbc197c81, or its own function selector).
*
* @param operator The address which initiated the batch transfer (i.e. msg.sender)
* @param from The address which previously owned the token
* @param ids An array containing ids of each token being transferred (order and length must match values array)
* @param values An array containing amounts of each token being transferred (order and length must match ids array)
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
*/
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the basic standard multi-token.
* See https://eips.ethereum.org/EIPS/eip-1155
* Originally based on code by Enjin: https://github.com/enjin/erc-1155
*
* _Available since v3.1._
*/
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
using Address for address;
// Mapping from token ID to account balances
mapping(uint256 => mapping(address => uint256)) private _balances;
// Mapping from account to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
// Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
string private _uri;
/**
* @dev See {_setURI}.
*/
constructor(string memory uri_) {
_setURI(uri_);
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC1155).interfaceId ||
interfaceId == type(IERC1155MetadataURI).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC1155MetadataURI-uri}.
*
* This implementation returns the same URI for *all* token types. It relies
* on the token type ID substitution mechanism
* https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
*
* Clients calling this function must replace the `\{id\}` substring with the
* actual token type ID.
*/
function uri(uint256) public view virtual override returns (string memory) {
return _uri;
}
/**
* @dev See {IERC1155-balanceOf}.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
require(account != address(0), "ERC1155: address zero is not a valid owner");
return _balances[id][account];
}
/**
* @dev See {IERC1155-balanceOfBatch}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
public
view
virtual
override
returns (uint256[] memory)
{
require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");
uint256[] memory batchBalances = new uint256[](accounts.length);
for (uint256 i = 0; i < accounts.length; ++i) {
batchBalances[i] = balanceOf(accounts[i], ids[i]);
}
return batchBalances;
}
/**
* @dev See {IERC1155-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC1155-isApprovedForAll}.
*/
function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
return _operatorApprovals[account][operator];
}
/**
* @dev See {IERC1155-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) public virtual override {
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: caller is not token owner nor approved"
);
_safeTransferFrom(from, to, id, amount, data);
}
/**
* @dev See {IERC1155-safeBatchTransferFrom}.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) public virtual override {
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: caller is not token owner nor approved"
);
_safeBatchTransferFrom(from, to, ids, amounts, data);
}
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function _safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) internal virtual {
require(to != address(0), "ERC1155: transfer to the zero address");
address operator = _msgSender();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, from, to, ids, amounts, data);
uint256 fromBalance = _balances[id][from];
require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
unchecked {
_balances[id][from] = fromBalance - amount;
}
_balances[id][to] += amount;
emit TransferSingle(operator, from, to, id, amount);
_afterTokenTransfer(operator, from, to, ids, amounts, data);
_doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function _safeBatchTransferFrom(
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
require(to != address(0), "ERC1155: transfer to the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, from, to, ids, amounts, data);
for (uint256 i = 0; i < ids.length; ++i) {
uint256 id = ids[i];
uint256 amount = amounts[i];
uint256 fromBalance = _balances[id][from];
require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
unchecked {
_balances[id][from] = fromBalance - amount;
}
_balances[id][to] += amount;
}
emit TransferBatch(operator, from, to, ids, amounts);
_afterTokenTransfer(operator, from, to, ids, amounts, data);
_doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
}
/**
* @dev Sets a new URI for all token types, by relying on the token type ID
* substitution mechanism
* https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
*
* By this mechanism, any occurrence of the `\{id\}` substring in either the
* URI or any of the amounts in the JSON file at said URI will be replaced by
* clients with the token type ID.
*
* For example, the `https://token-cdn-domain/\{id\}.json` URI would be
* interpreted by clients as
* `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
* for token type ID 0x4cce0.
*
* See {uri}.
*
* Because these URIs cannot be meaningfully represented by the {URI} event,
* this function emits no events.
*/
function _setURI(string memory newuri) internal virtual {
_uri = newuri;
}
/**
* @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function _mint(
address to,
uint256 id,
uint256 amount,
bytes memory data
) internal virtual {
require(to != address(0), "ERC1155: mint to the zero address");
address operator = _msgSender();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, address(0), to, ids, amounts, data);
_balances[id][to] += amount;
emit TransferSingle(operator, address(0), to, id, amount);
_afterTokenTransfer(operator, address(0), to, ids, amounts, data);
_doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function _mintBatch(
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {
require(to != address(0), "ERC1155: mint to the zero address");
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), to, ids, amounts, data);
for (uint256 i = 0; i < ids.length; i++) {
_balances[ids[i]][to] += amounts[i];
}
emit TransferBatch(operator, address(0), to, ids, amounts);
_afterTokenTransfer(operator, address(0), to, ids, amounts, data);
_doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
}
/**
* @dev Destroys `amount` tokens of token type `id` from `from`
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `from` must have at least `amount` tokens of token type `id`.
*/
function _burn(
address from,
uint256 id,
uint256 amount
) internal virtual {
require(from != address(0), "ERC1155: burn from the zero address");
address operator = _msgSender();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, from, address(0), ids, amounts, "");
uint256 fromBalance = _balances[id][from];
require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
unchecked {
_balances[id][from] = fromBalance - amount;
}
emit TransferSingle(operator, from, address(0), id, amount);
_afterTokenTransfer(operator, from, address(0), ids, amounts, "");
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
*/
function _burnBatch(
address from,
uint256[] memory ids,
uint256[] memory amounts
) internal virtual {
require(from != address(0), "ERC1155: burn from the zero address");
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, from, address(0), ids, amounts, "");
for (uint256 i = 0; i < ids.length; i++) {
uint256 id = ids[i];
uint256 amount = amounts[i];
uint256 fromBalance = _balances[id][from];
require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
unchecked {
_balances[id][from] = fromBalance - amount;
}
}
emit TransferBatch(operator, from, address(0), ids, amounts);
_afterTokenTransfer(operator, from, address(0), ids, amounts, "");
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC1155: setting approval status for self");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning, as well as batched variants.
*
* The same hook is called on both single and batched variants. For single
* transfers, the length of the `ids` and `amounts` arrays will be 1.
*
* Calling conditions (for each `id` and `amount` pair):
*
* - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* of token type `id` will be transferred to `to`.
* - When `from` is zero, `amount` tokens of token type `id` will be minted
* for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
* will be burned.
* - `from` and `to` are never both zero.
* - `ids` and `amounts` have the same, non-zero length.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {}
/**
* @dev Hook that is called after any token transfer. This includes minting
* and burning, as well as batched variants.
*
* The same hook is called on both single and batched variants. For single
* transfers, the length of the `id` and `amount` arrays will be 1.
*
* Calling conditions (for each `id` and `amount` pair):
*
* - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* of token type `id` will be transferred to `to`.
* - When `from` is zero, `amount` tokens of token type `id` will be minted
* for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
* will be burned.
* - `from` and `to` are never both zero.
* - `ids` and `amounts` have the same, non-zero length.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {}
function _doSafeTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) private {
if (to.isContract()) {
try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
if (response != IERC1155Receiver.onERC1155Received.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _doSafeBatchTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) private {
if (to.isContract()) {
try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
bytes4 response
) {
if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
uint256[] memory array = new uint256[](1);
array[0] = element;
return array;
}
}
// File: @openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol)
pragma solidity ^0.8.0;
/**
* @dev _Available since v3.1._
*/
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
}
}
// File: @openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/utils/ERC1155Holder.sol)
pragma solidity ^0.8.0;
/**
* Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens.
*
* IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
* stuck.
*
* @dev _Available since v3.1._
*/
contract ERC1155Holder is ERC1155Receiver {
function onERC1155Received(
address,
address,
uint256,
uint256,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC1155Received.selector;
}
function onERC1155BatchReceived(
address,
address,
uint256[] memory,
uint256[] memory,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC1155BatchReceived.selector;
}
}
// File: contracts/unchartedMarketplace.sol
pragma solidity 0.8.17;
contract UnchartedMarketplace is ERC1155Holder, Ownable {
// For airdrop
IERC20 public usdcAddress;
address payable public walletToSend; // The wallet where ETH from purchases should be sent
IERC1155 public tokenAddress;
uint256 public tokenId = 0;
uint256 public tokenPrice = 19 * 1e16; // in the native currency (ETH) - wei
// allowable smart contract NFT limit (for pre-sale and sale limitation)
uint256 public allowableSCLimit = 0;
uint256 public limitPerWallet = 0;
event BuyEvent(address indexed buyer, IERC1155 indexed tokenAddress, uint256 indexed tokenId, uint256 amount);
event GiveAwayEvent(IERC1155 indexed tokenAddress, address indexed recipient, uint256 indexed tokenId, uint256 amount);
event PriceChangedEvent(uint256 indexed price);
event UsdcAddressChangedEvent(address indexed usdcAddress);
event WalletToSendAddressChangedEvent(address indexed newAddress);
event AllowableSCLimitChangedEvent(uint256 indexed amount);
event UnchartedTokenAddressChangedEvent(address indexed _address);
event TokenIdChangedEvent(uint256 indexed _tokenId);
event LimitPerWalletChangedEvent(uint256 indexed amount);
constructor(
address _usdcAddress,
address payable _walletToSend,
address _tokenAddress
) {
walletToSend = _walletToSend;
usdcAddress = IERC20(_usdcAddress);
tokenAddress = IERC1155(_tokenAddress);
}
function setTokenId(uint256 _tokenId) public onlyOwner {
tokenId = _tokenId;
emit TokenIdChangedEvent(_tokenId);
}
function setTokenPrice(uint256 price) public onlyOwner {
tokenPrice = price;
emit PriceChangedEvent(price);
}
function setUnchartedTokenAddress(address _address) public onlyOwner {
tokenAddress = IERC1155(_address);
emit UnchartedTokenAddressChangedEvent(_address);
}
function setAllowableSCLimit(uint256 amount) public onlyOwner {
allowableSCLimit = amount;
emit AllowableSCLimitChangedEvent(amount);
}
function startNewSales(
address _tokenAddress,
uint256 _tokenId,
uint256 price,
uint256 _allowableSCLimit
) external onlyOwner {
setUnchartedTokenAddress(_tokenAddress);
setTokenId(_tokenId);
setTokenPrice(price);
setAllowableSCLimit(_allowableSCLimit);
}
function setUsdcAddress(address _usdcAddress) external onlyOwner {
require(_usdcAddress != address(0x0), "Invalid address");
usdcAddress = IERC20(_usdcAddress);
emit UsdcAddressChangedEvent(_usdcAddress);
}
function setWalletToSend(address payable newAddress) external onlyOwner {
require(newAddress != address(0x0), "Invalid address");
walletToSend = newAddress;
emit WalletToSendAddressChangedEvent(newAddress);
}
function setLimitPerWallet(uint256 amount) external onlyOwner {
limitPerWallet = amount;
emit LimitPerWalletChangedEvent(amount);
}
function buy(uint256 amount) external payable {
require(tokenPrice > 0, "Not for sale yet");
require(amount * tokenPrice == msg.value, "ETH amount mismatch");
require(tokenAddress.balanceOf(address(this), tokenId) >= amount, "There is no such amount of tokens");
require(
tokenAddress.balanceOf(address(this), tokenId) - amount >= allowableSCLimit,
string.concat("Limit reached")
);
if (limitPerWallet > 0) {
require(
tokenAddress.balanceOf(msg.sender, tokenId) + amount <= limitPerWallet,
"Limit per wallet reached"
);
}
walletToSend.transfer(msg.value);
tokenAddress.safeTransferFrom(address(this), msg.sender, tokenId, amount, "0x0");
emit BuyEvent(msg.sender, tokenAddress, tokenId, amount);
}
function giveAway(address recipient, uint256 amount) external onlyOwner {
tokenAddress.safeTransferFrom(address(this), recipient, tokenId, amount, "GiveAway");
emit GiveAwayEvent(tokenAddress, recipient, tokenId, amount);
}
function giveAwayBatch(address[] memory recipients, uint256[] memory amount) external onlyOwner {
require(recipients.length == amount.length, "Recipient and amount arrays mismatch");
uint sum = 0;
for (uint i = 0; i < recipients.length; i++) {
require(recipients[i] != address(0), "Recipient should not have 0x0 address");
sum += amount[i];
}
require(tokenAddress.balanceOf(msg.sender, tokenId) >= sum, "Insufficient amount of tokens");
for (uint i = 0; i < recipients.length; i++) {
tokenAddress.safeTransferFrom(address(this), recipients[i], tokenId, amount[i], "GiveAway");
emit GiveAwayEvent(tokenAddress, recipients[i], tokenId, amount[i]);
}
}
function airdrop(address[] memory recipients, uint256[] memory amount) external {
require(recipients.length == amount.length, "Recipient and amount arrays mismatch");
uint sum = 0;
for (uint i = 0; i < recipients.length; i++) {
require(recipients[i] != address(0), "Recipient should not have 0x0 address");
sum += amount[i];
}
require(usdcAddress.allowance(msg.sender, address(this)) >= sum, "Insufficient USDC allowance");
require(usdcAddress.balanceOf(msg.sender) >= sum, "Insufficient USDC");
for (uint i = 0; i < recipients.length; i++) {
require(
usdcAddress.transferFrom(msg.sender, recipients[i], amount[i]) == true,
"Unable to transfer"
);
}
}
// If a user sends other tokens to this smart contract, the owner can transfer it to himself.
function withdrawToken(address _tokenContract, address _recipient, uint256 _amount) external onlyOwner {
IERC20 tokenContract = IERC20(_tokenContract);
// transfer the token from address of this contract
// to address of the user (executing the withdrawToken() function)
tokenContract.transfer(_recipient, _amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_usdcAddress","type":"address"},{"internalType":"address payable","name":"_walletToSend","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AllowableSCLimitChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"contract IERC1155","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC1155","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"GiveAwayEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LimitPerWalletChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"price","type":"uint256"}],"name":"PriceChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"TokenIdChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"UnchartedTokenAddressChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usdcAddress","type":"address"}],"name":"UsdcAddressChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"WalletToSendAddressChangedEvent","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowableSCLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"giveAwayBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","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":"amount","type":"uint256"}],"name":"setAllowableSCLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLimitPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"setTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setUnchartedTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdcAddress","type":"address"}],"name":"setUsdcAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"setWalletToSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"_allowableSCLimit","type":"uint256"}],"name":"startNewSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","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":"usdcAddress","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletToSend","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405260006004556702a303fe4b530000600555600060065560006007553480156200002c57600080fd5b5060405162001c5138038062001c518339810160408190526200004f9162000104565b6200005a336200009b565b600280546001600160a01b03199081166001600160a01b03948516179091556001805482169484169490941790935560038054909316911617905562000158565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b6000806000606084860312156200011a57600080fd5b83516200012781620000eb565b60208501519093506200013a81620000eb565b60408501519092506200014d81620000eb565b809150509250925092565b611ae980620001686000396000f3fe6080604052600436106101815760003560e01c80637ff9b596116100d1578063c92059ef1161008a578063d38bcdee11610064578063d38bcdee14610473578063d96a094a14610493578063f23a6e61146104a6578063f2fde38b146104d257600080fd5b8063c92059ef14610413578063c929ccf314610433578063ca8001441461045357600080fd5b80637ff9b596146103445780638da5cb5b1461035a57806399675862146103785780639d76ea5814610398578063a620ce5a146103b8578063bc197c81146103ce57600080fd5b80631b82a9251161013e5780636a61e5fc116101185780636a61e5fc146102cf5780636cc1272d146102ef578063715018a61461030f5780637a04a32b1461032457600080fd5b80631b82a9251461027957806363c766b91461028f57806367243482146102af57600080fd5b806301e336671461018657806301ffc9a7146101a857806302d45457146101dd57806305cf671514610215578063104aee2b1461023557806317d70f7c14610255575b600080fd5b34801561019257600080fd5b506101a66101a13660046114a8565b6104f2565b005b3480156101b457600080fd5b506101c86101c33660046114e9565b610577565b60405190151581526020015b60405180910390f35b3480156101e957600080fd5b506001546101fd906001600160a01b031681565b6040516001600160a01b0390911681526020016101d4565b34801561022157600080fd5b506101a661023036600461151a565b6105ae565b34801561024157600080fd5b506101a6610250366004611533565b6105e9565b34801561026157600080fd5b5061026b60045481565b6040519081526020016101d4565b34801561028557600080fd5b5061026b60065481565b34801561029b57600080fd5b506101a66102aa36600461151a565b61061b565b3480156102bb57600080fd5b506101a66102ca366004611644565b610656565b3480156102db57600080fd5b506101a66102ea36600461151a565b6109ac565b3480156102fb57600080fd5b506101a661030a366004611706565b6109e7565b34801561031b57600080fd5b506101a6610a39565b34801561033057600080fd5b506101a661033f366004611644565b610a4d565b34801561035057600080fd5b5061026b60055481565b34801561036657600080fd5b506000546001600160a01b03166101fd565b34801561038457600080fd5b506002546101fd906001600160a01b031681565b3480156103a457600080fd5b506003546101fd906001600160a01b031681565b3480156103c457600080fd5b5061026b60075481565b3480156103da57600080fd5b506103fa6103e9366004611793565b63bc197c8160e01b95945050505050565b6040516001600160e01b031990911681526020016101d4565b34801561041f57600080fd5b506101a661042e366004611706565b610d21565b34801561043f57600080fd5b506101a661044e36600461151a565b610dbb565b34801561045f57600080fd5b506101a661046e366004611841565b610df6565b34801561047f57600080fd5b506101a661048e366004611706565b610eb3565b6101a66104a136600461151a565b610f4c565b3480156104b257600080fd5b506103fa6104c136600461186d565b63f23a6e6160e01b95945050505050565b3480156104de57600080fd5b506101a66104ed366004611706565b611370565b6104fa6113e9565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af115801561054c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057091906118d6565b5050505050565b60006001600160e01b03198216630271189760e51b14806105a857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6105b66113e9565b600681905560405181907f909bfd1af868858f3ffdc0a30faebd35d07c09b1b42e65c12d963362a653794590600090a250565b6105f16113e9565b6105fa846109e7565b61060383610dbb565b61060c826109ac565b610615816105ae565b50505050565b6106236113e9565b600781905560405181907f8df92967b8af7b122cdd61e9ba879e7e6896e7a7f3243e53062d51a4f5968a5390600090a250565b80518251146106805760405162461bcd60e51b8152600401610677906118f8565b60405180910390fd5b6000805b83518110156107115760006001600160a01b03168482815181106106aa576106aa61193c565b60200260200101516001600160a01b0316036106d85760405162461bcd60e51b815260040161067790611952565b8281815181106106ea576106ea61193c565b6020026020010151826106fd91906119ad565b915080610709816119c0565b915050610684565b50600154604051636eb1769f60e11b815233600482015230602482015282916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610760573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078491906119d9565b10156107d25760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74205553444320616c6c6f77616e636500000000006044820152606401610677565b6001546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa15801561081a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083e91906119d9565b10156108805760405162461bcd60e51b8152602060048201526011602482015270496e73756666696369656e74205553444360781b6044820152606401610677565b60005b83518110156106155760015484516001600160a01b03909116906323b872dd9033908790859081106108b7576108b761193c565b60200260200101518685815181106108d1576108d161193c565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610930573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095491906118d6565b151560011461099a5760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b6044820152606401610677565b806109a4816119c0565b915050610883565b6109b46113e9565b600581905560405181907f43cc2bf0d89011a9c152ad3160caf9678bb178be531fde89e6fcd723ac2ad28190600090a250565b6109ef6113e9565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4023555c71a6509b28a84916623b27c4df076f35b7db3c403d66c745d15ecd9390600090a250565b610a416113e9565b610a4b6000611443565b565b610a556113e9565b8051825114610a765760405162461bcd60e51b8152600401610677906118f8565b6000805b8351811015610b075760006001600160a01b0316848281518110610aa057610aa061193c565b60200260200101516001600160a01b031603610ace5760405162461bcd60e51b815260040161067790611952565b828181518110610ae057610ae061193c565b602002602001015182610af391906119ad565b915080610aff816119c0565b915050610a7a565b5060035460048054604051627eeac760e11b81523392810192909252602482015282916001600160a01b03169062fdd58e90604401602060405180830381865afa158015610b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d91906119d9565b1015610bcb5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420616d6f756e74206f6620746f6b656e730000006044820152606401610677565b60005b83518110156106155760035484516001600160a01b039091169063f242432a903090879085908110610c0257610c0261193c565b6020026020010151600454878681518110610c1f57610c1f61193c565b60200260200101516040518563ffffffff1660e01b8152600401610c4694939291906119f2565b600060405180830381600087803b158015610c6057600080fd5b505af1158015610c74573d6000803e3d6000fd5b50505050600454848281518110610c8d57610c8d61193c565b60200260200101516001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b03167f6471fc0ecea71a6d8f27f057d247518b49800882874ede8f8f3708d4549f3d7d868581518110610cf057610cf061193c565b6020026020010151604051610d0791815260200190565b60405180910390a480610d19816119c0565b915050610bce565b610d296113e9565b6001600160a01b038116610d715760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610677565b600280546001600160a01b0319166001600160a01b0383169081179091556040517fec110daf3a677eeaaa88ee47fc5f448169c5d572c7120a743a3a22f8c862191190600090a250565b610dc36113e9565b600481905560405181907fa11ad5fd2e9588aa64ac6657b9f92c83b1a69fc111a3e0c9096f9a111882d09290600090a250565b610dfe6113e9565b60035460048054604051637921219560e11b81526001600160a01b039093169263f242432a92610e3492309288928891016119f2565b600060405180830381600087803b158015610e4e57600080fd5b505af1158015610e62573d6000803e3d6000fd5b50506004546003546040518581529193506001600160a01b03868116935016907f6471fc0ecea71a6d8f27f057d247518b49800882874ede8f8f3708d4549f3d7d9060200160405180910390a45050565b610ebb6113e9565b6001600160a01b038116610f035760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610677565b600180546001600160a01b0319166001600160a01b0383169081179091556040517e38d8b0f1b31328df3e779674a819cfa6c748e46dce8dca98c4a371433a639790600090a250565b600060055411610f915760405162461bcd60e51b815260206004820152601060248201526f139bdd08199bdc881cd85b19481e595d60821b6044820152606401610677565b3460055482610fa09190611a3b565b14610fe35760405162461bcd60e51b815260206004820152601360248201527208aa89040c2dadeeadce840dad2e6dac2e8c6d606b1b6044820152606401610677565b60035460048054604051627eeac760e11b81523092810192909252602482015282916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105891906119d9565b10156110b05760405162461bcd60e51b815260206004820152602160248201527f5468657265206973206e6f207375636820616d6f756e74206f6620746f6b656e6044820152607360f81b6064820152608401610677565b60065460035460048054604051627eeac760e11b81523092810192909252602482015283916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112891906119d9565b6111329190611a52565b1015604051602001611157906c131a5b5a5d081c995858da1959609a1b8152600d0190565b604051602081830303815290604052906111845760405162461bcd60e51b81526004016106779190611a65565b506007541561125d5760075460035460048054604051627eeac760e11b81523392810192909252602482015283916001600160a01b03169062fdd58e90604401602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120591906119d9565b61120f91906119ad565b111561125d5760405162461bcd60e51b815260206004820152601860248201527f4c696d6974207065722077616c6c6574207265616368656400000000000000006044820152606401610677565b6002546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611296573d6000803e3d6000fd5b506003805460048054604051637921219560e11b8152309281019290925233602483015260448201526064810184905260a0608482015260a48101929092526203078360ec1b60c48301526001600160a01b03169063f242432a9060e401600060405180830381600087803b15801561130e57600080fd5b505af1158015611322573d6000803e3d6000fd5b50506004546003546040518581529193506001600160a01b0316915033907f797abd7322a72df2fd9412f6ff5500e993efb298450cc1d7e9fd84e296592b089060200160405180910390a450565b6113786113e9565b6001600160a01b0381166113dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610677565b6113e681611443565b50565b6000546001600160a01b03163314610a4b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610677565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146113e657600080fd5b6000806000606084860312156114bd57600080fd5b83356114c881611493565b925060208401356114d881611493565b929592945050506040919091013590565b6000602082840312156114fb57600080fd5b81356001600160e01b03198116811461151357600080fd5b9392505050565b60006020828403121561152c57600080fd5b5035919050565b6000806000806080858703121561154957600080fd5b843561155481611493565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156115ad576115ad61156e565b604052919050565b600067ffffffffffffffff8211156115cf576115cf61156e565b5060051b60200190565b600082601f8301126115ea57600080fd5b813560206115ff6115fa836115b5565b611584565b82815260059290921b8401810191818101908684111561161e57600080fd5b8286015b848110156116395780358352918301918301611622565b509695505050505050565b6000806040838503121561165757600080fd5b823567ffffffffffffffff8082111561166f57600080fd5b818501915085601f83011261168357600080fd5b813560206116936115fa836115b5565b82815260059290921b840181019181810190898411156116b257600080fd5b948201945b838610156116d95785356116ca81611493565b825294820194908201906116b7565b965050860135925050808211156116ef57600080fd5b506116fc858286016115d9565b9150509250929050565b60006020828403121561171857600080fd5b813561151381611493565b600082601f83011261173457600080fd5b813567ffffffffffffffff81111561174e5761174e61156e565b611761601f8201601f1916602001611584565b81815284602083860101111561177657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156117ab57600080fd5b85356117b681611493565b945060208601356117c681611493565b9350604086013567ffffffffffffffff808211156117e357600080fd5b6117ef89838a016115d9565b9450606088013591508082111561180557600080fd5b61181189838a016115d9565b9350608088013591508082111561182757600080fd5b5061183488828901611723565b9150509295509295909350565b6000806040838503121561185457600080fd5b823561185f81611493565b946020939093013593505050565b600080600080600060a0868803121561188557600080fd5b853561189081611493565b945060208601356118a081611493565b93506040860135925060608601359150608086013567ffffffffffffffff8111156118ca57600080fd5b61183488828901611723565b6000602082840312156118e857600080fd5b8151801515811461151357600080fd5b60208082526024908201527f526563697069656e7420616e6420616d6f756e7420617272617973206d69736d6040820152630c2e8c6d60e31b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60208082526025908201527f526563697069656e742073686f756c64206e6f74206861766520307830206164604082015264647265737360d81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105a8576105a8611997565b6000600182016119d2576119d2611997565b5060010190565b6000602082840312156119eb57600080fd5b5051919050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260089082015267476976654177617960c01b60c082015260e00190565b80820281158282048414176105a8576105a8611997565b818103818111156105a8576105a8611997565b600060208083528351808285015260005b81811015611a9257858101830151858201604001528201611a76565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220fa421d76aa897605119904dce69a5e3ab1ef551afac3817333244b5c3a8881a664736f6c63430008110033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000090f3caf118b3c429b2d259cc53e99bc01152726000000000000000000000000a12f1f767279af5da785984f1432c46d87e46e8c
Deployed Bytecode
0x6080604052600436106101815760003560e01c80637ff9b596116100d1578063c92059ef1161008a578063d38bcdee11610064578063d38bcdee14610473578063d96a094a14610493578063f23a6e61146104a6578063f2fde38b146104d257600080fd5b8063c92059ef14610413578063c929ccf314610433578063ca8001441461045357600080fd5b80637ff9b596146103445780638da5cb5b1461035a57806399675862146103785780639d76ea5814610398578063a620ce5a146103b8578063bc197c81146103ce57600080fd5b80631b82a9251161013e5780636a61e5fc116101185780636a61e5fc146102cf5780636cc1272d146102ef578063715018a61461030f5780637a04a32b1461032457600080fd5b80631b82a9251461027957806363c766b91461028f57806367243482146102af57600080fd5b806301e336671461018657806301ffc9a7146101a857806302d45457146101dd57806305cf671514610215578063104aee2b1461023557806317d70f7c14610255575b600080fd5b34801561019257600080fd5b506101a66101a13660046114a8565b6104f2565b005b3480156101b457600080fd5b506101c86101c33660046114e9565b610577565b60405190151581526020015b60405180910390f35b3480156101e957600080fd5b506001546101fd906001600160a01b031681565b6040516001600160a01b0390911681526020016101d4565b34801561022157600080fd5b506101a661023036600461151a565b6105ae565b34801561024157600080fd5b506101a6610250366004611533565b6105e9565b34801561026157600080fd5b5061026b60045481565b6040519081526020016101d4565b34801561028557600080fd5b5061026b60065481565b34801561029b57600080fd5b506101a66102aa36600461151a565b61061b565b3480156102bb57600080fd5b506101a66102ca366004611644565b610656565b3480156102db57600080fd5b506101a66102ea36600461151a565b6109ac565b3480156102fb57600080fd5b506101a661030a366004611706565b6109e7565b34801561031b57600080fd5b506101a6610a39565b34801561033057600080fd5b506101a661033f366004611644565b610a4d565b34801561035057600080fd5b5061026b60055481565b34801561036657600080fd5b506000546001600160a01b03166101fd565b34801561038457600080fd5b506002546101fd906001600160a01b031681565b3480156103a457600080fd5b506003546101fd906001600160a01b031681565b3480156103c457600080fd5b5061026b60075481565b3480156103da57600080fd5b506103fa6103e9366004611793565b63bc197c8160e01b95945050505050565b6040516001600160e01b031990911681526020016101d4565b34801561041f57600080fd5b506101a661042e366004611706565b610d21565b34801561043f57600080fd5b506101a661044e36600461151a565b610dbb565b34801561045f57600080fd5b506101a661046e366004611841565b610df6565b34801561047f57600080fd5b506101a661048e366004611706565b610eb3565b6101a66104a136600461151a565b610f4c565b3480156104b257600080fd5b506103fa6104c136600461186d565b63f23a6e6160e01b95945050505050565b3480156104de57600080fd5b506101a66104ed366004611706565b611370565b6104fa6113e9565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af115801561054c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057091906118d6565b5050505050565b60006001600160e01b03198216630271189760e51b14806105a857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6105b66113e9565b600681905560405181907f909bfd1af868858f3ffdc0a30faebd35d07c09b1b42e65c12d963362a653794590600090a250565b6105f16113e9565b6105fa846109e7565b61060383610dbb565b61060c826109ac565b610615816105ae565b50505050565b6106236113e9565b600781905560405181907f8df92967b8af7b122cdd61e9ba879e7e6896e7a7f3243e53062d51a4f5968a5390600090a250565b80518251146106805760405162461bcd60e51b8152600401610677906118f8565b60405180910390fd5b6000805b83518110156107115760006001600160a01b03168482815181106106aa576106aa61193c565b60200260200101516001600160a01b0316036106d85760405162461bcd60e51b815260040161067790611952565b8281815181106106ea576106ea61193c565b6020026020010151826106fd91906119ad565b915080610709816119c0565b915050610684565b50600154604051636eb1769f60e11b815233600482015230602482015282916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610760573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078491906119d9565b10156107d25760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74205553444320616c6c6f77616e636500000000006044820152606401610677565b6001546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa15801561081a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083e91906119d9565b10156108805760405162461bcd60e51b8152602060048201526011602482015270496e73756666696369656e74205553444360781b6044820152606401610677565b60005b83518110156106155760015484516001600160a01b03909116906323b872dd9033908790859081106108b7576108b761193c565b60200260200101518685815181106108d1576108d161193c565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610930573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095491906118d6565b151560011461099a5760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b6044820152606401610677565b806109a4816119c0565b915050610883565b6109b46113e9565b600581905560405181907f43cc2bf0d89011a9c152ad3160caf9678bb178be531fde89e6fcd723ac2ad28190600090a250565b6109ef6113e9565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4023555c71a6509b28a84916623b27c4df076f35b7db3c403d66c745d15ecd9390600090a250565b610a416113e9565b610a4b6000611443565b565b610a556113e9565b8051825114610a765760405162461bcd60e51b8152600401610677906118f8565b6000805b8351811015610b075760006001600160a01b0316848281518110610aa057610aa061193c565b60200260200101516001600160a01b031603610ace5760405162461bcd60e51b815260040161067790611952565b828181518110610ae057610ae061193c565b602002602001015182610af391906119ad565b915080610aff816119c0565b915050610a7a565b5060035460048054604051627eeac760e11b81523392810192909252602482015282916001600160a01b03169062fdd58e90604401602060405180830381865afa158015610b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d91906119d9565b1015610bcb5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420616d6f756e74206f6620746f6b656e730000006044820152606401610677565b60005b83518110156106155760035484516001600160a01b039091169063f242432a903090879085908110610c0257610c0261193c565b6020026020010151600454878681518110610c1f57610c1f61193c565b60200260200101516040518563ffffffff1660e01b8152600401610c4694939291906119f2565b600060405180830381600087803b158015610c6057600080fd5b505af1158015610c74573d6000803e3d6000fd5b50505050600454848281518110610c8d57610c8d61193c565b60200260200101516001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b03167f6471fc0ecea71a6d8f27f057d247518b49800882874ede8f8f3708d4549f3d7d868581518110610cf057610cf061193c565b6020026020010151604051610d0791815260200190565b60405180910390a480610d19816119c0565b915050610bce565b610d296113e9565b6001600160a01b038116610d715760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610677565b600280546001600160a01b0319166001600160a01b0383169081179091556040517fec110daf3a677eeaaa88ee47fc5f448169c5d572c7120a743a3a22f8c862191190600090a250565b610dc36113e9565b600481905560405181907fa11ad5fd2e9588aa64ac6657b9f92c83b1a69fc111a3e0c9096f9a111882d09290600090a250565b610dfe6113e9565b60035460048054604051637921219560e11b81526001600160a01b039093169263f242432a92610e3492309288928891016119f2565b600060405180830381600087803b158015610e4e57600080fd5b505af1158015610e62573d6000803e3d6000fd5b50506004546003546040518581529193506001600160a01b03868116935016907f6471fc0ecea71a6d8f27f057d247518b49800882874ede8f8f3708d4549f3d7d9060200160405180910390a45050565b610ebb6113e9565b6001600160a01b038116610f035760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610677565b600180546001600160a01b0319166001600160a01b0383169081179091556040517e38d8b0f1b31328df3e779674a819cfa6c748e46dce8dca98c4a371433a639790600090a250565b600060055411610f915760405162461bcd60e51b815260206004820152601060248201526f139bdd08199bdc881cd85b19481e595d60821b6044820152606401610677565b3460055482610fa09190611a3b565b14610fe35760405162461bcd60e51b815260206004820152601360248201527208aa89040c2dadeeadce840dad2e6dac2e8c6d606b1b6044820152606401610677565b60035460048054604051627eeac760e11b81523092810192909252602482015282916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105891906119d9565b10156110b05760405162461bcd60e51b815260206004820152602160248201527f5468657265206973206e6f207375636820616d6f756e74206f6620746f6b656e6044820152607360f81b6064820152608401610677565b60065460035460048054604051627eeac760e11b81523092810192909252602482015283916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112891906119d9565b6111329190611a52565b1015604051602001611157906c131a5b5a5d081c995858da1959609a1b8152600d0190565b604051602081830303815290604052906111845760405162461bcd60e51b81526004016106779190611a65565b506007541561125d5760075460035460048054604051627eeac760e11b81523392810192909252602482015283916001600160a01b03169062fdd58e90604401602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120591906119d9565b61120f91906119ad565b111561125d5760405162461bcd60e51b815260206004820152601860248201527f4c696d6974207065722077616c6c6574207265616368656400000000000000006044820152606401610677565b6002546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611296573d6000803e3d6000fd5b506003805460048054604051637921219560e11b8152309281019290925233602483015260448201526064810184905260a0608482015260a48101929092526203078360ec1b60c48301526001600160a01b03169063f242432a9060e401600060405180830381600087803b15801561130e57600080fd5b505af1158015611322573d6000803e3d6000fd5b50506004546003546040518581529193506001600160a01b0316915033907f797abd7322a72df2fd9412f6ff5500e993efb298450cc1d7e9fd84e296592b089060200160405180910390a450565b6113786113e9565b6001600160a01b0381166113dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610677565b6113e681611443565b50565b6000546001600160a01b03163314610a4b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610677565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146113e657600080fd5b6000806000606084860312156114bd57600080fd5b83356114c881611493565b925060208401356114d881611493565b929592945050506040919091013590565b6000602082840312156114fb57600080fd5b81356001600160e01b03198116811461151357600080fd5b9392505050565b60006020828403121561152c57600080fd5b5035919050565b6000806000806080858703121561154957600080fd5b843561155481611493565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156115ad576115ad61156e565b604052919050565b600067ffffffffffffffff8211156115cf576115cf61156e565b5060051b60200190565b600082601f8301126115ea57600080fd5b813560206115ff6115fa836115b5565b611584565b82815260059290921b8401810191818101908684111561161e57600080fd5b8286015b848110156116395780358352918301918301611622565b509695505050505050565b6000806040838503121561165757600080fd5b823567ffffffffffffffff8082111561166f57600080fd5b818501915085601f83011261168357600080fd5b813560206116936115fa836115b5565b82815260059290921b840181019181810190898411156116b257600080fd5b948201945b838610156116d95785356116ca81611493565b825294820194908201906116b7565b965050860135925050808211156116ef57600080fd5b506116fc858286016115d9565b9150509250929050565b60006020828403121561171857600080fd5b813561151381611493565b600082601f83011261173457600080fd5b813567ffffffffffffffff81111561174e5761174e61156e565b611761601f8201601f1916602001611584565b81815284602083860101111561177657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156117ab57600080fd5b85356117b681611493565b945060208601356117c681611493565b9350604086013567ffffffffffffffff808211156117e357600080fd5b6117ef89838a016115d9565b9450606088013591508082111561180557600080fd5b61181189838a016115d9565b9350608088013591508082111561182757600080fd5b5061183488828901611723565b9150509295509295909350565b6000806040838503121561185457600080fd5b823561185f81611493565b946020939093013593505050565b600080600080600060a0868803121561188557600080fd5b853561189081611493565b945060208601356118a081611493565b93506040860135925060608601359150608086013567ffffffffffffffff8111156118ca57600080fd5b61183488828901611723565b6000602082840312156118e857600080fd5b8151801515811461151357600080fd5b60208082526024908201527f526563697069656e7420616e6420616d6f756e7420617272617973206d69736d6040820152630c2e8c6d60e31b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60208082526025908201527f526563697069656e742073686f756c64206e6f74206861766520307830206164604082015264647265737360d81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105a8576105a8611997565b6000600182016119d2576119d2611997565b5060010190565b6000602082840312156119eb57600080fd5b5051919050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260089082015267476976654177617960c01b60c082015260e00190565b80820281158282048414176105a8576105a8611997565b818103818111156105a8576105a8611997565b600060208083528351808285015260005b81811015611a9257858101830151858201604001528201611a76565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220fa421d76aa897605119904dce69a5e3ab1ef551afac3817333244b5c3a8881a664736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000090f3caf118b3c429b2d259cc53e99bc01152726000000000000000000000000a12f1f767279af5da785984f1432c46d87e46e8c
-----Decoded View---------------
Arg [0] : _usdcAddress (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : _walletToSend (address): 0x090F3cAF118b3C429b2d259CC53E99bc01152726
Arg [2] : _tokenAddress (address): 0xA12f1f767279af5Da785984F1432c46D87e46E8c
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 000000000000000000000000090f3caf118b3c429b2d259cc53e99bc01152726
Arg [2] : 000000000000000000000000a12f1f767279af5da785984f1432c46d87e46e8c
Deployed Bytecode Sourcemap
43737:6668:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50028:372;;;;;;;;;;-1:-1:-1;50028:372:0;;;;;:::i;:::-;;:::i;:::-;;42393:223;;;;;;;;;;-1:-1:-1;42393:223:0;;;;;:::i;:::-;;:::i;:::-;;;1067:14:1;;1060:22;1042:41;;1030:2;1015:18;42393:223:0;;;;;;;;43824:25;;;;;;;;;;-1:-1:-1;43824:25:0;;;;-1:-1:-1;;;;;43824:25:0;;;;;;-1:-1:-1;;;;;1272:32:1;;;1254:51;;1242:2;1227:18;43824:25:0;1094:217:1;45807:168:0;;;;;;;;;;-1:-1:-1;45807:168:0;;;;;:::i;:::-;;:::i;45987:357::-;;;;;;;;;;-1:-1:-1;45987:357:0;;;;;:::i;:::-;;:::i;44001:26::-;;;;;;;;;;;;;;;;;;;2104:25:1;;;2092:2;2077:18;44001:26:0;1958:177:1;44200:35:0;;;;;;;;;;;;;;;;46882:164;;;;;;;;;;-1:-1:-1;46882:164:0;;;;;:::i;:::-;;:::i;49067:848::-;;;;;;;;;;-1:-1:-1;49067:848:0;;;;;:::i;:::-;;:::i;45451:142::-;;;;;;;;;;-1:-1:-1;45451:142:0;;;;;:::i;:::-;;:::i;45605:190::-;;;;;;;;;;-1:-1:-1;45605:190:0;;;;;:::i;:::-;;:::i;2776:103::-;;;;;;;;;;;;;:::i;48258:797::-;;;;;;;;;;-1:-1:-1;48258:797:0;;;;;:::i;:::-;;:::i;44036:37::-;;;;;;;;;;;;;;;;2128:87;;;;;;;;;;-1:-1:-1;2174:7:0;2201:6;-1:-1:-1;;;;;2201:6:0;2128:87;;43862:35;;;;;;;;;;-1:-1:-1;43862:35:0;;;;-1:-1:-1;;;;;43862:35:0;;;43964:28;;;;;;;;;;-1:-1:-1;43964:28:0;;;;-1:-1:-1;;;;;43964:28:0;;;44244:33;;;;;;;;;;;;;;;;43383:255;;;;;;;;;;-1:-1:-1;43383:255:0;;;;;:::i;:::-;-1:-1:-1;;;43383:255:0;;;;;;;;;;;-1:-1:-1;;;;;;7308:33:1;;;7290:52;;7278:2;7263:18;43383:255:0;7146:202:1;46618:252:0;;;;;;;;;;-1:-1:-1;46618:252:0;;;;;:::i;:::-;;:::i;45292:147::-;;;;;;;;;;-1:-1:-1;45292:147:0;;;;;:::i;:::-;;:::i;47990:256::-;;;;;;;;;;-1:-1:-1;47990:256:0;;;;;:::i;:::-;;:::i;46356:250::-;;;;;;;;;;-1:-1:-1;46356:250:0;;;;;:::i;:::-;;:::i;47058:920::-;;;;;;:::i;:::-;;:::i;43148:227::-;;;;;;;;;;-1:-1:-1;43148:227:0;;;;;:::i;:::-;-1:-1:-1;;;43148:227:0;;;;;;;;3034:201;;;;;;;;;;-1:-1:-1;3034:201:0;;;;;:::i;:::-;;:::i;50028:372::-;2014:13;:11;:13::i;:::-;50347:43:::1;::::0;-1:-1:-1;;;50347:43:0;;-1:-1:-1;;;;;8864:32:1;;;50347:43:0::1;::::0;::::1;8846:51:1::0;8913:18;;;8906:34;;;50174:14:0;;50347:22;;::::1;::::0;::::1;::::0;8819:18:1;;50347:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;50131:269;50028:372:::0;;;:::o;42393:223::-;42495:4;-1:-1:-1;;;;;;42519:49:0;;-1:-1:-1;;;42519:49:0;;:89;;-1:-1:-1;;;;;;;;;;21826:40:0;;;42572:36;42512:96;42393:223;-1:-1:-1;;42393:223:0:o;45807:168::-;2014:13;:11;:13::i;:::-;45882:16:::1;:25:::0;;;45929:36:::1;::::0;45901:6;;45929:36:::1;::::0;;;::::1;45807:168:::0;:::o;45987:357::-;2014:13;:11;:13::i;:::-;46178:39:::1;46203:13;46178:24;:39::i;:::-;46230:20;46241:8;46230:10;:20::i;:::-;46263;46277:5;46263:13;:20::i;:::-;46296:38;46316:17;46296:19;:38::i;:::-;45987:357:::0;;;;:::o;46882:164::-;2014:13;:11;:13::i;:::-;46957:14:::1;:23:::0;;;47002:34:::1;::::0;46974:6;;47002:34:::1;::::0;;;::::1;46882:164:::0;:::o;49067:848::-;49189:6;:13;49168:10;:17;:34;49160:83;;;;-1:-1:-1;;;49160:83:0;;;;;;;:::i;:::-;;;;;;;;;49256:8;49286:6;49281:186;49302:10;:17;49298:1;:21;49281:186;;;49376:1;-1:-1:-1;;;;;49351:27:0;:10;49362:1;49351:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;49351:27:0;;49343:77;;;;-1:-1:-1;;;49343:77:0;;;;;;;:::i;:::-;49444:6;49451:1;49444:9;;;;;;;;:::i;:::-;;;;;;;49437:16;;;;;:::i;:::-;;-1:-1:-1;49321:3:0;;;;:::i;:::-;;;;49281:186;;;-1:-1:-1;49487:11:0;;:48;;-1:-1:-1;;;49487:48:0;;49509:10;49487:48;;;10790:34:1;49529:4:0;10840:18:1;;;10833:43;49539:3:0;;-1:-1:-1;;;;;49487:11:0;;:21;;10725:18:1;;49487:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;49479:95;;;;-1:-1:-1;;;49479:95:0;;11278:2:1;49479:95:0;;;11260:21:1;11317:2;11297:18;;;11290:30;11356:29;11336:18;;;11329:57;11403:18;;49479:95:0;11076:351:1;49479:95:0;49595:11;;:33;;-1:-1:-1;;;49595:33:0;;49617:10;49595:33;;;1254:51:1;49632:3:0;;-1:-1:-1;;;;;49595:11:0;;:21;;1227:18:1;;49595:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;49587:70;;;;-1:-1:-1;;;49587:70:0;;11634:2:1;49587:70:0;;;11616:21:1;11673:2;11653:18;;;11646:30;-1:-1:-1;;;11692:18:1;;;11685:47;11749:18;;49587:70:0;11432:341:1;49587:70:0;49679:6;49674:232;49695:10;:17;49691:1;:21;49674:232;;;49764:11;;49801:13;;-1:-1:-1;;;;;49764:11:0;;;;:24;;49789:10;;49801;;49812:1;;49801:13;;;;;;:::i;:::-;;;;;;;49816:6;49823:1;49816:9;;;;;;;;:::i;:::-;;;;;;;;;;;49764:62;;-1:-1:-1;;;;;;49764:62:0;;;;;;;-1:-1:-1;;;;;12036:15:1;;;49764:62:0;;;12018:34:1;12088:15;;;;12068:18;;;12061:43;12120:18;;;12113:34;11953:18;;49764:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:70;;49830:4;49764:70;49736:156;;;;-1:-1:-1;;;49736:156:0;;12360:2:1;49736:156:0;;;12342:21:1;12399:2;12379:18;;;12372:30;-1:-1:-1;;;12418:18:1;;;12411:48;12476:18;;49736:156:0;12158:342:1;49736:156:0;49714:3;;;;:::i;:::-;;;;49674:232;;45451:142;2014:13;:11;:13::i;:::-;45519:10:::1;:18:::0;;;45559:24:::1;::::0;45532:5;;45559:24:::1;::::0;;;::::1;45451:142:::0;:::o;45605:190::-;2014:13;:11;:13::i;:::-;45687:12:::1;:33:::0;;-1:-1:-1;;;;;;45687:33:0::1;-1:-1:-1::0;;;;;45687:33:0;::::1;::::0;;::::1;::::0;;;45742:43:::1;::::0;::::1;::::0;-1:-1:-1;;45742:43:0::1;45605:190:::0;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;48258:797::-;2014:13;:11;:13::i;:::-;48396:6:::1;:13;48375:10;:17;:34;48367:83;;;;-1:-1:-1::0;;;48367:83:0::1;;;;;;;:::i;:::-;48463:8;48493:6:::0;48488:186:::1;48509:10;:17;48505:1;:21;48488:186;;;48583:1;-1:-1:-1::0;;;;;48558:27:0::1;:10;48569:1;48558:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;48558:27:0::1;::::0;48550:77:::1;;;;-1:-1:-1::0;;;48550:77:0::1;;;;;;;:::i;:::-;48651:6;48658:1;48651:9;;;;;;;;:::i;:::-;;;;;;;48644:16;;;;;:::i;:::-;::::0;-1:-1:-1;48528:3:0;::::1;::::0;::::1;:::i;:::-;;;;48488:186;;;-1:-1:-1::0;48694:12:0::1;::::0;48729:7:::1;::::0;;48694:43:::1;::::0;-1:-1:-1;;;48694:43:0;;48717:10:::1;48694:43:::0;;::::1;8846:51:1::0;;;;8913:18;;;8906:34;48741:3:0;;-1:-1:-1;;;;;48694:12:0::1;::::0;:22:::1;::::0;8819:18:1;;48694:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;48686:92;;;::::0;-1:-1:-1;;;48686:92:0;;12707:2:1;48686:92:0::1;::::0;::::1;12689:21:1::0;12746:2;12726:18;;;12719:30;12785:31;12765:18;;;12758:59;12834:18;;48686:92:0::1;12505:353:1::0;48686:92:0::1;48800:6;48795:251;48816:10;:17;48812:1;:21;48795:251;;;48857:12;::::0;48902:13;;-1:-1:-1;;;;;48857:12:0;;::::1;::::0;:29:::1;::::0;48895:4:::1;::::0;48902:10;;48913:1;;48902:13;::::1;;;;;:::i;:::-;;;;;;;48917:7;;48926:6;48933:1;48926:9;;;;;;;;:::i;:::-;;;;;;;48857:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49013:7;;48998:10;49009:1;48998:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;48970:62:0::1;48984:12;;;;;;;;;-1:-1:-1::0;;;;;48984:12:0::1;-1:-1:-1::0;;;;;48970:62:0::1;;49022:6;49029:1;49022:9;;;;;;;;:::i;:::-;;;;;;;48970:62;;;;2104:25:1::0;;2092:2;2077:18;;1958:177;48970:62:0::1;;;;;;;;48835:3:::0;::::1;::::0;::::1;:::i;:::-;;;;48795:251;;46618:252:::0;2014:13;:11;:13::i;:::-;-1:-1:-1;;;;;46711:26:0;::::1;46703:54;;;::::0;-1:-1:-1;;;46703:54:0;;13745:2:1;46703:54:0::1;::::0;::::1;13727:21:1::0;13784:2;13764:18;;;13757:30;-1:-1:-1;;;13803:18:1;;;13796:45;13858:18;;46703:54:0::1;13543:339:1::0;46703:54:0::1;46770:12;:25:::0;;-1:-1:-1;;;;;;46770:25:0::1;-1:-1:-1::0;;;;;46770:25:0;::::1;::::0;;::::1;::::0;;;46817:43:::1;::::0;::::1;::::0;-1:-1:-1;;46817:43:0::1;46618:252:::0;:::o;45292:147::-;2014:13;:11;:13::i;:::-;45360:7:::1;:18:::0;;;45400:29:::1;::::0;45370:8;;45400:29:::1;::::0;;;::::1;45292:147:::0;:::o;47990:256::-;2014:13;:11;:13::i;:::-;48075:12:::1;::::0;48131:7:::1;::::0;;48075:84:::1;::::0;-1:-1:-1;;;48075:84:0;;-1:-1:-1;;;;;48075:12:0;;::::1;::::0;:29:::1;::::0;:84:::1;::::0;48113:4:::1;::::0;48120:9;;48140:6;;48075:84:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;48220:7:0::1;::::0;48195:12:::1;::::0;48181:55:::1;::::0;2104:25:1;;;48220:7:0;;-1:-1:-1;;;;;;48181:55:0;;::::1;::::0;-1:-1:-1;48195:12:0::1;::::0;48181:55:::1;::::0;2092:2:1;2077:18;48181:55:0::1;;;;;;;47990:256:::0;;:::o;46356:250::-;2014:13;:11;:13::i;:::-;-1:-1:-1;;;;;46442:28:0;::::1;46434:56;;;::::0;-1:-1:-1;;;46434:56:0;;13745:2:1;46434:56:0::1;::::0;::::1;13727:21:1::0;13784:2;13764:18;;;13757:30;-1:-1:-1;;;13803:18:1;;;13796:45;13858:18;;46434:56:0::1;13543:339:1::0;46434:56:0::1;46503:11;:34:::0;;-1:-1:-1;;;;;;46503:34:0::1;-1:-1:-1::0;;;;;46503:34:0;::::1;::::0;;::::1;::::0;;;46559:37:::1;::::0;::::1;::::0;-1:-1:-1;;46559:37:0::1;46356:250:::0;:::o;47058:920::-;47138:1;47125:10;;:14;47117:43;;;;-1:-1:-1;;;47117:43:0;;14089:2:1;47117:43:0;;;14071:21:1;14128:2;14108:18;;;14101:30;-1:-1:-1;;;14147:18:1;;;14140:46;14203:18;;47117:43:0;13887:340:1;47117:43:0;47204:9;47190:10;;47181:6;:19;;;;:::i;:::-;:32;47173:64;;;;-1:-1:-1;;;47173:64:0;;14607:2:1;47173:64:0;;;14589:21:1;14646:2;14626:18;;;14619:30;-1:-1:-1;;;14665:18:1;;;14658:49;14724:18;;47173:64:0;14405:343:1;47173:64:0;47258:12;;47296:7;;;47258:46;;-1:-1:-1;;;47258:46:0;;47289:4;47258:46;;;8846:51:1;;;;8913:18;;;8906:34;47308:6:0;;-1:-1:-1;;;;;47258:12:0;;:22;;8819:18:1;;47258:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;47250:102;;;;-1:-1:-1;;;47250:102:0;;14955:2:1;47250:102:0;;;14937:21:1;14994:2;14974:18;;;14967:30;15033:34;15013:18;;;15006:62;-1:-1:-1;;;15084:18:1;;;15077:31;15125:19;;47250:102:0;14753:397:1;47250:102:0;47448:16;;47389:12;;47427:7;;;47389:46;;-1:-1:-1;;;47389:46:0;;47420:4;47389:46;;;8846:51:1;;;;8913:18;;;8906:34;47438:6:0;;-1:-1:-1;;;;;47389:12:0;;:22;;8819:18:1;;47389:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;;;:::i;:::-;:75;;47481:30;;;;;;-1:-1:-1;;;15480:28:1;;15533:2;15524:12;;15288:254;47481:30:0;;;;;;;;;;;;;47365:159;;;;;-1:-1:-1;;;47365:159:0;;;;;;;;:::i;:::-;-1:-1:-1;47541:14:0;;:18;47537:217;;47662:14;;47606:12;;47641:7;;;47606:43;;-1:-1:-1;;;47606:43:0;;47629:10;47606:43;;;8846:51:1;;;;8913:18;;;8906:34;47652:6:0;;-1:-1:-1;;;;;47606:12:0;;:22;;8819:18:1;;47606:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;;:::i;:::-;:70;;47578:162;;;;-1:-1:-1;;;47578:162:0;;16302:2:1;47578:162:0;;;16284:21:1;16341:2;16321:18;;;16314:30;16380:26;16360:18;;;16353:54;16424:18;;47578:162:0;16100:348:1;47578:162:0;47770:12;;:32;;-1:-1:-1;;;;;47770:12:0;;;;47792:9;47770:32;;;;;:12;:32;:12;:32;47792:9;47770:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47815:12:0;;;47872:7;;;47815:80;;-1:-1:-1;;;47815:80:0;;47853:4;47815:80;;;16786:34:1;;;;47860:10:0;16836:18:1;;;16829:43;16888:18;;;16881:34;16931:18;;;16924:34;;;16766:3;16974:19;;;16967:32;17015:19;;;17008:30;;;;-1:-1:-1;;;17054:19:1;;;17047:34;-1:-1:-1;;;;;47815:12:0;;:29;;17098:19:1;;47815:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;47952:7:0;;47938:12;;47917:51;;2104:25:1;;;47952:7:0;;-1:-1:-1;;;;;;47938:12:0;;-1:-1:-1;47926:10:0;;47917:51;;2092:2:1;2077:18;47917:51:0;;;;;;;47058:920;:::o;3034:201::-;2014:13;:11;:13::i;:::-;-1:-1:-1;;;;;3123:22:0;::::1;3115:73;;;::::0;-1:-1:-1;;;3115:73:0;;17330:2:1;3115:73:0::1;::::0;::::1;17312:21:1::0;17369:2;17349:18;;;17342:30;17408:34;17388:18;;;17381:62;-1:-1:-1;;;17459:18:1;;;17452:36;17505:19;;3115:73:0::1;17128:402:1::0;3115:73:0::1;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;2293:132::-;2174:7;2201:6;-1:-1:-1;;;;;2201:6:0;759:10;2357:23;2349:68;;;;-1:-1:-1;;;2349:68:0;;17737:2:1;2349:68:0;;;17719:21:1;;;17756:18;;;17749:30;17815:34;17795:18;;;17788:62;17867:18;;2349:68:0;17535:356:1;3395:191:0;3469:16;3488:6;;-1:-1:-1;;;;;3505:17:0;;;-1:-1:-1;;;;;;3505:17:0;;;;;;3538:40;;3488:6;;;;;;;3538:40;;3469:16;3538:40;3458:128;3395:191;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:456;227:6;235;243;296:2;284:9;275:7;271:23;267:32;264:52;;;312:1;309;302:12;264:52;351:9;338:23;370:31;395:5;370:31;:::i;:::-;420:5;-1:-1:-1;477:2:1;462:18;;449:32;490:33;449:32;490:33;:::i;:::-;150:456;;542:7;;-1:-1:-1;;;596:2:1;581:18;;;;568:32;;150:456::o;611:286::-;669:6;722:2;710:9;701:7;697:23;693:32;690:52;;;738:1;735;728:12;690:52;764:23;;-1:-1:-1;;;;;;816:32:1;;806:43;;796:71;;863:1;860;853:12;796:71;886:5;611:286;-1:-1:-1;;;611:286:1:o;1316:180::-;1375:6;1428:2;1416:9;1407:7;1403:23;1399:32;1396:52;;;1444:1;1441;1434:12;1396:52;-1:-1:-1;1467:23:1;;1316:180;-1:-1:-1;1316:180:1:o;1501:452::-;1587:6;1595;1603;1611;1664:3;1652:9;1643:7;1639:23;1635:33;1632:53;;;1681:1;1678;1671:12;1632:53;1720:9;1707:23;1739:31;1764:5;1739:31;:::i;:::-;1789:5;1841:2;1826:18;;1813:32;;-1:-1:-1;1892:2:1;1877:18;;1864:32;;1943:2;1928:18;1915:32;;-1:-1:-1;1501:452:1;-1:-1:-1;;;1501:452:1:o;2140:127::-;2201:10;2196:3;2192:20;2189:1;2182:31;2232:4;2229:1;2222:15;2256:4;2253:1;2246:15;2272:275;2343:2;2337:9;2408:2;2389:13;;-1:-1:-1;;2385:27:1;2373:40;;2443:18;2428:34;;2464:22;;;2425:62;2422:88;;;2490:18;;:::i;:::-;2526:2;2519:22;2272:275;;-1:-1:-1;2272:275:1:o;2552:183::-;2612:4;2645:18;2637:6;2634:30;2631:56;;;2667:18;;:::i;:::-;-1:-1:-1;2712:1:1;2708:14;2724:4;2704:25;;2552:183::o;2740:662::-;2794:5;2847:3;2840:4;2832:6;2828:17;2824:27;2814:55;;2865:1;2862;2855:12;2814:55;2901:6;2888:20;2927:4;2951:60;2967:43;3007:2;2967:43;:::i;:::-;2951:60;:::i;:::-;3045:15;;;3131:1;3127:10;;;;3115:23;;3111:32;;;3076:12;;;;3155:15;;;3152:35;;;3183:1;3180;3173:12;3152:35;3219:2;3211:6;3207:15;3231:142;3247:6;3242:3;3239:15;3231:142;;;3313:17;;3301:30;;3351:12;;;;3264;;3231:142;;;-1:-1:-1;3391:5:1;2740:662;-1:-1:-1;;;;;;2740:662:1:o;3407:1215::-;3525:6;3533;3586:2;3574:9;3565:7;3561:23;3557:32;3554:52;;;3602:1;3599;3592:12;3554:52;3642:9;3629:23;3671:18;3712:2;3704:6;3701:14;3698:34;;;3728:1;3725;3718:12;3698:34;3766:6;3755:9;3751:22;3741:32;;3811:7;3804:4;3800:2;3796:13;3792:27;3782:55;;3833:1;3830;3823:12;3782:55;3869:2;3856:16;3891:4;3915:60;3931:43;3971:2;3931:43;:::i;3915:60::-;4009:15;;;4091:1;4087:10;;;;4079:19;;4075:28;;;4040:12;;;;4115:19;;;4112:39;;;4147:1;4144;4137:12;4112:39;4171:11;;;;4191:217;4207:6;4202:3;4199:15;4191:217;;;4287:3;4274:17;4304:31;4329:5;4304:31;:::i;:::-;4348:18;;4224:12;;;;4386;;;;4191:217;;;4427:5;-1:-1:-1;;4470:18:1;;4457:32;;-1:-1:-1;;4501:16:1;;;4498:36;;;4530:1;4527;4520:12;4498:36;;4553:63;4608:7;4597:8;4586:9;4582:24;4553:63;:::i;:::-;4543:73;;;3407:1215;;;;;:::o;4627:247::-;4686:6;4739:2;4727:9;4718:7;4714:23;4710:32;4707:52;;;4755:1;4752;4745:12;4707:52;4794:9;4781:23;4813:31;4838:5;4813:31;:::i;5535:530::-;5577:5;5630:3;5623:4;5615:6;5611:17;5607:27;5597:55;;5648:1;5645;5638:12;5597:55;5684:6;5671:20;5710:18;5706:2;5703:26;5700:52;;;5732:18;;:::i;:::-;5776:55;5819:2;5800:13;;-1:-1:-1;;5796:27:1;5825:4;5792:38;5776:55;:::i;:::-;5856:2;5847:7;5840:19;5902:3;5895:4;5890:2;5882:6;5878:15;5874:26;5871:35;5868:55;;;5919:1;5916;5909:12;5868:55;5984:2;5977:4;5969:6;5965:17;5958:4;5949:7;5945:18;5932:55;6032:1;6007:16;;;6025:4;6003:27;5996:38;;;;6011:7;5535:530;-1:-1:-1;;;5535:530:1:o;6070:1071::-;6224:6;6232;6240;6248;6256;6309:3;6297:9;6288:7;6284:23;6280:33;6277:53;;;6326:1;6323;6316:12;6277:53;6365:9;6352:23;6384:31;6409:5;6384:31;:::i;:::-;6434:5;-1:-1:-1;6491:2:1;6476:18;;6463:32;6504:33;6463:32;6504:33;:::i;:::-;6556:7;-1:-1:-1;6614:2:1;6599:18;;6586:32;6637:18;6667:14;;;6664:34;;;6694:1;6691;6684:12;6664:34;6717:61;6770:7;6761:6;6750:9;6746:22;6717:61;:::i;:::-;6707:71;;6831:2;6820:9;6816:18;6803:32;6787:48;;6860:2;6850:8;6847:16;6844:36;;;6876:1;6873;6866:12;6844:36;6899:63;6954:7;6943:8;6932:9;6928:24;6899:63;:::i;:::-;6889:73;;7015:3;7004:9;7000:19;6987:33;6971:49;;7045:2;7035:8;7032:16;7029:36;;;7061:1;7058;7051:12;7029:36;;7084:51;7127:7;7116:8;7105:9;7101:24;7084:51;:::i;:::-;7074:61;;;6070:1071;;;;;;;;:::o;7613:315::-;7681:6;7689;7742:2;7730:9;7721:7;7717:23;7713:32;7710:52;;;7758:1;7755;7748:12;7710:52;7797:9;7784:23;7816:31;7841:5;7816:31;:::i;:::-;7866:5;7918:2;7903:18;;;;7890:32;;-1:-1:-1;;;7613:315:1:o;7933:734::-;8037:6;8045;8053;8061;8069;8122:3;8110:9;8101:7;8097:23;8093:33;8090:53;;;8139:1;8136;8129:12;8090:53;8178:9;8165:23;8197:31;8222:5;8197:31;:::i;:::-;8247:5;-1:-1:-1;8304:2:1;8289:18;;8276:32;8317:33;8276:32;8317:33;:::i;:::-;8369:7;-1:-1:-1;8423:2:1;8408:18;;8395:32;;-1:-1:-1;8474:2:1;8459:18;;8446:32;;-1:-1:-1;8529:3:1;8514:19;;8501:33;8557:18;8546:30;;8543:50;;;8589:1;8586;8579:12;8543:50;8612:49;8653:7;8644:6;8633:9;8629:22;8612:49;:::i;8951:277::-;9018:6;9071:2;9059:9;9050:7;9046:23;9042:32;9039:52;;;9087:1;9084;9077:12;9039:52;9119:9;9113:16;9172:5;9165:13;9158:21;9151:5;9148:32;9138:60;;9194:1;9191;9184:12;9233:400;9435:2;9417:21;;;9474:2;9454:18;;;9447:30;9513:34;9508:2;9493:18;;9486:62;-1:-1:-1;;;9579:2:1;9564:18;;9557:34;9623:3;9608:19;;9233:400::o;9638:127::-;9699:10;9694:3;9690:20;9687:1;9680:31;9730:4;9727:1;9720:15;9754:4;9751:1;9744:15;9770:401;9972:2;9954:21;;;10011:2;9991:18;;;9984:30;10050:34;10045:2;10030:18;;10023:62;-1:-1:-1;;;10116:2:1;10101:18;;10094:35;10161:3;10146:19;;9770:401::o;10176:127::-;10237:10;10232:3;10228:20;10225:1;10218:31;10268:4;10265:1;10258:15;10292:4;10289:1;10282:15;10308:125;10373:9;;;10394:10;;;10391:36;;;10407:18;;:::i;10438:135::-;10477:3;10498:17;;;10495:43;;10518:18;;:::i;:::-;-1:-1:-1;10565:1:1;10554:13;;10438:135::o;10887:184::-;10957:6;11010:2;10998:9;10989:7;10985:23;10981:32;10978:52;;;11026:1;11023;11016:12;10978:52;-1:-1:-1;11049:16:1;;10887:184;-1:-1:-1;10887:184:1:o;12863:675::-;-1:-1:-1;;;;;13214:15:1;;;13196:34;;13266:15;;;;13261:2;13246:18;;13239:43;13313:2;13298:18;;13291:34;13356:2;13341:18;;13334:34;;;;13176:3;13399;13384:19;;13377:32;;;13446:1;13425:19;;;13418:30;-1:-1:-1;;;13479:3:1;13464:19;;13457:39;13528:3;13513:19;;12863:675::o;14232:168::-;14305:9;;;14336;;14353:15;;;14347:22;;14333:37;14323:71;;14374:18;;:::i;15155:128::-;15222:9;;;15243:11;;;15240:37;;;15257:18;;:::i;15547:548::-;15659:4;15688:2;15717;15706:9;15699:21;15749:6;15743:13;15792:6;15787:2;15776:9;15772:18;15765:34;15817:1;15827:140;15841:6;15838:1;15835:13;15827:140;;;15936:14;;;15932:23;;15926:30;15902:17;;;15921:2;15898:26;15891:66;15856:10;;15827:140;;;15831:3;16016:1;16011:2;16002:6;15991:9;15987:22;15983:31;15976:42;16086:2;16079;16075:7;16070:2;16062:6;16058:15;16054:29;16043:9;16039:45;16035:54;16027:62;;;;15547:548;;;;:::o
Swarm Source
ipfs://fa421d76aa897605119904dce69a5e3ab1ef551afac3817333244b5c3a8881a6
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.