Skip to content

Commit f7b355d

Browse files
committed
pull from origin
2 parents 9ec7d12 + 371beac commit f7b355d

21 files changed

+1944
-110
lines changed

contracts/base/ERC1155Base.sol

+55-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import "../extension/Multicall.sol";
88
import "../extension/Ownable.sol";
99
import "../extension/Royalty.sol";
1010
import "../extension/BatchMintMetadata.sol";
11+
import "../extension/DefaultOperatorFilterer.sol";
1112

1213
import "../lib/TWStrings.sol";
1314

@@ -28,7 +29,15 @@ import "../lib/TWStrings.sol";
2829
* - EIP 2981 compliance for royalty support on NFT marketplaces.
2930
*/
3031

31-
contract ERC1155Base is ERC1155, ContractMetadata, Ownable, Royalty, Multicall, BatchMintMetadata {
32+
contract ERC1155Base is
33+
ERC1155,
34+
ContractMetadata,
35+
Ownable,
36+
Royalty,
37+
Multicall,
38+
BatchMintMetadata,
39+
DefaultOperatorFilterer
40+
{
3241
using TWStrings for uint256;
3342

3443
/*//////////////////////////////////////////////////////////////
@@ -60,6 +69,7 @@ contract ERC1155Base is ERC1155, ContractMetadata, Ownable, Royalty, Multicall,
6069
) ERC1155(_name, _symbol) {
6170
_setupOwner(msg.sender);
6271
_setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
72+
_setOperatorRestriction(true);
6373
}
6474

6575
/*//////////////////////////////////////////////////////////////
@@ -227,6 +237,45 @@ contract ERC1155Base is ERC1155, ContractMetadata, Ownable, Royalty, Multicall,
227237
return nextTokenIdToMint_;
228238
}
229239

240+
/*//////////////////////////////////////////////////////////////
241+
ERC-1155 overrides
242+
//////////////////////////////////////////////////////////////*/
243+
244+
/// @dev See {ERC1155-setApprovalForAll}
245+
function setApprovalForAll(address operator, bool approved)
246+
public
247+
override(ERC1155)
248+
onlyAllowedOperatorApproval(operator)
249+
{
250+
super.setApprovalForAll(operator, approved);
251+
}
252+
253+
/**
254+
* @dev See {IERC1155-safeTransferFrom}.
255+
*/
256+
function safeTransferFrom(
257+
address from,
258+
address to,
259+
uint256 id,
260+
uint256 amount,
261+
bytes memory data
262+
) public override(ERC1155) onlyAllowedOperator(from) {
263+
super.safeTransferFrom(from, to, id, amount, data);
264+
}
265+
266+
/**
267+
* @dev See {IERC1155-safeBatchTransferFrom}.
268+
*/
269+
function safeBatchTransferFrom(
270+
address from,
271+
address to,
272+
uint256[] memory ids,
273+
uint256[] memory amounts,
274+
bytes memory data
275+
) public override(ERC1155) onlyAllowedOperator(from) {
276+
super.safeBatchTransferFrom(from, to, ids, amounts, data);
277+
}
278+
230279
/*//////////////////////////////////////////////////////////////
231280
Internal (overrideable) functions
232281
//////////////////////////////////////////////////////////////*/
@@ -251,6 +300,11 @@ contract ERC1155Base is ERC1155, ContractMetadata, Ownable, Royalty, Multicall,
251300
return msg.sender == owner();
252301
}
253302

