Goerli Testnet

Contract

0x9403E5361CA3706daf640eCE4476ade6538BFeCC
Source Code

Overview

ETH Balance

0 ETH

Multi Chain

Multichain Addresses

N/A
Transaction Hash
Method
Block
From
To
Value
0x6104966182170072022-12-28 19:30:48347 days 17 hrs ago1672255848IN
 Create: OperatorFiltererLib
0 ETH0.000000410.00136152

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
93710502023-07-19 12:17:48145 days 54 mins ago1689769068
0x9403E5...538BFeCC
0 ETH
93710232023-07-19 12:12:00145 days 59 mins ago1689768720
0x9403E5...538BFeCC
0 ETH
93710182023-07-19 12:10:36145 days 1 hr ago1689768636
0x9403E5...538BFeCC
0 ETH
93666722023-07-18 17:19:24145 days 19 hrs ago1689700764
0x9403E5...538BFeCC
0 ETH
93666152023-07-18 17:04:24145 days 20 hrs ago1689699864
0x9403E5...538BFeCC
0 ETH
93666062023-07-18 17:02:00145 days 20 hrs ago1689699720
0x9403E5...538BFeCC
0 ETH
92282522023-06-23 18:32:36170 days 18 hrs ago1687545156
0x9403E5...538BFeCC
0 ETH
92282162023-06-23 18:24:00170 days 18 hrs ago1687544640
0x9403E5...538BFeCC
0 ETH
92281922023-06-23 18:18:00170 days 18 hrs ago1687544280
0x9403E5...538BFeCC
0 ETH
92267322023-06-23 12:04:24171 days 1 hr ago1687521864
0x9403E5...538BFeCC
0 ETH
92267312023-06-23 12:04:12171 days 1 hr ago1687521852
0x9403E5...538BFeCC
0 ETH
92267302023-06-23 12:04:00171 days 1 hr ago1687521840
0x9403E5...538BFeCC
0 ETH
92267292023-06-23 12:03:48171 days 1 hr ago1687521828
0x9403E5...538BFeCC
0 ETH
92267292023-06-23 12:03:48171 days 1 hr ago1687521828
0x9403E5...538BFeCC
0 ETH
92267282023-06-23 12:03:24171 days 1 hr ago1687521804
0x9403E5...538BFeCC
0 ETH
92267272023-06-23 12:03:12171 days 1 hr ago1687521792
0x9403E5...538BFeCC
0 ETH
92267262023-06-23 12:03:00171 days 1 hr ago1687521780
0x9403E5...538BFeCC
0 ETH
92267252023-06-23 12:02:48171 days 1 hr ago1687521768
0x9403E5...538BFeCC
0 ETH
92267242023-06-23 12:02:24171 days 1 hr ago1687521744
0x9403E5...538BFeCC
0 ETH
92260012023-06-23 9:05:00171 days 4 hrs ago1687511100
0x9403E5...538BFeCC
0 ETH
92260002023-06-23 9:04:36171 days 4 hrs ago1687511076
0x9403E5...538BFeCC
0 ETH
92259992023-06-23 9:04:24171 days 4 hrs ago1687511064
0x9403E5...538BFeCC
0 ETH
92259932023-06-23 9:02:24171 days 4 hrs ago1687510944
0x9403E5...538BFeCC
0 ETH
92259282023-06-23 8:46:48171 days 4 hrs ago1687510008
0x9403E5...538BFeCC
0 ETH
92225332023-06-22 18:15:48171 days 18 hrs ago1687457748
0x9403E5...538BFeCC
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OperatorFiltererLib

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-12-28
*/

// Sources flattened with hardhat v2.12.0 https://hardhat.org

