mirror of
https://github.com/codex-storage/nim-codex.git
synced 2025-02-23 10:08:17 +00:00
- getState / state > requestState - getSlot > getRequestFromSlotId - support MarketplaceConfig - support slotState, remove unneeded Slot type - collateral > config.collateral.initialAmount - remove proofPeriod contract call - Revert reason “Slot empty” > “Slot is free” - getProofEnd > read SlotState Tests for changes
48 lines
1.3 KiB
Nim
48 lines
1.3 KiB
Nim
import ../statemachine
|
|
import ./filled
|
|
import ./finished
|
|
import ./failed
|
|
import ./errored
|
|
import ./cancelled
|
|
|
|
type
|
|
SaleUnknown* = ref object of SaleState
|
|
SaleUnknownError* = object of CatchableError
|
|
|
|
method `$`*(state: SaleUnknown): string = "SaleUnknown"
|
|
|
|
method onCancelled*(state: SaleUnknown, request: StorageRequest) {.async.} =
|
|
await state.switchAsync(SaleCancelled())
|
|
|
|
method onFailed*(state: SaleUnknown, request: StorageRequest) {.async.} =
|
|
await state.switchAsync(SaleFailed())
|
|
|
|
method enterAsync(state: SaleUnknown) {.async.} =
|
|
without agent =? (state.context as SalesAgent):
|
|
raiseAssert "invalid state"
|
|
|
|
let market = agent.sales.market
|
|
|
|
try:
|
|
without requestState =? await market.requestState(agent.requestId):
|
|
raiseAssert "state unknown"
|
|
|
|
case requestState
|
|
of RequestState.New, RequestState.Started:
|
|
await state.switchAsync(SaleFilled())
|
|
of RequestState.Finished:
|
|
await state.switchAsync(SaleFinished())
|
|
of RequestState.Cancelled:
|
|
await state.switchAsync(SaleCancelled())
|
|
of RequestState.Failed:
|
|
await state.switchAsync(SaleFailed())
|
|
|
|
except CancelledError:
|
|
discard
|
|
|
|
except CatchableError as e:
|
|
let error = newException(SaleUnknownError,
|
|
"error in unknown state",
|
|
e)
|
|
await state.switchAsync(SaleErrored(error: error))
|