From 9d53e50656834915cd91861c21639e507badf7bc Mon Sep 17 00:00:00 2001 From: VolodymyrBg Date: Mon, 20 Jan 2025 21:06:31 +0200 Subject: [PATCH 1/4] Update IFixedPriceAllowedMintersStrategy.sol --- .../src/interfaces/IFixedPriceAllowedMintersStrategy.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/1155-contracts/src/interfaces/IFixedPriceAllowedMintersStrategy.sol b/packages/1155-contracts/src/interfaces/IFixedPriceAllowedMintersStrategy.sol index dfd9598f8..d46ca3683 100644 --- a/packages/1155-contracts/src/interfaces/IFixedPriceAllowedMintersStrategy.sol +++ b/packages/1155-contracts/src/interfaces/IFixedPriceAllowedMintersStrategy.sol @@ -37,4 +37,5 @@ interface IFixedPriceAllowedMintersStrategy { event MinterSet(address indexed mediaContract, uint256 indexed tokenId, address indexed minter, bool allowed); error ONLY_MINTER(); + error InvalidSaleTime(); } From 7bdb9c46e34fe67aede3530c49922bc1b5a5e65a Mon Sep 17 00:00:00 2001 From: VolodymyrBg Date: Mon, 20 Jan 2025 21:07:01 +0200 Subject: [PATCH 2/4] Update FixedPriceAllowedMintersStrategy.sol --- .../minters/fixed-price/FixedPriceAllowedMintersStrategy.sol | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/1155-contracts/src/minters/fixed-price/FixedPriceAllowedMintersStrategy.sol b/packages/1155-contracts/src/minters/fixed-price/FixedPriceAllowedMintersStrategy.sol index d90b259b7..27746c059 100644 --- a/packages/1155-contracts/src/minters/fixed-price/FixedPriceAllowedMintersStrategy.sol +++ b/packages/1155-contracts/src/minters/fixed-price/FixedPriceAllowedMintersStrategy.sol @@ -74,6 +74,9 @@ contract FixedPriceAllowedMintersStrategy is Enjoy, SaleStrategy, LimitedMintPer /// @param tokenId The token id to set the sale config for /// @param salesConfig The sales config to set function setSale(uint256 tokenId, SalesConfig calldata salesConfig) external { + if (salesConfig.saleStart >= salesConfig.saleEnd) { + revert InvalidSaleTime(); + } salesConfigs[msg.sender][tokenId] = salesConfig; emit SaleSet(msg.sender, tokenId, salesConfig); @@ -157,7 +160,7 @@ contract FixedPriceAllowedMintersStrategy is Enjoy, SaleStrategy, LimitedMintPer /// @notice The version of the sale strategy function contractVersion() external pure override returns (string memory) { - return "1.0.0"; + return "1.0.1"; } function contractURI() external pure override returns (string memory) { From 09eacb7343ae5bddf77a7613dc96f3de3cd2a81c Mon Sep 17 00:00:00 2001 From: VolodymyrBg Date: Tue, 21 Jan 2025 22:29:22 +0200 Subject: [PATCH 3/4] Create FixedPriceAllowedMintersStrategy.test.ts --- .../minters/fixed-price/FixedPriceAllowedMintersStrategy.test.ts | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/1155-contracts/test/minters/fixed-price/FixedPriceAllowedMintersStrategy.test.ts diff --git a/packages/1155-contracts/test/minters/fixed-price/FixedPriceAllowedMintersStrategy.test.ts b/packages/1155-contracts/test/minters/fixed-price/FixedPriceAllowedMintersStrategy.test.ts new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/packages/1155-contracts/test/minters/fixed-price/FixedPriceAllowedMintersStrategy.test.ts @@ -0,0 +1 @@ + From f493c9f9b31691ff1ce9993f549c40a2343c418e Mon Sep 17 00:00:00 2001 From: VolodymyrBg Date: Tue, 21 Jan 2025 22:29:51 +0200 Subject: [PATCH 4/4] Update FixedPriceAllowedMintersStrategy.test.ts --- .../FixedPriceAllowedMintersStrategy.test.ts | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/packages/1155-contracts/test/minters/fixed-price/FixedPriceAllowedMintersStrategy.test.ts b/packages/1155-contracts/test/minters/fixed-price/FixedPriceAllowedMintersStrategy.test.ts index 8b1378917..1fbf97f10 100644 --- a/packages/1155-contracts/test/minters/fixed-price/FixedPriceAllowedMintersStrategy.test.ts +++ b/packages/1155-contracts/test/minters/fixed-price/FixedPriceAllowedMintersStrategy.test.ts @@ -1 +1,58 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { time } from "@nomicfoundation/hardhat-network-helpers"; +import { FixedPriceAllowedMintersStrategy } from "../../../typechain-types"; +describe("FixedPriceAllowedMintersStrategy", () => { + let fixedPriceMinter: FixedPriceAllowedMintersStrategy; + + beforeEach(async () => { + const FixedPriceMinter = await ethers.getContractFactory("FixedPriceAllowedMintersStrategy"); + fixedPriceMinter = await FixedPriceMinter.deploy(); + await fixedPriceMinter.deployed(); + }); + + describe("setSale", () => { + it("should set sale with valid time window", async () => { + const now = await time.latest(); + const saleConfig = { + saleStart: now + 100, + saleEnd: now + 1000, + maxTokensPerAddress: 5, + pricePerToken: ethers.utils.parseEther("0.1"), + fundsRecipient: ethers.constants.AddressZero + }; + + await expect(fixedPriceMinter.setSale(1, saleConfig)) + .to.emit(fixedPriceMinter, "SaleSet"); + }); + + it("should revert when saleEnd is before saleStart", async () => { + const now = await time.latest(); + const saleConfig = { + saleStart: now + 1000, + saleEnd: now + 100, + maxTokensPerAddress: 5, + pricePerToken: ethers.utils.parseEther("0.1"), + fundsRecipient: ethers.constants.AddressZero + }; + + await expect(fixedPriceMinter.setSale(1, saleConfig)) + .to.be.revertedWithCustomError(fixedPriceMinter, "InvalidSaleTime"); + }); + + it("should revert when saleStart equals saleEnd", async () => { + const now = await time.latest(); + const saleConfig = { + saleStart: now + 100, + saleEnd: now + 100, + maxTokensPerAddress: 5, + pricePerToken: ethers.utils.parseEther("0.1"), + fundsRecipient: ethers.constants.AddressZero + }; + + await expect(fixedPriceMinter.setSale(1, saleConfig)) + .to.be.revertedWithCustomError(fixedPriceMinter, "InvalidSaleTime"); + }); + }); +});