Skip to content

Commit d0b23f5

Browse files
authored
Merge branch 'master' into feat/rework-zk-proving
2 parents b8ebaba + 2e1306a commit d0b23f5

File tree

12 files changed

+82
-27
lines changed

12 files changed

+82
-27
lines changed

codex/contracts/market.nim

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,12 @@ method submitProof*(
366366
market: OnChainMarket, id: SlotId, proof: Groth16Proof
367367
) {.async: (raises: [CancelledError, MarketError]).} =
368368
convertEthersError("Failed to submit proof"):
369-
discard await market.contract.submitProof(id, proof).confirm(1)
369+
try:
370+
discard await market.contract.submitProof(id, proof).confirm(1)
371+
except Proofs_InvalidProof as parent:
372+
raise newException(
373+
ProofInvalidError, "Failed to submit proof because the proof is invalid", parent
374+
)
370375

371376
method markProofAsMissing*(
372377
market: OnChainMarket, id: SlotId, period: Period
@@ -379,14 +384,12 @@ method markProofAsMissing*(
379384

380385
discard await market.contract.markProofAsMissing(id, period, overrides).confirm(1)
381386

382-
method canProofBeMarkedAsMissing*(
387+
method canMarkProofAsMissing*(
383388
market: OnChainMarket, id: SlotId, period: Period
384-
): Future[bool] {.async.} =
385-
let provider = market.contract.provider
386-
let contractWithoutSigner = market.contract.connect(provider)
387-
let overrides = CallOverrides(blockTag: some BlockTag.pending)
389+
): Future[bool] {.async: (raises: [CancelledError]).} =
388390
try:
389-
discard await contractWithoutSigner.markProofAsMissing(id, period, overrides)
391+
let overrides = CallOverrides(blockTag: some BlockTag.pending)
392+
discard await market.contract.canMarkProofAsMissing(id, period, overrides)
390393
return true
391394
except EthersError as e:
392395
trace "Proof cannot be marked as missing", msg = e.msg

codex/contracts/marketplace.nim

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,17 @@ proc markProofAsMissing*(
178178
]
179179
.}
180180

181+
proc canMarkProofAsMissing*(
182+
marketplace: Marketplace, id: SlotId, period: uint64
183+
): Confirmable {.
184+
contract,
185+
errors: [
186+
Marketplace_SlotNotAcceptingProofs, Proofs_PeriodNotEnded,
187+
Proofs_ValidationTimedOut, Proofs_ProofNotMissing, Proofs_ProofNotRequired,
188+
Proofs_ProofAlreadyMarkedMissing,
189+
]
190+
.}
191+
181192
proc reserveSlot*(
182193
marketplace: Marketplace, requestId: RequestId, slotIndex: uint64
183194
): Confirmable {.contract.}

codex/market.nim

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ type
2020
MarketError* = object of CodexError
2121
SlotStateMismatchError* = object of MarketError
2222
SlotReservationNotAllowedError* = object of MarketError
23+
ProofInvalidError* = object of MarketError
2324
Subscription* = ref object of RootObj
2425
OnRequest* =
2526
proc(id: RequestId, ask: StorageAsk, expiry: uint64) {.gcsafe, upraises: [].}
@@ -204,9 +205,9 @@ method markProofAsMissing*(
204205
) {.base, async: (raises: [CancelledError, MarketError]).} =
205206
raiseAssert("not implemented")
206207

207-
method canProofBeMarkedAsMissing*(
208+
method canMarkProofAsMissing*(
208209
market: Market, id: SlotId, period: Period
209-
): Future[bool] {.base, async.} =
210+
): Future[bool] {.base, async: (raises: [CancelledError]).} =
210211
raiseAssert("not implemented")
211212

212213
method reserveSlot*(

codex/sales/reservations.nim

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,8 @@ proc updateAvailability(
351351

352352
if oldAvailability.freeSize < obj.freeSize or oldAvailability.duration < obj.duration or
353353
oldAvailability.minPricePerBytePerSecond < obj.minPricePerBytePerSecond or
354-
oldAvailability.totalCollateral < obj.totalCollateral: # availability updated
354+
oldAvailability.totalRemainingCollateral < obj.totalRemainingCollateral:
355+
# availability updated
355356
# inform subscribers that Availability has been modified (with increased
356357
# size)
357358
if OnAvailabilitySaved =? self.OnAvailabilitySaved:

codex/sales/states/provingsimulated.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ when codex_enable_proof_failures:
4040
try:
4141
warn "Submitting INVALID proof", period = currentPeriod, slotId = slot.id
4242
await market.submitProof(slot.id, Groth16Proof.default)
43-
except Proofs_InvalidProof as e:
43+
except ProofInvalidError as e:
4444
discard # expected
4545
except CancelledError as error:
4646
raise error

codex/validation.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ proc markProofAsMissing(
8585
currentPeriod = validation.getCurrentPeriod()
8686

8787
try:
88-
if await validation.market.canProofBeMarkedAsMissing(slotId, period):
88+
if await validation.market.canMarkProofAsMissing(slotId, period):
8989
trace "Marking proof as missing", slotId, periodProofMissed = period
9090
await validation.market.markProofAsMissing(slotId, period)
9191
else:

tests/codex/helpers/mockmarket.nim

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -381,15 +381,15 @@ method markProofAsMissing*(
381381
) {.async: (raises: [CancelledError, MarketError]).} =
382382
market.markedAsMissingProofs.add(id)
383383

384-
proc setCanProofBeMarkedAsMissing*(mock: MockMarket, id: SlotId, required: bool) =
384+
proc setCanMarkProofAsMissing*(mock: MockMarket, id: SlotId, required: bool) =
385385
if required:
386386
mock.canBeMarkedAsMissing.incl(id)
387387
else:
388388
mock.canBeMarkedAsMissing.excl(id)
389389

390-
method canProofBeMarkedAsMissing*(
390+
method canMarkProofAsMissing*(
391391
market: MockMarket, id: SlotId, period: Period
392-
): Future[bool] {.async.} =
392+
): Future[bool] {.async: (raises: [CancelledError]).} =
393393
return market.canBeMarkedAsMissing.contains(id)
394394

395395
method reserveSlot*(

tests/codex/sales/testreservations.nim

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -427,22 +427,24 @@ asyncchecksuite "Reservations module":
427427

428428
check not called
429429

430-
test "OnAvailabilitySaved called when availability totalCollateral is increased":
430+
test "OnAvailabilitySaved called when availability totalRemainingCollateral is increased":
431431
var availability = createAvailability()
432432
var added: Availability
433433
reservations.OnAvailabilitySaved = proc(a: Availability) {.async: (raises: []).} =
434434
added = a
435-
availability.totalCollateral = availability.totalCollateral + 1.u256
435+
availability.totalRemainingCollateral =
436+
availability.totalRemainingCollateral + 1.u256
436437
discard await reservations.update(availability)
437438

438439
check added == availability
439440

440-
test "OnAvailabilitySaved is not called when availability totalCollateral is decreased":
441+
test "OnAvailabilitySaved is not called when availability totalRemainingCollateral is decreased":
441442
var availability = createAvailability()
442443
var called = false
443444
reservations.OnAvailabilitySaved = proc(a: Availability) {.async: (raises: []).} =
444445
called = true
445-
availability.totalCollateral = availability.totalCollateral - 1.u256
446+
availability.totalRemainingCollateral =
447+
availability.totalRemainingCollateral - 1.u256
446448
discard await reservations.update(availability)
447449

448450
check not called

tests/codex/testvalidation.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,15 @@ asyncchecksuite "validation":
142142
test "when a proof is missed, it is marked as missing":
143143
await validation.start()
144144
await market.fillSlot(slot.request.id, slot.slotIndex, proof, collateral)
145-
market.setCanProofBeMarkedAsMissing(slot.id, true)
145+
market.setCanMarkProofAsMissing(slot.id, true)
146146
advanceToNextPeriod()
147147
await sleepAsync(100.millis) # allow validation loop to run
148148
check market.markedAsMissingProofs.contains(slot.id)
149149

150150
test "when a proof can not be marked as missing, it will not be marked":
151151
await validation.start()
152152
await market.fillSlot(slot.request.id, slot.slotIndex, proof, collateral)
153-
market.setCanProofBeMarkedAsMissing(slot.id, false)
153+
market.setCanMarkProofAsMissing(slot.id, false)
154154
advanceToNextPeriod()
155155
await sleepAsync(100.millis) # allow validation loop to run
156156
check market.markedAsMissingProofs.len == 0

tests/contracts/testMarket.nim

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,46 @@ ethersuite "On-Chain Market":
189189
let missingPeriod =
190190
periodicity.periodOf((await ethProvider.currentTime()).truncate(uint64))
191191
await advanceToNextPeriod()
192-
check (await market.canProofBeMarkedAsMissing(slotId, missingPeriod)) == true
192+
check (await market.canMarkProofAsMissing(slotId, missingPeriod)) == true
193+
194+
test "can check whether a proof cannot be marked as missing when the slot is free":
195+
let slotId = slotId(request, slotIndex)
196+
await market.requestStorage(request)
197+
await market.reserveSlot(request.id, slotIndex)
198+
await market.fillSlot(request.id, slotIndex, proof, request.ask.collateralPerSlot)
199+
await waitUntilProofRequired(slotId)
200+
201+
await market.freeSlot(slotId(request.id, slotIndex))
202+
203+
let missingPeriod =
204+
periodicity.periodOf((await ethProvider.currentTime()).truncate(uint64))
205+
await advanceToNextPeriod()
206+
check (await market.canMarkProofAsMissing(slotId, missingPeriod)) == false
207+
208+
test "can check whether a proof cannot be marked as missing before a proof is required":
209+
let slotId = slotId(request, slotIndex)
210+
await market.requestStorage(request)
211+
await market.reserveSlot(request.id, slotIndex)
212+
await market.fillSlot(request.id, slotIndex, proof, request.ask.collateralPerSlot)
213+
214+
let missingPeriod =
215+
periodicity.periodOf((await ethProvider.currentTime()).truncate(uint64))
216+
await advanceToNextPeriod()
217+
check (await market.canMarkProofAsMissing(slotId, missingPeriod)) == false
218+
219+
test "can check whether a proof cannot be marked as missing if the proof was submitted":
220+
let slotId = slotId(request, slotIndex)
221+
await market.requestStorage(request)
222+
await market.reserveSlot(request.id, slotIndex)
223+
await market.fillSlot(request.id, slotIndex, proof, request.ask.collateralPerSlot)
224+
await waitUntilProofRequired(slotId)
225+
226+
await market.submitProof(slotId(request.id, slotIndex), proof)
227+
228+
let missingPeriod =
229+
periodicity.periodOf((await ethProvider.currentTime()).truncate(uint64))
230+
await advanceToNextPeriod()
231+
check (await market.canMarkProofAsMissing(slotId, missingPeriod)) == false
193232

194233
test "supports slot filled subscriptions":
195234
await market.requestStorage(request)
@@ -575,7 +614,7 @@ ethersuite "On-Chain Market":
575614
switchAccount(host)
576615
await market.reserveSlot(request.id, 0.uint64)
577616
await market.fillSlot(request.id, 0.uint64, proof, request.ask.collateralPerSlot)
578-
let filledAt = (await ethProvider.currentTime())
617+
let filledAt = await ethProvider.blockTime(BlockTag.latest)
579618

580619
for slotIndex in 1 ..< request.ask.slots:
581620
await market.reserveSlot(request.id, slotIndex.uint64)

0 commit comments

Comments
 (0)