@@ -42,6 +42,21 @@ 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.
4444abstract 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+
4560 /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
4661 /* EVENTS */
4762 /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/
@@ -321,6 +336,11 @@ abstract contract DN420 {
321336 /* CONFIGURABLES */
322337 /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/
323338
339+ /// @dev Returns the default mode for the skip NFT status.
340+ function _skipNFTDefault () internal view virtual returns (SkipNFTDefault) {
341+ return SkipNFTDefault.HasCode;
342+ }
343+
324344 /// @dev Returns if direct NFT transfers should be used during ERC20 transfers
325345 /// whenever possible, instead of burning and re-minting.
326346 function _useDirectTransfersIfPossible () internal view virtual returns (bool ) {
@@ -986,12 +1006,16 @@ abstract contract DN420 {
9861006 /// Returns false otherwise.
9871007 function getSkipNFT (address owner ) public view virtual returns (bool result ) {
9881008 uint8 flags = _getDN420Storage ().addressData[owner].flags;
989- /// @solidity memory-safe-assembly
990- assembly {
991- result := iszero (iszero (and (flags, _ADDRESS_DATA_SKIP_NFT_FLAG)))
992- if iszero (and (flags, _ADDRESS_DATA_SKIP_NFT_INITIALIZED_FLAG)) {
993- result := iszero (iszero (extcodesize (owner)))
1009+ result = flags & _ADDRESS_DATA_SKIP_NFT_FLAG != 0 ;
1010+ if (flags & _ADDRESS_DATA_SKIP_NFT_INITIALIZED_FLAG == uint256 (0 )) {
1011+ if (_skipNFTDefault () == SkipNFTDefault.HasCode) {
1012+ /// @solidity memory-safe-assembly
1013+ assembly {
1014+ result := iszero (iszero (extcodesize (owner)))
1015+ }
9941016 }
1017+ if (_skipNFTDefault () == SkipNFTDefault.On) result = true ;
1018+ if (_skipNFTDefault () == SkipNFTDefault.Off) result = false ;
9951019 }
9961020 }
9971021
0 commit comments