mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-01-02 13:33:10 +00:00
* Add availability enabled parameter * Return bytes to availability when finished * Add until parameter * Remove debug message * Clean up and fix tests * Update documentations and cleanup * Avoid swallowing CancelledError * Move until validation to reservations module * Call onAvailabilityAdded callabck when the availability is enabled in sales * Remove until validation in restapi when creating an availability * Add openapi documentation * Use results instead of stew/results (#1112) * feat: request duration limit (#1057) * feat: request duration limit * Fix tests and duration type * Add custom error * Remove merge issue * Update codex contracts eth * Update market config and fix test * Fix SlotReservationsConfig syntax * Update dependencies * test: remove doubled test * chore: update contracts repo --------- Co-authored-by: Arnaud <arnaud@status.im> * fix(statemachine): do not raise from state.run (#1115) * fix(statemachine): do not raise from state.run * fix rebase * fix exception handling in SaleProvingSimulated.prove - re-raise CancelledError - don't return State on CatchableError - expect the Proofs_InvalidProof custom error instead of checking a string * asyncSpawn salesagent.onCancelled This was swallowing a KeyError in one of the tests (fixed in the previous commit) * remove error handling states in asyncstatemachine * revert unneeded changes * formatting * PR feedback, logging updates * chore(integration): simplify block expiration integration test (#1100) * chore(integration): simplify block expiration integration test * clean up * fix after rebase * perf: contract storage optimizations (#1094) * perf: contract storage optimizations * Apply optimization changes * Apply optimizing parameters sizing * Update codex-contracts-eth * bump latest changes in contracts branch * Change requestDurationLimit to uint64 * fix tests * fix tests --------- Co-authored-by: Arnaud <arnaud@status.im> Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com> * bump contracts to master (#1122) * Add availability enabled parameter * Return bytes to availability when finished * Add until parameter * Clean up and fix tests * Move until validation to reservations module * Apply suggestion changes: return the reservation module error * Apply suggestion changes for until dates * Apply suggestion changes: reorganize tests * Fix indent * Remove test related to timing issue * Add raises errors to async pragram and remove useless try except * Update open api documentation * Fix wording * Remove the httpClient restart statements * Use market.getRequestEnd to set validUntil * Remove returnBytes * Use clock.now in testing * Move the api validation file to the right file --------- Co-authored-by: Adam Uhlíř <adam@uhlir.dev> Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
119 lines
3.4 KiB
Nim
119 lines
3.4 KiB
Nim
import pkg/questionable
|
|
import pkg/stew/byteutils
|
|
import pkg/libp2p
|
|
import pkg/codexdht/discv5/node as dn
|
|
import pkg/codexdht/discv5/routing_table as rt
|
|
import ../sales
|
|
import ../purchasing
|
|
import ../utils/json
|
|
import ../manifest
|
|
import ../units
|
|
|
|
export json
|
|
|
|
type
|
|
StorageRequestParams* = object
|
|
duration* {.serialize.}: uint64
|
|
proofProbability* {.serialize.}: UInt256
|
|
pricePerBytePerSecond* {.serialize.}: UInt256
|
|
collateralPerByte* {.serialize.}: UInt256
|
|
expiry* {.serialize.}: uint64
|
|
nodes* {.serialize.}: ?uint
|
|
tolerance* {.serialize.}: ?uint
|
|
|
|
RestPurchase* = object
|
|
requestId* {.serialize.}: RequestId
|
|
request* {.serialize.}: ?StorageRequest
|
|
state* {.serialize.}: string
|
|
error* {.serialize.}: ?string
|
|
|
|
RestAvailability* = object
|
|
totalSize* {.serialize.}: uint64
|
|
duration* {.serialize.}: uint64
|
|
minPricePerBytePerSecond* {.serialize.}: UInt256
|
|
totalCollateral* {.serialize.}: UInt256
|
|
freeSize* {.serialize.}: ?uint64
|
|
enabled* {.serialize.}: ?bool
|
|
until* {.serialize.}: ?SecondsSince1970
|
|
|
|
RestSalesAgent* = object
|
|
state* {.serialize.}: string
|
|
requestId* {.serialize.}: RequestId
|
|
slotIndex* {.serialize.}: uint64
|
|
request* {.serialize.}: ?StorageRequest
|
|
reservation* {.serialize.}: ?Reservation
|
|
|
|
RestContent* = object
|
|
cid* {.serialize.}: Cid
|
|
manifest* {.serialize.}: Manifest
|
|
|
|
RestContentList* = object
|
|
content* {.serialize.}: seq[RestContent]
|
|
|
|
RestNode* = object
|
|
nodeId* {.serialize.}: RestNodeId
|
|
peerId* {.serialize.}: PeerId
|
|
record* {.serialize.}: SignedPeerRecord
|
|
address* {.serialize.}: Option[dn.Address]
|
|
seen* {.serialize.}: bool
|
|
|
|
RestRoutingTable* = object
|
|
localNode* {.serialize.}: RestNode
|
|
nodes* {.serialize.}: seq[RestNode]
|
|
|
|
RestPeerRecord* = object
|
|
peerId* {.serialize.}: PeerId
|
|
seqNo* {.serialize.}: uint64
|
|
addresses* {.serialize.}: seq[AddressInfo]
|
|
|
|
RestNodeId* = object
|
|
id*: NodeId
|
|
|
|
RestRepoStore* = object
|
|
totalBlocks* {.serialize.}: Natural
|
|
quotaMaxBytes* {.serialize.}: NBytes
|
|
quotaUsedBytes* {.serialize.}: NBytes
|
|
quotaReservedBytes* {.serialize.}: NBytes
|
|
|
|
proc init*(_: type RestContentList, content: seq[RestContent]): RestContentList =
|
|
RestContentList(content: content)
|
|
|
|
proc init*(_: type RestContent, cid: Cid, manifest: Manifest): RestContent =
|
|
RestContent(cid: cid, manifest: manifest)
|
|
|
|
proc init*(_: type RestNode, node: dn.Node): RestNode =
|
|
RestNode(
|
|
nodeId: RestNodeId.init(node.id),
|
|
peerId: node.record.data.peerId,
|
|
record: node.record,
|
|
address: node.address,
|
|
seen: node.seen > 0.5,
|
|
)
|
|
|
|
proc init*(_: type RestRoutingTable, routingTable: rt.RoutingTable): RestRoutingTable =
|
|
var nodes: seq[RestNode] = @[]
|
|
for bucket in routingTable.buckets:
|
|
for node in bucket.nodes:
|
|
nodes.add(RestNode.init(node))
|
|
|
|
RestRoutingTable(localNode: RestNode.init(routingTable.localNode), nodes: nodes)
|
|
|
|
proc init*(_: type RestPeerRecord, peerRecord: PeerRecord): RestPeerRecord =
|
|
RestPeerRecord(
|
|
peerId: peerRecord.peerId, seqNo: peerRecord.seqNo, addresses: peerRecord.addresses
|
|
)
|
|
|
|
proc init*(_: type RestNodeId, id: NodeId): RestNodeId =
|
|
RestNodeId(id: id)
|
|
|
|
proc `%`*(obj: StorageRequest | Slot): JsonNode =
|
|
let jsonObj = newJObject()
|
|
for k, v in obj.fieldPairs:
|
|
jsonObj[k] = %v
|
|
jsonObj["id"] = %(obj.id)
|
|
|
|
return jsonObj
|
|
|
|
proc `%`*(obj: RestNodeId): JsonNode =
|
|
% $obj.id
|