Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 7 additions & 26 deletions src/DN404.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
/*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/
Expand Down Expand Up @@ -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]`.
Expand Down Expand Up @@ -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);
}
}

Expand Down
33 changes: 7 additions & 26 deletions src/DN420.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
/*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
}
}

Expand Down
Loading