@@ -7,7 +7,7 @@ import "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol";
7
7
import "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol " ;
8
8
import "@openzeppelin/contracts-upgradeable/interfaces/IERC2981Upgradeable.sol " ;
9
9
10
- import "erc721a-upgradeable/contracts/ERC721AUpgradeable .sol " ;
10
+ import "../eip/ERC721AVirtualApprove .sol " ;
11
11
12
12
// ========== Internal imports ==========
13
13
@@ -26,6 +26,9 @@ import "../extension/LazyMint.sol";
26
26
import "../extension/PermissionsEnumerable.sol " ;
27
27
import "../extension/Drop.sol " ;
28
28
29
+ // OpenSea operator filter
30
+ import "../extension/DefaultOperatorFiltererUpgradeable.sol " ;
31
+
29
32
contract DropERC721 is
30
33
Initializable ,
31
34
ContractMetadata ,
@@ -39,6 +42,7 @@ contract DropERC721 is
39
42
Drop ,
40
43
ERC2771ContextUpgradeable ,
41
44
MulticallUpgradeable ,
45
+ DefaultOperatorFiltererUpgradeable ,
42
46
ERC721AUpgradeable
43
47
{
44
48
using StringsUpgradeable for uint256 ;
@@ -86,9 +90,11 @@ contract DropERC721 is
86
90
// Initialize inherited contracts, most base-like -> most derived.
87
91
__ERC2771Context_init (_trustedForwarders);
88
92
__ERC721A_init (_name, _symbol);
93
+ __DefaultOperatorFilterer_init ();
89
94
90
95
_setupContractURI (_contractURI);
91
96
_setupOwner (_defaultAdmin);
97
+ _setOperatorRestriction (true );
92
98
93
99
_setupRole (DEFAULT_ADMIN_ROLE, _defaultAdmin);
94
100
_setupRole (_minterRole, _defaultAdmin);
@@ -280,6 +286,11 @@ contract DropERC721 is
280
286
return hasRole (minterRole, _msgSender ());
281
287
}
282
288
289
+ /// @dev Returns whether operator restriction can be set in the given execution context.
290
+ function _canSetOperatorRestriction () internal virtual override returns (bool ) {
291
+ return hasRole (DEFAULT_ADMIN_ROLE, _msgSender ());
292
+ }
293
+
283
294
/*///////////////////////////////////////////////////////////////
284
295
Miscellaneous
285
296
//////////////////////////////////////////////////////////////*/
@@ -326,6 +337,44 @@ contract DropERC721 is
326
337
}
327
338
}
328
339
340
+ /// @dev See {ERC721-setApprovalForAll}.
341
+ function setApprovalForAll (address operator , bool approved ) public override onlyAllowedOperatorApproval (operator) {
342
+ super .setApprovalForAll (operator, approved);
343
+ }
344
+
345
+ /// @dev See {ERC721-approve}.
346
+ function approve (address operator , uint256 tokenId ) public override onlyAllowedOperatorApproval (operator) {
347
+ super .approve (operator, tokenId);
348
+ }
349
+
350
+ /// @dev See {ERC721-_transferFrom}.
351
+ function transferFrom (
352
+ address from ,
353
+ address to ,
354
+ uint256 tokenId
355
+ ) public override (ERC721AUpgradeable ) onlyAllowedOperator (from) {
356
+ super .transferFrom (from, to, tokenId);
357
+ }
358
+
359
+ /// @dev See {ERC721-_safeTransferFrom}.
360
+ function safeTransferFrom (
361
+ address from ,
362
+ address to ,
363
+ uint256 tokenId
364
+ ) public override (ERC721AUpgradeable ) onlyAllowedOperator (from) {
365
+ super .safeTransferFrom (from, to, tokenId);
366
+ }
367
+
368
+ /// @dev See {ERC721-_safeTransferFrom}.
369
+ function safeTransferFrom (
370
+ address from ,
371
+ address to ,
372
+ uint256 tokenId ,
373
+ bytes memory data
374
+ ) public override (ERC721AUpgradeable ) onlyAllowedOperator (from) {
375
+ super .safeTransferFrom (from, to, tokenId, data);
376
+ }
377
+
329
378
function _dropMsgSender () internal view virtual override returns (address ) {
330
379
return _msgSender ();
331
380
}
0 commit comments