303+
/// @dev Returns whether operator restriction can be set in the given execution context.
304+
function _canSetOperatorRestriction() internal virtual override returns (bool) {
305+
return msg.sender == owner();
306+
}
307+
254308
/// @dev Runs before every token transfer / mint / burn.
255309
function _beforeTokenTransfer(
256310
address operator,

contracts/base/ERC1155Drop.sol

+48-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import "../extension/PrimarySale.sol";
1212
import "../extension/DropSinglePhase1155.sol";
1313
import "../extension/LazyMint.sol";
1414
import "../extension/DelayedReveal.sol";
15+
import "../extension/DefaultOperatorFilterer.sol";
1516

1617
import "../lib/CurrencyTransferLib.sol";
1718
import "../lib/TWStrings.sol";
@@ -49,7 +50,8 @@ contract ERC1155Drop is
4950
PrimarySale,
5051
LazyMint,
5152
DelayedReveal,
52-
DropSinglePhase1155
53+
DropSinglePhase1155,
54+
DefaultOperatorFilterer
5355
{
5456
using TWStrings for uint256;
5557

@@ -77,6 +79,7 @@ contract ERC1155Drop is
7779
_setupOwner(msg.sender);
7880
_setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
7981
_setupPrimarySaleRecipient(_primarySaleRecipient);
82+
_setOperatorRestriction(true);
8083
}
8184

8285
/*//////////////////////////////////////////////////////////////
@@ -216,6 +219,45 @@ contract ERC1155Drop is
216219
return nextTokenIdToLazyMint;
217220
}
218221

222+
/*//////////////////////////////////////////////////////////////
223+
ERC-1155 overrides
224+
//////////////////////////////////////////////////////////////*/
225+
226+
/// @dev See {ERC1155-setApprovalForAll}
227+
function setApprovalForAll(address operator, bool approved)
228+
public
229+
override(ERC1155)
230+
onlyAllowedOperatorApproval(operator)
231+
{
232+
super.setApprovalForAll(operator, approved);
233+
}
234+
235+
/**
236+
* @dev See {IERC1155-safeTransferFrom}.
237+
*/
238+
function safeTransferFrom(
239+
address from,
240+
address to,
241+
uint256 id,
242+
uint256 amount,
243+
bytes memory data
244+
) public override(ERC1155) onlyAllowedOperator(from) {
245+
super.safeTransferFrom(from, to, id, amount, data);
246+
}
247+
248+
/**
249+
* @dev See {IERC1155-safeBatchTransferFrom}.
250+
*/
251+
function safeBatchTransferFrom(
252+
address from,
253+
address to,
254+
uint256[] memory ids,
255+
uint256[] memory amounts,
256+
bytes memory data
257+
) public override(ERC1155) onlyAllowedOperator(from) {
258+
super.safeBatchTransferFrom(from, to, ids, amounts, data);
259+
}
260+
219261
/*///////////////////////////////////////////////////////////////
220262
Internal functions
221263
//////////////////////////////////////////////////////////////*/
@@ -321,6 +363,11 @@ contract ERC1155Drop is
321363
return msg.sender == owner();
322364
}
323365

366+
/// @dev Returns whether operator restriction can be set in the given execution context.
367+
function _canSetOperatorRestriction() internal virtual override returns (bool) {
368+
return msg.sender == owner();
369+
}
370+
324371
/// @dev Checks whether NFTs can be revealed in the given execution context.
325372
function _canReveal() internal view virtual returns (bool) {
326373
return msg.sender == owner();

contracts/base/ERC1155LazyMint.sol

+47
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import "../extension/Royalty.sol";
1010
import "../extension/BatchMintMetadata.sol";
1111
import "../extension/LazyMint.sol";
1212
import "../extension/interface/IClaimableERC1155.sol";
13+
import "../extension/DefaultOperatorFilterer.sol";
1314

1415
import "../lib/TWStrings.sol";
1516
import "../openzeppelin-presets/security/ReentrancyGuard.sol";
@@ -55,6 +56,7 @@ contract ERC1155LazyMint is
5556
BatchMintMetadata,
5657
LazyMint,
5758
IClaimableERC1155,
59+
DefaultOperatorFilterer,
5860
ReentrancyGuard
5961
{
6062
using TWStrings for uint256;
@@ -81,6 +83,7 @@ contract ERC1155LazyMint is
8183
) ERC1155(_name, _symbol) {
8284
_setupOwner(msg.sender);
8385
_setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
86+
_setOperatorRestriction(true);
8487
}
8588

8689
/*//////////////////////////////////////////////////////////////
@@ -207,6 +210,45 @@ contract ERC1155LazyMint is
207210
return nextTokenIdToLazyMint;
208211
}
209212

213+
/*//////////////////////////////////////////////////////////////
214+
ERC-1155 overrides
215+
//////////////////////////////////////////////////////////////*/
216+
217+
/// @dev See {ERC1155-setApprovalForAll}
218+
function setApprovalForAll(address operator, bool approved)
219+
public
220+
override(ERC1155)
221+
onlyAllowedOperatorApproval(operator)
222+
{
223+
super.setApprovalForAll(operator, approved);
224+
}
225+
226+
/**
227+
* @dev See {IERC1155-safeTransferFrom}.
228+
*/
229+
function safeTransferFrom(
230+
address from,
231+
address to,
232+
uint256 id,
233+
uint256 amount,
234+
bytes memory data
235+
) public override(ERC1155) onlyAllowedOperator(from) {
236+
super.safeTransferFrom(from, to, id, amount, data);
237+
}
238+
239+
/**
240+
* @dev See {IERC1155-safeBatchTransferFrom}.
241+
*/
242+
function safeBatchTransferFrom(
243+
address from,
244+
address to,
245+
uint256[] memory ids,
246+
uint256[] memory amounts,
247+
bytes memory data
248+
) public override(ERC1155) onlyAllowedOperator(from) {
249+
super.safeBatchTransferFrom(from, to, ids, amounts, data);
250+
}
251+
210252
/*//////////////////////////////////////////////////////////////
211253
Internal functions
212254
//////////////////////////////////////////////////////////////*/
@@ -247,6 +289,11 @@ contract ERC1155LazyMint is
247289
return msg.sender == owner();
248290
}
249291

