chore(marketplace): use canMarkProofAsMissing (#1188)

* Add canProofBeMarkedAsMissing

* Add more tests

* Update contracts submodule
This commit is contained in:
Arnaud 2025-06-03 11:08:57 +02:00 committed by GitHub
parent ca869f6dce
commit 45ade0e3c1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 64 additions and 16 deletions

View File

@ -379,14 +379,12 @@ method markProofAsMissing*(
discard await market.contract.markProofAsMissing(id, period, overrides).confirm(1)
method canProofBeMarkedAsMissing*(
method canMarkProofAsMissing*(
market: OnChainMarket, id: SlotId, period: Period
): Future[bool] {.async.} =
let provider = market.contract.provider
let contractWithoutSigner = market.contract.connect(provider)
let overrides = CallOverrides(blockTag: some BlockTag.pending)
): Future[bool] {.async: (raises: [CancelledError]).} =
try:
discard await contractWithoutSigner.markProofAsMissing(id, period, overrides)
let overrides = CallOverrides(blockTag: some BlockTag.pending)
discard await market.contract.canMarkProofAsMissing(id, period, overrides)
return true
except EthersError as e:
trace "Proof cannot be marked as missing", msg = e.msg

View File

@ -178,6 +178,17 @@ proc markProofAsMissing*(
]
.}
proc canMarkProofAsMissing*(
marketplace: Marketplace, id: SlotId, period: uint64
): Confirmable {.
contract,
errors: [
Marketplace_SlotNotAcceptingProofs, Proofs_PeriodNotEnded,
Proofs_ValidationTimedOut, Proofs_ProofNotMissing, Proofs_ProofNotRequired,
Proofs_ProofAlreadyMarkedMissing,
]
.}
proc reserveSlot*(
marketplace: Marketplace, requestId: RequestId, slotIndex: uint64
): Confirmable {.contract.}

View File

@ -204,9 +204,9 @@ method markProofAsMissing*(
) {.base, async: (raises: [CancelledError, MarketError]).} =
raiseAssert("not implemented")
method canProofBeMarkedAsMissing*(
method canMarkProofAsMissing*(
market: Market, id: SlotId, period: Period
): Future[bool] {.base, async.} =
): Future[bool] {.base, async: (raises: [CancelledError]).} =
raiseAssert("not implemented")
method reserveSlot*(

View File

@ -85,7 +85,7 @@ proc markProofAsMissing(
currentPeriod = validation.getCurrentPeriod()
try:
if await validation.market.canProofBeMarkedAsMissing(slotId, period):
if await validation.market.canMarkProofAsMissing(slotId, period):
trace "Marking proof as missing", slotId, periodProofMissed = period
await validation.market.markProofAsMissing(slotId, period)
else:

View File

@ -381,15 +381,15 @@ method markProofAsMissing*(
) {.async: (raises: [CancelledError, MarketError]).} =
market.markedAsMissingProofs.add(id)
proc setCanProofBeMarkedAsMissing*(mock: MockMarket, id: SlotId, required: bool) =
proc setCanMarkProofAsMissing*(mock: MockMarket, id: SlotId, required: bool) =
if required:
mock.canBeMarkedAsMissing.incl(id)
else:
mock.canBeMarkedAsMissing.excl(id)
method canProofBeMarkedAsMissing*(
method canMarkProofAsMissing*(
market: MockMarket, id: SlotId, period: Period
): Future[bool] {.async.} =
): Future[bool] {.async: (raises: [CancelledError]).} =
return market.canBeMarkedAsMissing.contains(id)
method reserveSlot*(

View File

@ -142,7 +142,7 @@ asyncchecksuite "validation":
test "when a proof is missed, it is marked as missing":
await validation.start()
await market.fillSlot(slot.request.id, slot.slotIndex, proof, collateral)
market.setCanProofBeMarkedAsMissing(slot.id, true)
market.setCanMarkProofAsMissing(slot.id, true)
advanceToNextPeriod()
await sleepAsync(100.millis) # allow validation loop to run
check market.markedAsMissingProofs.contains(slot.id)
@ -150,7 +150,7 @@ asyncchecksuite "validation":
test "when a proof can not be marked as missing, it will not be marked":
await validation.start()
await market.fillSlot(slot.request.id, slot.slotIndex, proof, collateral)
market.setCanProofBeMarkedAsMissing(slot.id, false)
market.setCanMarkProofAsMissing(slot.id, false)
advanceToNextPeriod()
await sleepAsync(100.millis) # allow validation loop to run
check market.markedAsMissingProofs.len == 0

View File

@ -189,7 +189,46 @@ ethersuite "On-Chain Market":
let missingPeriod =
periodicity.periodOf((await ethProvider.currentTime()).truncate(uint64))
await advanceToNextPeriod()
check (await market.canProofBeMarkedAsMissing(slotId, missingPeriod)) == true
check (await market.canMarkProofAsMissing(slotId, missingPeriod)) == true
test "can check whether a proof cannot be marked as missing when the slot is free":
let slotId = slotId(request, slotIndex)
await market.requestStorage(request)
await market.reserveSlot(request.id, slotIndex)
await market.fillSlot(request.id, slotIndex, proof, request.ask.collateralPerSlot)
await waitUntilProofRequired(slotId)
await market.freeSlot(slotId(request.id, slotIndex))
let missingPeriod =
periodicity.periodOf((await ethProvider.currentTime()).truncate(uint64))
await advanceToNextPeriod()
check (await market.canMarkProofAsMissing(slotId, missingPeriod)) == false
test "can check whether a proof cannot be marked as missing before a proof is required":
let slotId = slotId(request, slotIndex)
await market.requestStorage(request)
await market.reserveSlot(request.id, slotIndex)
await market.fillSlot(request.id, slotIndex, proof, request.ask.collateralPerSlot)
let missingPeriod =
periodicity.periodOf((await ethProvider.currentTime()).truncate(uint64))
await advanceToNextPeriod()
check (await market.canMarkProofAsMissing(slotId, missingPeriod)) == false
test "can check whether a proof cannot be marked as missing if the proof was submitted":
let slotId = slotId(request, slotIndex)
await market.requestStorage(request)
await market.reserveSlot(request.id, slotIndex)
await market.fillSlot(request.id, slotIndex, proof, request.ask.collateralPerSlot)
await waitUntilProofRequired(slotId)
await market.submitProof(slotId(request.id, slotIndex), proof)
let missingPeriod =
periodicity.periodOf((await ethProvider.currentTime()).truncate(uint64))
await advanceToNextPeriod()
check (await market.canMarkProofAsMissing(slotId, missingPeriod)) == false
test "supports slot filled subscriptions":
await market.requestStorage(request)

@ -1 +1 @@
Subproject commit 470a4df4152b53a8065c2984d55efcd7350b549a
Subproject commit aee91f1ac411258af338af5145e0112e6ab6f5df