Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 606 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mark Ids | 18041573 | 401 days ago | IN | 0 ETH | 0.00132235 | ||||
Unmark Ids | 18034431 | 402 days ago | IN | 0 ETH | 0.00076719 | ||||
Unmark Ids | 18034429 | 402 days ago | IN | 0 ETH | 0.0008847 | ||||
Mark Ids | 18034427 | 402 days ago | IN | 0 ETH | 0.00075162 | ||||
Unmark Ids | 18027286 | 403 days ago | IN | 0 ETH | 0.00100489 | ||||
Mark Ids | 18027285 | 403 days ago | IN | 0 ETH | 0.00107154 | ||||
Mark Ids | 18020146 | 404 days ago | IN | 0 ETH | 0.00119511 | ||||
Mark Ids | 18020144 | 404 days ago | IN | 0 ETH | 0.00178179 | ||||
Unmark Ids | 18013016 | 405 days ago | IN | 0 ETH | 0.00064161 | ||||
Mark Ids | 18013014 | 405 days ago | IN | 0 ETH | 0.00082205 | ||||
Unmark Ids | 18005874 | 406 days ago | IN | 0 ETH | 0.00064952 | ||||
Mark Ids | 18005872 | 406 days ago | IN | 0 ETH | 0.00069765 | ||||
Unmark Ids | 17998711 | 407 days ago | IN | 0 ETH | 0.00047548 | ||||
Unmark Ids | 17991582 | 408 days ago | IN | 0 ETH | 0.00057949 | ||||
Unmark Ids | 17991581 | 408 days ago | IN | 0 ETH | 0.00065816 | ||||
Unmark Ids | 17991579 | 408 days ago | IN | 0 ETH | 0.0006751 | ||||
Unmark Ids | 17984435 | 409 days ago | IN | 0 ETH | 0.0009189 | ||||
Mark Ids | 17984434 | 409 days ago | IN | 0 ETH | 0.00144128 | ||||
Update Marked NF... | 17984433 | 409 days ago | IN | 0 ETH | 0.00109304 | ||||
Unmark Ids | 17984432 | 409 days ago | IN | 0 ETH | 0.0009695 | ||||
Mark Ids | 17977279 | 410 days ago | IN | 0 ETH | 0.00051524 | ||||
Mark Ids | 17977278 | 410 days ago | IN | 0 ETH | 0.00081377 | ||||
Unmark Ids | 17970126 | 411 days ago | IN | 0 ETH | 0.00093656 | ||||
Mark Ids | 17970125 | 411 days ago | IN | 0 ETH | 0.00079006 | ||||
Update Marked NF... | 17970124 | 411 days ago | IN | 0 ETH | 0.00147792 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MarkedNFTFilter
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import {BitMaps} from "@openzeppelin/contracts/utils/structs/BitMaps.sol"; import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import {IERC165} from "@openzeppelin/contracts/interfaces/IERC165.sol"; import {IExternalFilter} from "./IExternalFilter.sol"; contract MarkedNFTFilter is Ownable, ERC165, IExternalFilter { using BitMaps for BitMaps.BitMap; mapping(address => BitMaps.BitMap) private collections; mapping(address => uint256) private markedCount; mapping(address => bool) private enabled; /** * @notice Pools can nominate an external contract to approve whether NFT IDs are accepted. * This is typically used to implement some kind of dynamic block list, e.g. stolen NFTs. * @param collection NFT contract address * @param nftIds List of NFT IDs to check * @return allowed True if swap (pool buys) is allowed */ function areNFTsAllowed(address collection, uint256[] calldata nftIds, bytes calldata /* context */) external view returns (bool allowed) { if (!enabled[collection]) { return true; } uint256 length = nftIds.length; // this is a blacklist, so if we did not index the collection, it's allowed for (uint256 i; i < length;) { if (collections[collection].get(nftIds[i])) { return false; } unchecked { ++i; } } return true; } /** * @notice Returns marked NFTs in the same positions as the input array * @param collection NFT contract address * @param nftIds List of NFT IDs to check * @return marked bool[] of marked NFTs */ function getMarkedNFTs(address collection, uint256[] calldata nftIds) external view returns (bool[] memory marked) { uint256 length = nftIds.length; marked = new bool[](length); for (uint256 i; i < length;) { if (collections[collection].get(nftIds[i])) { marked[i] = true; } else { marked[i] = false; } unchecked { ++i; } } return marked; } function getMarkedCount(address collection) external view returns (uint256 count) { return markedCount[collection]; } function supportsInterface(bytes4 interfaceId) public view virtual override (ERC165, IERC165) returns (bool) { return interfaceId == type(IExternalFilter).interfaceId || super.supportsInterface(interfaceId); } function updateMarkedNFTs(address collection, uint256[] calldata toMark, uint256[] calldata toUnmark) public onlyOwner { markIds(collection, toMark); unmarkIds(collection, toUnmark); } function markIds(address collection, uint256[] calldata nftIds) public onlyOwner { uint256 length = nftIds.length; for (uint256 i; i < length;) { if (!collections[collection].get(nftIds[i])) { collections[collection].set(nftIds[i]); markedCount[collection]++; } unchecked { ++i; } } } function unmarkIds(address collection, uint256[] calldata nftIds) public onlyOwner { uint256 length = nftIds.length; for (uint256 i; i < length;) { if (collections[collection].get(nftIds[i])) { collections[collection].unset(nftIds[i]); markedCount[collection]--; } unchecked { ++i; } } } function isEnabled(address collection) external view returns (bool) { return enabled[collection]; } function disableCollections(address[] calldata toDisable) public onlyOwner { uint256 length = toDisable.length; for (uint256 i; i < length;) { // we cannot free the BitMap, so just set this flag to false delete enabled[toDisable[i]]; unchecked { ++i; } } } function enableCollections(address[] calldata toEnable) public onlyOwner { uint256 length = toEnable.length; for (uint256 i; i < length;) { enabled[toEnable[i]] = true; unchecked { ++i; } } } function toggleCollections(address[] calldata toEnable, address[] calldata toDisable) public onlyOwner { enableCollections(toEnable); disableCollections(toDisable); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.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 anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol) pragma solidity ^0.8.0; import "../utils/introspection/IERC165.sol";
// 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// 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.8.0) (utils/structs/BitMaps.sol) pragma solidity ^0.8.0; /** * @dev Library for managing uint256 to bool mapping in a compact and efficient way, providing the keys are sequential. * Largely inspired by Uniswap's https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol[merkle-distributor]. */ library BitMaps { struct BitMap { mapping(uint256 => uint256) _data; } /** * @dev Returns whether the bit at `index` is set. */ function get(BitMap storage bitmap, uint256 index) internal view returns (bool) { uint256 bucket = index >> 8; uint256 mask = 1 << (index & 0xff); return bitmap._data[bucket] & mask != 0; } /** * @dev Sets the bit at `index` to the boolean `value`. */ function setTo( BitMap storage bitmap, uint256 index, bool value ) internal { if (value) { set(bitmap, index); } else { unset(bitmap, index); } } /** * @dev Sets the bit at `index`. */ function set(BitMap storage bitmap, uint256 index) internal { uint256 bucket = index >> 8; uint256 mask = 1 << (index & 0xff); bitmap._data[bucket] |= mask; } /** * @dev Unsets the bit at `index`. */ function unset(BitMap storage bitmap, uint256 index) internal { uint256 bucket = index >> 8; uint256 mask = 1 << (index & 0xff); bitmap._data[bucket] &= ~mask; } }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.0; import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import {IERC165} from "@openzeppelin/contracts/interfaces/IERC165.sol"; interface IExternalFilter is IERC165 { /** * @notice Pools can nominate an external contract to approve whether NFT IDs are accepted. * This is typically used to implement some kind of dynamic block list, e.g. stolen NFTs. * @param collection NFT contract address * @param nftIds List of NFT IDs to check * @return allowed True if swap (pool buys) is allowed */ function areNFTsAllowed(address collection, uint256[] calldata nftIds, bytes calldata context) external returns (bool allowed); }
{ "remappings": [ "@openzeppelin/=lib/openzeppelin-contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"areNFTsAllowed","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"toDisable","type":"address[]"}],"name":"disableCollections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"toEnable","type":"address[]"}],"name":"enableCollections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"getMarkedCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"getMarkedNFTs","outputs":[{"internalType":"bool[]","name":"marked","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"isEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"markIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"toEnable","type":"address[]"},{"internalType":"address[]","name":"toDisable","type":"address[]"}],"name":"toggleCollections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"unmarkIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256[]","name":"toMark","type":"uint256[]"},{"internalType":"uint256[]","name":"toUnmark","type":"uint256[]"}],"name":"updateMarkedNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610c348061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806380ab33161161008c5780638da5cb5b116100665780638da5cb5b146101ea5780639015d37114610205578063c4ff4dfe14610231578063f2fde38b1461024457600080fd5b806380ab3316146101b1578063840608ca146101c457806384db9549146101d757600080fd5b806332a303a2116100c857806332a303a21461013f5780634a071bb31461015f5780636d63bbbf14610196578063715018a6146101a957600080fd5b806301ffc9a7146100ef5780630c1fb48c146101175780630e7ba72e1461012c575b600080fd5b6101026100fd366004610865565b610257565b60405190151581526020015b60405180910390f35b61012a6101253660046108e2565b61028e565b005b61012a61013a366004610940565b610305565b61015261014d3660046109c1565b61032a565b60405161010e9190610a14565b61018861016d366004610a5a565b6001600160a01b031660009081526002602052604090205490565b60405190815260200161010e565b61012a6101a4366004610a75565b61043c565b61012a610458565b6101026101bf366004610ae1565b61046c565b61012a6101d23660046108e2565b610523565b61012a6101e53660046109c1565b61058b565b6000546040516001600160a01b03909116815260200161010e565b610102610213366004610a5a565b6001600160a01b031660009081526003602052604090205460ff1690565b61012a61023f3660046109c1565b610688565b61012a610252366004610a5a565b61073d565b60006001600160e01b03198216634055998b60e11b148061028857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6102966107bb565b8060005b818110156102ff576001600360008686858181106102ba576102ba610b8c565b90506020020160208101906102cf9190610a5a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905560010161029a565b50505050565b61030d6107bb565b610318858585610688565b61032385838361058b565b5050505050565b6060818067ffffffffffffffff81111561034657610346610ba2565b60405190808252806020026020018201604052801561036f578160200160208202803683370190505b50915060005b81811015610433576103d885858381811061039257610392610b8c565b6001600160a01b038a16600090815260016020908152604090912093910201359050600881901c600090815260208390526040902054600160ff83161b16151592915050565b156104065760018382815181106103f1576103f1610b8c565b9115156020928302919091019091015261042b565b600083828151811061041a5761041a610b8c565b911515602092830291909101909101525b600101610375565b50509392505050565b6104446107bb565b61044e848461028e565b6102ff8282610523565b6104606107bb565b61046a6000610815565b565b6001600160a01b03851660009081526003602052604081205460ff166104945750600161051a565b8360005b81811015610513576104fb8787838181106104b5576104b5610b8c565b6001600160a01b038c16600090815260016020908152604090912093910201359050600881901c600090815260208390526040902054600160ff83161b16151592915050565b1561050b5760009250505061051a565b600101610498565b5060019150505b95945050505050565b61052b6107bb565b8060005b818110156102ff576003600085858481811061054d5761054d610b8c565b90506020020160208101906105629190610a5a565b6001600160a01b031681526020810191909152604001600020805460ff1916905560010161052f565b6105936107bb565b8060005b81811015610323576105fa8484838181106105b4576105b4610b8c565b6001600160a01b038916600090815260016020908152604090912093910201359050600881901c600090815260208390526040902054600160ff83161b16151592915050565b156106805761065684848381811061061457610614610b8c565b6001600160a01b038916600090815260016020818152604080842094820290960135600881901c8452939052939020805460ff9092169390931b191690915550565b6001600160a01b038516600090815260026020526040812080549161067a83610bce565b91905055505b600101610597565b6106906107bb565b8060005b81811015610323576106b18484838181106105b4576105b4610b8c565b6107355761070b8484838181106106ca576106ca610b8c565b6001600160a01b038916600090815260016020818152604080842094820290960135600881901c8452939052939020805460ff9092169390931b1790915550565b6001600160a01b038516600090815260026020526040812080549161072f83610be5565b91905055505b600101610694565b6107456107bb565b6001600160a01b0381166107af5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6107b881610815565b50565b6000546001600160a01b0316331461046a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561087757600080fd5b81356001600160e01b03198116811461088f57600080fd5b9392505050565b60008083601f8401126108a857600080fd5b50813567ffffffffffffffff8111156108c057600080fd5b6020830191508360208260051b85010111156108db57600080fd5b9250929050565b600080602083850312156108f557600080fd5b823567ffffffffffffffff81111561090c57600080fd5b61091885828601610896565b90969095509350505050565b80356001600160a01b038116811461093b57600080fd5b919050565b60008060008060006060868803121561095857600080fd5b61096186610924565b9450602086013567ffffffffffffffff8082111561097e57600080fd5b61098a89838a01610896565b909650945060408801359150808211156109a357600080fd5b506109b088828901610896565b969995985093965092949392505050565b6000806000604084860312156109d657600080fd5b6109df84610924565b9250602084013567ffffffffffffffff8111156109fb57600080fd5b610a0786828701610896565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015610a4e578351151583529284019291840191600101610a30565b50909695505050505050565b600060208284031215610a6c57600080fd5b61088f82610924565b60008060008060408587031215610a8b57600080fd5b843567ffffffffffffffff80821115610aa357600080fd5b610aaf88838901610896565b90965094506020870135915080821115610ac857600080fd5b50610ad587828801610896565b95989497509550505050565b600080600080600060608688031215610af957600080fd5b610b0286610924565b9450602086013567ffffffffffffffff80821115610b1f57600080fd5b610b2b89838a01610896565b90965094506040880135915080821115610b4457600080fd5b818801915088601f830112610b5857600080fd5b813581811115610b6757600080fd5b896020828501011115610b7957600080fd5b9699959850939650602001949392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081610bdd57610bdd610bb8565b506000190190565b600060018201610bf757610bf7610bb8565b506001019056fea2646970667358221220ba7b066fccd0e11efccec3fb32d92c57389cf750881db2c4a21645e9060f2dc064736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806380ab33161161008c5780638da5cb5b116100665780638da5cb5b146101ea5780639015d37114610205578063c4ff4dfe14610231578063f2fde38b1461024457600080fd5b806380ab3316146101b1578063840608ca146101c457806384db9549146101d757600080fd5b806332a303a2116100c857806332a303a21461013f5780634a071bb31461015f5780636d63bbbf14610196578063715018a6146101a957600080fd5b806301ffc9a7146100ef5780630c1fb48c146101175780630e7ba72e1461012c575b600080fd5b6101026100fd366004610865565b610257565b60405190151581526020015b60405180910390f35b61012a6101253660046108e2565b61028e565b005b61012a61013a366004610940565b610305565b61015261014d3660046109c1565b61032a565b60405161010e9190610a14565b61018861016d366004610a5a565b6001600160a01b031660009081526002602052604090205490565b60405190815260200161010e565b61012a6101a4366004610a75565b61043c565b61012a610458565b6101026101bf366004610ae1565b61046c565b61012a6101d23660046108e2565b610523565b61012a6101e53660046109c1565b61058b565b6000546040516001600160a01b03909116815260200161010e565b610102610213366004610a5a565b6001600160a01b031660009081526003602052604090205460ff1690565b61012a61023f3660046109c1565b610688565b61012a610252366004610a5a565b61073d565b60006001600160e01b03198216634055998b60e11b148061028857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6102966107bb565b8060005b818110156102ff576001600360008686858181106102ba576102ba610b8c565b90506020020160208101906102cf9190610a5a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905560010161029a565b50505050565b61030d6107bb565b610318858585610688565b61032385838361058b565b5050505050565b6060818067ffffffffffffffff81111561034657610346610ba2565b60405190808252806020026020018201604052801561036f578160200160208202803683370190505b50915060005b81811015610433576103d885858381811061039257610392610b8c565b6001600160a01b038a16600090815260016020908152604090912093910201359050600881901c600090815260208390526040902054600160ff83161b16151592915050565b156104065760018382815181106103f1576103f1610b8c565b9115156020928302919091019091015261042b565b600083828151811061041a5761041a610b8c565b911515602092830291909101909101525b600101610375565b50509392505050565b6104446107bb565b61044e848461028e565b6102ff8282610523565b6104606107bb565b61046a6000610815565b565b6001600160a01b03851660009081526003602052604081205460ff166104945750600161051a565b8360005b81811015610513576104fb8787838181106104b5576104b5610b8c565b6001600160a01b038c16600090815260016020908152604090912093910201359050600881901c600090815260208390526040902054600160ff83161b16151592915050565b1561050b5760009250505061051a565b600101610498565b5060019150505b95945050505050565b61052b6107bb565b8060005b818110156102ff576003600085858481811061054d5761054d610b8c565b90506020020160208101906105629190610a5a565b6001600160a01b031681526020810191909152604001600020805460ff1916905560010161052f565b6105936107bb565b8060005b81811015610323576105fa8484838181106105b4576105b4610b8c565b6001600160a01b038916600090815260016020908152604090912093910201359050600881901c600090815260208390526040902054600160ff83161b16151592915050565b156106805761065684848381811061061457610614610b8c565b6001600160a01b038916600090815260016020818152604080842094820290960135600881901c8452939052939020805460ff9092169390931b191690915550565b6001600160a01b038516600090815260026020526040812080549161067a83610bce565b91905055505b600101610597565b6106906107bb565b8060005b81811015610323576106b18484838181106105b4576105b4610b8c565b6107355761070b8484838181106106ca576106ca610b8c565b6001600160a01b038916600090815260016020818152604080842094820290960135600881901c8452939052939020805460ff9092169390931b1790915550565b6001600160a01b038516600090815260026020526040812080549161072f83610be5565b91905055505b600101610694565b6107456107bb565b6001600160a01b0381166107af5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6107b881610815565b50565b6000546001600160a01b0316331461046a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561087757600080fd5b81356001600160e01b03198116811461088f57600080fd5b9392505050565b60008083601f8401126108a857600080fd5b50813567ffffffffffffffff8111156108c057600080fd5b6020830191508360208260051b85010111156108db57600080fd5b9250929050565b600080602083850312156108f557600080fd5b823567ffffffffffffffff81111561090c57600080fd5b61091885828601610896565b90969095509350505050565b80356001600160a01b038116811461093b57600080fd5b919050565b60008060008060006060868803121561095857600080fd5b61096186610924565b9450602086013567ffffffffffffffff8082111561097e57600080fd5b61098a89838a01610896565b909650945060408801359150808211156109a357600080fd5b506109b088828901610896565b969995985093965092949392505050565b6000806000604084860312156109d657600080fd5b6109df84610924565b9250602084013567ffffffffffffffff8111156109fb57600080fd5b610a0786828701610896565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015610a4e578351151583529284019291840191600101610a30565b50909695505050505050565b600060208284031215610a6c57600080fd5b61088f82610924565b60008060008060408587031215610a8b57600080fd5b843567ffffffffffffffff80821115610aa357600080fd5b610aaf88838901610896565b90965094506020870135915080821115610ac857600080fd5b50610ad587828801610896565b95989497509550505050565b600080600080600060608688031215610af957600080fd5b610b0286610924565b9450602086013567ffffffffffffffff80821115610b1f57600080fd5b610b2b89838a01610896565b90965094506040880135915080821115610b4457600080fd5b818801915088601f830112610b5857600080fd5b813581811115610b6757600080fd5b896020828501011115610b7957600080fd5b9699959850939650602001949392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081610bdd57610bdd610bb8565b506000190190565b600060018201610bf757610bf7610bb8565b506001019056fea2646970667358221220ba7b066fccd0e11efccec3fb32d92c57389cf750881db2c4a21645e9060f2dc064736f6c63430008120033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.