diff --git a/contracts/Marketplace.sol b/contracts/Marketplace.sol index 36f5c49..9934943 100644 --- a/contracts/Marketplace.sol +++ b/contracts/Marketplace.sol @@ -31,9 +31,15 @@ contract Marketplace is Collateral, Proofs, StateRetrieval { struct Slot { SlotState state; RequestId requestId; + uint256 slotIndex; address host; } + struct ActiveSlot { + Request request; + uint256 slotIndex; + } + constructor( IERC20 token, MarketplaceConfig memory configuration @@ -77,6 +83,7 @@ contract Marketplace is Collateral, Proofs, StateRetrieval { SlotId slotId = Requests.slotId(requestId, slotIndex); Slot storage slot = _slots[slotId]; slot.requestId = requestId; + slot.slotIndex = slotIndex; require(slotState(slotId) == SlotState.Free, "Slot is not free"); @@ -216,14 +223,17 @@ contract Marketplace is Collateral, Proofs, StateRetrieval { return _slots[slotId].host; } - function getRequestFromSlotId(SlotId slotId) + function getActiveSlot(SlotId slotId) public view slotIsNotFree(slotId) - returns (Request memory) + returns (ActiveSlot memory) { Slot storage slot = _slots[slotId]; - return _requests[slot.requestId]; + ActiveSlot memory activeSlot; + activeSlot.request = _requests[slot.requestId]; + activeSlot.slotIndex = slot.slotIndex; + return activeSlot; } modifier requestIsKnown(RequestId requestId) { diff --git a/test/Marketplace.test.js b/test/Marketplace.test.js index 029da1c..fde4c3b 100644 --- a/test/Marketplace.test.js +++ b/test/Marketplace.test.js @@ -141,16 +141,16 @@ describe("Marketplace", function () { }) it("fails to retrieve a request of an empty slot", async function () { - expect(marketplace.getRequestFromSlotId(slotId(slot))).to.be.revertedWith( + expect(marketplace.getActiveSlot(slotId(slot))).to.be.revertedWith( "Slot is free" ) }) it("allows retrieval of request of a filled slot", async function () { await marketplace.fillSlot(slot.request, slot.index, proof) - expect( - await marketplace.getRequestFromSlotId(slotId(slot)) - ).to.be.request(request) + let activeSlot = await marketplace.getActiveSlot(slotId(slot)) + expect(activeSlot.request).to.be.request(request) + expect(activeSlot.slotIndex).to.equal(slot.index) }) it("is rejected when proof is incorrect", async function () {