Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 93 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Metadata Val... | 21673732 | 46 hrs ago | IN | 0 ETH | 0.0022077 | ||||
Set Metadata Val... | 21633048 | 7 days ago | IN | 0 ETH | 0.00093295 | ||||
Apply List Ops | 21625078 | 8 days ago | IN | 0 ETH | 0.00050057 | ||||
Apply List Ops | 21619804 | 9 days ago | IN | 0 ETH | 0.00043398 | ||||
Apply List Ops | 21619725 | 9 days ago | IN | 0 ETH | 0.00031256 | ||||
Set Metadata Val... | 21619626 | 9 days ago | IN | 0 ETH | 0.00081813 | ||||
Apply List Ops | 21597799 | 12 days ago | IN | 0 ETH | 0.00037444 | ||||
Apply List Ops | 21597708 | 12 days ago | IN | 0 ETH | 0.0002722 | ||||
Apply List Ops | 21597692 | 12 days ago | IN | 0 ETH | 0.00035071 | ||||
Set Metadata Val... | 21519025 | 23 days ago | IN | 0 ETH | 0.00078329 | ||||
Set Metadata Val... | 21519007 | 23 days ago | IN | 0 ETH | 0.00145454 | ||||
Set Metadata Val... | 21495629 | 26 days ago | IN | 0 ETH | 0.00136993 | ||||
Set Metadata Val... | 21493617 | 27 days ago | IN | 0 ETH | 0.00085401 | ||||
Set Metadata Val... | 21491500 | 27 days ago | IN | 0 ETH | 0.00130227 | ||||
Set Metadata Val... | 21491057 | 27 days ago | IN | 0 ETH | 0.00103903 | ||||
Set Metadata Val... | 21490467 | 27 days ago | IN | 0 ETH | 0.00227567 | ||||
Set Metadata Val... | 21490396 | 27 days ago | IN | 0 ETH | 0.00074807 | ||||
Set Metadata Val... | 21489947 | 27 days ago | IN | 0 ETH | 0.0012081 | ||||
Set Metadata Val... | 21462805 | 31 days ago | IN | 0 ETH | 0.00072907 | ||||
Apply List Ops | 21448610 | 33 days ago | IN | 0 ETH | 0.00187527 | ||||
Apply List Ops | 21399231 | 40 days ago | IN | 0 ETH | 0.00083454 | ||||
Set Metadata Val... | 21350230 | 47 days ago | IN | 0 ETH | 0.00433409 | ||||
Set Metadata Val... | 21348968 | 47 days ago | IN | 0 ETH | 0.00569244 | ||||
Set Metadata Val... | 21302556 | 53 days ago | IN | 0 ETH | 0.00401179 | ||||
Set Metadata Val... | 21291825 | 55 days ago | IN | 0 ETH | 0.00116466 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
EFPListRecords
Compiler Version
v0.8.23+commit.f704f362
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.23; import {Ownable} from 'lib/openzeppelin-contracts/contracts/access/Ownable.sol'; import {Pausable} from 'lib/openzeppelin-contracts/contracts/security/Pausable.sol'; import {IEFPListMetadata, IEFPListRecords} from './interfaces/IEFPListRecords.sol'; import {ENSReverseClaimer} from './lib/ENSReverseClaimer.sol'; /** * @title ListMetadata * @author Cory Gabrielsen (cory.eth) * @custom:contributor throw; (0xthrpw.eth) * @custom:benediction DEVS BENEDICAT ET PROTEGAT CONTRACTVS MEAM * * @notice Manages key-value pairs associated with EFP List NFTs. * Provides functionalities for list managers to set and retrieve metadata for their lists. */ abstract contract ListMetadata is IEFPListMetadata, Pausable, Ownable { error SlotAlreadyClaimed(uint256 slot, address manager); // error NotListManager(address manager); /////////////////////////////////////////////////////////////////////////// // Data Structures /////////////////////////////////////////////////////////////////////////// /// @dev The key-value set for each token ID mapping(uint256 => mapping(string => bytes)) private values; ///////////////////////////////////////////////////////////////////////////// // Pausable ///////////////////////////////////////////////////////////////////////////// /** * @dev Pauses the contract. Can only be called by the contract owner. */ function pause() public onlyOwner { _pause(); } /** * @dev Unpauses the contract. Can only be called by the contract owner. */ function unpause() public onlyOwner { _unpause(); } ///////////////////////////////////////////////////////////////////////////// // Helpers ///////////////////////////////////////////////////////////////////////////// function bytesToAddress(bytes memory b) internal pure returns (address) { require(b.length == 20, 'Invalid length'); address addr; assembly { addr := mload(add(b, 20)) } return addr; } ///////////////////////////////////////////////////////////////////////////// // Getters ///////////////////////////////////////////////////////////////////////////// /** * @dev Retrieves metadata value for token ID and key. * @param tokenId The token Id to query. * @param key The key to query. * @return The associated value. */ function getMetadataValue(uint256 tokenId, string calldata key) external view returns (bytes memory) { return values[tokenId][key]; } /** * @dev Retrieves metadata values for token ID and keys. * @param tokenId The token Id to query. * @param keys The keys to query. * @return The associated values. */ function getMetadataValues(uint256 tokenId, string[] calldata keys) external view returns (bytes[] memory) { uint256 length = keys.length; bytes[] memory result = new bytes[](length); for (uint256 i = 0; i < length;) { string calldata key = keys[i]; result[i] = values[tokenId][key]; unchecked { ++i; } } return result; } ///////////////////////////////////////////////////////////////////////////// // Setters ///////////////////////////////////////////////////////////////////////////// /** * @dev Sets metadata records for token ID with the unique key key to value, * overwriting anything previously stored for token ID and key. To clear a * field, set it to the empty string. * @param slot The slot corresponding to the list to update. * @param key The key to set. * @param value The value to set. */ function _setMetadataValue(uint256 slot, string memory key, bytes memory value) internal { values[slot][key] = value; emit UpdateListMetadata(slot, key, value); } /** * @dev Sets metadata records for token ID with the unique key key to value, * overwriting anything previously stored for token ID and key. To clear a * field, set it to the empty string. Only callable by the list manager. * @param slot The slot corresponding to the list to update. * @param key The key to set. * @param value The value to set. */ function setMetadataValue(uint256 slot, string calldata key, bytes calldata value) external whenNotPaused onlyListManager(slot) { _setMetadataValue(slot, key, value); } /** * @dev Sets an array of metadata records for a token ID. Each record is a * key/value pair. * @param slot The slot corresponding to the list to update. * @param records The records to set. */ function _setMetadataValues(uint256 slot, KeyValue[] calldata records) internal { uint256 length = records.length; for (uint256 i = 0; i < length;) { KeyValue calldata record = records[i]; _setMetadataValue(slot, record.key, record.value); unchecked { ++i; } } } /** * @dev Sets an array of metadata records for a token ID. Each record is a * key/value pair. Only callable by the list manager. * @param slot The slot corresponding to the list to update. * @param records The records to set. */ function setMetadataValues(uint256 slot, KeyValue[] calldata records) external whenNotPaused onlyListManager(slot) { _setMetadataValues(slot, records); } /////////////////////////////////////////////////////////////////////////// // Modifiers /////////////////////////////////////////////////////////////////////////// /** * @notice Ensures that the caller is the manager of the specified list. * @param slot The unique identifier of the list. * @dev Used to restrict function access to the list's manager. */ modifier onlyListManager(uint256 slot) { bytes memory existing = values[slot]['manager']; // if not set, claim for msg.sender if (existing.length != 20) { _claimListManager(slot, msg.sender); } else { address existingManager = bytesToAddress(existing); if (existingManager == address(0)) { _claimListManager(slot, msg.sender); } else { require(existingManager == msg.sender, 'Not list manager'); } } _; } /////////////////////////////////////////////////////////////////////////// // List Manager - Claim /////////////////////////////////////////////////////////////////////////// /** * @notice Allows an address to claim management of an unclaimed list slot. * @param slot The slot that the sender wishes to claim. * @param manager The address to be set as the manager. * @dev This function establishes the first-come-first-serve basis for slot claiming. */ function _claimListManager(uint256 slot, address manager) internal { bytes memory existing = values[slot]['manager']; // require(existing.length != 20 || bytesToAddress(existing) == manager, "slot already claimed"); if (existing.length == 20) { address existingManager = bytesToAddress(existing); if (existingManager != manager) { revert SlotAlreadyClaimed(slot, existingManager); } } _setMetadataValue(slot, 'manager', abi.encodePacked(manager)); } /** * @notice Allows the sender to claim management of an unclaimed list slot. * @param slot The slot that the sender wishes to claim. */ function claimListManager(uint256 slot) external whenNotPaused { _claimListManager(slot, msg.sender); } /** * @notice Allows the sender to transfer management of a list to a new address. * @param slot The list's unique identifier. * @param manager The address to be set as the new manager. */ function claimListManagerForAddress(uint256 slot, address manager) external whenNotPaused { _claimListManager(slot, manager); } /////////////////////////////////////////////////////////////////////////// // List Manager - Read /////////////////////////////////////////////////////////////////////////// /** * @notice Retrieves the address of the manager for a specified list slot. * @param slot The list's unique identifier. * @return The address of the manager. */ function getListManager(uint256 slot) external view returns (address) { bytes memory existing = values[slot]['manager']; return existing.length != 20 ? address(0) : bytesToAddress(existing); } /////////////////////////////////////////////////////////////////////////// // List Manager - Write /////////////////////////////////////////////////////////////////////////// /** * @notice Allows the current manager to transfer management of a list to a new address. * @param slot The list's unique identifier. * @param manager The address to be set as the new manager. * @dev Only the current manager can transfer their management role. */ function setListManager(uint256 slot, address manager) external whenNotPaused onlyListManager(slot) { _setMetadataValue(slot, 'manager', abi.encodePacked(manager)); } /////////////////////////////////////////////////////////////////////////// // List User - Read /////////////////////////////////////////////////////////////////////////// /** * @notice Retrieves the address of the list user for a specified list * slot. * @param slot The list's unique identifier. * @return The address of the list user. */ function getListUser(uint256 slot) external view returns (address) { bytes memory existing = values[slot]['user']; return existing.length != 20 ? address(0) : bytesToAddress(existing); } /////////////////////////////////////////////////////////////////////////// // List Manager - Write /////////////////////////////////////////////////////////////////////////// /** * @notice Allows the current manager to change the list user to a new * address. * @param slot The list's unique identifier. * @param user The address to be set as the new list user. * @dev Only the current manager can change the list user. */ function setListUser(uint256 slot, address user) external whenNotPaused onlyListManager(slot) { _setMetadataValue(slot, 'user', abi.encodePacked(user)); } } /** * @title EFPListRecords * @notice Manages a dynamic list of records associated with EFP List NFTs. * Provides functionalities for list managers to apply operations to their lists. */ abstract contract ListRecords is IEFPListRecords, ListMetadata { /////////////////////////////////////////////////////////////////////////// // Data Structures /////////////////////////////////////////////////////////////////////////// /// @notice Stores a sequence of operations for each list identified by its slot. /// @dev Each list can have multiple operations performed over time. mapping(uint256 => bytes[]) public listOps; /////////////////////////////////////////////////////////////////////////// // List Operation Functions - Read /////////////////////////////////////////////////////////////////////////// /** * @notice Retrieves the number of operations performed on a list. * @param slot The list's unique identifier. * @return The number of operations performed on the list. */ function getListOpCount(uint256 slot) external view returns (uint256) { return listOps[slot].length; } /** * @notice Retrieves the operation at a specified index for a list. * @param slot The list's unique identifier. * @param index The index of the operation to be retrieved. * @return The operation at the specified index. */ function getListOp(uint256 slot, uint256 index) external view returns (bytes memory) { return listOps[slot][index]; } /** * @notice Retrieves a range of operations for a list. * @param slot The list's unique identifier. * @param start The starting index of the range. * @param end The ending index of the range. * @return The operations in the specified range. */ function getListOpsInRange(uint256 slot, uint256 start, uint256 end) external view returns (bytes[] memory) { if (start > end) { revert('Invalid range'); } bytes[] memory ops = new bytes[](end - start); for (uint256 i = start; i < end;) { ops[i - start] = listOps[slot][i]; unchecked { ++i; } } return ops; } /** * @notice Retrieves all operations for a list. * @param slot The list's unique identifier. * @return The operations performed on the list. */ function getAllListOps(uint256 slot) external view returns (bytes[] memory) { return listOps[slot]; } /////////////////////////////////////////////////////////////////////////// // List Operation Functions - Write /////////////////////////////////////////////////////////////////////////// /** * @notice Applies a single operation to the list. * @param slot The list's unique identifier. * @param op The operation to be applied. */ function _applyListOp(uint256 slot, bytes calldata op) internal { listOps[slot].push(op); emit ListOp(slot, op); } /** * @notice Public wrapper for `_applyOp`, enabling list managers to apply a single operation. * @param slot The list's unique identifier. * @param op The operation to be applied. */ function applyListOp(uint256 slot, bytes calldata op) external whenNotPaused onlyListManager(slot) { _applyListOp(slot, op); } /** * @notice Allows list managers to apply multiple operations in a single transaction. * @param slot The list's unique identifier. * @param ops An array of operations to be applied. */ function _applyListOps(uint256 slot, bytes[] calldata ops) internal { uint256 len = ops.length; for (uint256 i = 0; i < len;) { _applyListOp(slot, ops[i]); unchecked { ++i; } } } /** * @notice Allows list managers to apply multiple operations in a single transaction. * @param slot The list's unique identifier. * @param ops An array of operations to be applied. */ function applyListOps(uint256 slot, bytes[] calldata ops) external whenNotPaused onlyListManager(slot) { _applyListOps(slot, ops); } /** * @notice Allows list managers to set metadata values and apply list ops * in a single transaction. * @param slot The list's unique identifier. * @param records An array of key-value pairs to set. * @param ops An array of operations to be applied. */ function setMetadataValuesAndApplyListOps(uint256 slot, KeyValue[] calldata records, bytes[] calldata ops) external whenNotPaused onlyListManager(slot) { _setMetadataValues(slot, records); _applyListOps(slot, ops); } } contract EFPListRecords is IEFPListRecords, ListRecords, ENSReverseClaimer {}
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.23; /** * @title IEFPListMetadata */ interface IEFPListMetadata { event UpdateListMetadata(uint256 indexed slot, string key, bytes value); struct KeyValue { string key; bytes value; } function getMetadataValue(uint256 slot, string calldata key) external view returns (bytes memory); function getMetadataValues(uint256 slot, string[] calldata keys) external view returns (bytes[] memory); function setMetadataValue(uint256 slot, string calldata key, bytes calldata value) external; function setMetadataValues(uint256 slot, KeyValue[] calldata records) external; // List Manager Functions function claimListManager(uint256 slot) external; function claimListManagerForAddress(uint256 slot, address manager) external; function getListManager(uint256 slot) external view returns (address); function setListManager(uint256 slot, address manager) external; // List User Functions function getListUser(uint256 slot) external view returns (address); function setListUser(uint256 slot, address user) external; } /** * @title IEFPListRecords * @notice Interface for the ListRecords contract. */ interface IEFPListRecords is IEFPListMetadata { // Events event ListOp(uint256 indexed slot, bytes op); // List Operation Functions - Read function getListOpCount(uint256 slot) external view returns (uint256); function getListOp(uint256 slot, uint256 index) external view returns (bytes memory); function getListOpsInRange(uint256 slot, uint256 start, uint256 end) external view returns (bytes[] memory); function getAllListOps(uint256 slot) external view returns (bytes[] memory); // List Operation Functions - Write function applyListOp(uint256 slot, bytes calldata op) external; function applyListOps(uint256 slot, bytes[] calldata ops) external; function setMetadataValuesAndApplyListOps(uint256 slot, KeyValue[] calldata records, bytes[] calldata ops) external; }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.23; import {Ownable} from 'lib/openzeppelin-contracts/contracts/access/Ownable.sol'; interface ENS { /** * @dev Returns the address that owns the specified node. * @param node The specified node. * @return address of the owner. */ function owner(bytes32 node) external view returns (address); } interface IReverseRegistrar { /** * @dev Transfers ownership of the reverse ENS record associated with the * calling account. * @param owner The address to set as the owner of the reverse record in ENS. * @return The ENS node hash of the reverse record. */ function claim(address owner) external returns (bytes32); /** * @dev Sets the `name()` record for the reverse ENS record associated with * the calling account. First updates the resolver to the default reverse * resolver if necessary. * @param name The name to set for this address. * @return The ENS node hash of the reverse record. */ function setName(string memory name) external returns (bytes32); } /** * @title ENSReverseClaimer * @dev This contract is used to claim reverse ENS records. */ abstract contract ENSReverseClaimer is Ownable { /// @dev The namehash of 'addr.reverse', the domain at which reverse records /// are stored in ENS. bytes32 constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2; /** * @dev Transfers ownership of the reverse ENS record associated with the * contract. * @param ens The ENS registry. * @param claimant The address to set as the owner of the reverse record in * ENS. * @return The ENS node hash of the reverse record. */ function claimReverseENS(ENS ens, address claimant) external onlyOwner returns (bytes32) { return IReverseRegistrar(ens.owner(ADDR_REVERSE_NODE)).claim(claimant); } /** * @dev Sets the reverse ENS record associated with the contract. * @param ens The ENS registry. * @param name The name to set as the reverse record in ENS. * @return The ENS node hash of the reverse record. */ function setReverseENS(ENS ens, string calldata name) external onlyOwner returns (bytes32) { return IReverseRegistrar(ens.owner(ADDR_REVERSE_NODE)).setName(name); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "remappings": [ "ERC721A/=lib/ERC721A/contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/openzeppelin-contracts/contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"address","name":"manager","type":"address"}],"name":"SlotAlreadyClaimed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"slot","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"op","type":"bytes"}],"name":"ListOp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"slot","type":"uint256"},{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"bytes","name":"value","type":"bytes"}],"name":"UpdateListMetadata","type":"event"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"bytes","name":"op","type":"bytes"}],"name":"applyListOp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"bytes[]","name":"ops","type":"bytes[]"}],"name":"applyListOps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"}],"name":"claimListManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"address","name":"manager","type":"address"}],"name":"claimListManagerForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ENS","name":"ens","type":"address"},{"internalType":"address","name":"claimant","type":"address"}],"name":"claimReverseENS","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"}],"name":"getAllListOps","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"}],"name":"getListManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getListOp","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"}],"name":"getListOpCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getListOpsInRange","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"}],"name":"getListUser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"key","type":"string"}],"name":"getMetadataValue","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string[]","name":"keys","type":"string[]"}],"name":"getMetadataValues","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"listOps","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"address","name":"manager","type":"address"}],"name":"setListManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"setListUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"string","name":"key","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"name":"setMetadataValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"components":[{"internalType":"string","name":"key","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"internalType":"struct IEFPListMetadata.KeyValue[]","name":"records","type":"tuple[]"}],"name":"setMetadataValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"components":[{"internalType":"string","name":"key","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"internalType":"struct IEFPListMetadata.KeyValue[]","name":"records","type":"tuple[]"},{"internalType":"bytes[]","name":"ops","type":"bytes[]"}],"name":"setMetadataValuesAndApplyListOps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ENS","name":"ens","type":"address"},{"internalType":"string","name":"name","type":"string"}],"name":"setReverseENS","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506000805460ff1916905561002433610029565b610082565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6124ab806100916000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80637a58aa72116100de57806387d40dab11610097578063aed5dafd11610071578063aed5dafd1461036e578063c553f29c14610381578063ec379ab914610394578063f2fde38b146103a757600080fd5b806387d40dab146103325780638da5cb5b146103455780639b7f61321461035b57600080fd5b80637a58aa72146102cb5780638007c940146102de5780638214bd41146102f157806382820b07146103045780638456cb59146103175780638780b3801461031f57600080fd5b806351c0dfbd1161014b5780636950320b116101255780636950320b1461028a5780636f1fe79d1461029d5780636fcab637146102b0578063715018a6146102c357600080fd5b806351c0dfbd1461024e5780635c975abb1461026157806361e7792a1461027757600080fd5b806302dc2af914610193578063268d387f146101c6578063324eaf7a146101f15780633f4ba83a1461020657806340783baa1461020e5780634846b5161461022e575b600080fd5b6101b36101a1366004611cc1565b60009081526002602052604090205490565b6040519081526020015b60405180910390f35b6101d96101d4366004611cc1565b6103ba565b6040516001600160a01b0390911681526020016101bd565b6102046101ff366004611d23565b610496565b005b6102046105dc565b61022161021c366004611d6f565b6105ee565b6040516101bd9190611de1565b61024161023c366004611e39565b6106a7565b6040516101bd9190611e78565b61022161025c366004611d23565b61081c565b60005460ff1660405190151581526020016101bd565b610204610285366004611edc565b6108e1565b610204610298366004611cc1565b610a89565b6101d96102ab366004611cc1565b610a9e565b6102046102be366004611f56565b610abb565b610204610bfc565b6101b36102d9366004611fd4565b610c0e565b6101b36102ec366004612010565b610d18565b6102046102ff366004612049565b610e21565b61024161031236600461206e565b610fae565b610204611140565b61020461032d366004611e39565b611150565b610221610340366004611d6f565b611286565b60005461010090046001600160a01b03166101d9565b610241610369366004611cc1565b611345565b61020461037c366004612049565b611431565b61020461038f366004611e39565b611447565b6102046103a2366004612049565b61157d565b6102046103b536600461209a565b6116ed565b6000818152600160205260408082209051633ab9b2b960e11b81528291906004015b908152602001604051809103902080546103f5906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610421906120b7565b801561046e5780601f106104435761010080835404028352916020019161046e565b820191906000526020600020905b81548152906001019060200180831161045157829003601f168201915b50505050509050805160140361048c5761048781611763565b61048f565b60005b9392505050565b61049e6117af565b6000838152600160205260408082209051859291906104bc906120f1565b908152602001604051809103902080546104d5906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610501906120b7565b801561054e5780601f106105235761010080835404028352916020019161054e565b820191906000526020600020905b81548152906001019060200180831161053157829003601f168201915b50505050509050805160141461056d5761056882336117f5565b6105ca565b600061057882611763565b90506001600160a01b0381166105975761059283336117f5565b6105c8565b6001600160a01b03811633146105c85760405162461bcd60e51b81526004016105bf90612104565b60405180910390fd5b505b6105d5858585611951565b5050505050565b6105e46119ba565b6105ec611a1a565b565b6002602052816000526040600020818154811061060a57600080fd5b90600052602060002001600091509150508054610626906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610652906120b7565b801561069f5780601f106106745761010080835404028352916020019161069f565b820191906000526020600020905b81548152906001019060200180831161068257829003601f168201915b505050505081565b60608160008167ffffffffffffffff8111156106c5576106c561212e565b6040519080825280602002602001820160405280156106f857816020015b60608152602001906001900390816106e35790505b50905060005b828110156108125736600087878481811061071b5761071b612144565b905060200281019061072d919061215a565b91509150600160008a815260200190815260200160002082826040516107549291906121a1565b9081526020016040518091039020805461076d906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610799906120b7565b80156107e65780601f106107bb576101008083540402835291602001916107e6565b820191906000526020600020905b8154815290600101906020018083116107c957829003601f168201915b50505050508484815181106107fd576107fd612144565b602090810291909101015250506001016106fe565b5095945050505050565b60606001600085815260200190815260200160002083836040516108419291906121a1565b9081526020016040518091039020805461085a906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610886906120b7565b80156108d35780601f106108a8576101008083540402835291602001916108d3565b820191906000526020600020905b8154815290600101906020018083116108b657829003601f168201915b505050505090509392505050565b6108e96117af565b600085815260016020526040808220905187929190610907906120f1565b90815260200160405180910390208054610920906120b7565b80601f016020809104026020016040519081016040528092919081815260200182805461094c906120b7565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b5050505050905080516014146109b8576109b382336117f5565b610a0c565b60006109c382611763565b90506001600160a01b0381166109e2576109dd83336117f5565b610a0a565b6001600160a01b0381163314610a0a5760405162461bcd60e51b81526004016105bf90612104565b505b610a808787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250611a6c92505050565b50505050505050565b610a916117af565b610a9b81336117f5565b50565b60008181526001602052604080822090518291906103dc906120f1565b610ac36117af565b600085815260016020526040808220905187929190610ae1906120f1565b90815260200160405180910390208054610afa906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b26906120b7565b8015610b735780601f10610b4857610100808354040283529160200191610b73565b820191906000526020600020905b815481529060010190602001808311610b5657829003601f168201915b505050505090508051601414610b9257610b8d82336117f5565b610be6565b6000610b9d82611763565b90506001600160a01b038116610bbc57610bb783336117f5565b610be4565b6001600160a01b0381163314610be45760405162461bcd60e51b81526004016105bf90612104565b505b610bf1878787611adb565b610a80878585611ba1565b610c046119ba565b6105ec6000611be2565b6000610c186119ba565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201526001600160a01b038516906302571be390602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca091906121b1565b6001600160a01b031663c47f002784846040518363ffffffff1660e01b8152600401610ccd9291906121f7565b6020604051808303816000875af1158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d10919061220b565b949350505050565b6000610d226119ba565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201526001600160a01b038416906302571be390602401602060405180830381865afa158015610d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daa91906121b1565b604051630f41a04d60e11b81526001600160a01b0384811660048301529190911690631e83409a906024016020604051808303816000875af1158015610df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e18919061220b565b90505b92915050565b610e296117af565b600082815260016020526040808220905184929190610e47906120f1565b90815260200160405180910390208054610e60906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8c906120b7565b8015610ed95780601f10610eae57610100808354040283529160200191610ed9565b820191906000526020600020905b815481529060010190602001808311610ebc57829003601f168201915b505050505090508051601414610ef857610ef382336117f5565b610f4c565b6000610f0382611763565b90506001600160a01b038116610f2257610f1d83336117f5565b610f4a565b6001600160a01b0381163314610f4a5760405162461bcd60e51b81526004016105bf90612104565b505b610fa8846040518060400160405280600781526020016636b0b730b3b2b960c91b81525085604051602001610f94919060609190911b6001600160601b031916815260140190565b604051602081830303815290604052611a6c565b50505050565b606081831115610ff05760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b60448201526064016105bf565b6000610ffc8484612224565b67ffffffffffffffff8111156110145761101461212e565b60405190808252806020026020018201604052801561104757816020015b60608152602001906001900390816110325790505b509050835b8381101561113757600086815260026020526040902080548290811061107457611074612144565b906000526020600020018054611089906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546110b5906120b7565b80156111025780601f106110d757610100808354040283529160200191611102565b820191906000526020600020905b8154815290600101906020018083116110e557829003601f168201915b50505050508286836111149190612224565b8151811061112457611124612144565b602090810291909101015260010161104c565b50949350505050565b6111486119ba565b6105ec611c3b565b6111586117af565b600083815260016020526040808220905185929190611176906120f1565b9081526020016040518091039020805461118f906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546111bb906120b7565b80156112085780601f106111dd57610100808354040283529160200191611208565b820191906000526020600020905b8154815290600101906020018083116111eb57829003601f168201915b5050505050905080516014146112275761122282336117f5565b61127b565b600061123282611763565b90506001600160a01b0381166112515761124c83336117f5565b611279565b6001600160a01b03811633146112795760405162461bcd60e51b81526004016105bf90612104565b505b6105d5858585611adb565b6000828152600260205260409020805460609190839081106112aa576112aa612144565b9060005260206000200180546112bf906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546112eb906120b7565b80156113385780601f1061130d57610100808354040283529160200191611338565b820191906000526020600020905b81548152906001019060200180831161131b57829003601f168201915b5050505050905092915050565b606060026000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611426578382906000526020600020018054611399906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546113c5906120b7565b80156114125780601f106113e757610100808354040283529160200191611412565b820191906000526020600020905b8154815290600101906020018083116113f557829003601f168201915b50505050508152602001906001019061137a565b505050509050919050565b6114396117af565b61144382826117f5565b5050565b61144f6117af565b60008381526001602052604080822090518592919061146d906120f1565b90815260200160405180910390208054611486906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546114b2906120b7565b80156114ff5780601f106114d4576101008083540402835291602001916114ff565b820191906000526020600020905b8154815290600101906020018083116114e257829003601f168201915b50505050509050805160141461151e5761151982336117f5565b611572565b600061152982611763565b90506001600160a01b0381166115485761154383336117f5565b611570565b6001600160a01b03811633146115705760405162461bcd60e51b81526004016105bf90612104565b505b6105d5858585611ba1565b6115856117af565b6000828152600160205260408082209051849291906115a3906120f1565b908152602001604051809103902080546115bc906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546115e8906120b7565b80156116355780601f1061160a57610100808354040283529160200191611635565b820191906000526020600020905b81548152906001019060200180831161161857829003601f168201915b5050505050905080516014146116545761164f82336117f5565b6116a8565b600061165f82611763565b90506001600160a01b03811661167e5761167983336117f5565b6116a6565b6001600160a01b03811633146116a65760405162461bcd60e51b81526004016105bf90612104565b505b610fa884604051806040016040528060048152602001633ab9b2b960e11b81525085604051602001610f94919060609190911b6001600160601b031916815260140190565b6116f56119ba565b6001600160a01b03811661175a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105bf565b610a9b81611be2565b600081516014146117a75760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b60448201526064016105bf565b506014015190565b60005460ff16156105ec5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105bf565b600082815260016020526040808220905161180f906120f1565b90815260200160405180910390208054611828906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611854906120b7565b80156118a15780601f10611876576101008083540402835291602001916118a1565b820191906000526020600020905b81548152906001019060200180831161188457829003601f168201915b5050505050905080516014036119045760006118bc82611763565b9050826001600160a01b0316816001600160a01b031614611902576040516378a6c03d60e11b8152600481018590526001600160a01b03821660248201526044016105bf565b505b61194c836040518060400160405280600781526020016636b0b730b3b2b960c91b81525084604051602001610f94919060609190911b6001600160601b031916815260140190565b505050565b60008381526002602090815260408220805460018101825590835291200161197a828483612295565b50827fb067630e3908f166069c77766250c553414e2745e742a562d533f29744a91a7383836040516119ad9291906121f7565b60405180910390a2505050565b6000546001600160a01b036101009091041633146105ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105bf565b611a22611c78565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b806001600085815260200190815260200160002083604051611a8e9190612355565b90815260200160405180910390209081611aa89190612371565b50827f59ae30478c6dc6ad258000ec5c1e2da773a457572397f6b85ddd54ab719ecd5483836040516119ad929190612431565b8060005b818110156105d55736848483818110611afa57611afa612144565b9050602002810190611b0c919061245f565b9050611b9886611b1c838061215a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b5e92505050602085018561215a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a6c92505050565b50600101611adf565b8060005b818110156105d557611bda85858584818110611bc357611bc3612144565b9050602002810190611bd5919061215a565b611951565b600101611ba5565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b611c436117af565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a4f3390565b60005460ff166105ec5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105bf565b600060208284031215611cd357600080fd5b5035919050565b60008083601f840112611cec57600080fd5b50813567ffffffffffffffff811115611d0457600080fd5b602083019150836020828501011115611d1c57600080fd5b9250929050565b600080600060408486031215611d3857600080fd5b83359250602084013567ffffffffffffffff811115611d5657600080fd5b611d6286828701611cda565b9497909650939450505050565b60008060408385031215611d8257600080fd5b50508035926020909101359150565b60005b83811015611dac578181015183820152602001611d94565b50506000910152565b60008151808452611dcd816020860160208601611d91565b601f01601f19169290920160200192915050565b602081526000610e186020830184611db5565b60008083601f840112611e0657600080fd5b50813567ffffffffffffffff811115611e1e57600080fd5b6020830191508360208260051b8501011115611d1c57600080fd5b600080600060408486031215611e4e57600080fd5b83359250602084013567ffffffffffffffff811115611e6c57600080fd5b611d6286828701611df4565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015611ecf57603f19888603018452611ebd858351611db5565b94509285019290850190600101611ea1565b5092979650505050505050565b600080600080600060608688031215611ef457600080fd5b85359450602086013567ffffffffffffffff80821115611f1357600080fd5b611f1f89838a01611cda565b90965094506040880135915080821115611f3857600080fd5b50611f4588828901611cda565b969995985093965092949392505050565b600080600080600060608688031215611f6e57600080fd5b85359450602086013567ffffffffffffffff80821115611f8d57600080fd5b611f9989838a01611df4565b90965094506040880135915080821115611fb257600080fd5b50611f4588828901611df4565b6001600160a01b0381168114610a9b57600080fd5b600080600060408486031215611fe957600080fd5b8335611ff481611fbf565b9250602084013567ffffffffffffffff811115611d5657600080fd5b6000806040838503121561202357600080fd5b823561202e81611fbf565b9150602083013561203e81611fbf565b809150509250929050565b6000806040838503121561205c57600080fd5b82359150602083013561203e81611fbf565b60008060006060848603121561208357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156120ac57600080fd5b813561048f81611fbf565b600181811c908216806120cb57607f821691505b6020821081036120eb57634e487b7160e01b600052602260045260246000fd5b50919050565b6636b0b730b3b2b960c91b815260070190565b60208082526010908201526f2737ba103634b9ba1036b0b730b3b2b960811b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261217157600080fd5b83018035915067ffffffffffffffff82111561218c57600080fd5b602001915036819003821315611d1c57600080fd5b8183823760009101908152919050565b6000602082840312156121c357600080fd5b815161048f81611fbf565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610d106020830184866121ce565b60006020828403121561221d57600080fd5b5051919050565b81810381811115610e1b57634e487b7160e01b600052601160045260246000fd5b601f82111561194c576000816000526020600020601f850160051c8101602086101561226e5750805b601f850160051c820191505b8181101561228d5782815560010161227a565b505050505050565b67ffffffffffffffff8311156122ad576122ad61212e565b6122c1836122bb83546120b7565b83612245565b6000601f8411600181146122f557600085156122dd5750838201355b600019600387901b1c1916600186901b1783556105d5565b600083815260209020601f19861690835b828110156123265786850135825560209485019460019092019101612306565b50868210156123435760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008251612367818460208701611d91565b9190910192915050565b815167ffffffffffffffff81111561238b5761238b61212e565b61239f8161239984546120b7565b84612245565b602080601f8311600181146123d457600084156123bc5750858301515b600019600386901b1c1916600185901b17855561228d565b600085815260208120601f198616915b82811015612403578886015182559484019460019091019084016123e4565b50858210156124215787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815260006124446040830185611db5565b82810360208401526124568185611db5565b95945050505050565b60008235603e1983360301811261236757600080fdfea2646970667358221220db6aca8b1dc54087d11400b442c45f398a7f0ab7c1fcaae17d5bae216bfcf67964736f6c63430008170033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80637a58aa72116100de57806387d40dab11610097578063aed5dafd11610071578063aed5dafd1461036e578063c553f29c14610381578063ec379ab914610394578063f2fde38b146103a757600080fd5b806387d40dab146103325780638da5cb5b146103455780639b7f61321461035b57600080fd5b80637a58aa72146102cb5780638007c940146102de5780638214bd41146102f157806382820b07146103045780638456cb59146103175780638780b3801461031f57600080fd5b806351c0dfbd1161014b5780636950320b116101255780636950320b1461028a5780636f1fe79d1461029d5780636fcab637146102b0578063715018a6146102c357600080fd5b806351c0dfbd1461024e5780635c975abb1461026157806361e7792a1461027757600080fd5b806302dc2af914610193578063268d387f146101c6578063324eaf7a146101f15780633f4ba83a1461020657806340783baa1461020e5780634846b5161461022e575b600080fd5b6101b36101a1366004611cc1565b60009081526002602052604090205490565b6040519081526020015b60405180910390f35b6101d96101d4366004611cc1565b6103ba565b6040516001600160a01b0390911681526020016101bd565b6102046101ff366004611d23565b610496565b005b6102046105dc565b61022161021c366004611d6f565b6105ee565b6040516101bd9190611de1565b61024161023c366004611e39565b6106a7565b6040516101bd9190611e78565b61022161025c366004611d23565b61081c565b60005460ff1660405190151581526020016101bd565b610204610285366004611edc565b6108e1565b610204610298366004611cc1565b610a89565b6101d96102ab366004611cc1565b610a9e565b6102046102be366004611f56565b610abb565b610204610bfc565b6101b36102d9366004611fd4565b610c0e565b6101b36102ec366004612010565b610d18565b6102046102ff366004612049565b610e21565b61024161031236600461206e565b610fae565b610204611140565b61020461032d366004611e39565b611150565b610221610340366004611d6f565b611286565b60005461010090046001600160a01b03166101d9565b610241610369366004611cc1565b611345565b61020461037c366004612049565b611431565b61020461038f366004611e39565b611447565b6102046103a2366004612049565b61157d565b6102046103b536600461209a565b6116ed565b6000818152600160205260408082209051633ab9b2b960e11b81528291906004015b908152602001604051809103902080546103f5906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610421906120b7565b801561046e5780601f106104435761010080835404028352916020019161046e565b820191906000526020600020905b81548152906001019060200180831161045157829003601f168201915b50505050509050805160140361048c5761048781611763565b61048f565b60005b9392505050565b61049e6117af565b6000838152600160205260408082209051859291906104bc906120f1565b908152602001604051809103902080546104d5906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610501906120b7565b801561054e5780601f106105235761010080835404028352916020019161054e565b820191906000526020600020905b81548152906001019060200180831161053157829003601f168201915b50505050509050805160141461056d5761056882336117f5565b6105ca565b600061057882611763565b90506001600160a01b0381166105975761059283336117f5565b6105c8565b6001600160a01b03811633146105c85760405162461bcd60e51b81526004016105bf90612104565b60405180910390fd5b505b6105d5858585611951565b5050505050565b6105e46119ba565b6105ec611a1a565b565b6002602052816000526040600020818154811061060a57600080fd5b90600052602060002001600091509150508054610626906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610652906120b7565b801561069f5780601f106106745761010080835404028352916020019161069f565b820191906000526020600020905b81548152906001019060200180831161068257829003601f168201915b505050505081565b60608160008167ffffffffffffffff8111156106c5576106c561212e565b6040519080825280602002602001820160405280156106f857816020015b60608152602001906001900390816106e35790505b50905060005b828110156108125736600087878481811061071b5761071b612144565b905060200281019061072d919061215a565b91509150600160008a815260200190815260200160002082826040516107549291906121a1565b9081526020016040518091039020805461076d906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610799906120b7565b80156107e65780601f106107bb576101008083540402835291602001916107e6565b820191906000526020600020905b8154815290600101906020018083116107c957829003601f168201915b50505050508484815181106107fd576107fd612144565b602090810291909101015250506001016106fe565b5095945050505050565b60606001600085815260200190815260200160002083836040516108419291906121a1565b9081526020016040518091039020805461085a906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610886906120b7565b80156108d35780601f106108a8576101008083540402835291602001916108d3565b820191906000526020600020905b8154815290600101906020018083116108b657829003601f168201915b505050505090509392505050565b6108e96117af565b600085815260016020526040808220905187929190610907906120f1565b90815260200160405180910390208054610920906120b7565b80601f016020809104026020016040519081016040528092919081815260200182805461094c906120b7565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b5050505050905080516014146109b8576109b382336117f5565b610a0c565b60006109c382611763565b90506001600160a01b0381166109e2576109dd83336117f5565b610a0a565b6001600160a01b0381163314610a0a5760405162461bcd60e51b81526004016105bf90612104565b505b610a808787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250611a6c92505050565b50505050505050565b610a916117af565b610a9b81336117f5565b50565b60008181526001602052604080822090518291906103dc906120f1565b610ac36117af565b600085815260016020526040808220905187929190610ae1906120f1565b90815260200160405180910390208054610afa906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b26906120b7565b8015610b735780601f10610b4857610100808354040283529160200191610b73565b820191906000526020600020905b815481529060010190602001808311610b5657829003601f168201915b505050505090508051601414610b9257610b8d82336117f5565b610be6565b6000610b9d82611763565b90506001600160a01b038116610bbc57610bb783336117f5565b610be4565b6001600160a01b0381163314610be45760405162461bcd60e51b81526004016105bf90612104565b505b610bf1878787611adb565b610a80878585611ba1565b610c046119ba565b6105ec6000611be2565b6000610c186119ba565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201526001600160a01b038516906302571be390602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca091906121b1565b6001600160a01b031663c47f002784846040518363ffffffff1660e01b8152600401610ccd9291906121f7565b6020604051808303816000875af1158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d10919061220b565b949350505050565b6000610d226119ba565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201526001600160a01b038416906302571be390602401602060405180830381865afa158015610d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daa91906121b1565b604051630f41a04d60e11b81526001600160a01b0384811660048301529190911690631e83409a906024016020604051808303816000875af1158015610df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e18919061220b565b90505b92915050565b610e296117af565b600082815260016020526040808220905184929190610e47906120f1565b90815260200160405180910390208054610e60906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8c906120b7565b8015610ed95780601f10610eae57610100808354040283529160200191610ed9565b820191906000526020600020905b815481529060010190602001808311610ebc57829003601f168201915b505050505090508051601414610ef857610ef382336117f5565b610f4c565b6000610f0382611763565b90506001600160a01b038116610f2257610f1d83336117f5565b610f4a565b6001600160a01b0381163314610f4a5760405162461bcd60e51b81526004016105bf90612104565b505b610fa8846040518060400160405280600781526020016636b0b730b3b2b960c91b81525085604051602001610f94919060609190911b6001600160601b031916815260140190565b604051602081830303815290604052611a6c565b50505050565b606081831115610ff05760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b60448201526064016105bf565b6000610ffc8484612224565b67ffffffffffffffff8111156110145761101461212e565b60405190808252806020026020018201604052801561104757816020015b60608152602001906001900390816110325790505b509050835b8381101561113757600086815260026020526040902080548290811061107457611074612144565b906000526020600020018054611089906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546110b5906120b7565b80156111025780601f106110d757610100808354040283529160200191611102565b820191906000526020600020905b8154815290600101906020018083116110e557829003601f168201915b50505050508286836111149190612224565b8151811061112457611124612144565b602090810291909101015260010161104c565b50949350505050565b6111486119ba565b6105ec611c3b565b6111586117af565b600083815260016020526040808220905185929190611176906120f1565b9081526020016040518091039020805461118f906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546111bb906120b7565b80156112085780601f106111dd57610100808354040283529160200191611208565b820191906000526020600020905b8154815290600101906020018083116111eb57829003601f168201915b5050505050905080516014146112275761122282336117f5565b61127b565b600061123282611763565b90506001600160a01b0381166112515761124c83336117f5565b611279565b6001600160a01b03811633146112795760405162461bcd60e51b81526004016105bf90612104565b505b6105d5858585611adb565b6000828152600260205260409020805460609190839081106112aa576112aa612144565b9060005260206000200180546112bf906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546112eb906120b7565b80156113385780601f1061130d57610100808354040283529160200191611338565b820191906000526020600020905b81548152906001019060200180831161131b57829003601f168201915b5050505050905092915050565b606060026000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611426578382906000526020600020018054611399906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546113c5906120b7565b80156114125780601f106113e757610100808354040283529160200191611412565b820191906000526020600020905b8154815290600101906020018083116113f557829003601f168201915b50505050508152602001906001019061137a565b505050509050919050565b6114396117af565b61144382826117f5565b5050565b61144f6117af565b60008381526001602052604080822090518592919061146d906120f1565b90815260200160405180910390208054611486906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546114b2906120b7565b80156114ff5780601f106114d4576101008083540402835291602001916114ff565b820191906000526020600020905b8154815290600101906020018083116114e257829003601f168201915b50505050509050805160141461151e5761151982336117f5565b611572565b600061152982611763565b90506001600160a01b0381166115485761154383336117f5565b611570565b6001600160a01b03811633146115705760405162461bcd60e51b81526004016105bf90612104565b505b6105d5858585611ba1565b6115856117af565b6000828152600160205260408082209051849291906115a3906120f1565b908152602001604051809103902080546115bc906120b7565b80601f01602080910402602001604051908101604052809291908181526020018280546115e8906120b7565b80156116355780601f1061160a57610100808354040283529160200191611635565b820191906000526020600020905b81548152906001019060200180831161161857829003601f168201915b5050505050905080516014146116545761164f82336117f5565b6116a8565b600061165f82611763565b90506001600160a01b03811661167e5761167983336117f5565b6116a6565b6001600160a01b03811633146116a65760405162461bcd60e51b81526004016105bf90612104565b505b610fa884604051806040016040528060048152602001633ab9b2b960e11b81525085604051602001610f94919060609190911b6001600160601b031916815260140190565b6116f56119ba565b6001600160a01b03811661175a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105bf565b610a9b81611be2565b600081516014146117a75760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b60448201526064016105bf565b506014015190565b60005460ff16156105ec5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105bf565b600082815260016020526040808220905161180f906120f1565b90815260200160405180910390208054611828906120b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611854906120b7565b80156118a15780601f10611876576101008083540402835291602001916118a1565b820191906000526020600020905b81548152906001019060200180831161188457829003601f168201915b5050505050905080516014036119045760006118bc82611763565b9050826001600160a01b0316816001600160a01b031614611902576040516378a6c03d60e11b8152600481018590526001600160a01b03821660248201526044016105bf565b505b61194c836040518060400160405280600781526020016636b0b730b3b2b960c91b81525084604051602001610f94919060609190911b6001600160601b031916815260140190565b505050565b60008381526002602090815260408220805460018101825590835291200161197a828483612295565b50827fb067630e3908f166069c77766250c553414e2745e742a562d533f29744a91a7383836040516119ad9291906121f7565b60405180910390a2505050565b6000546001600160a01b036101009091041633146105ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105bf565b611a22611c78565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b806001600085815260200190815260200160002083604051611a8e9190612355565b90815260200160405180910390209081611aa89190612371565b50827f59ae30478c6dc6ad258000ec5c1e2da773a457572397f6b85ddd54ab719ecd5483836040516119ad929190612431565b8060005b818110156105d55736848483818110611afa57611afa612144565b9050602002810190611b0c919061245f565b9050611b9886611b1c838061215a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b5e92505050602085018561215a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a6c92505050565b50600101611adf565b8060005b818110156105d557611bda85858584818110611bc357611bc3612144565b9050602002810190611bd5919061215a565b611951565b600101611ba5565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b611c436117af565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a4f3390565b60005460ff166105ec5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105bf565b600060208284031215611cd357600080fd5b5035919050565b60008083601f840112611cec57600080fd5b50813567ffffffffffffffff811115611d0457600080fd5b602083019150836020828501011115611d1c57600080fd5b9250929050565b600080600060408486031215611d3857600080fd5b83359250602084013567ffffffffffffffff811115611d5657600080fd5b611d6286828701611cda565b9497909650939450505050565b60008060408385031215611d8257600080fd5b50508035926020909101359150565b60005b83811015611dac578181015183820152602001611d94565b50506000910152565b60008151808452611dcd816020860160208601611d91565b601f01601f19169290920160200192915050565b602081526000610e186020830184611db5565b60008083601f840112611e0657600080fd5b50813567ffffffffffffffff811115611e1e57600080fd5b6020830191508360208260051b8501011115611d1c57600080fd5b600080600060408486031215611e4e57600080fd5b83359250602084013567ffffffffffffffff811115611e6c57600080fd5b611d6286828701611df4565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015611ecf57603f19888603018452611ebd858351611db5565b94509285019290850190600101611ea1565b5092979650505050505050565b600080600080600060608688031215611ef457600080fd5b85359450602086013567ffffffffffffffff80821115611f1357600080fd5b611f1f89838a01611cda565b90965094506040880135915080821115611f3857600080fd5b50611f4588828901611cda565b969995985093965092949392505050565b600080600080600060608688031215611f6e57600080fd5b85359450602086013567ffffffffffffffff80821115611f8d57600080fd5b611f9989838a01611df4565b90965094506040880135915080821115611fb257600080fd5b50611f4588828901611df4565b6001600160a01b0381168114610a9b57600080fd5b600080600060408486031215611fe957600080fd5b8335611ff481611fbf565b9250602084013567ffffffffffffffff811115611d5657600080fd5b6000806040838503121561202357600080fd5b823561202e81611fbf565b9150602083013561203e81611fbf565b809150509250929050565b6000806040838503121561205c57600080fd5b82359150602083013561203e81611fbf565b60008060006060848603121561208357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156120ac57600080fd5b813561048f81611fbf565b600181811c908216806120cb57607f821691505b6020821081036120eb57634e487b7160e01b600052602260045260246000fd5b50919050565b6636b0b730b3b2b960c91b815260070190565b60208082526010908201526f2737ba103634b9ba1036b0b730b3b2b960811b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261217157600080fd5b83018035915067ffffffffffffffff82111561218c57600080fd5b602001915036819003821315611d1c57600080fd5b8183823760009101908152919050565b6000602082840312156121c357600080fd5b815161048f81611fbf565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610d106020830184866121ce565b60006020828403121561221d57600080fd5b5051919050565b81810381811115610e1b57634e487b7160e01b600052601160045260246000fd5b601f82111561194c576000816000526020600020601f850160051c8101602086101561226e5750805b601f850160051c820191505b8181101561228d5782815560010161227a565b505050505050565b67ffffffffffffffff8311156122ad576122ad61212e565b6122c1836122bb83546120b7565b83612245565b6000601f8411600181146122f557600085156122dd5750838201355b600019600387901b1c1916600186901b1783556105d5565b600083815260209020601f19861690835b828110156123265786850135825560209485019460019092019101612306565b50868210156123435760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008251612367818460208701611d91565b9190910192915050565b815167ffffffffffffffff81111561238b5761238b61212e565b61239f8161239984546120b7565b84612245565b602080601f8311600181146123d457600084156123bc5750858301515b600019600386901b1c1916600185901b17855561228d565b600085815260208120601f198616915b82811015612403578886015182559484019460019091019084016123e4565b50858210156124215787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815260006124446040830185611db5565b82810360208401526124568185611db5565b95945050505050565b60008235603e1983360301811261236757600080fdfea2646970667358221220db6aca8b1dc54087d11400b442c45f398a7f0ab7c1fcaae17d5bae216bfcf67964736f6c63430008170033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.