Source Code
Overview
ETH Balance
ETH Value
$0.00Cross-Chain Transactions
Loading...
Loading
Contract Name:
AssetCheckerFeature
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "./IAssetCheckerFeature.sol";
contract AssetCheckerFeature is IAssetCheckerFeature {
bytes4 public constant INTERFACE_ID_ERC20 = 0x36372b07;
bytes4 public constant INTERFACE_ID_ERC721 = 0x80ac58cd;
bytes4 public constant INTERFACE_ID_ERC1155 = 0xd9b67a26;
address internal constant NATIVE_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
function checkAssetsEx(
address account,
address operator,
uint8[] calldata itemTypes,
address[] calldata tokens,
uint256[] calldata tokenIds
)
external
override
view
returns (AssetCheckResultInfo[] memory infos)
{
require(itemTypes.length == tokens.length, "require(itemTypes.length == tokens.length)");
require(itemTypes.length == tokenIds.length, "require(itemTypes.length == tokenIds.length)");
infos = new AssetCheckResultInfo[](tokens.length);
for (uint256 i = 0; i < tokens.length; i++) {
address token = tokens[i];
uint256 tokenId = tokenIds[i];
infos[i].itemType = itemTypes[i];
if (itemTypes[i] == 0) {
infos[i].allowance = isApprovedForAll(token, account, operator) ? 1 : 0;
infos[i].erc721Owner = ownerOf(token, tokenId);
infos[i].erc721ApprovedAccount = getApproved(token, tokenId);
infos[i].balance = (infos[i].erc721Owner == account) ? 1 : 0;
continue;
}
if (itemTypes[i] == 1) {
infos[i].allowance = isApprovedForAll(token, account, operator) ? 1 : 0;
infos[i].balance = balanceOf(token, account, tokenId);
continue;
}
if (itemTypes[i] == 2) {
if (token == address(0) || token == NATIVE_TOKEN_ADDRESS) {
infos[i].balance = account.balance;
infos[i].allowance = type(uint256).max;
} else {
infos[i].balance = balanceOf(token, account);
infos[i].allowance = allowanceOf(token, account, operator);
}
}
}
return infos;
}
function checkAssets(address account, address operator, address[] calldata tokens, uint256[] calldata tokenIds)
external
override
view
returns (AssetCheckResultInfo[] memory infos)
{
require(tokens.length == tokenIds.length, "require(tokens.length == tokenIds.length)");
infos = new AssetCheckResultInfo[](tokens.length);
for (uint256 i = 0; i < tokens.length; i++) {
address token = tokens[i];
uint256 tokenId = tokenIds[i];
if (supportsInterface(token, INTERFACE_ID_ERC721)) {
infos[i].itemType = 0;
infos[i].allowance = isApprovedForAll(token, account, operator) ? 1 : 0;
infos[i].erc721Owner = ownerOf(token, tokenId);
infos[i].erc721ApprovedAccount = getApproved(token, tokenId);
infos[i].balance = (infos[i].erc721Owner == account) ? 1 : 0;
continue;
}
if (supportsInterface(token, INTERFACE_ID_ERC1155)) {
infos[i].itemType = 1;
infos[i].allowance = isApprovedForAll(token, account, operator) ? 1 : 0;
infos[i].balance = balanceOf(token, account, tokenId);
continue;
}
if (supportsInterface(token, INTERFACE_ID_ERC20)) {
infos[i].itemType = 2;
if (token == address(0) || token == NATIVE_TOKEN_ADDRESS) {
infos[i].balance = account.balance;
infos[i].allowance = type(uint256).max;
} else {
infos[i].balance = balanceOf(token, account);
infos[i].allowance = allowanceOf(token, account, operator);
}
} else {
infos[i].itemType = 255;
}
}
return infos;
}
function supportsInterface(address nft, bytes4 interfaceId) internal view returns (bool) {
try IERC165(nft).supportsInterface(interfaceId) returns (bool support) {
return support;
} catch {
}
return false;
}
function ownerOf(address nft, uint256 tokenId) internal view returns (address owner) {
try IERC721(nft).ownerOf(tokenId) returns (address _owner) {
owner = _owner;
} catch {
}
return owner;
}
function getApproved(address nft, uint256 tokenId) internal view returns (address operator) {
try IERC721(nft).getApproved(tokenId) returns (address approvedAccount) {
operator = approvedAccount;
} catch {
}
return operator;
}
function isApprovedForAll(address nft, address owner, address operator) internal view returns (bool isApproved) {
if (operator != address(0)) {
try IERC721(nft).isApprovedForAll(owner, operator) returns (bool _isApprovedForAll) {
isApproved = _isApprovedForAll;
} catch {
}
}
return isApproved;
}
function balanceOf(address erc20, address account) internal view returns (uint256 balance) {
try IERC20(erc20).balanceOf(account) returns (uint256 _balance) {
balance = _balance;
} catch {
}
return balance;
}
function allowanceOf(address erc20, address owner, address spender) internal view returns (uint256 allowance) {
try IERC20(erc20).allowance(owner, spender) returns (uint256 _allowance) {
allowance = _allowance;
} catch {
}
return allowance;
}
function balanceOf(address nft, address account, uint256 id) internal view returns (uint256 balance) {
try IERC1155(nft).balanceOf(account, id) returns (uint256 _balance) {
balance = _balance;
} catch {
}
return balance;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @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 be 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;
}/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
interface IAssetCheckerFeature {
struct AssetCheckResultInfo {
uint8 itemType; // 0: ERC721, 1: ERC1155, 2: ERC20, 255: other
uint256 allowance;
uint256 balance;
address erc721Owner;
address erc721ApprovedAccount;
}
function checkAssetsEx(
address account,
address operator,
uint8[] calldata itemTypes,
address[] calldata tokens,
uint256[] calldata tokenIds
)
external
view
returns (AssetCheckResultInfo[] memory infos);
function checkAssets(
address account,
address operator,
address[] calldata tokens,
uint256[] calldata tokenIds
)
external
view
returns (AssetCheckResultInfo[] memory infos);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"INTERFACE_ID_ERC1155","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INTERFACE_ID_ERC20","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INTERFACE_ID_ERC721","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"checkAssets","outputs":[{"components":[{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"address","name":"erc721Owner","type":"address"},{"internalType":"address","name":"erc721ApprovedAccount","type":"address"}],"internalType":"struct IAssetCheckerFeature.AssetCheckResultInfo[]","name":"infos","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint8[]","name":"itemTypes","type":"uint8[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"checkAssetsEx","outputs":[{"components":[{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"address","name":"erc721Owner","type":"address"},{"internalType":"address","name":"erc721ApprovedAccount","type":"address"}],"internalType":"struct IAssetCheckerFeature.AssetCheckResultInfo[]","name":"infos","type":"tuple[]"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50611a52806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806333bf61561461005c57806360ba89671461007a57806371a4beb314610098578063832db740146100c8578063bc6bc0cd146100f8575b600080fd5b610064610116565b60405161007191906110c0565b60405180910390f35b610082610121565b60405161008f91906110c0565b60405180910390f35b6100b260048036038101906100ad91906111fe565b61012c565b6040516100bf9190611400565b60405180910390f35b6100e260048036038101906100dd9190611478565b610694565b6040516100ef9190611400565b60405180910390f35b610100610c34565b60405161010d91906110c0565b60405180910390f35b63d9b67a2660e01b81565b6336372b0760e01b81565b6060828290508585905014610176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016d906115d7565b60405180910390fd5b8484905067ffffffffffffffff811115610193576101926115f7565b5b6040519080825280602002602001820160405280156101cc57816020015b6101b9611027565b8152602001906001900390816101b15790505b50905060005b858590508110156106895760008686838181106101f2576101f1611626565b5b90506020020160208101906102079190611655565b9050600085858481811061021e5761021d611626565b5b905060200201359050610238826380ac58cd60e01b610c3f565b156103e757600084848151811061025257610251611626565b5b60200260200101516000019060ff16908160ff1681525050610275828b8b610ccd565b610280576000610283565b60015b60ff1684848151811061029957610298611626565b5b602002602001015160200181815250506102b38282610d89565b8484815181106102c6576102c5611626565b5b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061030e8282610e0e565b84848151811061032157610320611626565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508973ffffffffffffffffffffffffffffffffffffffff1684848151811061038957610388611626565b5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff16146103b75760006103ba565b60015b60ff168484815181106103d0576103cf611626565b5b602002602001015160400181815250505050610676565b6103f88263d9b67a2660e01b610c3f565b1561049e57600184848151811061041257610411611626565b5b60200260200101516000019060ff16908160ff1681525050610435828b8b610ccd565b610440576000610443565b60015b60ff1684848151811061045957610458611626565b5b60200260200101516020018181525050610474828b83610e93565b84848151811061048757610486611626565b5b602002602001015160400181815250505050610676565b6104af826336372b0760e01b610c3f565b156106455760028484815181106104c9576104c8611626565b5b60200260200101516000019060ff16908160ff1681525050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061055b575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156105e4578973ffffffffffffffffffffffffffffffffffffffff163184848151811061058b5761058a611626565b5b602002602001015160400181815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484815181106105cf576105ce611626565b5b60200260200101516020018181525050610640565b6105ee828b610f1a565b84848151811061060157610600611626565b5b6020026020010151604001818152505061061c828b8b610f9f565b84848151811061062f5761062e611626565b5b602002602001015160200181815250505b610673565b60ff84848151811061065a57610659611626565b5b60200260200101516000019060ff16908160ff16815250505b50505b8080610681906116b1565b9150506101d2565b509695505050505050565b60608484905087879050146106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d59061176b565b60405180910390fd5b828290508787905014610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d906117fd565b60405180910390fd5b8484905067ffffffffffffffff811115610743576107426115f7565b5b60405190808252806020026020018201604052801561077c57816020015b610769611027565b8152602001906001900390816107615790505b50905060005b85859050811015610c275760008686838181106107a2576107a1611626565b5b90506020020160208101906107b79190611655565b905060008585848181106107ce576107cd611626565b5b9050602002013590508989848181106107ea576107e9611626565b5b90506020020160208101906107ff9190611849565b84848151811061081257610811611626565b5b60200260200101516000019060ff16908160ff168152505060008a8a8581811061083f5761083e611626565b5b90506020020160208101906108549190611849565b60ff16036109d957610867828d8d610ccd565b610872576000610875565b60015b60ff1684848151811061088b5761088a611626565b5b602002602001015160200181815250506108a58282610d89565b8484815181106108b8576108b7611626565b5b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506109008282610e0e565b84848151811061091357610912611626565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508b73ffffffffffffffffffffffffffffffffffffffff1684848151811061097b5761097a611626565b5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff16146109a95760006109ac565b60015b60ff168484815181106109c2576109c1611626565b5b602002602001015160400181815250505050610c14565b60018a8a858181106109ee576109ed611626565b5b9050602002016020810190610a039190611849565b60ff1603610a7f57610a16828d8d610ccd565b610a21576000610a24565b60015b60ff16848481518110610a3a57610a39611626565b5b60200260200101516020018181525050610a55828d83610e93565b848481518110610a6857610a67611626565b5b602002602001015160400181815250505050610c14565b60028a8a85818110610a9457610a93611626565b5b9050602002016020810190610aa99190611849565b60ff1603610c1157600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610b2b575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610bb4578b73ffffffffffffffffffffffffffffffffffffffff1631848481518110610b5b57610b5a611626565b5b602002602001015160400181815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848481518110610b9f57610b9e611626565b5b60200260200101516020018181525050610c10565b610bbe828d610f1a565b848481518110610bd157610bd0611626565b5b60200260200101516040018181525050610bec828d8d610f9f565b848481518110610bff57610bfe611626565b5b602002602001015160200181815250505b5b50505b8080610c1f906116b1565b915050610782565b5098975050505050505050565b6380ac58cd60e01b81565b60008273ffffffffffffffffffffffffffffffffffffffff166301ffc9a7836040518263ffffffff1660e01b8152600401610c7a91906110c0565b602060405180830381865afa925050508015610cb457506040513d601f19601f82011682018060405250810190610cb191906118ae565b60015b15610cc25780915050610cc7565b600090505b92915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610d82578373ffffffffffffffffffffffffffffffffffffffff1663e985e9c584846040518363ffffffff1660e01b8152600401610d3d9291906118ea565b602060405180830381865afa925050508015610d7757506040513d601f19601f82011682018060405250810190610d7491906118ae565b60015b15610d8157809150505b5b9392505050565b60008273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610dc49190611922565b602060405180830381865afa925050508015610dfe57506040513d601f19601f82011682018060405250810190610dfb9190611952565b60015b15610e0857809150505b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663081812fc836040518263ffffffff1660e01b8152600401610e499190611922565b602060405180830381865afa925050508015610e8357506040513d601f19601f82011682018060405250810190610e809190611952565b60015b15610e8d57809150505b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff1662fdd58e84846040518363ffffffff1660e01b8152600401610ecf92919061197f565b602060405180830381865afa925050508015610f0957506040513d601f19601f82011682018060405250810190610f0691906119d4565b60015b15610f1357809150505b9392505050565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610f559190611a01565b602060405180830381865afa925050508015610f8f57506040513d601f19601f82011682018060405250810190610f8c91906119d4565b60015b15610f9957809150505b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401610fdc9291906118ea565b602060405180830381865afa92505050801561101657506040513d601f19601f8201168201806040525081019061101391906119d4565b60015b1561102057809150505b9392505050565b6040518060a00160405280600060ff1681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6110ba81611085565b82525050565b60006020820190506110d560008301846110b1565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611110826110e5565b9050919050565b61112081611105565b811461112b57600080fd5b50565b60008135905061113d81611117565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261116857611167611143565b5b8235905067ffffffffffffffff81111561118557611184611148565b5b6020830191508360208202830111156111a1576111a061114d565b5b9250929050565b60008083601f8401126111be576111bd611143565b5b8235905067ffffffffffffffff8111156111db576111da611148565b5b6020830191508360208202830111156111f7576111f661114d565b5b9250929050565b6000806000806000806080878903121561121b5761121a6110db565b5b600061122989828a0161112e565b965050602061123a89828a0161112e565b955050604087013567ffffffffffffffff81111561125b5761125a6110e0565b5b61126789828a01611152565b9450945050606087013567ffffffffffffffff81111561128a576112896110e0565b5b61129689828a016111a8565b92509250509295509295509295565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060ff82169050919050565b6112e7816112d1565b82525050565b6000819050919050565b611300816112ed565b82525050565b61130f81611105565b82525050565b60a08201600082015161132b60008501826112de565b50602082015161133e60208501826112f7565b50604082015161135160408501826112f7565b5060608201516113646060850182611306565b5060808201516113776080850182611306565b50505050565b60006113898383611315565b60a08301905092915050565b6000602082019050919050565b60006113ad826112a5565b6113b781856112b0565b93506113c2836112c1565b8060005b838110156113f35781516113da888261137d565b97506113e583611395565b9250506001810190506113c6565b5085935050505092915050565b6000602082019050818103600083015261141a81846113a2565b905092915050565b60008083601f84011261143857611437611143565b5b8235905067ffffffffffffffff81111561145557611454611148565b5b6020830191508360208202830111156114715761147061114d565b5b9250929050565b60008060008060008060008060a0898b031215611498576114976110db565b5b60006114a68b828c0161112e565b98505060206114b78b828c0161112e565b975050604089013567ffffffffffffffff8111156114d8576114d76110e0565b5b6114e48b828c01611422565b9650965050606089013567ffffffffffffffff811115611507576115066110e0565b5b6115138b828c01611152565b9450945050608089013567ffffffffffffffff811115611536576115356110e0565b5b6115428b828c016111a8565b92509250509295985092959890939650565b600082825260208201905092915050565b7f7265717569726528746f6b656e732e6c656e677468203d3d20746f6b656e496460008201527f732e6c656e677468290000000000000000000000000000000000000000000000602082015250565b60006115c1602983611554565b91506115cc82611565565b604082019050919050565b600060208201905081810360008301526115f0816115b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561166b5761166a6110db565b5b60006116798482850161112e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116bc826112ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116ee576116ed611682565b5b600182019050919050565b7f72657175697265286974656d54797065732e6c656e677468203d3d20746f6b6560008201527f6e732e6c656e6774682900000000000000000000000000000000000000000000602082015250565b6000611755602a83611554565b9150611760826116f9565b604082019050919050565b6000602082019050818103600083015261178481611748565b9050919050565b7f72657175697265286974656d54797065732e6c656e677468203d3d20746f6b6560008201527f6e4964732e6c656e677468290000000000000000000000000000000000000000602082015250565b60006117e7602c83611554565b91506117f28261178b565b604082019050919050565b60006020820190508181036000830152611816816117da565b9050919050565b611826816112d1565b811461183157600080fd5b50565b6000813590506118438161181d565b92915050565b60006020828403121561185f5761185e6110db565b5b600061186d84828501611834565b91505092915050565b60008115159050919050565b61188b81611876565b811461189657600080fd5b50565b6000815190506118a881611882565b92915050565b6000602082840312156118c4576118c36110db565b5b60006118d284828501611899565b91505092915050565b6118e481611105565b82525050565b60006040820190506118ff60008301856118db565b61190c60208301846118db565b9392505050565b61191c816112ed565b82525050565b60006020820190506119376000830184611913565b92915050565b60008151905061194c81611117565b92915050565b600060208284031215611968576119676110db565b5b60006119768482850161193d565b91505092915050565b600060408201905061199460008301856118db565b6119a16020830184611913565b9392505050565b6119b1816112ed565b81146119bc57600080fd5b50565b6000815190506119ce816119a8565b92915050565b6000602082840312156119ea576119e96110db565b5b60006119f8848285016119bf565b91505092915050565b6000602082019050611a1660008301846118db565b9291505056fea26469706673582212204835a5f12883696db144c1583fb8bf6965ee7ba22f1c018d76a3ce1268f049d964736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100575760003560e01c806333bf61561461005c57806360ba89671461007a57806371a4beb314610098578063832db740146100c8578063bc6bc0cd146100f8575b600080fd5b610064610116565b60405161007191906110c0565b60405180910390f35b610082610121565b60405161008f91906110c0565b60405180910390f35b6100b260048036038101906100ad91906111fe565b61012c565b6040516100bf9190611400565b60405180910390f35b6100e260048036038101906100dd9190611478565b610694565b6040516100ef9190611400565b60405180910390f35b610100610c34565b60405161010d91906110c0565b60405180910390f35b63d9b67a2660e01b81565b6336372b0760e01b81565b6060828290508585905014610176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016d906115d7565b60405180910390fd5b8484905067ffffffffffffffff811115610193576101926115f7565b5b6040519080825280602002602001820160405280156101cc57816020015b6101b9611027565b8152602001906001900390816101b15790505b50905060005b858590508110156106895760008686838181106101f2576101f1611626565b5b90506020020160208101906102079190611655565b9050600085858481811061021e5761021d611626565b5b905060200201359050610238826380ac58cd60e01b610c3f565b156103e757600084848151811061025257610251611626565b5b60200260200101516000019060ff16908160ff1681525050610275828b8b610ccd565b610280576000610283565b60015b60ff1684848151811061029957610298611626565b5b602002602001015160200181815250506102b38282610d89565b8484815181106102c6576102c5611626565b5b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061030e8282610e0e565b84848151811061032157610320611626565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508973ffffffffffffffffffffffffffffffffffffffff1684848151811061038957610388611626565b5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff16146103b75760006103ba565b60015b60ff168484815181106103d0576103cf611626565b5b602002602001015160400181815250505050610676565b6103f88263d9b67a2660e01b610c3f565b1561049e57600184848151811061041257610411611626565b5b60200260200101516000019060ff16908160ff1681525050610435828b8b610ccd565b610440576000610443565b60015b60ff1684848151811061045957610458611626565b5b60200260200101516020018181525050610474828b83610e93565b84848151811061048757610486611626565b5b602002602001015160400181815250505050610676565b6104af826336372b0760e01b610c3f565b156106455760028484815181106104c9576104c8611626565b5b60200260200101516000019060ff16908160ff1681525050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061055b575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156105e4578973ffffffffffffffffffffffffffffffffffffffff163184848151811061058b5761058a611626565b5b602002602001015160400181815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484815181106105cf576105ce611626565b5b60200260200101516020018181525050610640565b6105ee828b610f1a565b84848151811061060157610600611626565b5b6020026020010151604001818152505061061c828b8b610f9f565b84848151811061062f5761062e611626565b5b602002602001015160200181815250505b610673565b60ff84848151811061065a57610659611626565b5b60200260200101516000019060ff16908160ff16815250505b50505b8080610681906116b1565b9150506101d2565b509695505050505050565b60608484905087879050146106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d59061176b565b60405180910390fd5b828290508787905014610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d906117fd565b60405180910390fd5b8484905067ffffffffffffffff811115610743576107426115f7565b5b60405190808252806020026020018201604052801561077c57816020015b610769611027565b8152602001906001900390816107615790505b50905060005b85859050811015610c275760008686838181106107a2576107a1611626565b5b90506020020160208101906107b79190611655565b905060008585848181106107ce576107cd611626565b5b9050602002013590508989848181106107ea576107e9611626565b5b90506020020160208101906107ff9190611849565b84848151811061081257610811611626565b5b60200260200101516000019060ff16908160ff168152505060008a8a8581811061083f5761083e611626565b5b90506020020160208101906108549190611849565b60ff16036109d957610867828d8d610ccd565b610872576000610875565b60015b60ff1684848151811061088b5761088a611626565b5b602002602001015160200181815250506108a58282610d89565b8484815181106108b8576108b7611626565b5b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506109008282610e0e565b84848151811061091357610912611626565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508b73ffffffffffffffffffffffffffffffffffffffff1684848151811061097b5761097a611626565b5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff16146109a95760006109ac565b60015b60ff168484815181106109c2576109c1611626565b5b602002602001015160400181815250505050610c14565b60018a8a858181106109ee576109ed611626565b5b9050602002016020810190610a039190611849565b60ff1603610a7f57610a16828d8d610ccd565b610a21576000610a24565b60015b60ff16848481518110610a3a57610a39611626565b5b60200260200101516020018181525050610a55828d83610e93565b848481518110610a6857610a67611626565b5b602002602001015160400181815250505050610c14565b60028a8a85818110610a9457610a93611626565b5b9050602002016020810190610aa99190611849565b60ff1603610c1157600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610b2b575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610bb4578b73ffffffffffffffffffffffffffffffffffffffff1631848481518110610b5b57610b5a611626565b5b602002602001015160400181815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848481518110610b9f57610b9e611626565b5b60200260200101516020018181525050610c10565b610bbe828d610f1a565b848481518110610bd157610bd0611626565b5b60200260200101516040018181525050610bec828d8d610f9f565b848481518110610bff57610bfe611626565b5b602002602001015160200181815250505b5b50505b8080610c1f906116b1565b915050610782565b5098975050505050505050565b6380ac58cd60e01b81565b60008273ffffffffffffffffffffffffffffffffffffffff166301ffc9a7836040518263ffffffff1660e01b8152600401610c7a91906110c0565b602060405180830381865afa925050508015610cb457506040513d601f19601f82011682018060405250810190610cb191906118ae565b60015b15610cc25780915050610cc7565b600090505b92915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610d82578373ffffffffffffffffffffffffffffffffffffffff1663e985e9c584846040518363ffffffff1660e01b8152600401610d3d9291906118ea565b602060405180830381865afa925050508015610d7757506040513d601f19601f82011682018060405250810190610d7491906118ae565b60015b15610d8157809150505b5b9392505050565b60008273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610dc49190611922565b602060405180830381865afa925050508015610dfe57506040513d601f19601f82011682018060405250810190610dfb9190611952565b60015b15610e0857809150505b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663081812fc836040518263ffffffff1660e01b8152600401610e499190611922565b602060405180830381865afa925050508015610e8357506040513d601f19601f82011682018060405250810190610e809190611952565b60015b15610e8d57809150505b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff1662fdd58e84846040518363ffffffff1660e01b8152600401610ecf92919061197f565b602060405180830381865afa925050508015610f0957506040513d601f19601f82011682018060405250810190610f0691906119d4565b60015b15610f1357809150505b9392505050565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610f559190611a01565b602060405180830381865afa925050508015610f8f57506040513d601f19601f82011682018060405250810190610f8c91906119d4565b60015b15610f9957809150505b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401610fdc9291906118ea565b602060405180830381865afa92505050801561101657506040513d601f19601f8201168201806040525081019061101391906119d4565b60015b1561102057809150505b9392505050565b6040518060a00160405280600060ff1681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6110ba81611085565b82525050565b60006020820190506110d560008301846110b1565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611110826110e5565b9050919050565b61112081611105565b811461112b57600080fd5b50565b60008135905061113d81611117565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261116857611167611143565b5b8235905067ffffffffffffffff81111561118557611184611148565b5b6020830191508360208202830111156111a1576111a061114d565b5b9250929050565b60008083601f8401126111be576111bd611143565b5b8235905067ffffffffffffffff8111156111db576111da611148565b5b6020830191508360208202830111156111f7576111f661114d565b5b9250929050565b6000806000806000806080878903121561121b5761121a6110db565b5b600061122989828a0161112e565b965050602061123a89828a0161112e565b955050604087013567ffffffffffffffff81111561125b5761125a6110e0565b5b61126789828a01611152565b9450945050606087013567ffffffffffffffff81111561128a576112896110e0565b5b61129689828a016111a8565b92509250509295509295509295565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060ff82169050919050565b6112e7816112d1565b82525050565b6000819050919050565b611300816112ed565b82525050565b61130f81611105565b82525050565b60a08201600082015161132b60008501826112de565b50602082015161133e60208501826112f7565b50604082015161135160408501826112f7565b5060608201516113646060850182611306565b5060808201516113776080850182611306565b50505050565b60006113898383611315565b60a08301905092915050565b6000602082019050919050565b60006113ad826112a5565b6113b781856112b0565b93506113c2836112c1565b8060005b838110156113f35781516113da888261137d565b97506113e583611395565b9250506001810190506113c6565b5085935050505092915050565b6000602082019050818103600083015261141a81846113a2565b905092915050565b60008083601f84011261143857611437611143565b5b8235905067ffffffffffffffff81111561145557611454611148565b5b6020830191508360208202830111156114715761147061114d565b5b9250929050565b60008060008060008060008060a0898b031215611498576114976110db565b5b60006114a68b828c0161112e565b98505060206114b78b828c0161112e565b975050604089013567ffffffffffffffff8111156114d8576114d76110e0565b5b6114e48b828c01611422565b9650965050606089013567ffffffffffffffff811115611507576115066110e0565b5b6115138b828c01611152565b9450945050608089013567ffffffffffffffff811115611536576115356110e0565b5b6115428b828c016111a8565b92509250509295985092959890939650565b600082825260208201905092915050565b7f7265717569726528746f6b656e732e6c656e677468203d3d20746f6b656e496460008201527f732e6c656e677468290000000000000000000000000000000000000000000000602082015250565b60006115c1602983611554565b91506115cc82611565565b604082019050919050565b600060208201905081810360008301526115f0816115b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561166b5761166a6110db565b5b60006116798482850161112e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116bc826112ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116ee576116ed611682565b5b600182019050919050565b7f72657175697265286974656d54797065732e6c656e677468203d3d20746f6b6560008201527f6e732e6c656e6774682900000000000000000000000000000000000000000000602082015250565b6000611755602a83611554565b9150611760826116f9565b604082019050919050565b6000602082019050818103600083015261178481611748565b9050919050565b7f72657175697265286974656d54797065732e6c656e677468203d3d20746f6b6560008201527f6e4964732e6c656e677468290000000000000000000000000000000000000000602082015250565b60006117e7602c83611554565b91506117f28261178b565b604082019050919050565b60006020820190508181036000830152611816816117da565b9050919050565b611826816112d1565b811461183157600080fd5b50565b6000813590506118438161181d565b92915050565b60006020828403121561185f5761185e6110db565b5b600061186d84828501611834565b91505092915050565b60008115159050919050565b61188b81611876565b811461189657600080fd5b50565b6000815190506118a881611882565b92915050565b6000602082840312156118c4576118c36110db565b5b60006118d284828501611899565b91505092915050565b6118e481611105565b82525050565b60006040820190506118ff60008301856118db565b61190c60208301846118db565b9392505050565b61191c816112ed565b82525050565b60006020820190506119376000830184611913565b92915050565b60008151905061194c81611117565b92915050565b600060208284031215611968576119676110db565b5b60006119768482850161193d565b91505092915050565b600060408201905061199460008301856118db565b6119a16020830184611913565b9392505050565b6119b1816112ed565b81146119bc57600080fd5b50565b6000815190506119ce816119a8565b92915050565b6000602082840312156119ea576119e96110db565b5b60006119f8848285016119bf565b91505092915050565b6000602082019050611a1660008301846118db565b9291505056fea26469706673582212204835a5f12883696db144c1583fb8bf6965ee7ba22f1c018d76a3ce1268f049d964736f6c63430008110033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.