From 905285613907f1bbd1c411da36a3b3e608ce071f Mon Sep 17 00:00:00 2001 From: Vectorized Date: Wed, 19 Feb 2025 02:06:56 +0000 Subject: [PATCH] Refactor _skipNFTDefault --- src/DN404.sol | 33 +++++++-------------------------- src/DN420.sol | 33 +++++++-------------------------- 2 files changed, 14 insertions(+), 52 deletions(-) diff --git a/src/DN404.sol b/src/DN404.sol index 9297dc9..08796cb 100644 --- a/src/DN404.sol +++ b/src/DN404.sol @@ -33,21 +33,6 @@ pragma solidity ^0.8.4; /// - The ERC20 token allowances and ERC721 token / operator approvals are separate. /// - For MEV safety, users should NOT have concurrently open orders for the ERC20 and ERC721. abstract contract DN404 { - /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/ - /* ENUMS */ - /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/ - - /// @dev Denotes the default skip NFT status. - /// Override `_skipNFTDefault` to return a preferred value (defaults to `HasCode`). - enum SkipNFTDefault { - // `On` if the ERC20 owner has code, else `Off`. - HasCode, - // Skip NFT (ERC20 transfers will NOT trigger NFT minting / burning / transferring). - On, - // NOT skip NFT (ERC20 transfers will trigger NFT minting / burning / transferring). - Off - } - /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/ /* EVENTS */ /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/ @@ -326,9 +311,12 @@ abstract contract DN404 { /* CONFIGURABLES */ /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/ - /// @dev Returns the default mode for the skip NFT status. - function _skipNFTDefault() internal view virtual returns (SkipNFTDefault) { - return SkipNFTDefault.HasCode; + /// @dev Returns the default skip NFT flag for `owner`. + function _skipNFTDefault(address owner) internal view virtual returns (bool result) { + /// @solidity memory-safe-assembly + assembly { + result := iszero(iszero(extcodesize(owner))) + } } /// @dev Returns whether the tokens IDs are from `[1..n]` instead of `[0..n-1]`. @@ -1061,14 +1049,7 @@ abstract contract DN404 { uint8 flags = _getDN404Storage().addressData[owner].flags; result = flags & _ADDRESS_DATA_SKIP_NFT_FLAG != 0; if (flags & _ADDRESS_DATA_SKIP_NFT_INITIALIZED_FLAG == uint256(0)) { - if (_skipNFTDefault() == SkipNFTDefault.HasCode) { - /// @solidity memory-safe-assembly - assembly { - result := iszero(iszero(extcodesize(owner))) - } - } - if (_skipNFTDefault() == SkipNFTDefault.On) result = true; - if (_skipNFTDefault() == SkipNFTDefault.Off) result = false; + result = _skipNFTDefault(owner); } } diff --git a/src/DN420.sol b/src/DN420.sol index 550c4f6..4d870f0 100644 --- a/src/DN420.sol +++ b/src/DN420.sol @@ -42,21 +42,6 @@ pragma solidity ^0.8.4; /// - The ERC20 token allowances and ERC1155 token / operator approvals are separate. /// - For MEV safety, users should NOT have concurrently open orders for the ERC20 and ERC1155. abstract contract DN420 { - /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/ - /* ENUMS */ - /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/ - - /// @dev Denotes the default skip NFT status. - /// Override `_skipNFTDefault` to return a preferred value (defaults to `HasCode`). - enum SkipNFTDefault { - // `On` if the ERC20 owner has code, else `Off`. - HasCode, - // Skip NFT (ERC20 transfers will NOT trigger NFT minting / burning / transferring). - On, - // NOT skip NFT (ERC20 transfers will trigger NFT minting / burning / transferring). - Off - } - /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/ /* EVENTS */ /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/ @@ -338,9 +323,12 @@ abstract contract DN420 { /* CONFIGURABLES */ /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/ - /// @dev Returns the default mode for the skip NFT status. - function _skipNFTDefault() internal view virtual returns (SkipNFTDefault) { - return SkipNFTDefault.HasCode; + /// @dev Returns the default skip NFT flag for `owner`. + function _skipNFTDefault(address owner) internal view virtual returns (bool result) { + /// @solidity memory-safe-assembly + assembly { + result := iszero(iszero(extcodesize(owner))) + } } /// @dev Returns if direct NFT transfers should be used during ERC20 transfers @@ -1014,14 +1002,7 @@ abstract contract DN420 { uint8 flags = _getDN420Storage().addressData[owner].flags; result = flags & _ADDRESS_DATA_SKIP_NFT_FLAG != 0; if (flags & _ADDRESS_DATA_SKIP_NFT_INITIALIZED_FLAG == uint256(0)) { - if (_skipNFTDefault() == SkipNFTDefault.HasCode) { - /// @solidity memory-safe-assembly - assembly { - result := iszero(iszero(extcodesize(owner))) - } - } - if (_skipNFTDefault() == SkipNFTDefault.On) result = true; - if (_skipNFTDefault() == SkipNFTDefault.Off) result = false; + result = _skipNFTDefault(owner); } }