// File contracts/opensea/IOperatorFilterRegistry.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
  function isOperatorAllowed(
    address registrant,
    address operator
  ) external view returns (bool);

  function register(address registrant) external;

  function unregister(address addr) external;

  function registerAndSubscribe(
    address registrant,
    address subscription
  ) external;

  function registerAndCopyEntries(
    address registrant,
    address registrantToCopy
  ) external;

  function updateOperator(
    address registrant,
    address operator,
    bool filtered
  ) external;

  function updateOperators(
    address registrant,
    address[] calldata operators,
    bool filtered
  ) external;

  function updateCodeHash(
    address registrant,
    bytes32 codehash,
    bool filtered
  ) external;

  function updateCodeHashes(
    address registrant,
    bytes32[] calldata codeHashes,
    bool filtered
  ) external;

  function subscribe(
    address registrant,
    address registrantToSubscribe
  ) external;

  function unsubscribe(address registrant, bool copyExistingEntries) external;

  function subscriptionOf(address addr) external returns (address registrant);

  function subscribers(address registrant) external returns (address[] memory);

  function subscriberAt(
    address registrant,
    uint256 index
  ) external returns (address);

  function copyEntriesOf(address registrant, address registrantToCopy) external;

  function isOperatorFiltered(
    address registrant,
    address operator
  ) external view returns (bool);

  function isCodeHashOfFiltered(
    address registrant,
    address operatorWithCode
  ) external view returns (bool);

  function isCodeHashFiltered(
    address registrant,
    bytes32 codeHash
  ) external view returns (bool);

  function filteredOperators(
    address addr
  ) external view returns (address[] memory);

  function filteredCodeHashes(
    address addr
  ) external view returns (bytes32[] memory);

  function filteredOperatorAt(
    address registrant,
    uint256 index
  ) external view returns (address);

  function filteredCodeHashAt(
    address registrant,
    uint256 index
  ) external view returns (bytes32);

  function isRegistered(address addr) external view returns (bool);

  function codeHashOf(address addr) external view returns (bytes32);
}

// File contracts/libraries/OperatorFiltererLib.sol

pragma solidity ^0.8.11;

library OperatorFiltererLib {
  error OperatorNotAllowed(address operator);

  IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
    IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

  function initializeFilter(
    address registrant,
    address subscriptionOrRegistrantToCopy,
    bool subscribe
  ) public {
    // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
    // will not revert, but the contract will need to be registered with the registry once it is deployed in
    // order for the modifier to filter addresses.
    if (subscribe) {
      OPERATOR_FILTER_REGISTRY.registerAndSubscribe(
        registrant,
        subscriptionOrRegistrantToCopy
      );
    } else {
      if (subscriptionOrRegistrantToCopy != address(0)) {
        OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(
          registrant,
          subscriptionOrRegistrantToCopy
        );
      } else {
        OPERATOR_FILTER_REGISTRY.register(registrant);
      }
    }
  }

  function onlyAllowedOperator(
    address registrant,
    address msgSender,
    address from
  ) public view {
    // Allow spending tokens from addresses with balance
    // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
    // from an EOA.
    if (from == msgSender) {
      return;
    }
    if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(registrant, msgSender)) {
      revert OperatorNotAllowed(msgSender);
    }
  }

  function onlyAllowedOperatorApproval(
    address registrant,
    address operator
  ) public view {
    if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(registrant, operator)) {
      revert OperatorNotAllowed(operator);
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"IOperatorFilterRegistry"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"registrant","type":"address"},{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"address","name":"from","type":"address"}],"name":"onlyAllowedOperator","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"registrant","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"onlyAllowedOperatorApproval","outputs":[],"stateMutability":"view","type":"function"}]

