Use BigInt instead of number of token values

This commit is contained in:
Arnaud 2025-04-11 14:59:53 +02:00
parent 59837ece13
commit 1a3b6bd876
No known key found for this signature in database
GPG Key ID: B8FBC178F10CA7AE
3 changed files with 67 additions and 31 deletions

View File

@ -33,16 +33,16 @@ describe("marketplace", async () => {
describe("create", async () => { describe("create", async () => {
it("verifies that the availability was created successfully", async () => { it("verifies that the availability was created successfully", async () => {
assert.ok(availability.id); assert.ok(availability.id);
assert.strictEqual(availability.duration, duration); assert.equal(availability.duration, duration);
assert.strictEqual(availability.freeSize, totalSize); assert.equal(availability.freeSize, totalSize);
assert.strictEqual( assert.equal(
availability.minPricePerBytePerSecond, availability.minPricePerBytePerSecond,
minPricePerBytePerSecond BigInt(minPricePerBytePerSecond)
); );
assert.strictEqual(availability.totalCollateral, totalCollateral); assert.equal(availability.totalCollateral, BigInt(totalCollateral));
assert.strictEqual( assert.equal(
availability.totalRemainingCollateral, availability.totalRemainingCollateral,
totalCollateral BigInt(totalCollateral)
); );
assert.strictEqual(availability.totalSize, totalSize); assert.strictEqual(availability.totalSize, totalSize);
assert.strictEqual(availability.until, 0); assert.strictEqual(availability.until, 0);
@ -52,8 +52,8 @@ describe("marketplace", async () => {
const errors: Partial<CodexCreateAvailabilityInput>[] = [ const errors: Partial<CodexCreateAvailabilityInput>[] = [
{ duration: 0 }, { duration: 0 },
{ totalSize: 0 }, { totalSize: 0 },
{ totalCollateral: -1 }, { totalCollateral: BigInt(-1) },
{ minPricePerBytePerSecond: -1 }, { minPricePerBytePerSecond: BigInt(-1) },
]; ];
for (const err of errors) { for (const err of errors) {
@ -90,9 +90,9 @@ describe("marketplace", async () => {
const updates: Omit<CodexAvailabilityPatchInput, "id">[] = [ const updates: Omit<CodexAvailabilityPatchInput, "id">[] = [
{ enabled: false }, { enabled: false },
{ duration: 3000 }, { duration: 3000 },
{ minPricePerBytePerSecond: 1 }, { minPricePerBytePerSecond: BigInt(1) },
{ totalSize: 3000 }, { totalSize: 3000 },
{ totalCollateral: 3000 }, { totalCollateral: BigInt(3000) },
{ until: 5000 }, { until: 5000 },
]; ];

View File

@ -78,9 +78,9 @@ export class CodexMarketplace {
}: CodexAvailabilityWithoutTypes) { }: CodexAvailabilityWithoutTypes) {
const availability: CodexAvailability = { const availability: CodexAvailability = {
...a, ...a,
minPricePerBytePerSecond: parseInt(a.minPricePerBytePerSecond, 10), minPricePerBytePerSecond: BigInt(a.minPricePerBytePerSecond),
totalCollateral: parseInt(a.totalCollateral, 10), totalCollateral: BigInt(a.totalCollateral),
totalRemainingCollateral: parseInt(a.totalRemainingCollateral, 10), totalRemainingCollateral: BigInt(a.totalRemainingCollateral),
}; };
if (freeSize) { if (freeSize) {

View File

@ -20,18 +20,14 @@ export type CodexAvailabilityWithoutTypes =
export type CodexAvailability = Omit< export type CodexAvailability = Omit<
CodexAvailabilityWithoutTypes, CodexAvailabilityWithoutTypes,
| "freeSize" | "freeSize"
| "totalSize"
| "minPricePerBytePerSecond" | "minPricePerBytePerSecond"
| "duration"
| "totalCollateral" | "totalCollateral"
| "totalRemainingCollateral" | "totalRemainingCollateral"
> & { > & {
freeSize?: number; freeSize?: number;
totalSize: number; minPricePerBytePerSecond: BigInt;
duration: number; totalCollateral: BigInt;
minPricePerBytePerSecond: number; totalRemainingCollateral: BigInt;
totalCollateral: number;
totalRemainingCollateral: number;
}; };
export type CodexAvailabilityCreateResponse = export type CodexAvailabilityCreateResponse =
@ -45,8 +41,22 @@ export type CodexAvailabilityCreateBody = Exclude<
export const CodexCreateAvailabilityInput = v.strictObject({ export const CodexCreateAvailabilityInput = v.strictObject({
totalSize: v.pipe(v.number(), v.minValue(1)), totalSize: v.pipe(v.number(), v.minValue(1)),
duration: v.pipe(v.number(), v.minValue(1)), duration: v.pipe(v.number(), v.minValue(1)),
minPricePerBytePerSecond: v.pipe(v.number(), v.minValue(0)), minPricePerBytePerSecond: v.union([
totalCollateral: v.pipe(v.number(), v.minValue(0)), v.bigint(),
v.pipe(
v.number(),
v.minValue(0),
v.transform((input) => BigInt(input))
),
]),
totalCollateral: v.union([
v.bigint(),
v.pipe(
v.number(),
v.minValue(0),
v.transform((input) => BigInt(input))
),
]),
enabled: v.optional(v.boolean()), enabled: v.optional(v.boolean()),
until: v.optional(v.pipe(v.number(), v.minValue(0))), until: v.optional(v.pipe(v.number(), v.minValue(0))),
}); });
@ -61,23 +71,49 @@ export type CodexAvailabilityPatchBody = Partial<
>["content"]["application/json"] >["content"]["application/json"]
>; >;
export type CodexCreateAvailabilityInput = v.InferOutput< export type CodexCreateAvailabilityInput = Omit<
typeof CodexCreateAvailabilityInput v.InferOutput<typeof CodexCreateAvailabilityInput>,
>; "minPricePerBytePerSecond" | "totalCollateral"
> & {
minPricePerBytePerSecond?: number | BigInt;
totalCollateral?: number | BigInt;
};
export const CodexAvailabilityPatchInput = v.strictObject({ export const CodexAvailabilityPatchInput = v.strictObject({
id: v.string(), id: v.string(),
totalSize: v.optional(v.pipe(v.number(), v.minValue(1))), totalSize: v.optional(v.pipe(v.number(), v.minValue(1))),
duration: v.optional(v.pipe(v.number(), v.minValue(1))), duration: v.optional(v.pipe(v.number(), v.minValue(1))),
minPricePerBytePerSecond: v.optional(v.pipe(v.number(), v.minValue(1))), minPricePerBytePerSecond: v.optional(
totalCollateral: v.optional(v.pipe(v.number(), v.minValue(0))), v.union([
v.bigint(),
v.pipe(
v.number(),
v.minValue(1),
v.transform((input) => BigInt(input))
),
])
),
totalCollateral: v.optional(
v.union([
v.bigint(),
v.pipe(
v.number(),
v.minValue(0),
v.transform((input) => BigInt(input))
),
])
),
enabled: v.optional(v.boolean()), enabled: v.optional(v.boolean()),
until: v.optional(v.pipe(v.number(), v.minValue(0))), until: v.optional(v.pipe(v.number(), v.minValue(0))),
}); });
export type CodexAvailabilityPatchInput = v.InferOutput< export type CodexAvailabilityPatchInput = Omit<
typeof CodexAvailabilityPatchInput v.InferOutput<typeof CodexAvailabilityPatchInput>,
>; "minPricePerBytePerSecond" | "totalCollateral"
> & {
minPricePerBytePerSecond?: number | BigInt;
totalCollateral?: number | BigInt;
};
export type CodexReservationsResponse = export type CodexReservationsResponse =
paths["/sales/availability/{id}/reservations"]["get"]["responses"][200]["content"]["application/json"]; paths["/sales/availability/{id}/reservations"]["get"]["responses"][200]["content"]["application/json"];