diff --git a/contracts/Marketplace.sol b/contracts/Marketplace.sol index 1f70bb9..bb2cd1b 100644 --- a/contracts/Marketplace.sol +++ b/contracts/Marketplace.sol @@ -19,9 +19,14 @@ contract Marketplace is SlotReservations, Proofs, StateRetrieval, Endian { error Marketplace_InvalidExpiry(); error Marketplace_InvalidMaxSlotLoss(); error Marketplace_InsufficientSlots(); + error Marketplace_InsufficientDuration(); + error Marketplace_InsufficientProofProbability(); + error Marketplace_InsufficientCollateral(); + error Marketplace_InsufficientReward(); error Marketplace_InvalidClientAddress(); error Marketplace_RequestAlreadyExists(); error Marketplace_InvalidSlot(); + error Marketplace_InvalidCid(); error Marketplace_SlotNotFree(); error Marketplace_InvalidSlotHost(); error Marketplace_AlreadyPaid(); @@ -126,6 +131,21 @@ contract Marketplace is SlotReservations, Proofs, StateRetrieval, Endian { if (request.ask.slots == 0) revert Marketplace_InsufficientSlots(); if (request.ask.maxSlotLoss > request.ask.slots) revert Marketplace_InvalidMaxSlotLoss(); + if (request.ask.duration == 0) { + revert Marketplace_InsufficientDuration(); + } + if (request.ask.proofProbability == 0) { + revert Marketplace_InsufficientProofProbability(); + } + if (request.ask.collateral == 0) { + revert Marketplace_InsufficientCollateral(); + } + if (request.ask.reward == 0) { + revert Marketplace_InsufficientReward(); + } + if (bytes(request.content.cid).length == 0) { + revert Marketplace_InvalidCid(); + } _requests[id] = request; _requestContexts[id].endsAt = block.timestamp + request.ask.duration; diff --git a/test/Marketplace.test.js b/test/Marketplace.test.js index e2fefd6..a997c94 100644 --- a/test/Marketplace.test.js +++ b/test/Marketplace.test.js @@ -238,6 +238,44 @@ describe("Marketplace", function () { "Marketplace_RequestAlreadyExists" ) }) + + it("is rejected when insufficient duration", async function () { + request.ask.duration = 0 + await expect(marketplace.requestStorage(request)).to.be.revertedWith( + // request.expiry has to be > 0 and + // request.expiry < request.ask.duration + // so request.ask.duration will trigger "Marketplace_InvalidExpiry" + "Marketplace_InvalidExpiry" + ) + }) + + it("is rejected when insufficient proofProbability", async function () { + request.ask.proofProbability = 0 + await expect(marketplace.requestStorage(request)).to.be.revertedWith( + "Marketplace_InsufficientProofProbability" + ) + }) + + it("is rejected when insufficient collateral", async function () { + request.ask.collateral = 0 + await expect(marketplace.requestStorage(request)).to.be.revertedWith( + "Marketplace_InsufficientCollateral" + ) + }) + + it("is rejected when insufficient reward", async function () { + request.ask.reward = 0 + await expect(marketplace.requestStorage(request)).to.be.revertedWith( + "Marketplace_InsufficientReward" + ) + }) + + it("is rejected when cid is missing", async function () { + request.content.cid = "" + await expect(marketplace.requestStorage(request)).to.be.revertedWith( + "Marketplace_InvalidCid" + ) + }) }) describe("filling a slot with collateral", function () {