61049661003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c806341f434341461005b5780634e6041511461008c57806373d580ed146100a157806375664b0f146100c1575b600080fd5b6100706daaeb6d7670e522a718067333cd4e81565b6040516001600160a01b03909116815260200160405180910390f35b61009f61009a36600461036e565b6100d4565b005b8180156100ad57600080fd5b5061009f6100bc3660046103c2565b6101a2565b61009f6100cf366004610409565b6102a8565b816001600160a01b0316816001600160a01b0316036100f257505050565b604051633185c44d60e21b81526001600160a01b038085166004830152831660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561014c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610170919061043c565b61019d57604051633b79c77360e21b81526001600160a01b03831660048201526024015b60405180910390fd5b505050565b801561021d57604051633e9f1edf60e11b81526001600160a01b038085166004830152831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b15801561020057600080fd5b505af1158015610214573d6000803e3d6000fd5b50505050505050565b6001600160a01b0382161561026e5760405163a0af290360e01b81526001600160a01b038085166004830152831660248201526daaeb6d7670e522a718067333cd4e9063a0af2903906044016101e6565b604051632210724360e11b81526001600160a01b03841660048201526daaeb6d7670e522a718067333cd4e90634420e486906024016101e6565b604051633185c44d60e21b81526001600160a01b038084166004830152821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610302573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610326919061043c565b61034e57604051633b79c77360e21b81526001600160a01b0382166004820152602401610194565b5050565b80356001600160a01b038116811461036957600080fd5b919050565b60008060006060848603121561038357600080fd5b61038c84610352565b925061039a60208501610352565b91506103a860408501610352565b90509250925092565b80151581146103bf57600080fd5b50565b6000806000606084860312156103d757600080fd5b6103e084610352565b92506103ee60208501610352565b915060408401356103fe816103b1565b809150509250925092565b6000806040838503121561041c57600080fd5b61042583610352565b915061043360208401610352565b90509250929050565b60006020828403121561044e57600080fd5b8151610459816103b1565b939250505056fea26469706673582212205ba475177204356747a1819dbbf5f0fa65e74881f769631fc476a0db97268e2c64736f6c634300080d0033

Deployed Bytecode

0x739403e5361ca3706daf640ece4476ade6538bfecc30146080604052600436106100565760003560e01c806341f434341461005b5780634e6041511461008c57806373d580ed146100a157806375664b0f146100c1575b600080fd5b6100706daaeb6d7670e522a718067333cd4e81565b6040516001600160a01b03909116815260200160405180910390f35b61009f61009a36600461036e565b6100d4565b005b8180156100ad57600080fd5b5061009f6100bc3660046103c2565b6101a2565b61009f6100cf366004610409565b6102a8565b816001600160a01b0316816001600160a01b0316036100f257505050565b604051633185c44d60e21b81526001600160a01b038085166004830152831660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561014c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610170919061043c565b61019d57604051633b79c77360e21b81526001600160a01b03831660048201526024015b60405180910390fd5b505050565b801561021d57604051633e9f1edf60e11b81526001600160a01b038085166004830152831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b15801561020057600080fd5b505af1158015610214573d6000803e3d6000fd5b50505050505050565b6001600160a01b0382161561026e5760405163a0af290360e01b81526001600160a01b038085166004830152831660248201526daaeb6d7670e522a718067333cd4e9063a0af2903906044016101e6565b604051632210724360e11b81526001600160a01b03841660048201526daaeb6d7670e522a718067333cd4e90634420e486906024016101e6565b604051633185c44d60e21b81526001600160a01b038084166004830152821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610302573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610326919061043c565b61034e57604051633b79c77360e21b81526001600160a01b0382166004820152602401610194565b5050565b80356001600160a01b038116811461036957600080fd5b919050565b60008060006060848603121561038357600080fd5b61038c84610352565b925061039a60208501610352565b91506103a860408501610352565b90509250925092565b80151581146103bf57600080fd5b50565b6000806000606084860312156103d757600080fd5b6103e084610352565b92506103ee60208501610352565b915060408401356103fe816103b1565b809150509250925092565b6000806040838503121561041c57600080fd5b61042583610352565b915061043360208401610352565b90509250929050565b60006020828403121561044e57600080fd5b8151610459816103b1565b939250505056fea26469706673582212205ba475177204356747a1819dbbf5f0fa65e74881f769631fc476a0db97268e2c64736f6c634300080d0033

Deployed Bytecode Sourcemap

