Skip to content

Commit

Permalink
T
Browse files Browse the repository at this point in the history
  • Loading branch information
Vectorized committed Feb 10, 2024
1 parent 89c115c commit 9fc247d
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 33 deletions.
8 changes: 4 additions & 4 deletions .gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
DN404Test:testBurnOnTransfer(uint32,address,address) (runs: 256, μ: 277814, ~: 279525)
DN404Test:testInitialize(uint32,address) (runs: 256, μ: 98557, ~: 112410)
DN404Test:testMintOnTransfer(uint32,address,address) (runs: 256, μ: 255465, ~: 256709)
DN404Test:testBurnOnTransfer(uint32,address,address) (runs: 256, μ: 277892, ~: 279525)
DN404Test:testInitialize(uint32,address) (runs: 256, μ: 98159, ~: 112410)
DN404Test:testMintOnTransfer(uint32,address,address) (runs: 256, μ: 255154, ~: 256709)
DN404Test:testNameAndSymbol(string,string) (runs: 256, μ: 206444, ~: 206785)
DN404Test:testRegisterAndResolveAlias(address,address) (runs: 256, μ: 120621, ~: 120621)
DN404Test:testRegisterAndResolveAlias(address,address) (runs: 256, μ: 120543, ~: 120621)
DN404Test:testSetAndGetOperatorApprovals(address,address,bool) (runs: 256, μ: 129145, ~: 120210)
DN404Test:testTokenURI(string,uint256) (runs: 256, μ: 157297, ~: 134998)
DN404Test:test__codesize() (gas: 20772)
Expand Down
3 changes: 1 addition & 2 deletions src/DN404.sol
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,6 @@ abstract contract DN404 {
return addressAlias;
}


