@artblocks/abx-sdk 0.1.0-alpha.4 → 0.1.0-alpha.41
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/CHANGELOG.md +72 -0
- package/README.md +130 -0
- package/dist/abi/generated.d.ts +8502 -129
- package/dist/abi/generated.d.ts.map +1 -1
- package/dist/abi/generated.js +40 -22
- package/dist/abi/generated.js.map +1 -1
- package/dist/abi/index.d.ts +2645 -168
- package/dist/abi/index.d.ts.map +1 -1
- package/dist/abi/index.js +34 -7
- package/dist/abi/index.js.map +1 -1
- package/dist/anchors.d.ts +325 -0
- package/dist/anchors.d.ts.map +1 -0
- package/dist/anchors.js +740 -0
- package/dist/anchors.js.map +1 -0
- package/dist/chain-support.d.ts +28 -0
- package/dist/chain-support.d.ts.map +1 -0
- package/dist/chain-support.js +65 -0
- package/dist/chain-support.js.map +1 -0
- package/dist/chain-support.json +60 -0
- package/dist/chains.d.ts +24 -10
- package/dist/chains.d.ts.map +1 -1
- package/dist/chains.js +51 -17
- package/dist/chains.js.map +1 -1
- package/dist/chunks.d.ts +162 -31
- package/dist/chunks.d.ts.map +1 -1
- package/dist/chunks.js +179 -14
- package/dist/chunks.js.map +1 -1
- package/dist/clients.d.ts +23 -11
- package/dist/clients.d.ts.map +1 -1
- package/dist/clients.js +17 -18
- package/dist/clients.js.map +1 -1
- package/dist/contract-generations.d.ts +58 -0
- package/dist/contract-generations.d.ts.map +1 -0
- package/dist/contract-generations.js +109 -0
- package/dist/contract-generations.js.map +1 -0
- package/dist/contract-generations.json +48 -0
- package/dist/create2.d.ts +84 -1
- package/dist/create2.d.ts.map +1 -1
- package/dist/create2.js +158 -2
- package/dist/create2.js.map +1 -1
- package/dist/creator-token.d.ts +132 -0
- package/dist/creator-token.d.ts.map +1 -0
- package/dist/creator-token.js +183 -0
- package/dist/creator-token.js.map +1 -0
- package/dist/deploy.d.ts +234 -14
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +289 -111
- package/dist/deploy.js.map +1 -1
- package/dist/deployments.d.ts +38 -5
- package/dist/deployments.d.ts.map +1 -1
- package/dist/deployments.js +157 -30
- package/dist/deployments.js.map +1 -1
- package/dist/deps.d.ts +123 -6
- package/dist/deps.d.ts.map +1 -1
- package/dist/deps.js +249 -7
- package/dist/deps.js.map +1 -1
- package/dist/env.d.ts +5 -4
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +20 -5
- package/dist/env.js.map +1 -1
- package/dist/errors.d.ts +109 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +148 -0
- package/dist/errors.js.map +1 -0
- package/dist/execute.d.ts +118 -0
- package/dist/execute.d.ts.map +1 -0
- package/dist/execute.js +159 -0
- package/dist/execute.js.map +1 -0
- package/dist/gateways.d.ts +79 -0
- package/dist/gateways.d.ts.map +1 -0
- package/dist/gateways.js +156 -0
- package/dist/gateways.js.map +1 -0
- package/dist/generator-document.d.ts +57 -0
- package/dist/generator-document.d.ts.map +1 -0
- package/dist/generator-document.js +123 -0
- package/dist/generator-document.js.map +1 -0
- package/dist/generator.d.ts +44 -2
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +29 -0
- package/dist/generator.js.map +1 -1
- package/dist/index.d.ts +19 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -3
- package/dist/index.js.map +1 -1
- package/dist/inspect.d.ts +48 -0
- package/dist/inspect.d.ts.map +1 -0
- package/dist/inspect.js +295 -0
- package/dist/inspect.js.map +1 -0
- package/dist/migrate.d.ts +41 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +142 -0
- package/dist/migrate.js.map +1 -0
- package/dist/mime.d.ts +11 -0
- package/dist/mime.d.ts.map +1 -0
- package/dist/mime.js +40 -0
- package/dist/mime.js.map +1 -0
- package/dist/node.d.ts +69 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +92 -0
- package/dist/node.js.map +1 -0
- package/dist/onchain-uri.d.ts +110 -0
- package/dist/onchain-uri.d.ts.map +1 -0
- package/dist/onchain-uri.js +276 -0
- package/dist/onchain-uri.js.map +1 -0
- package/dist/ops.d.ts +507 -14
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js +850 -34
- package/dist/ops.js.map +1 -1
- package/dist/policy.d.ts +57 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +35 -0
- package/dist/policy.js.map +1 -0
- package/dist/probe.d.ts +58 -0
- package/dist/probe.d.ts.map +1 -1
- package/dist/probe.js +190 -9
- package/dist/probe.js.map +1 -1
- package/dist/reconstruct.d.ts +141 -3
- package/dist/reconstruct.d.ts.map +1 -1
- package/dist/reconstruct.js +479 -100
- package/dist/reconstruct.js.map +1 -1
- package/dist/resume.d.ts +147 -0
- package/dist/resume.d.ts.map +1 -0
- package/dist/resume.js +146 -0
- package/dist/resume.js.map +1 -0
- package/dist/script-chunks.d.ts +105 -0
- package/dist/script-chunks.d.ts.map +1 -0
- package/dist/script-chunks.js +158 -0
- package/dist/script-chunks.js.map +1 -0
- package/dist/service.d.ts +155 -9
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +103 -11
- package/dist/service.js.map +1 -1
- package/dist/spine.d.ts +47 -4
- package/dist/spine.d.ts.map +1 -1
- package/dist/spine.js +0 -0
- package/dist/spine.js.map +1 -1
- package/dist/staging.d.ts +139 -0
- package/dist/staging.d.ts.map +1 -0
- package/dist/staging.js +139 -0
- package/dist/staging.js.map +1 -0
- package/dist/token.d.ts +11 -1
- package/dist/token.d.ts.map +1 -1
- package/dist/token.js +32 -1
- package/dist/token.js.map +1 -1
- package/dist/tokendata.d.ts +63 -3
- package/dist/tokendata.d.ts.map +1 -1
- package/dist/tokendata.js +81 -19
- package/dist/tokendata.js.map +1 -1
- package/dist/tokens.d.ts +119 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +317 -0
- package/dist/tokens.js.map +1 -0
- package/dist/types.d.ts +107 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/util.d.ts +74 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +106 -0
- package/dist/util.js.map +1 -0
- package/package.json +15 -6
package/dist/chunks.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type Address, type Hex, type PublicClient
|
|
1
|
+
import { type Address, type Hex, type PublicClient } from 'viem';
|
|
2
|
+
import type { SendTx } from './execute.js';
|
|
2
3
|
/**
|
|
3
4
|
* Multi-chunk on-chain content — the off-chain side of {@link AbxChunkStore}.
|
|
4
5
|
*
|
|
@@ -18,23 +19,12 @@ export interface PlannedChunk {
|
|
|
18
19
|
compressed: boolean;
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
|
-
*
|
|
22
|
-
* the caller decides how it's signed
|
|
23
|
-
* be signed by any funded signer — the env key (hot lane) *or* a
|
|
24
|
-
* (wallet lane). Keeping the signer out of this module is what lets
|
|
25
|
-
* under every signing lane instead of assuming a hot key.
|
|
26
|
-
|
|
27
|
-
* `summary` + `fields` are surfaced to a human on the wallet sign page; `to: null` means a
|
|
28
|
-
* contract creation (deploying the chunk store itself).
|
|
29
|
-
*/
|
|
30
|
-
export interface StagingTx {
|
|
31
|
-
to: Address | null;
|
|
32
|
-
data: Hex;
|
|
33
|
-
summary: string;
|
|
34
|
-
fields: Record<string, string>;
|
|
35
|
-
}
|
|
36
|
-
/** Sign + broadcast one {@link StagingTx} and return its mined receipt (for event parsing). */
|
|
37
|
-
export type SendStagingTx = (tx: StagingTx) => Promise<TransactionReceipt>;
|
|
22
|
+
* Chunk-store writes are staged in the SAME lane-agnostic terms as every other write: the SDK
|
|
23
|
+
* builds a {@link PreparedTx}, the caller decides how it's signed via a {@link SendTx}. These writes
|
|
24
|
+
* are **ownerless**, so they can be signed by any funded signer — the env key (hot lane) *or* a
|
|
25
|
+
* connected browser wallet (wallet lane). Keeping the signer out of this module is what lets
|
|
26
|
+
* on-chain staging work under every signing lane instead of assuming a hot key.
|
|
27
|
+
*/
|
|
38
28
|
/**
|
|
39
29
|
* Split content into chunks, FastLZ-compressing each when `fastlz` is set (per-chunk — the
|
|
40
30
|
* convention the store + reader expect). Pure: no chain, no I/O. A chunk is only stored
|
|
@@ -45,18 +35,64 @@ export declare function planChunks(content: Uint8Array, opts?: {
|
|
|
45
35
|
chunkSize?: number;
|
|
46
36
|
}): PlannedChunk[];
|
|
47
37
|
/**
|
|
48
|
-
* A per-transaction gas ceiling for packing chunk writes
|
|
49
|
-
*
|
|
50
|
-
*
|
|
38
|
+
* A per-transaction gas ceiling for packing chunk writes; the planner splits content across
|
|
39
|
+
* multiple transactions to stay beneath it.
|
|
40
|
+
*
|
|
41
|
+
* **The binding constraint is `eth_estimateGas`, not the block gas limit.** Every send estimates
|
|
42
|
+
* first; a batch planned above the provider allowance fails before anything is sent.
|
|
43
|
+
*
|
|
44
|
+
* 8M leaves room for the base + calldata cost under that 16.7M ceiling. **Do not raise it toward a
|
|
45
|
+
* block limit.** If you raise it at all, measure the estimate allowance first — and note that these
|
|
46
|
+
* are third-party numbers that move.
|
|
51
47
|
*/
|
|
52
48
|
export declare const DEFAULT_TX_GAS_BUDGET = 8000000;
|
|
53
49
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
* Reference `eth_estimateGas` allowance — 2^24 — used to justify
|
|
51
|
+
* {@link DEFAULT_TX_GAS_BUDGET} against the limit that binds it rather than the block limit.
|
|
52
|
+
*/
|
|
53
|
+
export declare const MEASURED_ESTIMATE_GAS_ALLOWANCE = 16777216;
|
|
54
|
+
/**
|
|
55
|
+
* Rough gas for writing `byteLength` bytes as an SSTORE2 data contract: a fixed CREATE + base
|
|
56
|
+
* overhead plus the code-deposit cost (~200 gas/byte) and calldata. Deliberately an over-estimate so
|
|
57
|
+
* packed batches land safely inside {@link DEFAULT_TX_GAS_BUDGET}; the wallet still does the real
|
|
58
|
+
* `eth_estimateGas` before sending. Takes a byte length directly (not a {@link PlannedChunk}) for a
|
|
59
|
+
* caller that already knows the size and has no content to allocate just to ask — a code project's
|
|
60
|
+
* on-chain SCRIPT chunk (`OnChainScript.setScriptChunk`, `contracts/src/libraries/AbxCodeLib.sol`) is
|
|
61
|
+
* the same SSTORE2 write as a content chunk, so it reuses this estimate rather than inventing a
|
|
62
|
+
* second one — see `commands/deploy.ts`'s code-setup transaction splitting.
|
|
58
63
|
*/
|
|
64
|
+
export declare function estimateChunkGasForBytes(byteLength: number): number;
|
|
65
|
+
/** {@link estimateChunkGasForBytes}, from a {@link PlannedChunk} already in hand. */
|
|
59
66
|
export declare function estimateChunkGas(chunk: PlannedChunk): number;
|
|
67
|
+
/**
|
|
68
|
+
* Rough, deliberately-conservative gas for the code-project setup legs that are NOT raw content
|
|
69
|
+
* chunks — a `setParamSchema`, a `setDependency`/`setDependencyRegistry`, an on-chain-URI wiring
|
|
70
|
+
* call, a reserve `mint`. Unlike {@link estimateChunkGasForBytes} these are flat per-call estimates:
|
|
71
|
+
* none of them pays an EVM code-deposit, so their cost doesn't scale with a byte length. Shared by
|
|
72
|
+
* `commands/deploy.ts`'s fresh-deploy cost-guidance heuristic AND its setup-transaction gas-bounded
|
|
73
|
+
* batching, so the two can never disagree about what one of these calls costs.
|
|
74
|
+
*/
|
|
75
|
+
export declare const SETUP_LEG_GAS: {
|
|
76
|
+
readonly schema: 45000;
|
|
77
|
+
readonly dependency: 55000;
|
|
78
|
+
readonly onchainUri: 60000;
|
|
79
|
+
readonly mint: 65000;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Pack arbitrary gas-costed items into gas-bounded batches, preserving order — the call-level
|
|
83
|
+
* sibling of {@link planContentTxs}'s own greedy bin-packing loop, generalized so a caller whose
|
|
84
|
+
* "chunk" is a setup CALL (a schema declare, a dependency pointer, a mint) rather than a content byte
|
|
85
|
+
* range can reuse the identical algorithm and budget instead of inventing a second one. Splits only
|
|
86
|
+
* BETWEEN items — an item whose own `.gas` alone exceeds `gasBudget` still rides alone in its own
|
|
87
|
+
* batch (that batch is simply over-budget, not necessarily over the harder `eth_estimateGas` ceiling
|
|
88
|
+
* — a caller that must refuse an indivisible-too-large leg checks {@link MEASURED_ESTIMATE_GAS_ALLOWANCE}
|
|
89
|
+
* itself, separately, BEFORE calling this).
|
|
90
|
+
*/
|
|
91
|
+
export declare function packCallsByGas<T extends {
|
|
92
|
+
gas: number;
|
|
93
|
+
}>(items: readonly T[], opts?: {
|
|
94
|
+
gasBudget?: number;
|
|
95
|
+
}): T[][];
|
|
60
96
|
/** How content will be written on-chain — one atomic tx, or several batched ones. */
|
|
61
97
|
export type ContentTxPlan = {
|
|
62
98
|
mode: 'single';
|
|
@@ -81,7 +117,9 @@ export declare function planContentTxs(chunks: PlannedChunk[], opts?: {
|
|
|
81
117
|
* Deploy `AbxChunkStore` — the shared, stateless multi-chunk store + reader. Deploy once
|
|
82
118
|
* per chain (like the renderer); every chunked field references it as its `reader`.
|
|
83
119
|
*/
|
|
84
|
-
export declare function deployChunkStore(send:
|
|
120
|
+
export declare function deployChunkStore(send: SendTx, opts: {
|
|
121
|
+
chainId: number;
|
|
122
|
+
}): Promise<{
|
|
85
123
|
chunkStore: Address;
|
|
86
124
|
txHash: Hex;
|
|
87
125
|
blockNumber: bigint;
|
|
@@ -96,9 +134,10 @@ export declare function deployChunkStore(send: SendStagingTx): Promise<{
|
|
|
96
134
|
*/
|
|
97
135
|
export declare function storeSupportsWriteContent(publicClient: PublicClient, store: Address): Promise<boolean>;
|
|
98
136
|
/** Write one chunk as an SSTORE2 data contract; returns its address (from `ChunkWritten`). */
|
|
99
|
-
export declare function writeChunk(send:
|
|
137
|
+
export declare function writeChunk(send: SendTx, args: {
|
|
100
138
|
store: Address;
|
|
101
139
|
data: Uint8Array;
|
|
140
|
+
chainId: number;
|
|
102
141
|
}): Promise<{
|
|
103
142
|
pointer: Address;
|
|
104
143
|
txHash: Hex;
|
|
@@ -109,9 +148,10 @@ export declare function writeChunk(send: SendStagingTx, args: {
|
|
|
109
148
|
* fits a single tx's gas (see {@link planContentTxs}); returns the manifest address (the
|
|
110
149
|
* `reader` pointer) from the `ManifestWritten` event.
|
|
111
150
|
*/
|
|
112
|
-
export declare function writeContent(send:
|
|
151
|
+
export declare function writeContent(send: SendTx, args: {
|
|
113
152
|
store: Address;
|
|
114
153
|
chunks: ReadonlyArray<PlannedChunk>;
|
|
154
|
+
chainId: number;
|
|
115
155
|
}): Promise<{
|
|
116
156
|
manifest: Address;
|
|
117
157
|
txHash: Hex;
|
|
@@ -123,9 +163,10 @@ export declare function writeContent(send: SendStagingTx, args: {
|
|
|
123
163
|
* batches, concatenates the returned pointers, then calls {@link writeManifest}. Pairs
|
|
124
164
|
* each pointer with its planned `compressed` flag for manifest assembly.
|
|
125
165
|
*/
|
|
126
|
-
export declare function writeChunkBatch(send:
|
|
166
|
+
export declare function writeChunkBatch(send: SendTx, args: {
|
|
127
167
|
store: Address;
|
|
128
168
|
chunks: ReadonlyArray<PlannedChunk>;
|
|
169
|
+
chainId: number;
|
|
129
170
|
}): Promise<{
|
|
130
171
|
written: Array<{
|
|
131
172
|
pointer: Address;
|
|
@@ -143,9 +184,10 @@ export declare function writeChunkBatch(send: SendStagingTx, args: {
|
|
|
143
184
|
* This is the same path whether the manifest is later baked into a deploy's `InitParams`
|
|
144
185
|
* or set on a live token — staging always precedes the contract that references it.
|
|
145
186
|
*/
|
|
146
|
-
export declare function stageContent(send:
|
|
187
|
+
export declare function stageContent(send: SendTx, args: {
|
|
147
188
|
store: Address;
|
|
148
189
|
content: Uint8Array;
|
|
190
|
+
chainId: number;
|
|
149
191
|
fastlz?: boolean;
|
|
150
192
|
chunkSize?: number;
|
|
151
193
|
gasBudget?: number;
|
|
@@ -155,14 +197,103 @@ export declare function stageContent(send: SendStagingTx, args: {
|
|
|
155
197
|
chunkCount: number;
|
|
156
198
|
}>;
|
|
157
199
|
/** Write the manifest (ordered chunk list); returns its address (the `reader` pointer). */
|
|
158
|
-
export declare function writeManifest(send:
|
|
200
|
+
export declare function writeManifest(send: SendTx, args: {
|
|
159
201
|
store: Address;
|
|
160
202
|
chunks: ReadonlyArray<{
|
|
161
203
|
pointer: Address;
|
|
162
204
|
compressed: boolean;
|
|
163
205
|
}>;
|
|
206
|
+
chainId: number;
|
|
164
207
|
}): Promise<{
|
|
165
208
|
manifest: Address;
|
|
166
209
|
txHash: Hex;
|
|
167
210
|
}>;
|
|
211
|
+
/** Progress from {@link ensureChunkStore}, so a caller can narrate without the SDK printing. */
|
|
212
|
+
export type ChunkStoreEvent = {
|
|
213
|
+
kind: 'stale';
|
|
214
|
+
address: Address;
|
|
215
|
+
} | {
|
|
216
|
+
kind: 'canonical';
|
|
217
|
+
address: Address;
|
|
218
|
+
} | {
|
|
219
|
+
kind: 'deploying';
|
|
220
|
+
} | {
|
|
221
|
+
kind: 'deployed';
|
|
222
|
+
address: Address;
|
|
223
|
+
inManifest: boolean;
|
|
224
|
+
};
|
|
225
|
+
/**
|
|
226
|
+
* Resolve a usable multi-chunk content store for this chain, deploying one if needed.
|
|
227
|
+
*
|
|
228
|
+
* This is the bootstrap every on-chain-content path needs, and it existed only inside the CLI — so an
|
|
229
|
+
* SDK integrator got `resolveChunkStore()` (which may return undefined) plus a separate
|
|
230
|
+
* `storeSupportsWriteContent()` they had to remember to call. Forget the second and an incapable
|
|
231
|
+
* store fails *deep inside a mint, after transactions have already landed*. One team hand-rolled this
|
|
232
|
+
* guard for exactly that reason; exporting it is cheaper than every integrator rediscovering it.
|
|
233
|
+
*
|
|
234
|
+
* Three ways to succeed, in order: the listed store if it exists AND exposes the current ABI; the
|
|
235
|
+
* CREATE2-deterministic address (the store is canonical, so a forge script or an earlier lazy deploy
|
|
236
|
+
* may have put it there before the manifest caught up — self-healing, and never a duplicate at a
|
|
237
|
+
* random CREATE address); otherwise deploy it. Ownerless, so any funded signer may stand it up.
|
|
238
|
+
*/
|
|
239
|
+
export declare function ensureChunkStore(publicClient: PublicClient, send: SendTx, opts?: {
|
|
240
|
+
chainId: number;
|
|
241
|
+
override?: string;
|
|
242
|
+
onEvent?: (e: ChunkStoreEvent) => void;
|
|
243
|
+
}): Promise<Address>;
|
|
244
|
+
/**
|
|
245
|
+
* What {@link probeChunkStore} found — mirrors `probeSeedSource`/`probeTransferValidator` (see
|
|
246
|
+
* ops.ts / creator-token.ts): every failure is a verdict, never a thrown error, so a caller — a
|
|
247
|
+
* server startup check, in particular — can branch on the reason instead of catching.
|
|
248
|
+
*
|
|
249
|
+
* - `ok` — a store is configured, has code, and answers the current `writeContent` ABI.
|
|
250
|
+
* - `unconfigured` — no override, no `ABX_CHUNK_STORE`, and no manifest entry for this chain.
|
|
251
|
+
* There is nothing to probe. {@link ensureChunkStore} would deploy one here;
|
|
252
|
+
* THIS function never does — see its doc for why.
|
|
253
|
+
* - `no-code` — an address is configured (override, env, or manifest) but nothing is
|
|
254
|
+
* deployed there on this chain: a chain-id mismatch, a wiped local devnet, or
|
|
255
|
+
* a manifest entry for a chain the caller isn't actually talking to.
|
|
256
|
+
* - `incompatible` — code exists but reverts the empty `writeContent([],[])` probe: either a
|
|
257
|
+
* store deployed before that ABI existed, or an address that was never a chunk
|
|
258
|
+
* store at all.
|
|
259
|
+
* - `unreachable` — the RPC didn't answer `getCode`. Says nothing about the address; retry,
|
|
260
|
+
* don't refuse on the merits (mirrors the sibling probes' treatment of a
|
|
261
|
+
* transport failure).
|
|
262
|
+
*/
|
|
263
|
+
export type ChunkStoreVerdict = 'ok' | 'unconfigured' | 'no-code' | 'incompatible' | 'unreachable';
|
|
264
|
+
/**
|
|
265
|
+
* The result of {@link probeChunkStore} — verdict plus what was observed, for a message.
|
|
266
|
+
* `address` is absent only for `unconfigured`, where there is nothing to name.
|
|
267
|
+
*/
|
|
268
|
+
export interface ChunkStoreProbe {
|
|
269
|
+
verdict: ChunkStoreVerdict;
|
|
270
|
+
address?: Address;
|
|
271
|
+
/** First line of the transport error, for `unreachable`. */
|
|
272
|
+
error?: string;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Resolve a usable multi-chunk content store WITHOUT ever deploying one — the fail-closed sibling
|
|
276
|
+
* to {@link ensureChunkStore}, for the caller that must never send a transaction to answer "is
|
|
277
|
+
* there a usable store here" (a request-scoped service, a read-only server startup check).
|
|
278
|
+
*
|
|
279
|
+
* `ensureChunkStore`'s last resort is a deploy, which is the right call for a CLI staging path (a
|
|
280
|
+
* human is present, a signer is funded, standing up shared infra on demand is the point) and the
|
|
281
|
+
* wrong call for a service: it has no business sending a transaction just because it was asked
|
|
282
|
+
* whether a store exists, and "silently deployed a new chunk store during a health check" would be
|
|
283
|
+
* its own incident. So this composes the SAME two primitives `ensureChunkStore` uses — address
|
|
284
|
+
* resolution ({@link resolveChunkStore}) and the ABI probe ({@link storeSupportsWriteContent}) —
|
|
285
|
+
* into a read-only check that returns a verdict a caller can log, alert on, and refuse to start
|
|
286
|
+
* on, instead of an address or a thrown error.
|
|
287
|
+
*
|
|
288
|
+
* Deliberately does NOT fall back to the CREATE2-deterministic address the way `ensureChunkStore`
|
|
289
|
+
* does: that fallback exists to self-heal a manifest that hasn't caught up with an out-of-band
|
|
290
|
+
* deploy, which is a staging-time convenience, not part of "does the address this caller is
|
|
291
|
+
* actually configured with work" — the question a startup check asks. An explicit `override` (or
|
|
292
|
+
* `ABX_CHUNK_STORE`) still takes precedence over the chain's manifest default, exactly as it does
|
|
293
|
+
* for `ensureChunkStore` — {@link resolveChunkStore} is the single place that precedence lives.
|
|
294
|
+
*/
|
|
295
|
+
export declare function probeChunkStore(publicClient: PublicClient, opts: {
|
|
296
|
+
chainId: number;
|
|
297
|
+
override?: string;
|
|
298
|
+
}): Promise<ChunkStoreProbe>;
|
|
168
299
|
//# sourceMappingURL=chunks.d.ts.map
|
package/dist/chunks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../src/chunks.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../src/chunks.ts"],"names":[],"mappings":"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"}
|
package/dist/chunks.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { encodeFunctionData, parseEventLogs
|
|
1
|
+
import { bytesToHex, encodeFunctionData, parseEventLogs } from 'viem';
|
|
2
2
|
import { abxChunkStoreAbi, abxChunkStoreBytecode } from './abi/index.js';
|
|
3
|
+
import { resolveChunkStore } from './deployments.js';
|
|
4
|
+
import { predictChunkStore } from './create2.js';
|
|
3
5
|
import { flzCompress } from './fastlz.js';
|
|
4
6
|
import { ABX_SALT, CREATE2_PROXY, create2Calldata, predictCreate2Address } from './create2.js';
|
|
5
7
|
/**
|
|
@@ -15,6 +17,13 @@ import { ABX_SALT, CREATE2_PROXY, create2Calldata, predictCreate2Address } from
|
|
|
15
17
|
/** SSTORE2 data-contract code limit is 24576 bytes (EIP-170) minus the STOP byte; chunk
|
|
16
18
|
* conservatively so even an incompressible FastLZ chunk (slight expansion) still fits. */
|
|
17
19
|
export const DEFAULT_CHUNK_SIZE = 22_000;
|
|
20
|
+
/**
|
|
21
|
+
* Chunk-store writes are staged in the SAME lane-agnostic terms as every other write: the SDK
|
|
22
|
+
* builds a {@link PreparedTx}, the caller decides how it's signed via a {@link SendTx}. These writes
|
|
23
|
+
* are **ownerless**, so they can be signed by any funded signer — the env key (hot lane) *or* a
|
|
24
|
+
* connected browser wallet (wallet lane). Keeping the signer out of this module is what lets
|
|
25
|
+
* on-chain staging work under every signing lane instead of assuming a hot key.
|
|
26
|
+
*/
|
|
18
27
|
/**
|
|
19
28
|
* Split content into chunks, FastLZ-compressing each when `fastlz` is set (per-chunk — the
|
|
20
29
|
* convention the store + reader expect). Pure: no chain, no I/O. A chunk is only stored
|
|
@@ -36,21 +45,82 @@ export function planChunks(content, opts = {}) {
|
|
|
36
45
|
}
|
|
37
46
|
return chunks;
|
|
38
47
|
}
|
|
39
|
-
const toHex = (b) =>
|
|
48
|
+
const toHex = (b) => bytesToHex(b);
|
|
40
49
|
/**
|
|
41
|
-
* A per-transaction gas ceiling for packing chunk writes
|
|
42
|
-
*
|
|
43
|
-
*
|
|
50
|
+
* A per-transaction gas ceiling for packing chunk writes; the planner splits content across
|
|
51
|
+
* multiple transactions to stay beneath it.
|
|
52
|
+
*
|
|
53
|
+
* **The binding constraint is `eth_estimateGas`, not the block gas limit.** Every send estimates
|
|
54
|
+
* first; a batch planned above the provider allowance fails before anything is sent.
|
|
55
|
+
*
|
|
56
|
+
* 8M leaves room for the base + calldata cost under that 16.7M ceiling. **Do not raise it toward a
|
|
57
|
+
* block limit.** If you raise it at all, measure the estimate allowance first — and note that these
|
|
58
|
+
* are third-party numbers that move.
|
|
44
59
|
*/
|
|
45
60
|
export const DEFAULT_TX_GAS_BUDGET = 8_000_000;
|
|
46
61
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
|
|
50
|
-
|
|
62
|
+
* Reference `eth_estimateGas` allowance — 2^24 — used to justify
|
|
63
|
+
* {@link DEFAULT_TX_GAS_BUDGET} against the limit that binds it rather than the block limit.
|
|
64
|
+
*/
|
|
65
|
+
export const MEASURED_ESTIMATE_GAS_ALLOWANCE = 16_777_216;
|
|
66
|
+
/**
|
|
67
|
+
* Rough gas for writing `byteLength` bytes as an SSTORE2 data contract: a fixed CREATE + base
|
|
68
|
+
* overhead plus the code-deposit cost (~200 gas/byte) and calldata. Deliberately an over-estimate so
|
|
69
|
+
* packed batches land safely inside {@link DEFAULT_TX_GAS_BUDGET}; the wallet still does the real
|
|
70
|
+
* `eth_estimateGas` before sending. Takes a byte length directly (not a {@link PlannedChunk}) for a
|
|
71
|
+
* caller that already knows the size and has no content to allocate just to ask — a code project's
|
|
72
|
+
* on-chain SCRIPT chunk (`OnChainScript.setScriptChunk`, `contracts/src/libraries/AbxCodeLib.sol`) is
|
|
73
|
+
* the same SSTORE2 write as a content chunk, so it reuses this estimate rather than inventing a
|
|
74
|
+
* second one — see `commands/deploy.ts`'s code-setup transaction splitting.
|
|
51
75
|
*/
|
|
76
|
+
export function estimateChunkGasForBytes(byteLength) {
|
|
77
|
+
return 40_000 + byteLength * 240;
|
|
78
|
+
}
|
|
79
|
+
/** {@link estimateChunkGasForBytes}, from a {@link PlannedChunk} already in hand. */
|
|
52
80
|
export function estimateChunkGas(chunk) {
|
|
53
|
-
return
|
|
81
|
+
return estimateChunkGasForBytes(chunk.data.length);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Rough, deliberately-conservative gas for the code-project setup legs that are NOT raw content
|
|
85
|
+
* chunks — a `setParamSchema`, a `setDependency`/`setDependencyRegistry`, an on-chain-URI wiring
|
|
86
|
+
* call, a reserve `mint`. Unlike {@link estimateChunkGasForBytes} these are flat per-call estimates:
|
|
87
|
+
* none of them pays an EVM code-deposit, so their cost doesn't scale with a byte length. Shared by
|
|
88
|
+
* `commands/deploy.ts`'s fresh-deploy cost-guidance heuristic AND its setup-transaction gas-bounded
|
|
89
|
+
* batching, so the two can never disagree about what one of these calls costs.
|
|
90
|
+
*/
|
|
91
|
+
export const SETUP_LEG_GAS = {
|
|
92
|
+
schema: 45_000,
|
|
93
|
+
dependency: 55_000,
|
|
94
|
+
onchainUri: 60_000,
|
|
95
|
+
mint: 65_000,
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Pack arbitrary gas-costed items into gas-bounded batches, preserving order — the call-level
|
|
99
|
+
* sibling of {@link planContentTxs}'s own greedy bin-packing loop, generalized so a caller whose
|
|
100
|
+
* "chunk" is a setup CALL (a schema declare, a dependency pointer, a mint) rather than a content byte
|
|
101
|
+
* range can reuse the identical algorithm and budget instead of inventing a second one. Splits only
|
|
102
|
+
* BETWEEN items — an item whose own `.gas` alone exceeds `gasBudget` still rides alone in its own
|
|
103
|
+
* batch (that batch is simply over-budget, not necessarily over the harder `eth_estimateGas` ceiling
|
|
104
|
+
* — a caller that must refuse an indivisible-too-large leg checks {@link MEASURED_ESTIMATE_GAS_ALLOWANCE}
|
|
105
|
+
* itself, separately, BEFORE calling this).
|
|
106
|
+
*/
|
|
107
|
+
export function packCallsByGas(items, opts = {}) {
|
|
108
|
+
const budget = opts.gasBudget ?? DEFAULT_TX_GAS_BUDGET;
|
|
109
|
+
const batches = [];
|
|
110
|
+
let cur = [];
|
|
111
|
+
let curGas = 0;
|
|
112
|
+
for (const item of items) {
|
|
113
|
+
if (cur.length > 0 && curGas + item.gas > budget) {
|
|
114
|
+
batches.push(cur);
|
|
115
|
+
cur = [];
|
|
116
|
+
curGas = 0;
|
|
117
|
+
}
|
|
118
|
+
cur.push(item);
|
|
119
|
+
curGas += item.gas;
|
|
120
|
+
}
|
|
121
|
+
if (cur.length > 0)
|
|
122
|
+
batches.push(cur);
|
|
123
|
+
return batches;
|
|
54
124
|
}
|
|
55
125
|
/**
|
|
56
126
|
* Decide the transaction shape for a piece of content. When the whole thing fits one
|
|
@@ -86,15 +156,18 @@ export function planContentTxs(chunks, opts = {}) {
|
|
|
86
156
|
* Deploy `AbxChunkStore` — the shared, stateless multi-chunk store + reader. Deploy once
|
|
87
157
|
* per chain (like the renderer); every chunked field references it as its `reader`.
|
|
88
158
|
*/
|
|
89
|
-
export async function deployChunkStore(send) {
|
|
159
|
+
export async function deployChunkStore(send, opts) {
|
|
90
160
|
// CREATE2 via the keyless proxy + canonical salt → the SAME address on every chain (matches the
|
|
91
161
|
// forge `DeployChunkStore` script and the manifest). The address is deterministic, so we compute
|
|
92
162
|
// it rather than read `receipt.contractAddress` (which is null — the tx targets the proxy, not a
|
|
93
163
|
// contract creation). Deploy only when the store isn't already there (the caller checks first).
|
|
94
164
|
const chunkStore = predictCreate2Address(ABX_SALT.chunkStore, abxChunkStoreBytecode);
|
|
95
165
|
const receipt = await send({
|
|
166
|
+
op: 'deploy-chunk-store',
|
|
96
167
|
to: CREATE2_PROXY,
|
|
97
168
|
data: create2Calldata(ABX_SALT.chunkStore, abxChunkStoreBytecode),
|
|
169
|
+
value: '0x0',
|
|
170
|
+
chainId: opts.chainId,
|
|
98
171
|
summary: 'Deploy the shared on-chain chunk store (AbxChunkStore) — CREATE2, deterministic address',
|
|
99
172
|
fields: { contract: 'AbxChunkStore', address: chunkStore, note: 'one-time, ownerless, shared by every chunked field' },
|
|
100
173
|
});
|
|
@@ -123,8 +196,11 @@ export async function storeSupportsWriteContent(publicClient, store) {
|
|
|
123
196
|
/** Write one chunk as an SSTORE2 data contract; returns its address (from `ChunkWritten`). */
|
|
124
197
|
export async function writeChunk(send, args) {
|
|
125
198
|
const receipt = await send({
|
|
199
|
+
op: 'write-chunk',
|
|
126
200
|
to: args.store,
|
|
127
201
|
data: encodeFunctionData({ abi: abxChunkStoreAbi, functionName: 'writeChunk', args: [toHex(args.data)] }),
|
|
202
|
+
value: '0x0',
|
|
203
|
+
chainId: args.chainId,
|
|
128
204
|
summary: 'Stage one on-chain content chunk',
|
|
129
205
|
fields: { store: args.store, bytes: String(args.data.length) },
|
|
130
206
|
});
|
|
@@ -142,12 +218,15 @@ export async function writeChunk(send, args) {
|
|
|
142
218
|
*/
|
|
143
219
|
export async function writeContent(send, args) {
|
|
144
220
|
const receipt = await send({
|
|
221
|
+
op: 'write-content',
|
|
145
222
|
to: args.store,
|
|
146
223
|
data: encodeFunctionData({
|
|
147
224
|
abi: abxChunkStoreAbi,
|
|
148
225
|
functionName: 'writeContent',
|
|
149
226
|
args: [args.chunks.map((c) => toHex(c.data)), args.chunks.map((c) => c.compressed)],
|
|
150
227
|
}),
|
|
228
|
+
value: '0x0',
|
|
229
|
+
chainId: args.chainId,
|
|
151
230
|
summary: `Stage on-chain content (${args.chunks.length} chunk${args.chunks.length === 1 ? '' : 's'}, atomic)`,
|
|
152
231
|
fields: { store: args.store, chunks: String(args.chunks.length) },
|
|
153
232
|
});
|
|
@@ -167,8 +246,11 @@ export async function writeContent(send, args) {
|
|
|
167
246
|
export async function writeChunkBatch(send, args) {
|
|
168
247
|
const calls = args.chunks.map((c) => encodeFunctionData({ abi: abxChunkStoreAbi, functionName: 'writeChunk', args: [toHex(c.data)] }));
|
|
169
248
|
const receipt = await send({
|
|
249
|
+
op: 'write-chunk-batch',
|
|
170
250
|
to: args.store,
|
|
171
251
|
data: encodeFunctionData({ abi: abxChunkStoreAbi, functionName: 'multicall', args: [calls] }),
|
|
252
|
+
value: '0x0',
|
|
253
|
+
chainId: args.chainId,
|
|
172
254
|
summary: `Stage ${args.chunks.length} on-chain content chunk${args.chunks.length === 1 ? '' : 's'} (batch)`,
|
|
173
255
|
fields: { store: args.store, chunks: String(args.chunks.length) },
|
|
174
256
|
});
|
|
@@ -198,28 +280,31 @@ export async function stageContent(send, args) {
|
|
|
198
280
|
const plan = planContentTxs(chunks, { gasBudget: args.gasBudget });
|
|
199
281
|
const txHashes = [];
|
|
200
282
|
if (plan.mode === 'single') {
|
|
201
|
-
const { manifest, txHash } = await writeContent(send, { store: args.store, chunks });
|
|
283
|
+
const { manifest, txHash } = await writeContent(send, { store: args.store, chunks, chainId: args.chainId });
|
|
202
284
|
return { manifest, txHashes: [txHash], chunkCount: chunks.length };
|
|
203
285
|
}
|
|
204
286
|
const written = [];
|
|
205
287
|
for (const batch of plan.batches) {
|
|
206
|
-
const res = await writeChunkBatch(send, { store: args.store, chunks: batch });
|
|
288
|
+
const res = await writeChunkBatch(send, { store: args.store, chunks: batch, chainId: args.chainId });
|
|
207
289
|
written.push(...res.written);
|
|
208
290
|
txHashes.push(res.txHash);
|
|
209
291
|
}
|
|
210
|
-
const { manifest, txHash } = await writeManifest(send, { store: args.store, chunks: written });
|
|
292
|
+
const { manifest, txHash } = await writeManifest(send, { store: args.store, chunks: written, chainId: args.chainId });
|
|
211
293
|
txHashes.push(txHash);
|
|
212
294
|
return { manifest, txHashes, chunkCount: chunks.length };
|
|
213
295
|
}
|
|
214
296
|
/** Write the manifest (ordered chunk list); returns its address (the `reader` pointer). */
|
|
215
297
|
export async function writeManifest(send, args) {
|
|
216
298
|
const receipt = await send({
|
|
299
|
+
op: 'write-manifest',
|
|
217
300
|
to: args.store,
|
|
218
301
|
data: encodeFunctionData({
|
|
219
302
|
abi: abxChunkStoreAbi,
|
|
220
303
|
functionName: 'writeManifest',
|
|
221
304
|
args: [args.chunks.map((c) => ({ pointer: c.pointer, compressed: c.compressed }))],
|
|
222
305
|
}),
|
|
306
|
+
value: '0x0',
|
|
307
|
+
chainId: args.chainId,
|
|
223
308
|
summary: `Write the on-chain content manifest (${args.chunks.length} chunk${args.chunks.length === 1 ? '' : 's'})`,
|
|
224
309
|
fields: { store: args.store, chunks: String(args.chunks.length) },
|
|
225
310
|
});
|
|
@@ -229,4 +314,84 @@ export async function writeManifest(send, args) {
|
|
|
229
314
|
throw new Error('writeManifest emitted no ManifestWritten event');
|
|
230
315
|
return { manifest, txHash: receipt.transactionHash };
|
|
231
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* Resolve a usable multi-chunk content store for this chain, deploying one if needed.
|
|
319
|
+
*
|
|
320
|
+
* This is the bootstrap every on-chain-content path needs, and it existed only inside the CLI — so an
|
|
321
|
+
* SDK integrator got `resolveChunkStore()` (which may return undefined) plus a separate
|
|
322
|
+
* `storeSupportsWriteContent()` they had to remember to call. Forget the second and an incapable
|
|
323
|
+
* store fails *deep inside a mint, after transactions have already landed*. One team hand-rolled this
|
|
324
|
+
* guard for exactly that reason; exporting it is cheaper than every integrator rediscovering it.
|
|
325
|
+
*
|
|
326
|
+
* Three ways to succeed, in order: the listed store if it exists AND exposes the current ABI; the
|
|
327
|
+
* CREATE2-deterministic address (the store is canonical, so a forge script or an earlier lazy deploy
|
|
328
|
+
* may have put it there before the manifest caught up — self-healing, and never a duplicate at a
|
|
329
|
+
* random CREATE address); otherwise deploy it. Ownerless, so any funded signer may stand it up.
|
|
330
|
+
*/
|
|
331
|
+
export async function ensureChunkStore(publicClient, send, opts = { chainId: 0 }) {
|
|
332
|
+
const notify = opts.onEvent ?? (() => { });
|
|
333
|
+
const listed = resolveChunkStore(opts.chainId, opts.override);
|
|
334
|
+
if (listed) {
|
|
335
|
+
const code = await publicClient.getCode({ address: listed });
|
|
336
|
+
if (code && code !== '0x') {
|
|
337
|
+
if (await storeSupportsWriteContent(publicClient, listed))
|
|
338
|
+
return listed;
|
|
339
|
+
notify({ kind: 'stale', address: listed });
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
const predicted = predictChunkStore();
|
|
343
|
+
if (!listed || listed.toLowerCase() !== predicted.toLowerCase()) {
|
|
344
|
+
const code = await publicClient.getCode({ address: predicted });
|
|
345
|
+
if (code && code !== '0x' && (await storeSupportsWriteContent(publicClient, predicted))) {
|
|
346
|
+
notify({ kind: 'canonical', address: predicted });
|
|
347
|
+
return predicted;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
notify({ kind: 'deploying' });
|
|
351
|
+
const { chunkStore } = await deployChunkStore(send, { chainId: opts.chainId });
|
|
352
|
+
notify({ kind: 'deployed', address: chunkStore, inManifest: false });
|
|
353
|
+
return chunkStore;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Resolve a usable multi-chunk content store WITHOUT ever deploying one — the fail-closed sibling
|
|
357
|
+
* to {@link ensureChunkStore}, for the caller that must never send a transaction to answer "is
|
|
358
|
+
* there a usable store here" (a request-scoped service, a read-only server startup check).
|
|
359
|
+
*
|
|
360
|
+
* `ensureChunkStore`'s last resort is a deploy, which is the right call for a CLI staging path (a
|
|
361
|
+
* human is present, a signer is funded, standing up shared infra on demand is the point) and the
|
|
362
|
+
* wrong call for a service: it has no business sending a transaction just because it was asked
|
|
363
|
+
* whether a store exists, and "silently deployed a new chunk store during a health check" would be
|
|
364
|
+
* its own incident. So this composes the SAME two primitives `ensureChunkStore` uses — address
|
|
365
|
+
* resolution ({@link resolveChunkStore}) and the ABI probe ({@link storeSupportsWriteContent}) —
|
|
366
|
+
* into a read-only check that returns a verdict a caller can log, alert on, and refuse to start
|
|
367
|
+
* on, instead of an address or a thrown error.
|
|
368
|
+
*
|
|
369
|
+
* Deliberately does NOT fall back to the CREATE2-deterministic address the way `ensureChunkStore`
|
|
370
|
+
* does: that fallback exists to self-heal a manifest that hasn't caught up with an out-of-band
|
|
371
|
+
* deploy, which is a staging-time convenience, not part of "does the address this caller is
|
|
372
|
+
* actually configured with work" — the question a startup check asks. An explicit `override` (or
|
|
373
|
+
* `ABX_CHUNK_STORE`) still takes precedence over the chain's manifest default, exactly as it does
|
|
374
|
+
* for `ensureChunkStore` — {@link resolveChunkStore} is the single place that precedence lives.
|
|
375
|
+
*/
|
|
376
|
+
export async function probeChunkStore(publicClient, opts) {
|
|
377
|
+
const address = resolveChunkStore(opts.chainId, opts.override);
|
|
378
|
+
if (!address)
|
|
379
|
+
return { verdict: 'unconfigured' };
|
|
380
|
+
let code;
|
|
381
|
+
try {
|
|
382
|
+
code = await publicClient.getCode({ address });
|
|
383
|
+
}
|
|
384
|
+
catch (err) {
|
|
385
|
+
return { verdict: 'unreachable', address, error: firstLine(err) };
|
|
386
|
+
}
|
|
387
|
+
if (!code || code === '0x')
|
|
388
|
+
return { verdict: 'no-code', address };
|
|
389
|
+
if (!(await storeSupportsWriteContent(publicClient, address)))
|
|
390
|
+
return { verdict: 'incompatible', address };
|
|
391
|
+
return { verdict: 'ok', address };
|
|
392
|
+
}
|
|
393
|
+
/** First line of an error message — a revert reason is readable; viem's full dump is not. */
|
|
394
|
+
function firstLine(err) {
|
|
395
|
+
return String(err?.message ?? err).split('\n')[0].trim();
|
|
396
|
+
}
|
|
232
397
|
//# sourceMappingURL=chunks.js.map
|
package/dist/chunks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunks.js","sourceRoot":"","sources":["../src/chunks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chunks.js","sourceRoot":"","sources":["../src/chunks.ts"],"names":[],"mappings":"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"}
|