2675:1819:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2757:139;;2853:42;2757:139;;;;;-1:-1:-1;;;;;217:32:1;;;199:51;;187:2;172:18;2757:139:0;;;;;;;3758:490;;;;;;:::i;:::-;;:::i;:::-;;2903:849;;;;;;;;;;-1:-1:-1;2903:849:0;;;;;:::i;:::-;;:::i;4254:237::-;;;;;;:::i;:::-;;:::i;3758:490::-;4078:9;-1:-1:-1;;;;;4070:17:0;:4;-1:-1:-1;;;;;4070:17:0;;4066:46;;3758:490;;;:::o;4066:46::-;4123:65;;-1:-1:-1;;;4123:65:0;;-1:-1:-1;;;;;1790:15:1;;;4123:65:0;;;1772:34:1;1842:15;;1822:18;;;1815:43;2853:42:0;;4123;;1707:18:1;;4123:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4118:125;;4206:29;;-1:-1:-1;;;4206:29:0;;-1:-1:-1;;;;;217:32:1;;4206:29:0;;;199:51:1;172:18;;4206:29:0;;;;;;;;4118:125;3758:490;;;:::o;2903:849::-;3314:9;3310:437;;;3334:116;;-1:-1:-1;;;3334:116:0;;-1:-1:-1;;;;;1790:15:1;;;3334:116:0;;;1772:34:1;1842:15;;1822:18;;;1815:43;2853:42:0;;3334:45;;1707:18:1;;3334:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3758:490;;;:::o;3310:437::-;-1:-1:-1;;;;;3477:44:0;;;3473:267;;3534:124;;-1:-1:-1;;;3534:124:0;;-1:-1:-1;;;;;1790:15:1;;;3534:124:0;;;1772:34:1;1842:15;;1822:18;;;1815:43;2853:42:0;;3534:47;;1707:18:1;;3534:124:0;1560:304:1;3473:267:0;3685:45;;-1:-1:-1;;;3685:45:0;;-1:-1:-1;;;;;217:32:1;;3685:45:0;;;199:51:1;2853:42:0;;3685:33;;172:18:1;;3685:45:0;14:242:1;4254:237:0;4368:64;;-1:-1:-1;;;4368:64:0;;-1:-1:-1;;;;;1790:15:1;;;4368:64:0;;;1772:34:1;1842:15;;1822:18;;;1815:43;2853:42:0;;4368;;1707:18:1;;4368:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4363:123;;4450:28;;-1:-1:-1;;;4450:28:0;;-1:-1:-1;;;;;217:32:1;;4450:28:0;;;199:51:1;172:18;;4450:28:0;14:242:1;4363:123:0;4254:237;;:::o;261:173:1:-;329:20;;-1:-1:-1;;;;;378:31:1;;368:42;;358:70;;424:1;421;414:12;358:70;261:173;;;:::o;439:334::-;516:6;524;532;585:2;573:9;564:7;560:23;556:32;553:52;;;601:1;598;591:12;553:52;624:29;643:9;624:29;:::i;:::-;614:39;;672:38;706:2;695:9;691:18;672:38;:::i;:::-;662:48;;729:38;763:2;752:9;748:18;729:38;:::i;:::-;719:48;;439:334;;;;;:::o;778:118::-;864:5;857:13;850:21;843:5;840:32;830:60;;886:1;883;876:12;830:60;778:118;:::o;901:389::-;975:6;983;991;1044:2;1032:9;1023:7;1019:23;1015:32;1012:52;;;1060:1;1057;1050:12;1012:52;1083:29;1102:9;1083:29;:::i;:::-;1073:39;;1131:38;1165:2;1154:9;1150:18;1131:38;:::i;:::-;1121:48;;1219:2;1208:9;1204:18;1191:32;1232:28;1254:5;1232:28;:::i;:::-;1279:5;1269:15;;;901:389;;;;;:::o;1295:260::-;1363:6;1371;1424:2;1412:9;1403:7;1399:23;1395:32;1392:52;;;1440:1;1437;1430:12;1392:52;1463:29;1482:9;1463:29;:::i;:::-;1453:39;;1511:38;1545:2;1534:9;1530:18;1511:38;:::i;:::-;1501:48;;1295:260;;;;;:::o;1869:245::-;1936:6;1989:2;1977:9;1968:7;1964:23;1960:32;1957:52;;;2005:1;2002;1995:12;1957:52;2037:9;2031:16;2056:28;2078:5;2056:28;:::i;:::-;2103:5;1869:245;-1:-1:-1;;;1869:245:1:o

Swarm Source

ipfs://5ba475177204356747a1819dbbf5f0fa65e74881f769631fc476a0db97268e2c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.