From 19d045e714f40a070e5818669cf9dd346ec9a95b Mon Sep 17 00:00:00 2001 From: Arnaud Date: Tue, 4 Mar 2025 13:59:46 +0100 Subject: [PATCH] 1- Add the total collateral in the availability table 2- Define the min price per byte as 1 3- Use `0.1` step for the availability size 4- Round the total size number 5- Use the total size value (= 1 token per byte) by default for the total collateral 6- Do not allow negative numbers when creating the storage requests 7- Reduce the default reward and collateral for the storage request --- src/components/Availability/AvailabilitiesTable.tsx | 11 ++++++++--- src/components/Availability/AvailabilityEdit.tsx | 2 +- src/components/Availability/AvailabilityForm.tsx | 9 +++++++-- .../Availability/availability.utils.test.ts | 4 ++-- src/components/Availability/availability.utils.ts | 8 +++++++- src/components/CardNumbers/CardNumbers.tsx | 1 + .../StorageRequestSetup/StorageRequestCreate.tsx | 4 ++-- .../StorageRequestSetup/StorageRequestReview.tsx | 2 +- 8 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/components/Availability/AvailabilitiesTable.tsx b/src/components/Availability/AvailabilitiesTable.tsx index ba7baf0..f00fdb2 100644 --- a/src/components/Availability/AvailabilitiesTable.tsx +++ b/src/components/Availability/AvailabilitiesTable.tsx @@ -49,8 +49,11 @@ export function AvailabilitiesTable({ availabilities, space }: Props) { const onSortByPrice = (state: TabSortState) => setSortFn(() => AvailabilityUtils.sortByPrice(state)); - const onSortByCollateral = (state: TabSortState) => - setSortFn(() => AvailabilityUtils.sortByCollateral(state)); + const onSortByRemainingCollateral = (state: TabSortState) => + setSortFn(() => AvailabilityUtils.sortByRemainingCollateral(state)); + + const onSortByTotalCollateral = (state: TabSortState) => + setSortFn(() => AvailabilityUtils.sortByTotalCollateral(state)); const headers = [ [""], @@ -58,7 +61,8 @@ export function AvailabilitiesTable({ availabilities, space }: Props) { ["total size", onSortBySize], ["duration", onSortByDuration], ["min price per byte", onSortByPrice], - ["remaining collateral", onSortByCollateral], + ["remaining collateral", onSortByRemainingCollateral], + ["total collateral", onSortByTotalCollateral], ["actions"], ] satisfies [string, ((state: TabSortState) => void)?][]; @@ -90,6 +94,7 @@ export function AvailabilitiesTable({ availabilities, space }: Props) { {Times.pretty(a.duration)}, {a.minPricePerBytePerSecond.toString()}, {a.totalRemainingCollateral.toString()}, + {a.totalCollateral.toString()}, , ]}> diff --git a/src/components/Availability/AvailabilityEdit.tsx b/src/components/Availability/AvailabilityEdit.tsx index 397f898..5b7590a 100644 --- a/src/components/Availability/AvailabilityEdit.tsx +++ b/src/components/Availability/AvailabilityEdit.tsx @@ -30,7 +30,7 @@ const CONFIRM_STATE = 2; const defaultAvailabilityData: AvailabilityState = { totalSize: 0.5, duration: 1, - minPricePerBytePerSecond: 0, + minPricePerBytePerSecond: 1, totalCollateral: 0, totalSizeUnit: "gb", durationUnit: "days", diff --git a/src/components/Availability/AvailabilityForm.tsx b/src/components/Availability/AvailabilityForm.tsx index bfdf399..44406eb 100644 --- a/src/components/Availability/AvailabilityForm.tsx +++ b/src/components/Availability/AvailabilityForm.tsx @@ -11,6 +11,7 @@ import NodesIcon from "../../assets/icons/nodes.svg?react"; import InfoIcon from "../../assets/icons/info.svg?react"; import { attributes } from "../../utils/attributes"; import { AvailabilityUtils } from "./availability.utils"; +import { GB } from "../../utils/constants"; export function AvailabilityForm({ dispatch, @@ -144,12 +145,13 @@ export function AvailabilityForm({ max={available.toFixed(2)} onChange={onAvailablityChange} onGroupChange={onTotalSizeUnitChange} - value={availability.totalSize.toString()} + value={availability.totalSize.toFixed(2)} min={"0"} group={[ ["gb", "GB"], // ["tb", "TB"], ]} + step="0.1" groupValue={availability.totalSizeUnit} extra={Use max size} /> @@ -208,7 +210,10 @@ export function AvailabilityForm({ label="Total collateral" min={0} onChange={onInputChange} - value={availability.totalCollateral.toString()} + value={( + availability.totalCollateral || + Math.round(availability.totalSize * GB) + ).toString()} /> { const descSorted = items .slice() - .sort(AvailabilityUtils.sortByCollateral("desc")); + .sort(AvailabilityUtils.sortByRemainingCollateral("desc")); assert.deepEqual(descSorted, [b, a]); const ascSorted = items .slice() - .sort(AvailabilityUtils.sortByCollateral("asc")); + .sort(AvailabilityUtils.sortByRemainingCollateral("asc")); assert.deepEqual(ascSorted, [a, b]); }); diff --git a/src/components/Availability/availability.utils.ts b/src/components/Availability/availability.utils.ts index 88e7d86..c895e12 100644 --- a/src/components/Availability/availability.utils.ts +++ b/src/components/Availability/availability.utils.ts @@ -25,12 +25,18 @@ export const AvailabilityUtils = { state === "desc" ? b.minPricePerBytePerSecond - a.minPricePerBytePerSecond : a.minPricePerBytePerSecond - b.minPricePerBytePerSecond, - sortByCollateral: + sortByRemainingCollateral: (state: TabSortState) => (a: AvailabilityWithSlots, b: AvailabilityWithSlots) => state === "desc" ? b.totalRemainingCollateral - a.totalRemainingCollateral : a.totalRemainingCollateral - b.totalRemainingCollateral, + sortByTotalCollateral: + (state: TabSortState) => + (a: AvailabilityWithSlots, b: AvailabilityWithSlots) => + state === "desc" + ? b.totalCollateral - a.totalCollateral + : a.totalCollateral - b.totalCollateral, toUnit(bytes: number, unit: "gb" | "tb") { return bytes / this.unitValue(unit || "gb"); }, diff --git a/src/components/CardNumbers/CardNumbers.tsx b/src/components/CardNumbers/CardNumbers.tsx index 4b2896e..bf0b5d5 100644 --- a/src/components/CardNumbers/CardNumbers.tsx +++ b/src/components/CardNumbers/CardNumbers.tsx @@ -52,6 +52,7 @@ export function CardNumbers({ value={value} type="number" isInvalid={!!error} + min={0} onChange={onInternalChange}> diff --git a/src/components/StorageRequestSetup/StorageRequestCreate.tsx b/src/components/StorageRequestSetup/StorageRequestCreate.tsx index f2a674b..4c13b1e 100644 --- a/src/components/StorageRequestSetup/StorageRequestCreate.tsx +++ b/src/components/StorageRequestSetup/StorageRequestCreate.tsx @@ -27,8 +27,8 @@ const defaultStorageRequest: StorageRequest = { tolerance: 1, proofProbability: 1, nodes: 3, - reward: 10, - collateral: 10, + reward: 1, + collateral: 1, expiration: 5, }; diff --git a/src/components/StorageRequestSetup/StorageRequestReview.tsx b/src/components/StorageRequestSetup/StorageRequestReview.tsx index c04b8c6..a84b86f 100644 --- a/src/components/StorageRequestSetup/StorageRequestReview.tsx +++ b/src/components/StorageRequestSetup/StorageRequestReview.tsx @@ -288,7 +288,7 @@ export function StorageRequestReview({ value={storageRequest.collateral.toString()} onChange={onCollateralChange} onValidation={isInvalidNumber} - title="Penality tokens"> + title="Penality tokens per byte">