function _transfer(address from, address to, uint256 amount) internal returns (bool) {
if (to == address(0)) revert TransferToZeroAddress();

Expand Down Expand Up @@ -397,7 +396,7 @@ abstract contract DN404 {
if (fnSelector == 0x6352211e) {
if (msg.sender != $.sisterERC721) revert Unauthorized();
if (msg.data.length < 0x24) revert();

uint256 id = _calldataload(0x04);

_return(uint160(_ownerOf(id)));
Expand Down
47 changes: 20 additions & 27 deletions src/DN404NonFungibleShadow.sol
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ contract DN404NonFungibleShadow {
}

constructor() {
// For non-proxies, we will store the deployer so that only the deployer can
// For non-proxies, we will store the deployer so that only the deployer can
// link the sister contract.
_getDN404NFTStorage().deployer = msg.sender;
}
Expand Down Expand Up @@ -115,10 +115,7 @@ contract DN404NonFungibleShadow {
assembly {
mstore(0x00, 0x18160ddd) // `totalSupply()`.
if iszero(
and(
gt(returndatasize(), 0x1f),
staticcall(gas(), sister, 0x1c, 0x04, 0x00, 0x20)
)
and(gt(returndatasize(), 0x1f), staticcall(gas(), sister, 0x1c, 0x04, 0x00, 0x20))
) {
returndatacopy(mload(0x40), 0x00, returndatasize())
revert(mload(0x40), returndatasize())
Expand All @@ -134,10 +131,7 @@ contract DN404NonFungibleShadow {
mstore(0x00, 0x70a08231) // `balanceOf(address)`.
mstore(0x20, shr(96, shl(96, owner)))
if iszero(
and(
gt(returndatasize(), 0x1f),
staticcall(gas(), sister, 0x1c, 0x24, 0x00, 0x20)
)
and(gt(returndatasize(), 0x1f), staticcall(gas(), sister, 0x1c, 0x24, 0x00, 0x20))
) {
returndatacopy(mload(0x40), 0x00, returndatasize())
revert(mload(0x40), returndatasize())
Expand All @@ -153,10 +147,7 @@ contract DN404NonFungibleShadow {
mstore(0x00, 0x6352211e) // `ownerOf(uint256)`.
mstore(0x20, id)
if iszero(
and(
gt(returndatasize(), 0x1f),
staticcall(gas(), sister, 0x1c, 0x24, 0x00, 0x20)
)
and(gt(returndatasize(), 0x1f), staticcall(gas(), sister, 0x1c, 0x24, 0x00, 0x20))
) {
returndatacopy(mload(0x40), 0x00, returndatasize())
revert(mload(0x40), returndatasize())
Expand All @@ -178,7 +169,7 @@ contract DN404NonFungibleShadow {
if iszero(
and(
gt(returndatasize(), 0x1f),
call(gas(), sister, 0, add(m, 0x1c), 0x64, 0x00, 0x20)
call(gas(), sister, callvalue(), add(m, 0x1c), 0x64, 0x00, 0x20)
)
) {
returndatacopy(m, 0x00, returndatasize())
Expand All @@ -196,10 +187,7 @@ contract DN404NonFungibleShadow {
mstore(0x00, 0x081812fc) // `getApproved(uint256)`.
mstore(0x20, id)
if iszero(
and(
gt(returndatasize(), 0x1f),
staticcall(gas(), sister, 0x1c, 0x24, 0x00, 0x20)
)
and(gt(returndatasize(), 0x1f), staticcall(gas(), sister, 0x1c, 0x24, 0x00, 0x20))
) {
returndatacopy(mload(0x40), 0x00, returndatasize())
revert(mload(0x40), returndatasize())
Expand All @@ -220,7 +208,7 @@ contract DN404NonFungibleShadow {
if iszero(
and(
and(eq(mload(0x00), 1), gt(returndatasize(), 0x1f)),
call(gas(), sister, 0, add(m, 0x1c), 0x64, 0x00, 0x20)
call(gas(), sister, callvalue(), add(m, 0x1c), 0x64, 0x00, 0x20)
)
) {
returndatacopy(m, 0x00, returndatasize())
Expand All @@ -230,7 +218,12 @@ contract DN404NonFungibleShadow {
emit ApprovalForAll(msg.sender, operator, approved);
}

function isApprovedForAll(address owner, address operator) public view virtual returns (bool result) {
function isApprovedForAll(address owner, address operator)
public
view
virtual
returns (bool result)
{
address sister = sisterERC20();
/// @solidity memory-safe-assembly
assembly {
Expand Down Expand Up @@ -264,7 +257,7 @@ contract DN404NonFungibleShadow {
if iszero(
and(
and(eq(mload(0x00), 1), gt(returndatasize(), 0x1f)),
call(gas(), sister, 0, add(m, 0x1c), 0x84, 0x00, 0x20)
call(gas(), sister, callvalue(), add(m, 0x1c), 0x84, 0x00, 0x20)
)
) {
returndatacopy(m, 0x00, returndatasize())
Expand Down Expand Up @@ -293,17 +286,16 @@ contract DN404NonFungibleShadow {
/// `interfaceId`. See the corresponding
/// [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)
/// to learn more about how these ids are created.
///
///
/// This function call must use less than 30000 gas.
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
// The interface IDs are constants representing the first 4 bytes
// of the XOR of all function selectors in the interface.
// See: [ERC165](https://eips.ethereum.org/EIPS/eip-165)
// (e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`)
return
interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
return interfaceId == 0x01ffc9a7 // ERC165 interface ID for ERC165.
|| interfaceId == 0x80ac58cd // ERC165 interface ID for ERC721.
|| interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
}

/// @dev Returns if `a` has bytecode of non-zero length.
Expand Down Expand Up @@ -376,8 +368,9 @@ contract DN404NonFungibleShadow {
// `linkSisterContract(address)`.
if (fnSelector == 0x847aab98) {
if ($.deployer != address(0)) {
if (address(uint160(_calldataload(0x04))) != $.deployer)
if (address(uint160(_calldataload(0x04))) != $.deployer) {
revert Unauthorized();
}
}
if ($.sisterERC20 != address(0)) revert AlreadyLinked();
$.sisterERC20 = msg.sender;
Expand Down

0 comments on commit 9fc247d

Please sign in to comment.