diff --git a/dagger/purchasing.nim b/dagger/purchasing.nim index f24a86cd..2ef6f29a 100644 --- a/dagger/purchasing.nim +++ b/dagger/purchasing.nim @@ -1,4 +1,5 @@ import std/times +import std/tables import pkg/stint import pkg/chronos import pkg/questionable @@ -11,6 +12,7 @@ export market type Purchasing* = ref object market: Market + purchases: Table[array[32, byte], Purchase] proofProbability*: UInt256 requestExpiryInterval*: UInt256 offerExpiryMargin*: UInt256 @@ -27,6 +29,7 @@ const DefaultRequestExpiryInterval = (10 * 60).u256 const DefaultOfferExpiryMargin = (8 * 60).u256 proc start(purchase: Purchase) {.gcsafe.} +func id*(purchase: Purchase): array[32, byte] proc new*(_: type Purchasing, market: Market): Purchasing = Purchasing( @@ -53,8 +56,15 @@ proc purchase*(purchasing: Purchasing, request: StorageRequest): Purchase = offerExpiryMargin: purchasing.offerExpiryMargin ) purchase.start() + purchasing.purchases[purchase.id] = purchase purchase +func getPurchase*(purchasing: Purchasing, id: array[32, byte]): ?Purchase = + if purchasing.purchases.hasKey(id): + some purchasing.purchases[id] + else: + none Purchase + proc selectOffer(purchase: Purchase) {.async.} = var cheapest: ?StorageOffer for offer in purchase.offers: diff --git a/tests/dagger/testpurchasing.nim b/tests/dagger/testpurchasing.nim index 0c87440a..f9716563 100644 --- a/tests/dagger/testpurchasing.nim +++ b/tests/dagger/testpurchasing.nim @@ -34,6 +34,12 @@ suite "Purchasing": check submitted.ask.size == request.ask.size check submitted.ask.maxPrice == request.ask.maxPrice + test "remembers purchases": + let purchase1 = purchasing.purchase(request) + let purchase2 = purchasing.purchase(request) + check purchasing.getPurchase(purchase1.id) == some purchase1 + check purchasing.getPurchase(purchase2.id) == some purchase2 + test "has a default value for proof probability": check purchasing.proofProbability != 0.u256