[marketplace] support freeing of slots and failed state
Support storage contract parameters to free slots after too many proofs missed, as well as fail a contract after too many slots have been freed. # Conflicts: # vendor/dagger-contracts
This commit is contained in:
parent
8dd110765f
commit
b9e53e182f
|
@ -36,10 +36,14 @@ method requestStorage(market: OnChainMarket,
|
||||||
|
|
||||||
method getRequest(market: OnChainMarket,
|
method getRequest(market: OnChainMarket,
|
||||||
id: RequestId): Future[?StorageRequest] {.async.} =
|
id: RequestId): Future[?StorageRequest] {.async.} =
|
||||||
let request = await market.contract.getRequest(id)
|
try:
|
||||||
if request != StorageRequest.default:
|
let request = await market.contract.getRequest(id)
|
||||||
return some request
|
if request != StorageRequest.default:
|
||||||
else:
|
return some request
|
||||||
|
else:
|
||||||
|
return none StorageRequest
|
||||||
|
except ValueError:
|
||||||
|
# Unknown request
|
||||||
return none StorageRequest
|
return none StorageRequest
|
||||||
|
|
||||||
method getHost(market: OnChainMarket,
|
method getHost(market: OnChainMarket,
|
||||||
|
|
|
@ -19,6 +19,7 @@ type
|
||||||
duration*: UInt256
|
duration*: UInt256
|
||||||
proofProbability*: UInt256
|
proofProbability*: UInt256
|
||||||
reward*: UInt256
|
reward*: UInt256
|
||||||
|
maxSlotLoss*: uint64
|
||||||
StorageContent* = object
|
StorageContent* = object
|
||||||
cid*: string
|
cid*: string
|
||||||
erasure*: StorageErasure
|
erasure*: StorageErasure
|
||||||
|
@ -56,7 +57,8 @@ func fromTuple(_: type StorageAsk, tupl: tuple): StorageAsk =
|
||||||
slotSize: tupl[1],
|
slotSize: tupl[1],
|
||||||
duration: tupl[2],
|
duration: tupl[2],
|
||||||
proofProbability: tupl[3],
|
proofProbability: tupl[3],
|
||||||
reward: tupl[4]
|
reward: tupl[4],
|
||||||
|
maxSlotLoss: tupl[5]
|
||||||
)
|
)
|
||||||
|
|
||||||
func fromTuple(_: type StorageContent, tupl: tuple): StorageContent =
|
func fromTuple(_: type StorageContent, tupl: tuple): StorageContent =
|
||||||
|
|
|
@ -15,7 +15,7 @@ type
|
||||||
SlotFilled* = object of Event
|
SlotFilled* = object of Event
|
||||||
requestId* {.indexed.}: RequestId
|
requestId* {.indexed.}: RequestId
|
||||||
slotIndex* {.indexed.}: UInt256
|
slotIndex* {.indexed.}: UInt256
|
||||||
slotId* {.indexed.}: SlotId
|
slotId*: SlotId
|
||||||
RequestFulfilled* = object of Event
|
RequestFulfilled* = object of Event
|
||||||
requestId* {.indexed.}: RequestId
|
requestId* {.indexed.}: RequestId
|
||||||
RequestCancelled* = object of Event
|
RequestCancelled* = object of Event
|
||||||
|
@ -28,6 +28,7 @@ type
|
||||||
proc collateralAmount*(storage: Storage): UInt256 {.contract, view.}
|
proc collateralAmount*(storage: Storage): UInt256 {.contract, view.}
|
||||||
proc slashMisses*(storage: Storage): UInt256 {.contract, view.}
|
proc slashMisses*(storage: Storage): UInt256 {.contract, view.}
|
||||||
proc slashPercentage*(storage: Storage): UInt256 {.contract, view.}
|
proc slashPercentage*(storage: Storage): UInt256 {.contract, view.}
|
||||||
|
proc minCollateralThreshold*(storage: Storage): UInt256 {.contract, view.}
|
||||||
|
|
||||||
proc deposit*(storage: Storage, amount: UInt256) {.contract.}
|
proc deposit*(storage: Storage, amount: UInt256) {.contract.}
|
||||||
proc withdraw*(storage: Storage) {.contract.}
|
proc withdraw*(storage: Storage) {.contract.}
|
||||||
|
|
|
@ -270,7 +270,8 @@ proc requestStorage*(self: CodexNodeRef,
|
||||||
slots: nodes + tolerance,
|
slots: nodes + tolerance,
|
||||||
slotSize: (encoded.blockSize * encoded.steps).u256,
|
slotSize: (encoded.blockSize * encoded.steps).u256,
|
||||||
duration: duration,
|
duration: duration,
|
||||||
reward: reward
|
reward: reward,
|
||||||
|
maxSlotLoss: tolerance
|
||||||
),
|
),
|
||||||
content: StorageContent(
|
content: StorageContent(
|
||||||
cid: $encodedBlk.cid,
|
cid: $encodedBlk.cid,
|
||||||
|
|
|
@ -17,7 +17,8 @@ proc example*(_: type StorageRequest): StorageRequest =
|
||||||
slotSize: (1 * 1024 * 1024 * 1024).u256, # 1 Gigabyte
|
slotSize: (1 * 1024 * 1024 * 1024).u256, # 1 Gigabyte
|
||||||
duration: (10 * 60 * 60).u256, # 10 hours
|
duration: (10 * 60 * 60).u256, # 10 hours
|
||||||
proofProbability: 4.u256, # require a proof roughly once every 4 periods
|
proofProbability: 4.u256, # require a proof roughly once every 4 periods
|
||||||
reward: 84.u256
|
reward: 84.u256,
|
||||||
|
maxSlotLoss: 2 # 2 slots can be freed without data considered to be lost
|
||||||
),
|
),
|
||||||
content: StorageContent(
|
content: StorageContent(
|
||||||
cid: "zb2rhheVmk3bLks5MgzTqyznLu1zqGH5jrfTA1eAZXrjx7Vob",
|
cid: "zb2rhheVmk3bLks5MgzTqyznLu1zqGH5jrfTA1eAZXrjx7Vob",
|
||||||
|
|
|
@ -135,7 +135,7 @@ ethersuite "On-Chain Market":
|
||||||
|
|
||||||
await token.approve(storage.address, request.price)
|
await token.approve(storage.address, request.price)
|
||||||
discard await market.requestStorage(request)
|
discard await market.requestStorage(request)
|
||||||
await token.approve(storage.address, otherrequest.price)
|
await token.approve(storage.address, otherRequest.price)
|
||||||
discard await market.requestStorage(otherRequest)
|
discard await market.requestStorage(otherRequest)
|
||||||
|
|
||||||
var receivedIds: seq[RequestId]
|
var receivedIds: seq[RequestId]
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 06e58fdc4923999cb93e54b55a5e68da26435628
|
Subproject commit c27d4f870c99f8657027ec9b1ab24223adba9859
|
Loading…
Reference in New Issue