Skip to content

Commit ff82c26

Browse files
AuHau2-towns
andauthored
feat: request duration limit (#206)
* feat: request duration limit * Merge master and use custom error * Remove slashCriterion --------- Co-authored-by: Arnaud <[email protected]>
1 parent 0f2012b commit ff82c26

File tree

7 files changed

+21
-4
lines changed

7 files changed

+21
-4
lines changed

configuration/configuration.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const DEFAULT_CONFIGURATION = {
1919
reservations: {
2020
maxReservations: 3,
2121
},
22+
requestDurationLimit: 60*60*24*30 // 30 days
2223
}
2324

2425
function loadConfiguration(name) {

configuration/networks/hardhat/configuration.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ module.exports = {
1616
reservations: {
1717
maxReservations: 3,
1818
},
19+
requestDurationLimit: 60*60*24*30 // 30 days
1920
}

contracts/Configuration.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ struct MarketplaceConfig {
77
CollateralConfig collateral;
88
ProofConfig proofs;
99
SlotReservationsConfig reservations;
10+
uint256 requestDurationLimit;
1011
}
1112

1213
struct CollateralConfig {

contracts/FuzzMarketplace.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ contract FuzzMarketplace is Marketplace {
1111
MarketplaceConfig(
1212
CollateralConfig(10, 5, 10, 20),
1313
ProofConfig(10, 5, 64, "", 67),
14-
SlotReservationsConfig(20)
14+
SlotReservationsConfig(20),
15+
60 * 60 * 24 * 30 // 30 days
1516
),
1617
new TestToken(),
1718
new TestVerifier()

contracts/Marketplace.sol

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ contract Marketplace is SlotReservations, Proofs, StateRetrieval, Endian {
3838
error Marketplace_SlotIsFree();
3939
error Marketplace_ReservationRequired();
4040
error Marketplace_NothingToWithdraw();
41+
error Marketplace_DurationExceedsLimit();
4142

4243
using EnumerableSet for EnumerableSet.Bytes32Set;
4344
using EnumerableSet for EnumerableSet.AddressSet;
@@ -131,8 +132,9 @@ contract Marketplace is SlotReservations, Proofs, StateRetrieval, Endian {
131132
RequestId id = request.id();
132133

133134
if (request.client != msg.sender) revert Marketplace_InvalidClientAddress();
134-
if (_requests[id].client != address(0))
135+
if (_requests[id].client != address(0)) {
135136
revert Marketplace_RequestAlreadyExists();
137+
}
136138
if (request.expiry == 0 || request.expiry >= request.ask.duration)
137139
revert Marketplace_InvalidExpiry();
138140
if (request.ask.slots == 0) revert Marketplace_InsufficientSlots();
@@ -153,6 +155,9 @@ contract Marketplace is SlotReservations, Proofs, StateRetrieval, Endian {
153155
if (bytes(request.content.cid).length == 0) {
154156
revert Marketplace_InvalidCid();
155157
}
158+
if (request.ask.duration > _config.requestDurationLimit) {
159+
revert Marketplace_DurationExceedsLimit();
160+
}
156161

157162
_requests[id] = request;
158163
_requestContexts[id].endsAt = block.timestamp + request.ask.duration;

test/Marketplace.test.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,14 @@ describe("Marketplace", function () {
203203
)
204204
})
205205

206+
it("rejects request with duration exceeding limit", async function () {
207+
request.ask.duration = config.requestDurationLimit + 1
208+
await token.approve(marketplace.address, collateralPerSlot(request))
209+
await expect(marketplace.requestStorage(request)).to.be.revertedWith(
210+
"Marketplace_DurationExceedsLimit"
211+
)
212+
})
213+
206214
it("rejects request with insufficient payment", async function () {
207215
let insufficient = maxPrice(request) - 1
208216
await token.approve(marketplace.address, insufficient)
@@ -1390,8 +1398,7 @@ describe("Marketplace", function () {
13901398

13911399
it("rewards validator when marking proof as missing", async function () {
13921400
const id = slotId(slot)
1393-
const { slashCriterion, slashPercentage, validatorRewardPercentage } =
1394-
config.collateral
1401+
const { slashPercentage, validatorRewardPercentage } = config.collateral
13951402
await marketplace.reserveSlot(slot.request, slot.index)
13961403
await marketplace.fillSlot(slot.request, slot.index, proof)
13971404

test/examples.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const exampleConfiguration = () => ({
1919
reservations: {
2020
maxReservations: 3,
2121
},
22+
requestDurationLimit: 60 * 60 * 24 * 30, // 30 days
2223
})
2324

2425
const exampleRequest = async () => {

0 commit comments

Comments
 (0)