292+
/// @dev Returns whether operator restriction can be set in the given execution context.
293+
function _canSetOperatorRestriction() internal virtual override returns (bool) {
294+
return msg.sender == owner();
295+
}
296+
250297
/// @dev Runs before every token transfer / mint / burn.
251298
function _beforeTokenTransfer(
252299
address operator,

contracts/base/ERC721Base.sol

+63-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
// SPDX-License-Identifier: Apache-2.0
22
pragma solidity ^0.8.0;
33

4-
import { ERC721A } from "../eip/ERC721A.sol";
4+
import { ERC721A } from "../eip/ERC721AVirtualApprove.sol";
55

66
import "../extension/ContractMetadata.sol";
77
import "../extension/Multicall.sol";
88
import "../extension/Ownable.sol";
99
import "../extension/Royalty.sol";
1010
import "../extension/BatchMintMetadata.sol";
11+
import "../extension/DefaultOperatorFilterer.sol";
1112

1213
import "../lib/TWStrings.sol";
1314

@@ -28,7 +29,15 @@ import "../lib/TWStrings.sol";
2829
* - EIP 2981 compliance for royalty support on NFT marketplaces.
2930
*/
3031

31-
contract ERC721Base is ERC721A, ContractMetadata, Multicall, Ownable, Royalty, BatchMintMetadata {
32+
contract ERC721Base is
33+
ERC721A,
34+
ContractMetadata,
35+
Multicall,
36+
Ownable,
37+
Royalty,
38+
BatchMintMetadata,
39+
DefaultOperatorFilterer
40+
{
3241
using TWStrings for uint256;
3342

3443
/*//////////////////////////////////////////////////////////////
@@ -49,6 +58,7 @@ contract ERC721Base is ERC721A, ContractMetadata, Multicall, Ownable, Royalty, B
4958
) ERC721A(_name, _symbol) {
5059
_setupOwner(msg.sender);
5160
_setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
61+
_setOperatorRestriction(true);
5262
}
5363

5464
/*//////////////////////////////////////////////////////////////
@@ -153,6 +163,52 @@ contract ERC721Base is ERC721A, ContractMetadata, Multicall, Ownable, Royalty, B
153163
getApproved(_tokenId) == _operator);
154164
}
155165

166+
/*//////////////////////////////////////////////////////////////
167+
ERC-721 overrides
168+
//////////////////////////////////////////////////////////////*/
169+
170+
/// @dev See {ERC721-setApprovalForAll}.
171+
function setApprovalForAll(address operator, bool approved)
172+
public
173+
override(ERC721A)
174+
onlyAllowedOperatorApproval(operator)
175+
{
176+
super.setApprovalForAll(operator, approved);
177+
}
178+
179+
/// @dev See {ERC721-approve}.
180+
function approve(address operator, uint256 tokenId) public override(ERC721A) onlyAllowedOperatorApproval(operator) {
181+
super.approve(operator, tokenId);
182+
}
183+
184+
/// @dev See {ERC721-_transferFrom}.
185+
function transferFrom(
186+
address from,
187+
address to,
188+
uint256 tokenId
189+
) public override(ERC721A) onlyAllowedOperator(from) {
190+
super.transferFrom(from, to, tokenId);
191+
}
192+
193+
/// @dev See {ERC721-_safeTransferFrom}.
194+
function safeTransferFrom(
195+
address from,
196+
address to,
197+
uint256 tokenId
198+
) public override(ERC721A) onlyAllowedOperator(from) {
199+
super.safeTransferFrom(from, to, tokenId);
200+
}
201+
202+
/// @dev See {ERC721-_safeTransferFrom}.
203+
function safeTransferFrom(
204+
address from,
205+
address to,
206+
uint256 tokenId,
207+
bytes memory data
208+
) public override(ERC721A) onlyAllowedOperator(from) {
209+
super.safeTransferFrom(from, to, tokenId, data);
210+
}
211+
156212
/*//////////////////////////////////////////////////////////////
157213
Internal (overrideable) functions
158214
//////////////////////////////////////////////////////////////*/
@@ -181,4 +237,9 @@ contract ERC721Base is ERC721A, ContractMetadata, Multicall, Ownable, Royalty, B
181237
function _canSetRoyaltyInfo() internal view virtual override returns (bool) {
182238
return msg.sender == owner();
183239
}
240+
241+
/// @dev Returns whether operator restriction can be set in the given execution context.
242+
function _canSetOperatorRestriction() internal virtual override returns (bool) {
243+
return msg.sender == owner();
244+
}
184245
}

0 commit comments

Comments
 (0)