@polygonlabs/staker-pool-allocations-schemas 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION.md +5 -0
- package/dist/allocation-history.d.ts +30 -0
- package/dist/allocation-history.d.ts.map +1 -0
- package/dist/allocation-history.js +29 -0
- package/dist/allocation-history.js.map +1 -0
- package/dist/allocation.d.ts +31 -0
- package/dist/allocation.d.ts.map +1 -0
- package/dist/allocation.js +40 -0
- package/dist/allocation.js.map +1 -0
- package/dist/codegen.d.ts +6 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +32 -0
- package/dist/codegen.js.map +1 -0
- package/dist/common.d.ts +19 -0
- package/dist/common.d.ts.map +1 -0
- package/dist/common.js +63 -0
- package/dist/common.js.map +1 -0
- package/dist/distribution.d.ts +60 -0
- package/dist/distribution.d.ts.map +1 -0
- package/dist/distribution.js +43 -0
- package/dist/distribution.js.map +1 -0
- package/dist/error.d.ts +10 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +15 -0
- package/dist/error.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/management.d.ts +80 -0
- package/dist/management.d.ts.map +1 -0
- package/dist/management.js +126 -0
- package/dist/management.js.map +1 -0
- package/dist/proof.d.ts +10 -0
- package/dist/proof.d.ts.map +1 -0
- package/dist/proof.js +25 -0
- package/dist/proof.js.map +1 -0
- package/dist/registry-management.d.ts +525 -0
- package/dist/registry-management.d.ts.map +1 -0
- package/dist/registry-management.js +33 -0
- package/dist/registry-management.js.map +1 -0
- package/dist/registry-public.d.ts +1323 -0
- package/dist/registry-public.d.ts.map +1 -0
- package/dist/registry-public.js +31 -0
- package/dist/registry-public.js.map +1 -0
- package/dist/routes-management/distributions.d.ts +137 -0
- package/dist/routes-management/distributions.d.ts.map +1 -0
- package/dist/routes-management/distributions.js +72 -0
- package/dist/routes-management/distributions.js.map +1 -0
- package/dist/routes-management/excluded-addresses.d.ts +132 -0
- package/dist/routes-management/excluded-addresses.d.ts.map +1 -0
- package/dist/routes-management/excluded-addresses.js +84 -0
- package/dist/routes-management/excluded-addresses.js.map +1 -0
- package/dist/routes-management/operational.d.ts +48 -0
- package/dist/routes-management/operational.d.ts.map +1 -0
- package/dist/routes-management/operational.js +47 -0
- package/dist/routes-management/operational.js.map +1 -0
- package/dist/routes-public/addresses.d.ts +79 -0
- package/dist/routes-public/addresses.d.ts.map +1 -0
- package/dist/routes-public/addresses.js +45 -0
- package/dist/routes-public/addresses.js.map +1 -0
- package/dist/routes-public/allocations.d.ts +155 -0
- package/dist/routes-public/allocations.d.ts.map +1 -0
- package/dist/routes-public/allocations.js +81 -0
- package/dist/routes-public/allocations.js.map +1 -0
- package/dist/routes-public/distributions.d.ts +123 -0
- package/dist/routes-public/distributions.d.ts.map +1 -0
- package/dist/routes-public/distributions.js +55 -0
- package/dist/routes-public/distributions.js.map +1 -0
- package/dist/routes-public/operational.d.ts +46 -0
- package/dist/routes-public/operational.d.ts.map +1 -0
- package/dist/routes-public/operational.js +36 -0
- package/dist/routes-public/operational.js.map +1 -0
- package/dist/routes-public/proofs.d.ts +50 -0
- package/dist/routes-public/proofs.d.ts.map +1 -0
- package/dist/routes-public/proofs.js +34 -0
- package/dist/routes-public/proofs.js.map +1 -0
- package/dist/routes-public/wire.d.ts +60 -0
- package/dist/routes-public/wire.d.ts.map +1 -0
- package/dist/routes-public/wire.js +62 -0
- package/dist/routes-public/wire.js.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/dist/unclaimed-proofs.d.ts +20 -0
- package/dist/unclaimed-proofs.d.ts.map +1 -0
- package/dist/unclaimed-proofs.js +22 -0
- package/dist/unclaimed-proofs.js.map +1 -0
- package/dist/zod.d.ts +3 -0
- package/dist/zod.d.ts.map +1 -0
- package/dist/zod.js +8 -0
- package/dist/zod.js.map +1 -0
- package/openapi.json +1215 -0
- package/package.json +49 -0
- package/src/allocation-history.ts +35 -0
- package/src/allocation.ts +51 -0
- package/src/codegen.ts +50 -0
- package/src/common.ts +76 -0
- package/src/distribution.ts +52 -0
- package/src/error.ts +17 -0
- package/src/index.ts +16 -0
- package/src/management.ts +158 -0
- package/src/proof.ts +27 -0
- package/src/registry-management.ts +36 -0
- package/src/registry-public.ts +33 -0
- package/src/routes-management/distributions.ts +87 -0
- package/src/routes-management/excluded-addresses.ts +103 -0
- package/src/routes-management/operational.ts +60 -0
- package/src/routes-public/addresses.ts +58 -0
- package/src/routes-public/allocations.ts +104 -0
- package/src/routes-public/distributions.ts +69 -0
- package/src/routes-public/operational.ts +55 -0
- package/src/routes-public/proofs.ts +46 -0
- package/src/routes-public/wire.ts +74 -0
- package/src/unclaimed-proofs.ts +27 -0
- package/src/zod.ts +9 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { AddressSchema, DistributionIdSchema, NetworkSchema, PolUsdPriceSchema, WeiSchema } from "./common.js";
|
|
2
|
+
import { z } from "./zod.js";
|
|
3
|
+
// Body shape for `POST /v1/:network/management/distributions`.
|
|
4
|
+
// `distributionId` is optional — when omitted, the handler derives the
|
|
5
|
+
// monthly id (`YYYY-MM`) from the current date in UTC. Providing it
|
|
6
|
+
// makes the call idempotent: re-POSTing with an existing id returns
|
|
7
|
+
// 202 with the existing status rather than enqueueing a duplicate.
|
|
8
|
+
//
|
|
9
|
+
// `force` is the escape hatch for re-running a completed distribution
|
|
10
|
+
// — operator confirms the inputs really changed, the prior completed
|
|
11
|
+
// row + its allocations get hard-deleted, and the worker reruns. The
|
|
12
|
+
// audit trail relies on the surrounding ops log + the persisted
|
|
13
|
+
// `inputsHash`; no soft-delete or version history here in Phase 1.
|
|
14
|
+
export const DistributionTriggerRequestSchema = z
|
|
15
|
+
.object({
|
|
16
|
+
startPoSBlock: WeiSchema.openapi({
|
|
17
|
+
description: 'Inclusive lower bound of the PoS block range to allocate over.'
|
|
18
|
+
}),
|
|
19
|
+
endPoSBlock: WeiSchema.openapi({
|
|
20
|
+
description: 'Exclusive upper bound of the PoS block range to allocate over.'
|
|
21
|
+
}),
|
|
22
|
+
distributionId: DistributionIdSchema.optional().openapi({
|
|
23
|
+
description: 'Optional. When omitted, derived as the current `YYYY-MM` (UTC). ' +
|
|
24
|
+
'Providing it makes the call idempotent — repeat POSTs with the ' +
|
|
25
|
+
'same id return the existing status.'
|
|
26
|
+
}),
|
|
27
|
+
force: z
|
|
28
|
+
.boolean()
|
|
29
|
+
.optional()
|
|
30
|
+
.openapi({
|
|
31
|
+
description: 'Re-run a previously completed distribution covering the same range. ' +
|
|
32
|
+
'Hard-deletes the prior completed row + allocations before the worker ' +
|
|
33
|
+
'starts. Use only after operator-confirmed input drift.'
|
|
34
|
+
}),
|
|
35
|
+
polUsdPrice: PolUsdPriceSchema.optional().openapi({
|
|
36
|
+
description: 'Optional POL/USD price override (decimal string, up to 6 dp). When ' +
|
|
37
|
+
'omitted, the worker fetches the spot price from CoinGecko at run ' +
|
|
38
|
+
"start. Pass a prior run's stored `polUsdPrice` to reproduce its " +
|
|
39
|
+
'merkle root and leaves on a `force` re-run — the price feeds the ' +
|
|
40
|
+
'USD-threshold exclusion that decides which allocations stay on-chain.'
|
|
41
|
+
})
|
|
42
|
+
})
|
|
43
|
+
.openapi('DistributionTriggerRequest');
|
|
44
|
+
// 202 response — the worker runs out-of-band on the same pod after
|
|
45
|
+
// the handler returns. Operators poll the public distributions
|
|
46
|
+
// endpoint (or the management `:id` view, Phase 1 follow-up) to
|
|
47
|
+
// observe the terminal status.
|
|
48
|
+
export const DistributionTriggerResponseSchema = z
|
|
49
|
+
.object({
|
|
50
|
+
network: NetworkSchema,
|
|
51
|
+
distributionId: DistributionIdSchema,
|
|
52
|
+
status: z.enum(['pending', 'running', 'completed', 'failed']).openapi({
|
|
53
|
+
description: 'Status snapshot at the moment the trigger returned. A freshly ' +
|
|
54
|
+
'enqueued run starts at `pending`; an idempotent hit on an ' +
|
|
55
|
+
'existing id returns whatever the current row says.'
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
.openapi('DistributionTriggerResponse');
|
|
59
|
+
// 200 response for `DELETE /v1/:network/management/distributions/:id`.
|
|
60
|
+
// `priorStatus` is the state the row was in before removal — never
|
|
61
|
+
// `completed`, which the handler refuses (those are published roots).
|
|
62
|
+
export const DistributionDeleteResponseSchema = z
|
|
63
|
+
.object({
|
|
64
|
+
network: NetworkSchema,
|
|
65
|
+
distributionId: DistributionIdSchema,
|
|
66
|
+
removed: z.boolean(),
|
|
67
|
+
priorStatus: z.enum(['pending', 'running', 'failed']),
|
|
68
|
+
deletedAllocations: z
|
|
69
|
+
.number()
|
|
70
|
+
.int()
|
|
71
|
+
.nonnegative()
|
|
72
|
+
.openapi({
|
|
73
|
+
description: 'Number of allocation rows removed alongside the distribution. Normally 0 — ' +
|
|
74
|
+
'allocations are only persisted at completion, and completed rows cannot be deleted.'
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
.openapi('DistributionDeleteResponse');
|
|
78
|
+
// Body for `POST /v1/:network/management/excluded-addresses`. Adds (or
|
|
79
|
+
// re-labels, on conflict) an address that receives an allocation but is
|
|
80
|
+
// excluded from the merkle tree and settled off-chain (LST contracts and
|
|
81
|
+
// other manually-handled addresses).
|
|
82
|
+
export const AddExcludedAddressRequestSchema = z
|
|
83
|
+
.object({
|
|
84
|
+
address: AddressSchema.openapi({
|
|
85
|
+
description: 'Address to exclude from the merkle tree (settled off-chain).'
|
|
86
|
+
}),
|
|
87
|
+
label: z.string().min(1).max(256).openapi({
|
|
88
|
+
description: 'Human-readable note for the entry, e.g. the LST protocol name.'
|
|
89
|
+
}),
|
|
90
|
+
createdBy: z
|
|
91
|
+
.string()
|
|
92
|
+
.min(1)
|
|
93
|
+
.max(128)
|
|
94
|
+
.optional()
|
|
95
|
+
.openapi({
|
|
96
|
+
description: 'Actor id recorded on the row (who added it). Defaults to "management-api" ' +
|
|
97
|
+
'when omitted — the x-api-key gate carries no operator identity.'
|
|
98
|
+
})
|
|
99
|
+
})
|
|
100
|
+
.openapi('AddExcludedAddressRequest');
|
|
101
|
+
// A single excluded-address row as returned by the management API.
|
|
102
|
+
export const ManagedExcludedAddressSchema = z
|
|
103
|
+
.object({
|
|
104
|
+
network: NetworkSchema,
|
|
105
|
+
address: AddressSchema,
|
|
106
|
+
label: z.string(),
|
|
107
|
+
createdBy: z.string(),
|
|
108
|
+
createdAt: z.iso.datetime(),
|
|
109
|
+
updatedAt: z.iso.datetime()
|
|
110
|
+
})
|
|
111
|
+
.openapi('ManagedExcludedAddress');
|
|
112
|
+
export const ExcludedAddressListResponseSchema = z
|
|
113
|
+
.object({
|
|
114
|
+
items: z.array(ManagedExcludedAddressSchema)
|
|
115
|
+
})
|
|
116
|
+
.openapi('ExcludedAddressListResponse');
|
|
117
|
+
// `DELETE` is idempotent: `removed` is false when the address wasn't in
|
|
118
|
+
// the list (no 404), so re-running a delete is safe.
|
|
119
|
+
export const RemoveExcludedAddressResponseSchema = z
|
|
120
|
+
.object({
|
|
121
|
+
network: NetworkSchema,
|
|
122
|
+
address: AddressSchema,
|
|
123
|
+
removed: z.boolean()
|
|
124
|
+
})
|
|
125
|
+
.openapi('RemoveExcludedAddressResponse');
|
|
126
|
+
//# sourceMappingURL=management.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"management.js","sourceRoot":"","sources":["../src/management.ts"],"names":[],"mappings":"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"}
|
package/dist/proof.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from './zod.ts';
|
|
2
|
+
export declare const ProofResponseSchema: z.ZodObject<{
|
|
3
|
+
merkleRoot: z.ZodString;
|
|
4
|
+
address: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
5
|
+
amount: z.ZodString;
|
|
6
|
+
leafIndex: z.ZodNumber;
|
|
7
|
+
proof: z.ZodArray<z.ZodString>;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
export type ProofResponse = z.infer<typeof ProofResponseSchema>;
|
|
10
|
+
//# sourceMappingURL=proof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../src/proof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC;AAS7B,eAAO,MAAM,mBAAmB;;;;;;iBAcL,CAAC;AAE5B,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
package/dist/proof.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AddressSchema, Hex32Schema, WeiSchema } from "./common.js";
|
|
2
|
+
import { z } from "./zod.js";
|
|
3
|
+
// Response for `GET /v1/:network/distributions/:id/allocations/:addr/proof`.
|
|
4
|
+
// `proof` is the array of 32-byte hex sibling hashes the on-chain
|
|
5
|
+
// `MultiRootDistributor` needs to reconstruct the merkle root from the leaf
|
|
6
|
+
// `keccak256(abi.encodePacked(leafIndex, address, amount))`. Generated on
|
|
7
|
+
// demand from the persisted allocations table — no proof is stored at
|
|
8
|
+
// distribution time (spec D9). Pass `leafIndex`, `address`, `amount`, and
|
|
9
|
+
// `proof` straight to `claim(root, index, account, amount, proof)`.
|
|
10
|
+
export const ProofResponseSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
merkleRoot: Hex32Schema.openapi({
|
|
13
|
+
description: 'Distribution merkle root — same value as `DistributionDetail.merkleRoot`.'
|
|
14
|
+
}),
|
|
15
|
+
address: AddressSchema,
|
|
16
|
+
amount: WeiSchema,
|
|
17
|
+
leafIndex: z.number().int().nonnegative().openapi({
|
|
18
|
+
description: 'Index of this leaf in the canonical (lowercased-address-sorted) tree.'
|
|
19
|
+
}),
|
|
20
|
+
proof: z.array(Hex32Schema).openapi({
|
|
21
|
+
description: 'Sibling-hash array. Pass straight to the claimer contract.'
|
|
22
|
+
})
|
|
23
|
+
})
|
|
24
|
+
.openapi('ProofResponse');
|
|
25
|
+
//# sourceMappingURL=proof.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof.js","sourceRoot":"","sources":["../src/proof.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC;AAE7B,6EAA6E;AAC7E,kEAAkE;AAClE,4EAA4E;AAC5E,0EAA0E;AAC1E,sEAAsE;AACtE,0EAA0E;AAC1E,oEAAoE;AACpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC;QAC9B,WAAW,EAAE,2EAA2E;KACzF,CAAC;IACF,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;QAChD,WAAW,EAAE,uEAAuE;KACrF,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;QAClC,WAAW,EAAE,4DAA4D;KAC1E,CAAC;CACH,CAAC;KACD,OAAO,CAAC,eAAe,CAAC,CAAC"}
|