Update to price per byte

This commit is contained in:
Arnaud 2025-02-10 21:42:55 +01:00
parent cc066ffa40
commit df09719bb3
No known key found for this signature in database
GPG Key ID: 69D6CE281FCAE663
6 changed files with 54 additions and 52 deletions

8
package-lock.json generated
View File

@ -10,7 +10,7 @@
"license": "MIT",
"dependencies": {
"@codex-storage/marketplace-ui-components": "^0.0.51",
"@codex-storage/sdk-js": "^0.0.17",
"@codex-storage/sdk-js": "^0.0.18",
"@sentry/browser": "^8.32.0",
"@sentry/react": "^8.31.0",
"@tanstack/react-query": "^5.51.15",
@ -433,9 +433,9 @@
}
},
"node_modules/@codex-storage/sdk-js": {
"version": "0.0.17",
"resolved": "https://registry.npmjs.org/@codex-storage/sdk-js/-/sdk-js-0.0.17.tgz",
"integrity": "sha512-rd9c1TkLJMPSjxg9IFoDmK44DaEOU0nGHK9YVGy9Sdnw4oiWTv5wl2N1U8UMkQT+aWBKmwy/VHLdocTqwazdpA==",
"version": "0.0.18",
"resolved": "https://registry.npmjs.org/@codex-storage/sdk-js/-/sdk-js-0.0.18.tgz",
"integrity": "sha512-FbQFRJgSuol6P00Wk76XShSGDIlQpTEr4Zgt3Ze1uRxC8gVpVRiHME2Z5/EOq7Fm25So9aCSD7MSKDULanHDpQ==",
"license": "MIT",
"dependencies": {
"valibot": "^0.32.0"

View File

@ -27,7 +27,7 @@
],
"dependencies": {
"@codex-storage/marketplace-ui-components": "^0.0.51",
"@codex-storage/sdk-js": "^0.0.17",
"@codex-storage/sdk-js": "^0.0.18",
"@sentry/browser": "^8.32.0",
"@sentry/react": "^8.31.0",
"@tanstack/react-query": "^5.51.15",

View File

@ -90,9 +90,9 @@ export function PurchasesTable() {
const rows = sorted.map((p, index) => {
const r = p.request;
const ask = p.request.ask;
const duration = parseInt(p.request.ask.duration, 10);
const pf = parseInt(p.request.ask.proofProbability, 10);
const duration = parseInt(ask.duration, 10);
const pf = parseInt(ask.proofProbability, 10);
const reward = PurchaseUtils.calculatePrice(p.request);
return (
<Row
cells={[
@ -105,7 +105,7 @@ export function PurchasesTable() {
<TruncateCell value={r.id} />,
<Cell>{Times.pretty(duration)}</Cell>,
<Cell>{ask.slots.toString()}</Cell>,
<Cell>{ask.reward + " CDX"}</Cell>,
<Cell>{reward + " CDX"}</Cell>,
<Cell>{pf.toString()}</Cell>,
<CustomStateCellRender state={p.state} message={p.error} />,
]}></Row>

View File

@ -1,42 +1,43 @@
import { TabSortState } from "@codex-storage/marketplace-ui-components"
import { CodexPurchase } from "@codex-storage/sdk-js"
import { TabSortState } from "@codex-storage/marketplace-ui-components";
import { CodexPurchase, CodexStorageRequest } from "@codex-storage/sdk-js";
export const PurchaseUtils = {
sortById: (state: TabSortState) =>
(a: CodexPurchase, b: CodexPurchase) => {
return state === "desc"
? b.requestId
.toLocaleLowerCase()
.localeCompare(a.requestId.toLocaleLowerCase())
: a.requestId
.toLocaleLowerCase()
.localeCompare(b.requestId.toLocaleLowerCase())
},
sortByState: (state: TabSortState) =>
(a: CodexPurchase, b: CodexPurchase) => state === "desc"
? b.state
.toLocaleLowerCase()
.localeCompare(a.state.toLocaleLowerCase())
: a.state
.toLocaleLowerCase()
.localeCompare(b.state.toLocaleLowerCase())
,
sortByDuration: (state: TabSortState) =>
(a: CodexPurchase, b: CodexPurchase) => state === "desc"
? Number(b.request.ask.duration) - Number(a.request.ask.duration)
: Number(a.request.ask.duration) - Number(b.request.ask.duration)
,
sortByReward: (state: TabSortState) =>
(a: CodexPurchase, b: CodexPurchase) => state === "desc"
? Number(b.request.ask.reward) - Number(a.request.ask.reward)
: Number(a.request.ask.reward) - Number(b.request.ask.reward)
,
sortByUploadedAt: (state: TabSortState, table: Record<string, number>) =>
(a: CodexPurchase, b: CodexPurchase) => {
return state === "desc"
? (table[b.requestId] || 0) - (table[a.requestId] || 0)
: (table[a.requestId] || 0) - (table[b.requestId] || 0)
}
,
}
sortById: (state: TabSortState) => (a: CodexPurchase, b: CodexPurchase) => {
return state === "desc"
? b.requestId
.toLocaleLowerCase()
.localeCompare(a.requestId.toLocaleLowerCase())
: a.requestId
.toLocaleLowerCase()
.localeCompare(b.requestId.toLocaleLowerCase());
},
sortByState: (state: TabSortState) => (a: CodexPurchase, b: CodexPurchase) =>
state === "desc"
? b.state.toLocaleLowerCase().localeCompare(a.state.toLocaleLowerCase())
: a.state.toLocaleLowerCase().localeCompare(b.state.toLocaleLowerCase()),
sortByDuration:
(state: TabSortState) => (a: CodexPurchase, b: CodexPurchase) =>
state === "desc"
? Number(b.request.ask.duration) - Number(a.request.ask.duration)
: Number(a.request.ask.duration) - Number(b.request.ask.duration),
sortByReward:
(state: TabSortState) => (a: CodexPurchase, b: CodexPurchase) =>
state === "desc"
? PurchaseUtils.calculatePrice(b.request) -
PurchaseUtils.calculatePrice(a.request)
: PurchaseUtils.calculatePrice(a.request) -
PurchaseUtils.calculatePrice(b.request),
sortByUploadedAt:
(state: TabSortState, table: Record<string, number>) =>
(a: CodexPurchase, b: CodexPurchase) => {
return state === "desc"
? (table[b.requestId] || 0) - (table[a.requestId] || 0)
: (table[a.requestId] || 0) - (table[b.requestId] || 0);
},
calculatePrice(request: CodexStorageRequest) {
return (
parseInt(request.ask.slotSize, 10) *
parseInt(request.ask.pricePerBytePerSecond, 10)
);
},
};

View File

@ -83,10 +83,11 @@ export function StorageRequestCreate() {
WebStorage.set("storage-request-step", step);
if (step == CONFIRM_STATE) {
const { availability, availabilityUnit, expiration, ...rest } =
const { availability, availabilityUnit, expiration, reward, ...rest } =
storageRequest;
mutateAsync({
...rest,
pricePerBytePerSecond: reward,
duration: Math.trunc(availability * Times.value(availabilityUnit)),
expiry: expiration * 60,
});

View File

@ -290,13 +290,13 @@ export function StorageRequestReview({
onValidation={isInvalidNumber}
title="Penality tokens"></CardNumbers>
<CardNumbers
helper="The maximum amount of tokens paid per second per slot to hosts the client is willing to pay."
helper="The maximum amount of tokens paid per second per byte to hosts the client is willing to pay."
id="reward"
unit={"Reward"}
value={storageRequest.reward.toString()}
onChange={onRewardChange}
onValidation={isInvalidNumber}
title="Reward tokens for hosts"></CardNumbers>
title="Price per byte"></CardNumbers>
</div>
<div className="row">