import pkg/chronos import pkg/ethers/erc20 from pkg/libp2p import Cid import pkg/codex/contracts/marketplace as mp import pkg/codex/periods import pkg/codex/utils/json import ./multinodes import ../contracts/time import ../contracts/deployment export mp export multinodes template marketplacesuite*(name: string, body: untyped) = multinodesuite name: var marketplace {.inject, used.}: Marketplace var period: uint64 var periodicity: Periodicity var token {.inject, used.}: Erc20Token proc getCurrentPeriod(): Future[Period] {.async.} = return periodicity.periodOf(await ethProvider.currentTime()) proc advanceToNextPeriod() {.async.} = let periodicity = Periodicity(seconds: period.u256) let currentTime = await ethProvider.currentTime() let currentPeriod = periodicity.periodOf(currentTime) let endOfPeriod = periodicity.periodEnd(currentPeriod) await ethProvider.advanceTimeTo(endOfPeriod + 1) template eventuallyP(condition: untyped, finalPeriod: Period): bool = proc eventuallyP: Future[bool] {.async.} = while( let currentPeriod = await getCurrentPeriod(); currentPeriod <= finalPeriod ): if condition: return true await sleepAsync(1.millis) return condition await eventuallyP() proc periods(p: int): uint64 = p.uint64 * period proc createAvailabilities(datasetSize: int, duration: uint64) = # post availability to each provider for i in 0..