nim-codex/codex/sales/states/proving.nim

42 lines
1.1 KiB
Nim

import ../statemachine
import ./filling
import ./cancelled
import ./failed
import ./errored
type
SaleProving* = ref object of SaleState
SaleProvingError* = object of CatchableError
method `$`*(state: SaleProving): string = "SaleProving"
method onCancelled*(state: SaleProving, request: StorageRequest) {.async.} =
await state.switchAsync(SaleCancelled())
method onFailed*(state: SaleProving, request: StorageRequest) {.async.} =
await state.switchAsync(SaleFailed())
method enterAsync(state: SaleProving) {.async.} =
without agent =? (state.context as SalesAgent):
raiseAssert "invalid state"
try:
without request =? agent.request:
raiseAssert "no sale request"
without slotIndex =? agent.slotIndex:
raiseAssert "no slot selected"
without onProve =? agent.sales.onProve:
raiseAssert "onProve callback not set"
let proof = await onProve(request, slotIndex)
await state.switchAsync(SaleFilling(proof: proof))
except CancelledError:
discard
except CatchableError as e:
let error = newException(SaleProvingError, "unknown sale proving error", e)
await state.switchAsync(SaleErrored(error: error))