Skip to content

Commit 9d7fba0

Browse files
authored
♻️ Refactor _skipNFTDefault (#153)
1 parent ec7a820 commit 9d7fba0

File tree

2 files changed

+14
-52
lines changed

2 files changed

+14
-52
lines changed

src/DN404.sol

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,6 @@ pragma solidity ^0.8.4;
3333
/// - The ERC20 token allowances and ERC721 token / operator approvals are separate.
3434
/// - For MEV safety, users should NOT have concurrently open orders for the ERC20 and ERC721.
3535
abstract contract DN404 {
36-
/*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
37-
/* ENUMS */
38-
/*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/
39-
40-
/// @dev Denotes the default skip NFT status.
41-
/// Override `_skipNFTDefault` to return a preferred value (defaults to `HasCode`).
42-
enum SkipNFTDefault {
43-
// `On` if the ERC20 owner has code, else `Off`.
44-
HasCode,
45-
// Skip NFT (ERC20 transfers will NOT trigger NFT minting / burning / transferring).
46-
On,
47-
// NOT skip NFT (ERC20 transfers will trigger NFT minting / burning / transferring).
48-
Off
49-
}
50-
5136
/*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
5237
/* EVENTS */
5338
/*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/
@@ -326,9 +311,12 @@ abstract contract DN404 {
326311
/* CONFIGURABLES */
327312
/*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/
328313

329-
/// @dev Returns the default mode for the skip NFT status.
330-
function _skipNFTDefault() internal view virtual returns (SkipNFTDefault) {
331-
return SkipNFTDefault.HasCode;
314+
/// @dev Returns the default skip NFT flag for `owner`.
315+
function _skipNFTDefault(address owner) internal view virtual returns (bool result) {
316+
/// @solidity memory-safe-assembly
317+
assembly {
318+
result := iszero(iszero(extcodesize(owner)))
319+
}
332320
}
333321

334322
/// @dev Returns whether the tokens IDs are from `[1..n]` instead of `[0..n-1]`.
@@ -1061,14 +1049,7 @@ abstract contract DN404 {
10611049
uint8 flags = _getDN404Storage().addressData[owner].flags;
10621050
result = flags & _ADDRESS_DATA_SKIP_NFT_FLAG != 0;
10631051
if (flags & _ADDRESS_DATA_SKIP_NFT_INITIALIZED_FLAG == uint256(0)) {
1064-
if (_skipNFTDefault() == SkipNFTDefault.HasCode) {
1065-
/// @solidity memory-safe-assembly
1066-
assembly {
1067-
result := iszero(iszero(extcodesize(owner)))
1068-
}
1069-
}
1070-
if (_skipNFTDefault() == SkipNFTDefault.On) result = true;
1071-
if (_skipNFTDefault() == SkipNFTDefault.Off) result = false;
1052+
result = _skipNFTDefault(owner);
10721053
}
10731054
}
10741055

src/DN420.sol

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,6 @@ pragma solidity ^0.8.4;
4242
/// - The ERC20 token allowances and ERC1155 token / operator approvals are separate.
4343
/// - For MEV safety, users should NOT have concurrently open orders for the ERC20 and ERC1155.
4444
abstract contract DN420 {
45-
/*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
46-
/* ENUMS */
47-
/*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/
48-
49-
/// @dev Denotes the default skip NFT status.
50-
/// Override `_skipNFTDefault` to return a preferred value (defaults to `HasCode`).
51-
enum SkipNFTDefault {
52-
// `On` if the ERC20 owner has code, else `Off`.
53-
HasCode,
54-
// Skip NFT (ERC20 transfers will NOT trigger NFT minting / burning / transferring).
55-
On,
56-
// NOT skip NFT (ERC20 transfers will trigger NFT minting / burning / transferring).
57-
Off
58-
}
59-
6045
/*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
6146
/* EVENTS */
6247
/*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/
@@ -338,9 +323,12 @@ abstract contract DN420 {
338323
/* CONFIGURABLES */
339324
/*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/
340325

341-
/// @dev Returns the default mode for the skip NFT status.
342-
function _skipNFTDefault() internal view virtual returns (SkipNFTDefault) {
343-
return SkipNFTDefault.HasCode;
326+
/// @dev Returns the default skip NFT flag for `owner`.
327+
function _skipNFTDefault(address owner) internal view virtual returns (bool result) {
328+
/// @solidity memory-safe-assembly
329+
assembly {
330+
result := iszero(iszero(extcodesize(owner)))
331+
}
344332
}
345333

346334
/// @dev Returns if direct NFT transfers should be used during ERC20 transfers
@@ -1014,14 +1002,7 @@ abstract contract DN420 {
10141002
uint8 flags = _getDN420Storage().addressData[owner].flags;
10151003
result = flags & _ADDRESS_DATA_SKIP_NFT_FLAG != 0;
10161004
if (flags & _ADDRESS_DATA_SKIP_NFT_INITIALIZED_FLAG == uint256(0)) {
1017-
if (_skipNFTDefault() == SkipNFTDefault.HasCode) {
1018-
/// @solidity memory-safe-assembly
1019-
assembly {
1020-
result := iszero(iszero(extcodesize(owner)))
1021-
}
1022-
}
1023-
if (_skipNFTDefault() == SkipNFTDefault.On) result = true;
1024-
if (_skipNFTDefault() == SkipNFTDefault.Off) result = false;
1005+
result = _skipNFTDefault(owner);
10251006
}
10261007
}
10271008

0 commit comments

Comments
 (0)