Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 274 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Configure Blocke... | 19755803 | 677 days ago | IN | 0 ETH | 0.00459693 | ||||
| Configure Blocke... | 19755794 | 677 days ago | IN | 0 ETH | 0.00432765 | ||||
| Configure Blocke... | 19755722 | 677 days ago | IN | 0 ETH | 0.00407851 | ||||
| Configure Blocke... | 19755580 | 677 days ago | IN | 0 ETH | 0.00067493 | ||||
| Configure Blocke... | 19755564 | 677 days ago | IN | 0 ETH | 0.00077887 | ||||
| Configure Blocke... | 19100737 | 769 days ago | IN | 0 ETH | 0.00509035 | ||||
| Configure Blocke... | 19088713 | 770 days ago | IN | 0 ETH | 0.00977155 | ||||
| Configure Blocke... | 19088683 | 770 days ago | IN | 0 ETH | 0.00930072 | ||||
| Configure Blocke... | 18923614 | 793 days ago | IN | 0 ETH | 0.00185199 | ||||
| Configure Blocke... | 18923610 | 793 days ago | IN | 0 ETH | 0.00192408 | ||||
| Configure Blocke... | 18923608 | 793 days ago | IN | 0 ETH | 0.00179681 | ||||
| Configure Blocke... | 18921294 | 794 days ago | IN | 0 ETH | 0.00206767 | ||||
| Configure Blocke... | 18921285 | 794 days ago | IN | 0 ETH | 0.01330808 | ||||
| Configure Blocke... | 18921254 | 794 days ago | IN | 0 ETH | 0.01318592 | ||||
| Configure Blocke... | 18731493 | 820 days ago | IN | 0 ETH | 0.01930084 | ||||
| Configure Blocke... | 18714424 | 823 days ago | IN | 0 ETH | 0.0054986 | ||||
| Configure Blocke... | 18612238 | 837 days ago | IN | 0 ETH | 0.00327248 | ||||
| Configure Blocke... | 18373933 | 870 days ago | IN | 0 ETH | 0.0051687 | ||||
| Configure Blocke... | 18343485 | 875 days ago | IN | 0 ETH | 0.0054926 | ||||
| Configure Blocke... | 18251795 | 888 days ago | IN | 0 ETH | 0.00081544 | ||||
| Configure Blocke... | 18223563 | 892 days ago | IN | 0 ETH | 0.00336134 | ||||
| Configure Blocke... | 18223472 | 892 days ago | IN | 0 ETH | 0.00077106 | ||||
| Configure Blocke... | 18206110 | 894 days ago | IN | 0 ETH | 0.00035425 | ||||
| Configure Blocke... | 18176033 | 898 days ago | IN | 0 ETH | 0.00134041 | ||||
| Configure Blocke... | 18173959 | 898 days ago | IN | 0 ETH | 0.00462689 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CreatorOperatorFilterer
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionApproveTransfer.sol";
import "@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol";
import "@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol";
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
/// @author: manifold.xyz
/**
* Creator controlled Operator Filter for Manifold Creator contracts
*/
contract CreatorOperatorFilterer is IERC165 {
using EnumerableSet for EnumerableSet.AddressSet;
using EnumerableSet for EnumerableSet.Bytes32Set;
error OperatorNotAllowed(address operator);
error CodeHashFiltered(address account, bytes32 codeHash);
event OperatorUpdated(address indexed registrant, address indexed operator, bool indexed filtered);
event CodeHashUpdated(address indexed registrant, bytes32 indexed codeHash, bool indexed filtered);
mapping(address => EnumerableSet.AddressSet) private _creatorBlockedOperators;
mapping(address => EnumerableSet.Bytes32Set) private _creatorFilteredCodeHashes;
modifier creatorAdminRequired(address creatorContractAddress) {
require(IAdminControl(creatorContractAddress).isAdmin(msg.sender), "Wallet is not an admin");
_;
}
/**
* @dev Get list of blocked operator addresses for a given creator contract
*/
function getBlockedOperators(address creatorContractAddress) external view returns (address[] memory result) {
EnumerableSet.AddressSet storage set = _creatorBlockedOperators[creatorContractAddress];
result = new address[](set.length());
for (uint i; i < set.length(); ++i) {
result[i] = set.at(i);
}
}
/**
* @dev Get list of blocked operator code hashes for a given creator contract
*/
function getBlockedOperatorHashes(address creatorContractAddress) external view returns (bytes32[] memory result) {
EnumerableSet.Bytes32Set storage set = _creatorFilteredCodeHashes[creatorContractAddress];
result = new bytes32[](set.length());
for (uint i; i < set.length(); ++i) {
result[i] = set.at(i);
}
}
/**
* @dev Configure list of operator addresses for a given creator contract
* Only an admin of the creator contract can make this call
*/
function configureBlockedOperators(address creator, address[] memory operators, bool[] memory blocked) public creatorAdminRequired(creator) {
require(operators.length == blocked.length, "Mismatch input length");
for (uint i; i < operators.length; ++i) {
address operator = operators[i];
bool blockedValue = blocked[i];
if (blockedValue) {
_creatorBlockedOperators[creator].add(operator);
} else {
_creatorBlockedOperators[creator].remove(operator);
}
emit OperatorUpdated(creator, operator, blockedValue);
}
}
/**
* @dev Configure list of operator code hashes for a given creator contract
* Only an admin of the creator contract can make this call
*/
function configureBlockedOperatorHashes(address creator, bytes32[] memory hashes, bool[] memory blocked) public creatorAdminRequired(creator) {
require(hashes.length == blocked.length, "Mismatch input length");
for (uint i; i < hashes.length; ++i) {
bytes32 hash_ = hashes[i];
bool blockedValue = blocked[i];
if (blockedValue) {
_creatorFilteredCodeHashes[creator].add(hash_);
} else {
_creatorFilteredCodeHashes[creator].remove(hash_);
}
emit CodeHashUpdated(creator, hash_, blockedValue);
}
}
/**
* @dev Configure list of operator addresses and code hashes for a given creator contract
* Only an admin of the creator contract can make this call
*/
function configureBlockedOperatorsAndHashes(address creator, address[] memory operators, bool[] memory blockedOperators, bytes32[] memory hashes, bool[] memory blockedHashes) public creatorAdminRequired(creator) {
configureBlockedOperators(creator, operators, blockedOperators);
configureBlockedOperatorHashes(creator, hashes, blockedHashes);
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override (IERC165) returns (bool) {
return interfaceId == type(IERC721CreatorExtensionApproveTransfer).interfaceId
|| interfaceId == type(IERC1155CreatorExtensionApproveTransfer).interfaceId
|| interfaceId == type(IERC165).interfaceId;
}
/**
* @dev ERC1155: Called by creator contract to approve a transfer
*/
function approveTransfer(address operator, address from, address, uint256[] calldata, uint256[] calldata)
external
view
returns (bool)
{
return isOperatorAllowed(operator, from);
}
/**
* @dev ERC721: Called by creator contract to approve a transfer
*/
function approveTransfer(address operator, address from, address, uint256) external view returns (bool) {
return isOperatorAllowed(operator, from);
}
/**
* @dev Check OperatorFiltererRegistry to see if operator is approved
*/
function isOperatorAllowed(address operator, address from) internal view returns (bool) {
if (from != operator) {
if (_creatorBlockedOperators[msg.sender].contains(operator)) {
revert OperatorNotAllowed(operator);
}
if (operator.code.length > 0) {
bytes32 codeHash = operator.codehash;
if (_creatorFilteredCodeHashes[msg.sender].contains(codeHash)) {
revert CodeHashFiltered(operator, codeHash);
}
}
}
return true;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* Implement this if you want your extension to approve a transfer
*/
interface IERC1155CreatorExtensionApproveTransfer is IERC165 {
/**
* @dev Set whether or not the creator contract will check the extension for approval of token transfer
*/
function setApproveTransfer(address creator, bool enabled) external;
/**
* @dev Called by creator contract to approve a transfer
*/
function approveTransfer(address operator, address from, address to, uint256[] calldata tokenIds, uint256[] calldata amounts) external returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* Implement this if you want your extension to approve a transfer
*/
interface IERC721CreatorExtensionApproveTransfer is IERC165 {
/**
* @dev Set whether or not the creator will check the extension for approval of token transfer
*/
function setApproveTransfer(address creator, bool enabled) external;
/**
* @dev Called by creator contract to approve a transfer
*/
function approveTransfer(address operator, address from, address to, uint256 tokenId) external returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @dev Interface for admin control
*/
interface IAdminControl is IERC165 {
event AdminApproved(address indexed account, address indexed sender);
event AdminRevoked(address indexed account, address indexed sender);
/**
* @dev gets address of all admins
*/
function getAdmins() external view returns (address[] memory);
/**
* @dev add an admin. Can only be called by contract owner.
*/
function approveAdmin(address admin) external;
/**
* @dev remove an admin. Can only be called by contract owner.
*/
function revokeAdmin(address admin) external;
/**
* @dev checks whether or not given address is an admin
* Returns True if they are
*/
function isAdmin(address admin) external view returns (bool);
}// 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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/structs/EnumerableSet.sol)
pragma solidity ^0.8.0;
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
* As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
* and `uint256` (`UintSet`) are supported.
*
* [WARNING]
* ====
* Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable.
* See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
*
* In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet.
* ====
*/
library EnumerableSet {
// To implement this library for multiple types with as little code
// repetition as possible, we write it in terms of a generic Set type with
// bytes32 values.
// The Set implementation uses private functions, and user-facing
// implementations (such as AddressSet) are just wrappers around the
// underlying Set.
// This means that we can only create new EnumerableSets for types that fit
// in bytes32.
struct Set {
// Storage of set values
bytes32[] _values;
// Position of the value in the `values` array, plus 1 because index 0
// means a value is not in the set.
mapping(bytes32 => uint256) _indexes;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
// The value is stored at length-1, but we add 1 to all indexes
// and use 0 as a sentinel value
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function _remove(Set storage set, bytes32 value) private returns (bool) {
// We read and store the value's index to prevent multiple reads from the same storage slot
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) {
// Equivalent to contains(set, value)
// To delete an element from the _values array in O(1), we swap the element to delete with the last one in
// the array, and then remove the last element (sometimes called as 'swap and pop').
// This modifies the order of the array, as noted in {at}.
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
if (lastIndex != toDeleteIndex) {
bytes32 lastValue = set._values[lastIndex];
// Move the last value to the index where the value to delete is
set._values[toDeleteIndex] = lastValue;
// Update the index for the moved value
set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex
}
// Delete the slot where the moved value was stored
set._values.pop();
// Delete the index for the deleted slot
delete set._indexes[value];
return true;
} else {
return false;
}
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function _at(Set storage set, uint256 index) private view returns (bytes32) {
return set._values[index];
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function _values(Set storage set) private view returns (bytes32[] memory) {
return set._values;
}
// Bytes32Set
struct Bytes32Set {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _add(set._inner, value);
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _remove(set._inner, value);
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
return _contains(set._inner, value);
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
return _at(set._inner, index);
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
return _values(set._inner);
}
// AddressSet
struct AddressSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint160(uint256(_at(set._inner, index))));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(AddressSet storage set) internal view returns (address[] memory) {
bytes32[] memory store = _values(set._inner);
address[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
// UintSet
struct UintSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(UintSet storage set) internal view returns (uint256[] memory) {
bytes32[] memory store = _values(set._inner);
uint256[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
}{
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 1000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"codeHash","type":"bytes32"}],"name":"CodeHashFiltered","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"registrant","type":"address"},{"indexed":true,"internalType":"bytes32","name":"codeHash","type":"bytes32"},{"indexed":true,"internalType":"bool","name":"filtered","type":"bool"}],"name":"CodeHashUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"registrant","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"bool","name":"filtered","type":"bool"}],"name":"OperatorUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approveTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"name":"approveTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"bytes32[]","name":"hashes","type":"bytes32[]"},{"internalType":"bool[]","name":"blocked","type":"bool[]"}],"name":"configureBlockedOperatorHashes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address[]","name":"operators","type":"address[]"},{"internalType":"bool[]","name":"blocked","type":"bool[]"}],"name":"configureBlockedOperators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address[]","name":"operators","type":"address[]"},{"internalType":"bool[]","name":"blockedOperators","type":"bool[]"},{"internalType":"bytes32[]","name":"hashes","type":"bytes32[]"},{"internalType":"bool[]","name":"blockedHashes","type":"bool[]"}],"name":"configureBlockedOperatorsAndHashes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creatorContractAddress","type":"address"}],"name":"getBlockedOperatorHashes","outputs":[{"internalType":"bytes32[]","name":"result","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creatorContractAddress","type":"address"}],"name":"getBlockedOperators","outputs":[{"internalType":"address[]","name":"result","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080806040523461001657610e17908161001c8239f35b600080fdfe6080604081815260048036101561001557600080fd5b600092833560e01c90816301ffc9a7146107b957508063225d0f94146106e55780635e6a6f8a146106ad5780637215c202146105ee5780639401d61c1461049c5780639fde10aa146101db578063b1b84ee2146101045763e48351771461007b57600080fd5b346101005760a036600319011261010057610094610889565b9061009d6108a4565b936100a66108ba565b5067ffffffffffffffff906064358281116100fc576100c89036908501610a53565b50506084359182116100f95750916100e9602095926100f094369101610a53565b5050610cfe565b90519015158152f35b80fd5b5080fd5b8280fd5b5050346100fc57602080600319360112610100576001600160a01b03928361012a610889565b1681528082528281209182549061014082610908565b9161014d865193846108d0565b80835261015981610908565b8383019590601f1901368737845b8281106101a7575050508451948186019282875251809352850193925b8281106101915785850386f35b8351871685529381019392810192600101610184565b80896101ba6101d2938599979899610ad3565b90549060031b1c166101cc8289610aa9565b52610a84565b94939294610167565b5090346101005760a0366003190112610100576101f6610889565b67ffffffffffffffff906024358281116104985761021790369086016109e5565b906044358381116104945761022f903690870161097e565b90606435848111610490576102479036908801610920565b936084359081116104905761025f903690880161097e565b926001600160a01b0380921694865194630935e01b60e21b808752338a88015260209687816024818c5afa90811561048657906102a3918d9161046f575b50610b03565b8851818152338b82015287816024818c5afa90811561048657906102cd918d9161046f5750610b03565b6102da8451875114610b4e565b8a5b8b855182101561036957908a818b7f2738289d9deecdc30eb8ffc42876633caecca1ffa166e4efa89f408e17373a1a61034f958d8d61032a8e6103208f8990610aa9565b5116968792610aa9565b5115159683886000146103545761034693878252528320610b99565b505b80a4610a84565b6102dc565b61036393878252528320610c0e565b50610348565b505093509350969050855191825233908201528281602481875afa908115610465579061039c9188916104385750610b03565b6103a98551825114610b4e565b855b855181101561043457806103c26104169288610aa9565b516103cd8285610aa9565b51158015919061041b57868a52600186526103ea81898c20610b99565b505b867fb8036058bafea884aabc446ca15619fd86f5464a4ad96f64164ad6f77444354d8b80a4610a84565b6103ab565b868a526001865261042e81898c20610c0e565b506103ec565b8680f35b6104589150843d861161045e575b61045081836108d0565b810190610aeb565b3861029d565b503d610446565b85513d89823e3d90fd5b6104589150893d8b1161045e5761045081836108d0565b8a513d8e823e3d90fd5b8780fd5b8680fd5b8580fd5b509034610100576060366003190112610100576104b7610889565b67ffffffffffffffff92602435848111610498576104d890369083016109e5565b93604435908111610498576104f0903690830161097e565b6001600160a01b0380931692845192630935e01b60e21b845233908401526020928381602481885afa9081156105e457906105319189916105cd5750610b03565b61053e8651835114610b4e565b865b86518110156105c95780826105586105ac938a610aa9565b51166105648286610aa9565b5115801591906105b157878b528a8752610580818a8d20610b99565b505b877f2738289d9deecdc30eb8ffc42876633caecca1ffa166e4efa89f408e17373a1a8c80a4610a84565b610540565b878b528a87526105c3818a8d20610c0e565b50610582565b8780f35b6104589150853d871161045e5761045081836108d0565b86513d8a823e3d90fd5b50903461010057606036600319011261010057610609610889565b67ffffffffffffffff926024358481116104985761062a9036908301610920565b936044359081116104985761064a6001600160a01b03913690840161097e565b921691835191630935e01b60e21b835233908301526020918281602481875afa90811561046557906106829188916104385750610b03565b61068f8551825114610b4e565b855b855181101561043457806103c26106a89288610aa9565b610691565b5050346100fc5760803660031901126100fc576020906100f06106ce610889565b6106d66108a4565b906106df6108ba565b50610cfe565b5050346100fc5760208060031936011261010057916001600160a01b0361070a610889565b1681526001908184528281209384549061072382610908565b91610730865193846108d0565b80835261073c81610908565b8383019790601f1901368937845b828110610787575050508451948186019282875251809352850195925b8281106107745785870386f35b8351875295810195928101928401610767565b8061079c6107ad92849b999b98969798610ad3565b90549060031b1c6101cc8289610aa9565b9795979493929461074a565b9250503461010057602036600319011261010057357fffffffff00000000000000000000000000000000000000000000000000000000811680910361010057602092507f45ffcdad00000000000000000000000000000000000000000000000000000000811490811561085f575b8115610835575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861082e565b7fff16f3500000000000000000000000000000000000000000000000000000000081149150610827565b600435906001600160a01b038216820361089f57565b600080fd5b602435906001600160a01b038216820361089f57565b604435906001600160a01b038216820361089f57565b90601f8019910116810190811067ffffffffffffffff8211176108f257604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116108f25760051b60200190565b81601f8201121561089f5780359161093783610908565b9261094560405194856108d0565b808452602092838086019260051b82010192831161089f578301905b82821061096f575050505090565b81358152908301908301610961565b81601f8201121561089f5780359161099583610908565b926109a360405194856108d0565b808452602092838086019260051b82010192831161089f578301905b8282106109cd575050505090565b8135801515810361089f5781529083019083016109bf565b81601f8201121561089f578035916109fc83610908565b92610a0a60405194856108d0565b808452602092838086019260051b82010192831161089f578301905b828210610a34575050505090565b81356001600160a01b038116810361089f578152908301908301610a26565b9181601f8401121561089f5782359167ffffffffffffffff831161089f576020808501948460051b01011161089f57565b6000198114610a935760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015610abd5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b8054821015610abd5760005260206000200190600090565b9081602091031261089f5751801515810361089f5790565b15610b0a57565b606460405162461bcd60e51b815260206004820152601660248201527f57616c6c6574206973206e6f7420616e2061646d696e000000000000000000006044820152fd5b15610b5557565b606460405162461bcd60e51b815260206004820152601560248201527f4d69736d6174636820696e707574206c656e67746800000000000000000000006044820152fd5b6000828152600182016020526040902054610c0757805490680100000000000000008210156108f25782610bf0610bd7846001809601855584610ad3565b819391549060031b600019811b9283911b169119161790565b905580549260005201602052604060002055600190565b5050600090565b90600182019060009281845282602052604084205490811515600014610cf75760001991808301818111610ce357825490848201918211610ccf57808203610c9a575b50505080548015610c8657820191610c698383610ad3565b909182549160031b1b191690555582526020526040812055600190565b602486634e487b7160e01b81526031600452fd5b610cba610caa610bd79386610ad3565b90549060031b1c92839286610ad3565b90558652846020526040862055388080610c51565b602488634e487b7160e01b81526011600452fd5b602487634e487b7160e01b81526011600452fd5b5050505090565b6001600160a01b038181169216829003610d1a575b5050600190565b336000526000602052610d4182604060002060019160005201602052604060002054151590565b610db057803b15610d13573f336000526001602052610d7481604060002060019160005201602052604060002054151590565b15610d135760449250604051917f5f3853a900000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b602482604051907fede71dcc0000000000000000000000000000000000000000000000000000000082526004820152fdfea26469706673582212209670fb08f11534cf6c451eb1fbfa2c4bc8c4378c65967845422b6782a304e29f64736f6c63430008110033
Deployed Bytecode
0x6080604081815260048036101561001557600080fd5b600092833560e01c90816301ffc9a7146107b957508063225d0f94146106e55780635e6a6f8a146106ad5780637215c202146105ee5780639401d61c1461049c5780639fde10aa146101db578063b1b84ee2146101045763e48351771461007b57600080fd5b346101005760a036600319011261010057610094610889565b9061009d6108a4565b936100a66108ba565b5067ffffffffffffffff906064358281116100fc576100c89036908501610a53565b50506084359182116100f95750916100e9602095926100f094369101610a53565b5050610cfe565b90519015158152f35b80fd5b5080fd5b8280fd5b5050346100fc57602080600319360112610100576001600160a01b03928361012a610889565b1681528082528281209182549061014082610908565b9161014d865193846108d0565b80835261015981610908565b8383019590601f1901368737845b8281106101a7575050508451948186019282875251809352850193925b8281106101915785850386f35b8351871685529381019392810192600101610184565b80896101ba6101d2938599979899610ad3565b90549060031b1c166101cc8289610aa9565b52610a84565b94939294610167565b5090346101005760a0366003190112610100576101f6610889565b67ffffffffffffffff906024358281116104985761021790369086016109e5565b906044358381116104945761022f903690870161097e565b90606435848111610490576102479036908801610920565b936084359081116104905761025f903690880161097e565b926001600160a01b0380921694865194630935e01b60e21b808752338a88015260209687816024818c5afa90811561048657906102a3918d9161046f575b50610b03565b8851818152338b82015287816024818c5afa90811561048657906102cd918d9161046f5750610b03565b6102da8451875114610b4e565b8a5b8b855182101561036957908a818b7f2738289d9deecdc30eb8ffc42876633caecca1ffa166e4efa89f408e17373a1a61034f958d8d61032a8e6103208f8990610aa9565b5116968792610aa9565b5115159683886000146103545761034693878252528320610b99565b505b80a4610a84565b6102dc565b61036393878252528320610c0e565b50610348565b505093509350969050855191825233908201528281602481875afa908115610465579061039c9188916104385750610b03565b6103a98551825114610b4e565b855b855181101561043457806103c26104169288610aa9565b516103cd8285610aa9565b51158015919061041b57868a52600186526103ea81898c20610b99565b505b867fb8036058bafea884aabc446ca15619fd86f5464a4ad96f64164ad6f77444354d8b80a4610a84565b6103ab565b868a526001865261042e81898c20610c0e565b506103ec565b8680f35b6104589150843d861161045e575b61045081836108d0565b810190610aeb565b3861029d565b503d610446565b85513d89823e3d90fd5b6104589150893d8b1161045e5761045081836108d0565b8a513d8e823e3d90fd5b8780fd5b8680fd5b8580fd5b509034610100576060366003190112610100576104b7610889565b67ffffffffffffffff92602435848111610498576104d890369083016109e5565b93604435908111610498576104f0903690830161097e565b6001600160a01b0380931692845192630935e01b60e21b845233908401526020928381602481885afa9081156105e457906105319189916105cd5750610b03565b61053e8651835114610b4e565b865b86518110156105c95780826105586105ac938a610aa9565b51166105648286610aa9565b5115801591906105b157878b528a8752610580818a8d20610b99565b505b877f2738289d9deecdc30eb8ffc42876633caecca1ffa166e4efa89f408e17373a1a8c80a4610a84565b610540565b878b528a87526105c3818a8d20610c0e565b50610582565b8780f35b6104589150853d871161045e5761045081836108d0565b86513d8a823e3d90fd5b50903461010057606036600319011261010057610609610889565b67ffffffffffffffff926024358481116104985761062a9036908301610920565b936044359081116104985761064a6001600160a01b03913690840161097e565b921691835191630935e01b60e21b835233908301526020918281602481875afa90811561046557906106829188916104385750610b03565b61068f8551825114610b4e565b855b855181101561043457806103c26106a89288610aa9565b610691565b5050346100fc5760803660031901126100fc576020906100f06106ce610889565b6106d66108a4565b906106df6108ba565b50610cfe565b5050346100fc5760208060031936011261010057916001600160a01b0361070a610889565b1681526001908184528281209384549061072382610908565b91610730865193846108d0565b80835261073c81610908565b8383019790601f1901368937845b828110610787575050508451948186019282875251809352850195925b8281106107745785870386f35b8351875295810195928101928401610767565b8061079c6107ad92849b999b98969798610ad3565b90549060031b1c6101cc8289610aa9565b9795979493929461074a565b9250503461010057602036600319011261010057357fffffffff00000000000000000000000000000000000000000000000000000000811680910361010057602092507f45ffcdad00000000000000000000000000000000000000000000000000000000811490811561085f575b8115610835575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861082e565b7fff16f3500000000000000000000000000000000000000000000000000000000081149150610827565b600435906001600160a01b038216820361089f57565b600080fd5b602435906001600160a01b038216820361089f57565b604435906001600160a01b038216820361089f57565b90601f8019910116810190811067ffffffffffffffff8211176108f257604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116108f25760051b60200190565b81601f8201121561089f5780359161093783610908565b9261094560405194856108d0565b808452602092838086019260051b82010192831161089f578301905b82821061096f575050505090565b81358152908301908301610961565b81601f8201121561089f5780359161099583610908565b926109a360405194856108d0565b808452602092838086019260051b82010192831161089f578301905b8282106109cd575050505090565b8135801515810361089f5781529083019083016109bf565b81601f8201121561089f578035916109fc83610908565b92610a0a60405194856108d0565b808452602092838086019260051b82010192831161089f578301905b828210610a34575050505090565b81356001600160a01b038116810361089f578152908301908301610a26565b9181601f8401121561089f5782359167ffffffffffffffff831161089f576020808501948460051b01011161089f57565b6000198114610a935760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015610abd5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b8054821015610abd5760005260206000200190600090565b9081602091031261089f5751801515810361089f5790565b15610b0a57565b606460405162461bcd60e51b815260206004820152601660248201527f57616c6c6574206973206e6f7420616e2061646d696e000000000000000000006044820152fd5b15610b5557565b606460405162461bcd60e51b815260206004820152601560248201527f4d69736d6174636820696e707574206c656e67746800000000000000000000006044820152fd5b6000828152600182016020526040902054610c0757805490680100000000000000008210156108f25782610bf0610bd7846001809601855584610ad3565b819391549060031b600019811b9283911b169119161790565b905580549260005201602052604060002055600190565b5050600090565b90600182019060009281845282602052604084205490811515600014610cf75760001991808301818111610ce357825490848201918211610ccf57808203610c9a575b50505080548015610c8657820191610c698383610ad3565b909182549160031b1b191690555582526020526040812055600190565b602486634e487b7160e01b81526031600452fd5b610cba610caa610bd79386610ad3565b90549060031b1c92839286610ad3565b90558652846020526040862055388080610c51565b602488634e487b7160e01b81526011600452fd5b602487634e487b7160e01b81526011600452fd5b5050505090565b6001600160a01b038181169216829003610d1a575b5050600190565b336000526000602052610d4182604060002060019160005201602052604060002054151590565b610db057803b15610d13573f336000526001602052610d7481604060002060019160005201602052604060002054151590565b15610d135760449250604051917f5f3853a900000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b602482604051907fede71dcc0000000000000000000000000000000000000000000000000000000082526004820152fdfea26469706673582212209670fb08f11534cf6c451eb1fbfa2c4bc8c4378c65967845422b6782a304e29f64736f6c63430008110033
Deployed Bytecode Sourcemap
540:5556:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;540:5556:5;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5128:33;540:5556;;;;;:::i;:::-;5128:33;;;:::i;:::-;540:5556;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;540:5556:5;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;540:5556:5;;;;1739:6;1747:16;;;;;;540:5556;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1765:3;4904:18:4;;;1765:3:5;4904:18:4;;;;;;;:::i;:::-;540:5556:5;;;;;;;1784:21;;;;:::i;:::-;540:5556;1765:3;:::i;:::-;1739:6;;;;;;540:5556;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;540:5556:5;;;;;;;-1:-1:-1;;;1268:57:5;;;1314:10;1268:57;;;540:5556;;1268:57;;;540:5556;1268:57;;;;;;;;;;1260:92;1268:57;;;;;540:5556;1260:92;;:::i;:::-;540:5556;;1268:57;;;1314:10;1268:57;;;540:5556;1268:57;;540:5556;1268:57;;;;;;;;;;1260:92;1268:57;;;;;1260:92;;:::i;:::-;2602:68;540:5556;;;;2610:34;2602:68;:::i;:::-;2686:6;2716:3;540:5556;;;2694:20;;;;;2754:12;;;;3029:48;2716:3;2754:12;;;2800:10;2754:12;;;;;;:::i;:::-;540:5556;;2800:10;;;;:::i;:::-;540:5556;;;2824:187;;;;;;;8121:50:4;540:5556:5;;;;;;;8121:50:4;:::i;:::-;;2824:187:5;3029:48;;2716:3;:::i;:::-;2686:6;;2824:187;8442:53:4;540:5556:5;;;;;;;8442:53:4;:::i;:::-;;2824:187:5;;2694:20;;;;;;;;;;540:5556;;1268:57;;;1314:10;1268:57;;;540:5556;1268:57;;540:5556;1268:57;;;;;;;;;;1260:92;1268:57;;;;;1260:92;;:::i;:::-;3417:65;540:5556;;;;3425:31;3417:65;:::i;:::-;3506:6;3533:3;540:5556;;3514:17;;;;;3568:9;;3533:3;3568:9;;;:::i;:::-;540:5556;3611:10;;;;:::i;:::-;540:5556;;;;;3635:185;;;540:5556;;;3671:26;540:5556;;5911:23:4;540:5556:5;;;;5911:23:4;:::i;:::-;;3635:185:5;3838:45;;;;;3533:3;:::i;:::-;3506:6;;3635:185;540:5556;;;3756:26;540:5556;;6205:26:4;540:5556:5;;;;6205:26:4;:::i;:::-;;3635:185:5;;3514:17;;540:5556;;1268:57;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;540:5556;;;;;;;;;1268:57;;;;;;;;;;;;;;:::i;:::-;540:5556;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;540:5556:5;;;;;;1268:57;-1:-1:-1;;;1268:57:5;;1314:10;1268:57;;;540:5556;;1268:57;;;540:5556;1268:57;;;;;;;;;;1260:92;1268:57;;;;;1260:92;;:::i;:::-;2602:68;540:5556;;;;2610:34;2602:68;:::i;:::-;2686:6;2716:3;540:5556;;2694:20;;;;;2754:12;;;2716:3;2754:12;;;:::i;:::-;540:5556;;2800:10;;;;:::i;:::-;540:5556;;;;;2824:187;;;540:5556;;;;;;8121:50:4;540:5556:5;;;;8121:50:4;:::i;:::-;;2824:187:5;3029:48;;;;;2716:3;:::i;:::-;2686:6;;2824:187;540:5556;;;;;;8442:53:4;540:5556:5;;;;8442:53:4;:::i;:::-;;2824:187:5;;2694:20;;540:5556;;1268:57;;;;;;;;;;;;;;:::i;:::-;540:5556;;;;;;;;;;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;540:5556:5;;;;;;:::i;:::-;;;;;;1268:57;-1:-1:-1;;;1268:57:5;;1314:10;1268:57;;;540:5556;;1268:57;;;540:5556;1268:57;;;;;;;;;;1260:92;1268:57;;;;;1260:92;;:::i;:::-;3417:65;540:5556;;;;3425:31;3417:65;:::i;:::-;3506:6;3533:3;540:5556;;3514:17;;;;;3568:9;;3533:3;3568:9;;;:::i;3533:3::-;3506:6;;540:5556;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;5380:33;540:5556;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;;5380:33;:::i;540:5556::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;540:5556:5;;:::i;:::-;;;;2089:26;540:5556;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;540:5556:5;;;;2200:6;2208:16;;;;;;540:5556;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2226:3;4904:18:4;;2226:3:5;4904:18:4;;;;;;;;;;:::i;:::-;540:5556:5;;;;;;2245:21;;;;:::i;2226:3::-;2200:6;;;;;;;;;540:5556;;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;;;;;;;;;4634:71;;4649:56;4634:71;;:159;;;;;540:5556;4634:215;;;;540:5556;;;;;;;4634:215;4824:25;4809:40;;;4634:215;;;:159;4736:57;4721:72;;;-1:-1:-1;4634:159:5;;540:5556;;;;-1:-1:-1;;;;;540:5556:5;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;;;;540:5556:5;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;540:5556:5;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;540:5556:5;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;540:5556:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;540:5556:5;;;;;;;:::o;:::-;-1:-1:-1;;;540:5556:5;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;540:5556:5;;;;;;;;;;;;;;;;-1:-1:-1;540:5556:5;;-1:-1:-1;540:5556:5;;;-1:-1:-1;540:5556:5;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;-1:-1:-1;;;540:5556:5;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;540:5556:5;;;;;;;;;;;;;;;;;;2113:404:4;-1:-1:-1;540:5556:5;;;4250:12:4;;;540:5556:5;;;;;;2197:21:4;;540:5556:5;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;540:5556:5;2392:12:4;540:5556:5;;;-1:-1:-1;540:5556:5;;;2446:11:4;:::o;2192:319::-;2488:12;;-1:-1:-1;2488:12:4;:::o;2685:1388::-;;2888:12;;;-1:-1:-1;;540:5556:5;;;;;;;;;;;2922:15:4;;;;2918:1149;2922:15;;;-1:-1:-1;;540:5556:5;;;;;;;;;;;;;;;;;;;;3404:26:4;;;3400:398;;2918:1149;540:5556:5;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2888:12:4;4002:11;:::o;540:5556:5:-;;;-1:-1:-1;;;540:5556:5;;;;;;3400:398:4;540:5556:5;3470:22:4;3592:26;3470:22;;;:::i;:::-;540:5556:5;;;;;;3592:26:4;;;;;:::i;540:5556:5:-;;;;;;;;;;;;3400:398:4;;;;;540:5556:5;;;-1:-1:-1;;;540:5556:5;;;;;;;;;-1:-1:-1;;;540:5556:5;;;;;;2918:1149:4;4044:12;;;;;:::o;5516:578:5:-;-1:-1:-1;;;;;540:5556:5;;;;;5618:16;;;5614:452;;5516:578;6076:11;;6083:4;5516:578;:::o;5614:452::-;5679:10;5654:24;540:5556;5654:24;540:5556;;8686:55:4;540:5556:5;;5654:24;540:5556;4250:12:4;4154:127;-1:-1:-1;540:5556:5;4250:12:4;540:5556:5;;;-1:-1:-1;540:5556:5;;4250:24:4;;4154:127;;8686:55;5650:129:5;;5797:20;;5793:263;5614:452;5793:263;5860:17;5679:10;5654:24;540:5556;5899:26;540:5556;;6422:28:4;540:5556:5;;5654:24;540:5556;4250:12:4;4154:127;-1:-1:-1;540:5556:5;4250:12:4;540:5556:5;;;-1:-1:-1;540:5556:5;;4250:24:4;;4154:127;;6422:28;5895:147:5;5614:452;5895:147;540:5556;;;;;5987:36;;;;;;;540:5556;;;;;5987:36;5650:129;540:5556;;;;5736:28;;;;;;;540:5556;5736:28
Swarm Source
ipfs://9670fb08f11534cf6c451eb1fbfa2c4bc8c4378c65967845422b6782a304e29f
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.