[market] Add market.getRequest()

This commit is contained in:
Mark Spanbroek 2022-06-15 14:12:34 +02:00 committed by markspanbroek
parent 7c50d9f739
commit b414ecd67e
5 changed files with 29 additions and 0 deletions

View File

@ -31,6 +31,14 @@ method requestStorage(market: OnChainMarket,
await market.contract.requestStorage(request) await market.contract.requestStorage(request)
return request return request
method getRequest(market: OnChainMarket,
id: array[32, byte]): Future[?StorageRequest] {.async.} =
let request = await market.contract.getRequest(id)
if request != StorageRequest.default:
return some request
else:
return none StorageRequest
method fulfillRequest(market: OnChainMarket, method fulfillRequest(market: OnChainMarket,
requestId: array[32, byte], requestId: array[32, byte],
proof: seq[byte]) {.async.} = proof: seq[byte]) {.async.} =

View File

@ -30,6 +30,7 @@ proc balanceOf*(storage: Storage, account: Address): UInt256 {.contract, view.}
proc requestStorage*(storage: Storage, request: StorageRequest) {.contract.} proc requestStorage*(storage: Storage, request: StorageRequest) {.contract.}
proc fulfillRequest*(storage: Storage, id: Id, proof: seq[byte]) {.contract.} proc fulfillRequest*(storage: Storage, id: Id, proof: seq[byte]) {.contract.}
proc getRequest*(storage: Storage, id: Id): StorageRequest {.contract, view.}
proc finishContract*(storage: Storage, id: Id) {.contract.} proc finishContract*(storage: Storage, id: Id) {.contract.}

View File

@ -1,9 +1,11 @@
import pkg/chronos import pkg/chronos
import pkg/upraises import pkg/upraises
import pkg/questionable
import ./contracts/requests import ./contracts/requests
import ./contracts/offers import ./contracts/offers
export chronos export chronos
export questionable
export requests export requests
export offers export offers
@ -18,6 +20,11 @@ method requestStorage*(market: Market,
Future[StorageRequest] {.base, async.} = Future[StorageRequest] {.base, async.} =
raiseAssert("not implemented") raiseAssert("not implemented")
method getRequest*(market: Market,
id: array[32, byte]):
Future[?StorageRequest] {.base, async.} =
raiseAssert("not implemented")
method fulfillRequest*(market: Market, method fulfillRequest*(market: Market,
requestId: array[32, byte], requestId: array[32, byte],
proof: seq[byte]) {.base, async.} = proof: seq[byte]) {.base, async.} =

View File

@ -30,6 +30,13 @@ method requestStorage*(market: MockMarket,
subscription.callback(request.id, request.ask) subscription.callback(request.id, request.ask)
return request return request
method getRequest(market: MockMarket,
id: array[32, byte]): Future[?StorageRequest] {.async.} =
for request in market.requested:
if request.id == id:
return some request
return none StorageRequest
method fulfillRequest*(market: MockMarket, method fulfillRequest*(market: MockMarket,
requestId: array[32, byte], requestId: array[32, byte],
proof: seq[byte]) {.async.} = proof: seq[byte]) {.async.} =

View File

@ -49,6 +49,12 @@ ethersuite "On-Chain Market":
let submitted = await market.requestStorage(requestWithoutClient) let submitted = await market.requestStorage(requestWithoutClient)
check submitted.client == accounts[0] check submitted.client == accounts[0]
test "can retrieve previously submitted requests":
check (await market.getRequest(request.id)) == none StorageRequest
await token.approve(storage.address, request.ask.maxPrice)
discard await market.requestStorage(request)
check (await market.getRequest(request.id)) == some request
test "supports request subscriptions": test "supports request subscriptions":
var receivedIds: seq[array[32, byte]] var receivedIds: seq[array[32, byte]]
var receivedAsks: seq[StorageAsk] var receivedAsks: seq[StorageAsk]