Add request validations (#213)

* Add request validations
* Apply custom errors
This commit is contained in:
Arnaud 2025-01-24 12:49:06 +01:00 committed by GitHub
parent 500498f8bc
commit d04acafde2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 58 additions and 0 deletions

View File

@ -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;

View File

@ -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 () {