From 52b08e9c710f4d8477b4fde2ac572ea5036c125b Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 16 May 2024 17:36:02 +0700 Subject: [PATCH 1/5] feat: add template for nft launchpad --- src/launchpad/NFTLaunchpad.sol | 12 ++++++++++++ src/mock/launchpad/SampleNFT1155Launchpad.sol | 13 ++++++++++--- src/mock/launchpad/SampleNFT721Launchpad.sol | 13 +++++++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 src/launchpad/NFTLaunchpad.sol diff --git a/src/launchpad/NFTLaunchpad.sol b/src/launchpad/NFTLaunchpad.sol new file mode 100644 index 0000000..5bdd6b7 --- /dev/null +++ b/src/launchpad/NFTLaunchpad.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.22; + +import { ERC165 } from "../../lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; + +import { INFTLaunchpad } from "../interfaces/launchpad/INFTLaunchpad.sol"; + +abstract contract NFTLaunchpad is ERC165, INFTLaunchpad { + function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { + return interfaceId == type(INFTLaunchpad).interfaceId || super.supportsInterface(interfaceId); + } +} diff --git a/src/mock/launchpad/SampleNFT1155Launchpad.sol b/src/mock/launchpad/SampleNFT1155Launchpad.sol index 21a34fa..8a0525e 100644 --- a/src/mock/launchpad/SampleNFT1155Launchpad.sol +++ b/src/mock/launchpad/SampleNFT1155Launchpad.sol @@ -1,11 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; +import { INFTLaunchpad } from "../../interfaces/launchpad/INFTLaunchpad.sol"; import { ERC1155 } from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; import { AccessControl } from "@openzeppelin/contracts/access/AccessControl.sol"; -import { INFTLaunchpad } from "../../interfaces/launchpad/INFTLaunchpad.sol"; +import { NFTLaunchpad } from "../../launchpad/NFTLaunchpad.sol"; -contract SampleNFT1155Launchpad is ERC1155, AccessControl, INFTLaunchpad { +contract SampleNFT1155Launchpad is ERC1155, AccessControl, NFTLaunchpad { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); constructor(address admin, address minter, string memory uri_) ERC1155(uri_) { @@ -31,7 +32,13 @@ contract SampleNFT1155Launchpad is ERC1155, AccessControl, INFTLaunchpad { amounts[1] = 1; } - function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155, AccessControl) returns (bool) { + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(ERC1155, AccessControl, NFTLaunchpad) + returns (bool) + { return interfaceId == type(INFTLaunchpad).interfaceId || super.supportsInterface(interfaceId); } } diff --git a/src/mock/launchpad/SampleNFT721Launchpad.sol b/src/mock/launchpad/SampleNFT721Launchpad.sol index 934d68b..6457e9b 100644 --- a/src/mock/launchpad/SampleNFT721Launchpad.sol +++ b/src/mock/launchpad/SampleNFT721Launchpad.sol @@ -5,8 +5,11 @@ import { SampleERC721 } from "../SampleERC721.sol"; import { ERC165 } from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import { INFTLaunchpad } from "../../interfaces/launchpad/INFTLaunchpad.sol"; +import { SampleERC721 } from "../SampleERC721.sol"; +import { ERC721Common } from "../../ERC721Common.sol"; +import { NFTLaunchpad } from "../../launchpad/NFTLaunchpad.sol"; -contract SampleNFT721Launchpad is SampleERC721, INFTLaunchpad { +contract SampleNFT721Launchpad is SampleERC721, NFTLaunchpad { constructor(string memory name_, string memory symbol_, string memory uri_) SampleERC721(name_, symbol_, uri_) { } /// @dev Mint NFTs for the launchpad. @@ -23,7 +26,13 @@ contract SampleNFT721Launchpad is SampleERC721, INFTLaunchpad { } } - function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(ERC721Common, NFTLaunchpad) + returns (bool) + { return interfaceId == type(INFTLaunchpad).interfaceId || super.supportsInterface(interfaceId); } } From 6869fad2e8ebe7a505fc35c6d36fa81f34bd09e1 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 16 May 2024 17:37:05 +0700 Subject: [PATCH 2/5] chore: add comments --- src/launchpad/NFTLaunchpad.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/src/launchpad/NFTLaunchpad.sol b/src/launchpad/NFTLaunchpad.sol index 5bdd6b7..18b7305 100644 --- a/src/launchpad/NFTLaunchpad.sol +++ b/src/launchpad/NFTLaunchpad.sol @@ -6,6 +6,7 @@ import { ERC165 } from "../../lib/openzeppelin-contracts/contracts/utils/introsp import { INFTLaunchpad } from "../interfaces/launchpad/INFTLaunchpad.sol"; abstract contract NFTLaunchpad is ERC165, INFTLaunchpad { + /// @dev Returns whether the contract supports the NFT launchpad interface. function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(INFTLaunchpad).interfaceId || super.supportsInterface(interfaceId); } From 56b0acd4a7698415139784d942d3aab91c41ceb9 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 27 Jun 2024 14:07:21 +0700 Subject: [PATCH 3/5] fix: rename NFTLaunchpad --- .../{NFTLaunchpad.sol => NFTLaunchpadCommon.sol} | 4 ++-- src/mock/launchpad/SampleNFT1155Launchpad.sol | 9 ++++----- src/mock/launchpad/SampleNFT721Launchpad.sol | 9 ++++----- 3 files changed, 10 insertions(+), 12 deletions(-) rename src/launchpad/{NFTLaunchpad.sol => NFTLaunchpadCommon.sol} (72%) diff --git a/src/launchpad/NFTLaunchpad.sol b/src/launchpad/NFTLaunchpadCommon.sol similarity index 72% rename from src/launchpad/NFTLaunchpad.sol rename to src/launchpad/NFTLaunchpadCommon.sol index 18b7305..b9fff80 100644 --- a/src/launchpad/NFTLaunchpad.sol +++ b/src/launchpad/NFTLaunchpadCommon.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.22; -import { ERC165 } from "../../lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; +import { IERC165 } from "@openzeppelin/contracts/interfaces/IERC165.sol"; import { INFTLaunchpad } from "../interfaces/launchpad/INFTLaunchpad.sol"; -abstract contract NFTLaunchpad is ERC165, INFTLaunchpad { +abstract contract NFTLaunchpadCommon is IERC165, INFTLaunchpad { /// @dev Returns whether the contract supports the NFT launchpad interface. function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(INFTLaunchpad).interfaceId || super.supportsInterface(interfaceId); diff --git a/src/mock/launchpad/SampleNFT1155Launchpad.sol b/src/mock/launchpad/SampleNFT1155Launchpad.sol index 8a0525e..b070646 100644 --- a/src/mock/launchpad/SampleNFT1155Launchpad.sol +++ b/src/mock/launchpad/SampleNFT1155Launchpad.sol @@ -1,12 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { INFTLaunchpad } from "../../interfaces/launchpad/INFTLaunchpad.sol"; import { ERC1155 } from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; import { AccessControl } from "@openzeppelin/contracts/access/AccessControl.sol"; -import { NFTLaunchpad } from "../../launchpad/NFTLaunchpad.sol"; +import { NFTLaunchpadCommon } from "../../launchpad/NFTLaunchpadCommon.sol"; -contract SampleNFT1155Launchpad is ERC1155, AccessControl, NFTLaunchpad { +contract SampleNFT1155Launchpad is ERC1155, AccessControl, NFTLaunchpadCommon { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); constructor(address admin, address minter, string memory uri_) ERC1155(uri_) { @@ -36,9 +35,9 @@ contract SampleNFT1155Launchpad is ERC1155, AccessControl, NFTLaunchpad { public view virtual - override(ERC1155, AccessControl, NFTLaunchpad) + override(ERC1155, AccessControl, NFTLaunchpadCommon) returns (bool) { - return interfaceId == type(INFTLaunchpad).interfaceId || super.supportsInterface(interfaceId); + return super.supportsInterface(interfaceId); } } diff --git a/src/mock/launchpad/SampleNFT721Launchpad.sol b/src/mock/launchpad/SampleNFT721Launchpad.sol index 6457e9b..b65f792 100644 --- a/src/mock/launchpad/SampleNFT721Launchpad.sol +++ b/src/mock/launchpad/SampleNFT721Launchpad.sol @@ -4,12 +4,11 @@ pragma solidity ^0.8.19; import { SampleERC721 } from "../SampleERC721.sol"; import { ERC165 } from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; -import { INFTLaunchpad } from "../../interfaces/launchpad/INFTLaunchpad.sol"; import { SampleERC721 } from "../SampleERC721.sol"; import { ERC721Common } from "../../ERC721Common.sol"; -import { NFTLaunchpad } from "../../launchpad/NFTLaunchpad.sol"; +import { NFTLaunchpadCommon } from "../../launchpad/NFTLaunchpadCommon.sol"; -contract SampleNFT721Launchpad is SampleERC721, NFTLaunchpad { +contract SampleNFT721Launchpad is SampleERC721, NFTLaunchpadCommon { constructor(string memory name_, string memory symbol_, string memory uri_) SampleERC721(name_, symbol_, uri_) { } /// @dev Mint NFTs for the launchpad. @@ -30,9 +29,9 @@ contract SampleNFT721Launchpad is SampleERC721, NFTLaunchpad { public view virtual - override(ERC721Common, NFTLaunchpad) + override(ERC721Common, NFTLaunchpadCommon) returns (bool) { - return interfaceId == type(INFTLaunchpad).interfaceId || super.supportsInterface(interfaceId); + return super.supportsInterface(interfaceId); } } From 839ba1bcf50a244050f3750d2b1e1eaa20246352 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 27 Jun 2024 14:07:36 +0700 Subject: [PATCH 4/5] chore: minor refactor --- src/launchpad/NFTLaunchpadCommon.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/launchpad/NFTLaunchpadCommon.sol b/src/launchpad/NFTLaunchpadCommon.sol index b9fff80..f16f68e 100644 --- a/src/launchpad/NFTLaunchpadCommon.sol +++ b/src/launchpad/NFTLaunchpadCommon.sol @@ -7,7 +7,7 @@ import { INFTLaunchpad } from "../interfaces/launchpad/INFTLaunchpad.sol"; abstract contract NFTLaunchpadCommon is IERC165, INFTLaunchpad { /// @dev Returns whether the contract supports the NFT launchpad interface. - function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { - return interfaceId == type(INFTLaunchpad).interfaceId || super.supportsInterface(interfaceId); + function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { + return interfaceId == type(INFTLaunchpad).interfaceId; } } From 2deff4a6bf6b8d902cdd421ca4b04f47634cf1eb Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 27 Jun 2024 14:12:13 +0700 Subject: [PATCH 5/5] chore: remove redundant imports --- src/mock/launchpad/SampleNFT721Launchpad.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mock/launchpad/SampleNFT721Launchpad.sol b/src/mock/launchpad/SampleNFT721Launchpad.sol index b65f792..6317bee 100644 --- a/src/mock/launchpad/SampleNFT721Launchpad.sol +++ b/src/mock/launchpad/SampleNFT721Launchpad.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.19; import { SampleERC721 } from "../SampleERC721.sol"; -import { ERC165 } from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import { SampleERC721 } from "../SampleERC721.sol"; import { ERC721Common } from "../../ERC721Common.sol";