@artblocks/abx-sdk 0.1.0-alpha.1 → 0.1.0-alpha.10

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.
Files changed (103) hide show
  1. package/README.md +131 -0
  2. package/dist/abi/generated.d.ts +585 -12
  3. package/dist/abi/generated.d.ts.map +1 -1
  4. package/dist/abi/generated.js +16 -16
  5. package/dist/abi/generated.js.map +1 -1
  6. package/dist/abi/index.d.ts +209 -12
  7. package/dist/abi/index.d.ts.map +1 -1
  8. package/dist/anchors.d.ts +150 -0
  9. package/dist/anchors.d.ts.map +1 -0
  10. package/dist/anchors.js +290 -0
  11. package/dist/anchors.js.map +1 -0
  12. package/dist/chains.d.ts +20 -9
  13. package/dist/chains.d.ts.map +1 -1
  14. package/dist/chains.js +27 -18
  15. package/dist/chains.js.map +1 -1
  16. package/dist/chunks.d.ts +53 -23
  17. package/dist/chunks.d.ts.map +1 -1
  18. package/dist/chunks.js +68 -6
  19. package/dist/chunks.js.map +1 -1
  20. package/dist/clients.d.ts +23 -11
  21. package/dist/clients.d.ts.map +1 -1
  22. package/dist/clients.js +17 -18
  23. package/dist/clients.js.map +1 -1
  24. package/dist/creator-token.d.ts +65 -0
  25. package/dist/creator-token.d.ts.map +1 -0
  26. package/dist/creator-token.js +93 -0
  27. package/dist/creator-token.js.map +1 -0
  28. package/dist/deploy.d.ts +24 -10
  29. package/dist/deploy.d.ts.map +1 -1
  30. package/dist/deploy.js +62 -87
  31. package/dist/deploy.js.map +1 -1
  32. package/dist/deployments.d.ts.map +1 -1
  33. package/dist/deployments.js +38 -22
  34. package/dist/deployments.js.map +1 -1
  35. package/dist/deps.d.ts +38 -0
  36. package/dist/deps.d.ts.map +1 -1
  37. package/dist/deps.js +70 -1
  38. package/dist/deps.js.map +1 -1
  39. package/dist/env.d.ts +11 -0
  40. package/dist/env.d.ts.map +1 -1
  41. package/dist/env.js +42 -2
  42. package/dist/env.js.map +1 -1
  43. package/dist/errors.d.ts +63 -0
  44. package/dist/errors.d.ts.map +1 -0
  45. package/dist/errors.js +85 -0
  46. package/dist/errors.js.map +1 -0
  47. package/dist/execute.d.ts +115 -0
  48. package/dist/execute.d.ts.map +1 -0
  49. package/dist/execute.js +142 -0
  50. package/dist/execute.js.map +1 -0
  51. package/dist/index.d.ts +13 -2
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +13 -2
  54. package/dist/index.js.map +1 -1
  55. package/dist/inspect.d.ts +48 -0
  56. package/dist/inspect.d.ts.map +1 -0
  57. package/dist/inspect.js +290 -0
  58. package/dist/inspect.js.map +1 -0
  59. package/dist/migrate.d.ts +41 -0
  60. package/dist/migrate.d.ts.map +1 -0
  61. package/dist/migrate.js +140 -0
  62. package/dist/migrate.js.map +1 -0
  63. package/dist/node.d.ts +13 -0
  64. package/dist/node.d.ts.map +1 -0
  65. package/dist/node.js +13 -0
  66. package/dist/node.js.map +1 -0
  67. package/dist/onchain-uri.d.ts +96 -0
  68. package/dist/onchain-uri.d.ts.map +1 -0
  69. package/dist/onchain-uri.js +231 -0
  70. package/dist/onchain-uri.js.map +1 -0
  71. package/dist/ops.d.ts +113 -5
  72. package/dist/ops.d.ts.map +1 -1
  73. package/dist/ops.js +172 -13
  74. package/dist/ops.js.map +1 -1
  75. package/dist/reconstruct.d.ts +20 -1
  76. package/dist/reconstruct.d.ts.map +1 -1
  77. package/dist/reconstruct.js +124 -50
  78. package/dist/reconstruct.js.map +1 -1
  79. package/dist/resume.d.ts +96 -0
  80. package/dist/resume.d.ts.map +1 -0
  81. package/dist/resume.js +95 -0
  82. package/dist/resume.js.map +1 -0
  83. package/dist/service.d.ts +369 -0
  84. package/dist/service.d.ts.map +1 -0
  85. package/dist/service.js +376 -0
  86. package/dist/service.js.map +1 -0
  87. package/dist/staging.d.ts +95 -0
  88. package/dist/staging.d.ts.map +1 -0
  89. package/dist/staging.js +57 -0
  90. package/dist/staging.js.map +1 -0
  91. package/dist/tokendata.d.ts +62 -2
  92. package/dist/tokendata.d.ts.map +1 -1
  93. package/dist/tokendata.js +60 -16
  94. package/dist/tokendata.js.map +1 -1
  95. package/dist/tokens.d.ts +55 -0
  96. package/dist/tokens.d.ts.map +1 -0
  97. package/dist/tokens.js +152 -0
  98. package/dist/tokens.js.map +1 -0
  99. package/dist/util.d.ts +59 -0
  100. package/dist/util.d.ts.map +1 -0
  101. package/dist/util.js +89 -0
  102. package/dist/util.js.map +1 -0
  103. package/package.json +10 -2
package/dist/chunks.js CHANGED
@@ -1,5 +1,7 @@
1
- import { encodeFunctionData, parseEventLogs, } from 'viem';
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,7 +45,7 @@ export function planChunks(content, opts = {}) {
36
45
  }
37
46
  return chunks;
38
47
  }
39
- const toHex = (b) => `0x${Buffer.from(b).toString('hex')}`;
48
+ const toHex = (b) => bytesToHex(b);
40
49
  /**
41
50
  * A per-transaction gas ceiling for packing chunk writes. Comfortably under mainnet's
42
51
  * ~30M block limit so a batch always fits with room for the base + calldata cost; the
@@ -86,15 +95,18 @@ export function planContentTxs(chunks, opts = {}) {
86
95
  * Deploy `AbxChunkStore` — the shared, stateless multi-chunk store + reader. Deploy once
87
96
  * per chain (like the renderer); every chunked field references it as its `reader`.
88
97
  */
89
- export async function deployChunkStore(send) {
98
+ export async function deployChunkStore(send, opts) {
90
99
  // CREATE2 via the keyless proxy + canonical salt → the SAME address on every chain (matches the
91
100
  // forge `DeployChunkStore` script and the manifest). The address is deterministic, so we compute
92
101
  // it rather than read `receipt.contractAddress` (which is null — the tx targets the proxy, not a
93
102
  // contract creation). Deploy only when the store isn't already there (the caller checks first).
94
103
  const chunkStore = predictCreate2Address(ABX_SALT.chunkStore, abxChunkStoreBytecode);
95
104
  const receipt = await send({
105
+ op: 'deploy-chunk-store',
96
106
  to: CREATE2_PROXY,
97
107
  data: create2Calldata(ABX_SALT.chunkStore, abxChunkStoreBytecode),
108
+ value: '0x0',
109
+ chainId: opts.chainId,
98
110
  summary: 'Deploy the shared on-chain chunk store (AbxChunkStore) — CREATE2, deterministic address',
99
111
  fields: { contract: 'AbxChunkStore', address: chunkStore, note: 'one-time, ownerless, shared by every chunked field' },
100
112
  });
@@ -123,8 +135,11 @@ export async function storeSupportsWriteContent(publicClient, store) {
123
135
  /** Write one chunk as an SSTORE2 data contract; returns its address (from `ChunkWritten`). */
124
136
  export async function writeChunk(send, args) {
125
137
  const receipt = await send({
138
+ op: 'write-chunk',
126
139
  to: args.store,
127
140
  data: encodeFunctionData({ abi: abxChunkStoreAbi, functionName: 'writeChunk', args: [toHex(args.data)] }),
141
+ value: '0x0',
142
+ chainId: args.chainId,
128
143
  summary: 'Stage one on-chain content chunk',
129
144
  fields: { store: args.store, bytes: String(args.data.length) },
130
145
  });
@@ -142,12 +157,15 @@ export async function writeChunk(send, args) {
142
157
  */
143
158
  export async function writeContent(send, args) {
144
159
  const receipt = await send({
160
+ op: 'write-content',
145
161
  to: args.store,
146
162
  data: encodeFunctionData({
147
163
  abi: abxChunkStoreAbi,
148
164
  functionName: 'writeContent',
149
165
  args: [args.chunks.map((c) => toHex(c.data)), args.chunks.map((c) => c.compressed)],
150
166
  }),
167
+ value: '0x0',
168
+ chainId: args.chainId,
151
169
  summary: `Stage on-chain content (${args.chunks.length} chunk${args.chunks.length === 1 ? '' : 's'}, atomic)`,
152
170
  fields: { store: args.store, chunks: String(args.chunks.length) },
153
171
  });
@@ -167,8 +185,11 @@ export async function writeContent(send, args) {
167
185
  export async function writeChunkBatch(send, args) {
168
186
  const calls = args.chunks.map((c) => encodeFunctionData({ abi: abxChunkStoreAbi, functionName: 'writeChunk', args: [toHex(c.data)] }));
169
187
  const receipt = await send({
188
+ op: 'write-chunk-batch',
170
189
  to: args.store,
171
190
  data: encodeFunctionData({ abi: abxChunkStoreAbi, functionName: 'multicall', args: [calls] }),
191
+ value: '0x0',
192
+ chainId: args.chainId,
172
193
  summary: `Stage ${args.chunks.length} on-chain content chunk${args.chunks.length === 1 ? '' : 's'} (batch)`,
173
194
  fields: { store: args.store, chunks: String(args.chunks.length) },
174
195
  });
@@ -198,28 +219,31 @@ export async function stageContent(send, args) {
198
219
  const plan = planContentTxs(chunks, { gasBudget: args.gasBudget });
199
220
  const txHashes = [];
200
221
  if (plan.mode === 'single') {
201
- const { manifest, txHash } = await writeContent(send, { store: args.store, chunks });
222
+ const { manifest, txHash } = await writeContent(send, { store: args.store, chunks, chainId: args.chainId });
202
223
  return { manifest, txHashes: [txHash], chunkCount: chunks.length };
203
224
  }
204
225
  const written = [];
205
226
  for (const batch of plan.batches) {
206
- const res = await writeChunkBatch(send, { store: args.store, chunks: batch });
227
+ const res = await writeChunkBatch(send, { store: args.store, chunks: batch, chainId: args.chainId });
207
228
  written.push(...res.written);
208
229
  txHashes.push(res.txHash);
209
230
  }
210
- const { manifest, txHash } = await writeManifest(send, { store: args.store, chunks: written });
231
+ const { manifest, txHash } = await writeManifest(send, { store: args.store, chunks: written, chainId: args.chainId });
211
232
  txHashes.push(txHash);
212
233
  return { manifest, txHashes, chunkCount: chunks.length };
213
234
  }
214
235
  /** Write the manifest (ordered chunk list); returns its address (the `reader` pointer). */
215
236
  export async function writeManifest(send, args) {
216
237
  const receipt = await send({
238
+ op: 'write-manifest',
217
239
  to: args.store,
218
240
  data: encodeFunctionData({
219
241
  abi: abxChunkStoreAbi,
220
242
  functionName: 'writeManifest',
221
243
  args: [args.chunks.map((c) => ({ pointer: c.pointer, compressed: c.compressed }))],
222
244
  }),
245
+ value: '0x0',
246
+ chainId: args.chainId,
223
247
  summary: `Write the on-chain content manifest (${args.chunks.length} chunk${args.chunks.length === 1 ? '' : 's'})`,
224
248
  fields: { store: args.store, chunks: String(args.chunks.length) },
225
249
  });
@@ -229,4 +253,42 @@ export async function writeManifest(send, args) {
229
253
  throw new Error('writeManifest emitted no ManifestWritten event');
230
254
  return { manifest, txHash: receipt.transactionHash };
231
255
  }
256
+ /**
257
+ * Resolve a usable multi-chunk content store for this chain, deploying one if needed.
258
+ *
259
+ * This is the bootstrap every on-chain-content path needs, and it existed only inside the CLI — so an
260
+ * SDK integrator got `resolveChunkStore()` (which may return undefined) plus a separate
261
+ * `storeSupportsWriteContent()` they had to remember to call. Forget the second and an incapable
262
+ * store fails *deep inside a mint, after transactions have already landed*. One team hand-rolled this
263
+ * guard for exactly that reason; exporting it is cheaper than every integrator rediscovering it.
264
+ *
265
+ * Three ways to succeed, in order: the listed store if it exists AND exposes the current ABI; the
266
+ * CREATE2-deterministic address (the store is canonical, so a forge script or an earlier lazy deploy
267
+ * may have put it there before the manifest caught up — self-healing, and never a duplicate at a
268
+ * random CREATE address); otherwise deploy it. Ownerless, so any funded signer may stand it up.
269
+ */
270
+ export async function ensureChunkStore(publicClient, send, opts = { chainId: 0 }) {
271
+ const notify = opts.onEvent ?? (() => { });
272
+ const listed = resolveChunkStore(opts.chainId, opts.override);
273
+ if (listed) {
274
+ const code = await publicClient.getCode({ address: listed });
275
+ if (code && code !== '0x') {
276
+ if (await storeSupportsWriteContent(publicClient, listed))
277
+ return listed;
278
+ notify({ kind: 'stale', address: listed });
279
+ }
280
+ }
281
+ const predicted = predictChunkStore();
282
+ if (!listed || listed.toLowerCase() !== predicted.toLowerCase()) {
283
+ const code = await publicClient.getCode({ address: predicted });
284
+ if (code && code !== '0x' && (await storeSupportsWriteContent(publicClient, predicted))) {
285
+ notify({ kind: 'canonical', address: predicted });
286
+ return predicted;
287
+ }
288
+ }
289
+ notify({ kind: 'deploying' });
290
+ const { chunkStore } = await deployChunkStore(send, { chainId: opts.chainId });
291
+ notify({ kind: 'deployed', address: chunkStore, inManifest: false });
292
+ return chunkStore;
293
+ }
232
294
  //# sourceMappingURL=chunks.js.map
@@ -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":"AAAA,OAAO,EAAC,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAA4C,MAAM,MAAM,CAAC;AAC/G,OAAO,EAAC,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAC,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAG7F;;;;;;;;;GASG;AAEH;2FAC2F;AAC3F,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAQzC;;;;;;GAMG;AAEH;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,OAAmB,EACnB,OAA+C,EAAE;IAEjD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAClD,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;gBAC9C,SAAS;YACX,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,CAAa,EAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,OAAO,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;AAC1C,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAsB,EACtB,OAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,IAAI,qBAAqB,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,mFAAmF;IACnF,IAAI,KAAK,GAAG,MAAM,IAAI,MAAM;QAAE,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAC,CAAC;IAE1E,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,IAAI,GAAG,GAAmB,EAAE,CAAC;IAC7B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,GAAG,GAAG,EAAE,CAAC;YACT,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,EAAC,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,IAAuB;IAEvB,gGAAgG;IAChG,iGAAiG;IACjG,iGAAiG;IACjG,gGAAgG;IAChG,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;QACzB,EAAE,EAAE,oBAAoB;QACxB,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;QACjE,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,yFAAyF;QAClG,MAAM,EAAE,EAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,oDAAoD,EAAC;KACrH,CAAC,CAAC;IACH,OAAO,EAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAC,CAAC;AACzF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,YAA0B,EAC1B,KAAc;IAEd,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,IAAI,CAAC;YACtB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,kBAAkB,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAC,CAAC;SAChG,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,IAAyD;IAEzD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;QACzB,EAAE,EAAE,aAAa;QACjB,EAAE,EAAE,IAAI,CAAC,KAAK;QACd,IAAI,EAAE,kBAAkB,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC;QACvG,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,kCAAkC;QAC3C,MAAM,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC;KAC7D,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,cAAc,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC,CAAC;IAClG,MAAM,OAAO,GAAI,EAAE,CAAC,CAAC,CAA4C,EAAE,IAAI,CAAC,OAAO,CAAC;IAChF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC1E,OAAO,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,EAAC,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,IAA4E;IAE5E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;QACzB,EAAE,EAAE,eAAe;QACnB,EAAE,EAAE,IAAI,CAAC,KAAK;QACd,IAAI,EAAE,kBAAkB,CAAC;YACvB,GAAG,EAAE,gBAAgB;YACrB,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;SACpF,CAAC;QACF,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,2BAA2B,IAAI,CAAC,MAAM,CAAC,MAAM,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW;QAC7G,MAAM,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAC;KAChE,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,cAAc,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC,CAAC;IACrG,MAAM,QAAQ,GAAI,EAAE,CAAC,CAAC,CAA6C,EAAE,IAAI,CAAC,QAAQ,CAAC;IACnF,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAChF,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,EAAC,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,IAA4E;IAE5E,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,kBAAkB,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAC/F,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;QACzB,EAAE,EAAE,mBAAmB;QACvB,EAAE,EAAE,IAAI,CAAC,KAAK;QACd,IAAI,EAAE,kBAAkB,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAC,CAAC;QAC3F,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,0BAA0B,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU;QAC3G,MAAM,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAC;KAChE,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IACvC,MAAM,GAAG,GAAG,cAAc,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC,CAAC;IACnG,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,CAAC,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,CACzF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,OAAO,EAAG,CAAgC,CAAC,IAAI,CAAC,OAAO;QACvD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU;KACtC,CAAC,CAAC,CAAC;IACJ,OAAO,EAAC,OAAO,EAAE,MAAM,EAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,IAAsH;IAEtH,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC;IAC1F,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAU,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC;QACxG,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC;IACnE,CAAC;IAED,MAAM,OAAO,GAAmD,EAAE,CAAC;IACnE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC;QACnG,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC;IAClH,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC;AACzD,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,IAAuG;IAEvG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;QACzB,EAAE,EAAE,gBAAgB;QACpB,EAAE,EAAE,IAAI,CAAC,KAAK;QACd,IAAI,EAAE,kBAAkB,CAAC;YACvB,GAAG,EAAE,gBAAgB;YACrB,YAAY,EAAE,eAAe;YAC7B,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC;SACjF,CAAC;QACF,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,wCAAwC,IAAI,CAAC,MAAM,CAAC,MAAM,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;QAClH,MAAM,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAC;KAChE,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,cAAc,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC,CAAC;IACrG,MAAM,QAAQ,GAAI,EAAE,CAAC,CAAC,CAA6C,EAAE,IAAI,CAAC,QAAQ,CAAC;IACnF,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACjF,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,EAAC,CAAC;AACrD,CAAC;AASD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAA0B,EAC1B,IAAY,EACZ,OAAqF,EAAC,OAAO,EAAE,CAAC,EAAC;IAEjG,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9D,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAC,OAAO,EAAE,MAAM,EAAC,CAAC,CAAC;QAC3D,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC1B,IAAI,MAAM,yBAAyB,CAAC,YAAY,EAAE,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;YACzE,MAAM,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAC,OAAO,EAAE,SAAS,EAAC,CAAC,CAAC;QAC9D,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,yBAAyB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACxF,MAAM,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAC,CAAC,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;IAC5B,MAAM,EAAC,UAAU,EAAC,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC,CAAC;IACnE,OAAO,UAAU,CAAC;AACpB,CAAC"}
package/dist/clients.d.ts CHANGED
@@ -1,7 +1,12 @@
1
- import { type PublicClient, type WalletClient, type Account } from 'viem';
1
+ import { type PublicClient, type WalletClient, type Account, type Hex } from 'viem';
2
2
  export interface ClientOptions {
3
3
  chainKey?: string;
4
+ /** A single RPC endpoint — wins outright over everything else (env included). */
4
5
  rpcUrl?: string;
6
+ /** Several RPC endpoints, in preference order (a viem `fallback` transport failing over
7
+ * across them). Loses to `rpcUrl` when both are set; otherwise takes precedence over env
8
+ * resolution — see {@link resolveRpcUrls}'s override → env → manifest precedence. */
9
+ rpcUrls?: string[];
5
10
  }
6
11
  /** A read-only client — all the indexer and token API ever need. */
7
12
  export declare function makePublicClient(opts?: ClientOptions): PublicClient;
@@ -21,22 +26,29 @@ export declare function makePublicClient(opts?: ClientOptions): PublicClient;
21
26
  export declare function assertChainId(chainKey?: string, opts?: {
22
27
  allowUnreachable?: boolean;
23
28
  }): Promise<void>;
29
+ export interface WalletClientOptions extends ClientOptions {
30
+ /** An explicit key — bypasses `ABX_DEPLOYER_PK` (and any `.env`) entirely. For a caller that
31
+ * already resolved a key itself (a browser-wallet bridge is the OTHER signing lane — this is
32
+ * for a host embedding the SDK with its own key management, not that lane). */
33
+ privateKey?: Hex;
34
+ }
24
35
  /**
25
- * A signing client, backed by a private key from the environment. The SDK never
26
- * takes custody of keys beyond reading them from the operator's own env — there
27
- * is no key storage, no prompt, no remote signer here.
36
+ * A signing client, backed by a private key. The SDK never takes custody of keys beyond
37
+ * reading them from the operator's own env (or an explicit override) — there is no key
38
+ * storage, no prompt, no remote signer here.
28
39
  *
29
- * Key precedence: `ABX_DEPLOYER_PK` → `SEPOLIA_FUNDED_PK` → `SEPOLIA_WALLET_PK`.
40
+ * Key resolution: `opts.privateKey` → `ABX_DEPLOYER_PK`. That is the ONLY env name read —
41
+ * `SEPOLIA_FUNDED_PK` / `SEPOLIA_WALLET_PK` (earlier alphas) are no longer consulted.
30
42
  */
31
- export declare function makeWalletClient(opts?: ClientOptions): {
43
+ export declare function makeWalletClient(opts?: WalletClientOptions): {
32
44
  wallet: WalletClient;
33
45
  account: Account;
34
46
  };
35
47
  /**
36
- * The env signing key (0x-normalized), same precedence as {@link makeWalletClient}
37
- * (`ABX_DEPLOYER_PK` → `SEPOLIA_FUNDED_PK` → `SEPOLIA_WALLET_PK`), or `undefined` if none is set.
38
- * For reusing the hot key as a *storage* signing identity (an Ethereum Turbo identity) without
39
- * constructing a wallet client. Never throws.
48
+ * The signing key (0x-normalized), same resolution as {@link makeWalletClient}
49
+ * (`override` → `ABX_DEPLOYER_PK`), or `undefined` if none is set. For reusing the hot key as
50
+ * a *storage* signing identity (an Ethereum Turbo identity) without constructing a wallet
51
+ * client. Never throws.
40
52
  */
41
- export declare function envSigningKey(): `0x${string}` | undefined;
53
+ export declare function envSigningKey(override?: Hex): `0x${string}` | undefined;
42
54
  //# sourceMappingURL=clients.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../src/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,YAAY,EAEjB,KAAK,YAAY,EACjB,KAAK,OAAO,EACb,MAAM,MAAM,CAAC;AAKd,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,aAAkB,GAAG,YAAY,CAEvE;AAID;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,QAAQ,GAAE,MAA0B,EACpC,IAAI,GAAE;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAM,GACtC,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,aAAkB,GAAG;IAC1D,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,CAYA;AAOD;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,KAAK,MAAM,EAAE,GAAG,SAAS,CAIzD"}
1
+ {"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../src/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,YAAY,EAEjB,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,GAAG,EACT,MAAM,MAAM,CAAC;AAMd,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;0FAEsF;IACtF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAeD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,aAAkB,GAAG,YAAY,CAEvE;AAID;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,QAAQ,GAAE,MAA0B,EACpC,IAAI,GAAE;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAM,GACtC,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD;;oFAEgF;IAChF,UAAU,CAAC,EAAE,GAAG,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,mBAAwB,GAAG;IAChE,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,CAOA;AAOD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,KAAK,MAAM,EAAE,GAAG,SAAS,CAGvE"}
package/dist/clients.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { createPublicClient, createWalletClient, fallback, http, } from 'viem';
2
2
  import { privateKeyToAccount } from 'viem/accounts';
3
3
  import { DEFAULT_CHAIN_KEY, resolveChain, resolveRpcUrls, rpcEnvVar } from './chains.js';
4
- import { loadDotEnv } from './env.js';
4
+ import { readEnv } from './util.js';
5
+ import { MissingSigningKeyError } from './errors.js';
5
6
  /**
6
7
  * A transport over one or more endpoints. With several, a viem `fallback` fails
7
8
  * over on error — so a request one endpoint rejects (e.g. a too-wide `eth_getLogs`)
@@ -11,7 +12,7 @@ import { loadDotEnv } from './env.js';
11
12
  function makeTransport(opts) {
12
13
  if (opts.rpcUrl)
13
14
  return http(opts.rpcUrl);
14
- const urls = resolveRpcUrls(opts.chainKey);
15
+ const urls = resolveRpcUrls(opts.chainKey, opts.rpcUrls);
15
16
  if (urls.length <= 1)
16
17
  return http(urls[0]);
17
18
  return fallback(urls.map((u) => http(u, { retryCount: 0 })));
@@ -55,18 +56,17 @@ export async function assertChainId(chainKey = DEFAULT_CHAIN_KEY, opts = {}) {
55
56
  verifiedChains.add(chainKey);
56
57
  }
57
58
  /**
58
- * A signing client, backed by a private key from the environment. The SDK never
59
- * takes custody of keys beyond reading them from the operator's own env — there
60
- * is no key storage, no prompt, no remote signer here.
59
+ * A signing client, backed by a private key. The SDK never takes custody of keys beyond
60
+ * reading them from the operator's own env (or an explicit override) — there is no key
61
+ * storage, no prompt, no remote signer here.
61
62
  *
62
- * Key precedence: `ABX_DEPLOYER_PK` → `SEPOLIA_FUNDED_PK` → `SEPOLIA_WALLET_PK`.
63
+ * Key resolution: `opts.privateKey` → `ABX_DEPLOYER_PK`. That is the ONLY env name read —
64
+ * `SEPOLIA_FUNDED_PK` / `SEPOLIA_WALLET_PK` (earlier alphas) are no longer consulted.
63
65
  */
64
66
  export function makeWalletClient(opts = {}) {
65
- loadDotEnv();
66
- const pk = process.env.ABX_DEPLOYER_PK ?? process.env.SEPOLIA_FUNDED_PK ?? process.env.SEPOLIA_WALLET_PK;
67
- if (!pk) {
68
- throw new Error('No signing key found. Set ABX_DEPLOYER_PK, SEPOLIA_FUNDED_PK, or SEPOLIA_WALLET_PK in your .env.');
69
- }
67
+ const pk = opts.privateKey ?? readEnv('ABX_DEPLOYER_PK');
68
+ if (!pk)
69
+ throw new MissingSigningKeyError();
70
70
  const account = privateKeyToAccount(normalizePk(pk));
71
71
  const chain = resolveChain(opts.chainKey);
72
72
  const wallet = createWalletClient({ account, chain, transport: makeTransport(opts) });
@@ -77,14 +77,13 @@ function normalizePk(pk) {
77
77
  return (trimmed.startsWith('0x') ? trimmed : `0x${trimmed}`);
78
78
  }
79
79
  /**
80
- * The env signing key (0x-normalized), same precedence as {@link makeWalletClient}
81
- * (`ABX_DEPLOYER_PK` → `SEPOLIA_FUNDED_PK` → `SEPOLIA_WALLET_PK`), or `undefined` if none is set.
82
- * For reusing the hot key as a *storage* signing identity (an Ethereum Turbo identity) without
83
- * constructing a wallet client. Never throws.
80
+ * The signing key (0x-normalized), same resolution as {@link makeWalletClient}
81
+ * (`override` → `ABX_DEPLOYER_PK`), or `undefined` if none is set. For reusing the hot key as
82
+ * a *storage* signing identity (an Ethereum Turbo identity) without constructing a wallet
83
+ * client. Never throws.
84
84
  */
85
- export function envSigningKey() {
86
- loadDotEnv();
87
- const pk = process.env.ABX_DEPLOYER_PK ?? process.env.SEPOLIA_FUNDED_PK ?? process.env.SEPOLIA_WALLET_PK;
85
+ export function envSigningKey(override) {
86
+ const pk = override ?? readEnv('ABX_DEPLOYER_PK');
88
87
  return pk ? normalizePk(pk) : undefined;
89
88
  }
90
89
  //# sourceMappingURL=clients.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clients.js","sourceRoot":"","sources":["../src/clients.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clients.js","sourceRoot":"","sources":["../src/clients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * ERC-721C creator-token support — the opt-in transfer-validation surface.
3
+ *
4
+ * An ABX token enrolls at deploy, permanently, by passing a non-zero `transferValidator` in
5
+ * its InitParams (see `deploy.ts`); zero leaves a plain ERC-721 forever, indistinguishable
6
+ * from a pre-721C token (ERC-165 and the extension beacon both branch on enrollment). Within
7
+ * an enrolled token the owner re-points the validator freely or suspends enforcement with
8
+ * zero — never un-enrolls. Every transfer that isn't a mint/burn (or the validator's own)
9
+ * staticcalls `validateTransfer(caller, from, to, tokenId)` on the validator; a policy
10
+ * violation reverts and bubbles.
11
+ */
12
+ import { type Address, type PublicClient } from 'viem';
13
+ import type { PreparedTx } from './ops.js';
14
+ /** ERC-165 id of `ICreatorToken` — advertised (with the legacy id) only when enrolled. */
15
+ export declare const CREATOR_TOKEN_INTERFACE_ID: "0xad0d7f6c";
16
+ /** ERC-165 id of `ICreatorTokenLegacy` — the subset older marketplaces probe for. */
17
+ export declare const CREATOR_TOKEN_LEGACY_INTERFACE_ID: "0xa07d229a";
18
+ /** keccak256("abx.extension.creator-token") — `extensionVersion(id)` is 1 only when enrolled. */
19
+ export declare const CREATOR_TOKEN_EXTENSION_ID: "0x0839e7ed7fc1f5db3f253851d61b10f852045c5520c2936138b121b73e7e27c0";
20
+ /**
21
+ * The recommended transfer validator per chain — OpenSea's
22
+ * **StrictAuthorizedTransferSecurityRegistry**, the validator their creator-fee-enforcement
23
+ * doc recommends for enforcement eligibility (docs.opensea.io "Creator Fee Enforcement",
24
+ * checked 2026-08; the named alternative is Limit Break's CreatorTokenTransferValidator
25
+ * 0x721C0078c2328597Ca70F5451ffF5A7B38D4E947). Verified empirically against the LIVE
26
+ * contracts on 2026-08-04 (`cast call --from <collection>` on the 4-arg
27
+ * `validateTransfer(address,address,address,uint256)` overload, both chains):
28
+ * an owner-initiated (OTC) transfer succeeds; an unauthorized operator reverts
29
+ * `StrictAuthorizedTransferSecurityRegistry__UnauthorizedTransfer()`.
30
+ *
31
+ * CREATE2-style vanity address, identical on both shipped chains — kept per-chain anyway
32
+ * (keyed like `deployments.ts`) because presence-on-chain is the fact that matters, and a
33
+ * future chain may recommend a different validator.
34
+ */
35
+ export declare const RECOMMENDED_TRANSFER_VALIDATOR: Record<number, Address>;
36
+ /** The recommended validator for a chain (undefined if none is known — never guess one). */
37
+ export declare function resolveRecommendedTransferValidator(chainId: number): Address | undefined;
38
+ /** A token's creator-token (ERC-721C) status, read from chain. */
39
+ export interface CreatorTokenStatus {
40
+ /** True iff the token enrolled at deploy (permanent). False = plain ERC-721, forever. */
41
+ enrolled: boolean;
42
+ /** The active validator (`zeroAddress` when unenrolled, or enrolled-but-suspended). */
43
+ validator: Address;
44
+ }
45
+ /**
46
+ * Read whether `contract` is an enrolled ERC-721C creator token, and its active validator.
47
+ * Enrollment comes from ERC-165 (`ICreatorToken`, which the token advertises only when
48
+ * enrolled); the validator from `getTransferValidator()`. Both reads are defensive — a
49
+ * pre-721C ABX token has neither branch (no `getTransferValidator` selector at all), and
50
+ * must read as `{enrolled: false, validator: zeroAddress}`, not as an error.
51
+ */
52
+ export declare function readCreatorTokenStatus(client: PublicClient, contract: Address): Promise<CreatorTokenStatus>;
53
+ /**
54
+ * Re-point an enrolled token's transfer validator, or suspend enforcement with
55
+ * `zeroAddress` (the token stays enrolled). Signer must be the owner. Reverts
56
+ * `NotCreatorToken()` on a token that didn't enroll at deploy — enrollment can never be
57
+ * added later — and `InvalidTransferValidator()` on a non-zero validator with no code;
58
+ * callers should read {@link readCreatorTokenStatus} first and refuse those before gas.
59
+ */
60
+ export declare function prepareSetTransferValidator(args: {
61
+ contract: Address;
62
+ validator: Address;
63
+ chainId: number;
64
+ }): PreparedTx;
65
+ //# sourceMappingURL=creator-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creator-token.d.ts","sourceRoot":"","sources":["../src/creator-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAkC,KAAK,OAAO,EAAE,KAAK,YAAY,EAAC,MAAM,MAAM,CAAC;AAEtF,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEzC,0FAA0F;AAC1F,eAAO,MAAM,0BAA0B,EAAG,YAAqB,CAAC;AAChE,qFAAqF;AACrF,eAAO,MAAM,iCAAiC,EAAG,YAAqB,CAAC;AACvE,iGAAiG;AACjG,eAAO,MAAM,0BAA0B,EACrC,oEAA6E,CAAC;AAEhF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAKlE,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAExF;AAED,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IACjC,yFAAyF;IACzF,QAAQ,EAAE,OAAO,CAAC;IAClB,uFAAuF;IACvF,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAe7B;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,UAAU,CAiBb"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * ERC-721C creator-token support — the opt-in transfer-validation surface.
3
+ *
4
+ * An ABX token enrolls at deploy, permanently, by passing a non-zero `transferValidator` in
5
+ * its InitParams (see `deploy.ts`); zero leaves a plain ERC-721 forever, indistinguishable
6
+ * from a pre-721C token (ERC-165 and the extension beacon both branch on enrollment). Within
7
+ * an enrolled token the owner re-points the validator freely or suspends enforcement with
8
+ * zero — never un-enrolls. Every transfer that isn't a mint/burn (or the validator's own)
9
+ * staticcalls `validateTransfer(caller, from, to, tokenId)` on the validator; a policy
10
+ * violation reverts and bubbles.
11
+ */
12
+ import { encodeFunctionData, zeroAddress } from 'viem';
13
+ import { oneOfOneImageAbi } from './abi/index.js';
14
+ /** ERC-165 id of `ICreatorToken` — advertised (with the legacy id) only when enrolled. */
15
+ export const CREATOR_TOKEN_INTERFACE_ID = '0xad0d7f6c';
16
+ /** ERC-165 id of `ICreatorTokenLegacy` — the subset older marketplaces probe for. */
17
+ export const CREATOR_TOKEN_LEGACY_INTERFACE_ID = '0xa07d229a';
18
+ /** keccak256("abx.extension.creator-token") — `extensionVersion(id)` is 1 only when enrolled. */
19
+ export const CREATOR_TOKEN_EXTENSION_ID = '0x0839e7ed7fc1f5db3f253851d61b10f852045c5520c2936138b121b73e7e27c0';
20
+ /**
21
+ * The recommended transfer validator per chain — OpenSea's
22
+ * **StrictAuthorizedTransferSecurityRegistry**, the validator their creator-fee-enforcement
23
+ * doc recommends for enforcement eligibility (docs.opensea.io "Creator Fee Enforcement",
24
+ * checked 2026-08; the named alternative is Limit Break's CreatorTokenTransferValidator
25
+ * 0x721C0078c2328597Ca70F5451ffF5A7B38D4E947). Verified empirically against the LIVE
26
+ * contracts on 2026-08-04 (`cast call --from <collection>` on the 4-arg
27
+ * `validateTransfer(address,address,address,uint256)` overload, both chains):
28
+ * an owner-initiated (OTC) transfer succeeds; an unauthorized operator reverts
29
+ * `StrictAuthorizedTransferSecurityRegistry__UnauthorizedTransfer()`.
30
+ *
31
+ * CREATE2-style vanity address, identical on both shipped chains — kept per-chain anyway
32
+ * (keyed like `deployments.ts`) because presence-on-chain is the fact that matters, and a
33
+ * future chain may recommend a different validator.
34
+ */
35
+ export const RECOMMENDED_TRANSFER_VALIDATOR = {
36
+ // Sepolia (testnet)
37
+ 11155111: '0xA000027A9B2802E1ddf7000061001e5c005A0000',
38
+ // Base Sepolia (testnet)
39
+ 84532: '0xA000027A9B2802E1ddf7000061001e5c005A0000',
40
+ };
41
+ /** The recommended validator for a chain (undefined if none is known — never guess one). */
42
+ export function resolveRecommendedTransferValidator(chainId) {
43
+ return RECOMMENDED_TRANSFER_VALIDATOR[chainId];
44
+ }
45
+ /**
46
+ * Read whether `contract` is an enrolled ERC-721C creator token, and its active validator.
47
+ * Enrollment comes from ERC-165 (`ICreatorToken`, which the token advertises only when
48
+ * enrolled); the validator from `getTransferValidator()`. Both reads are defensive — a
49
+ * pre-721C ABX token has neither branch (no `getTransferValidator` selector at all), and
50
+ * must read as `{enrolled: false, validator: zeroAddress}`, not as an error.
51
+ */
52
+ export async function readCreatorTokenStatus(client, contract) {
53
+ const [enrolled, validator] = await Promise.all([
54
+ client
55
+ .readContract({
56
+ address: contract,
57
+ abi: oneOfOneImageAbi,
58
+ functionName: 'supportsInterface',
59
+ args: [CREATOR_TOKEN_INTERFACE_ID],
60
+ })
61
+ .catch(() => false),
62
+ client
63
+ .readContract({ address: contract, abi: oneOfOneImageAbi, functionName: 'getTransferValidator' })
64
+ .catch(() => zeroAddress),
65
+ ]);
66
+ return { enrolled, validator };
67
+ }
68
+ /**
69
+ * Re-point an enrolled token's transfer validator, or suspend enforcement with
70
+ * `zeroAddress` (the token stays enrolled). Signer must be the owner. Reverts
71
+ * `NotCreatorToken()` on a token that didn't enroll at deploy — enrollment can never be
72
+ * added later — and `InvalidTransferValidator()` on a non-zero validator with no code;
73
+ * callers should read {@link readCreatorTokenStatus} first and refuse those before gas.
74
+ */
75
+ export function prepareSetTransferValidator(args) {
76
+ const suspending = args.validator === zeroAddress;
77
+ return {
78
+ op: 'set-transfer-validator',
79
+ to: args.contract,
80
+ data: encodeFunctionData({
81
+ abi: oneOfOneImageAbi,
82
+ functionName: 'setTransferValidator',
83
+ args: [args.validator],
84
+ }),
85
+ value: '0x0',
86
+ chainId: args.chainId,
87
+ summary: suspending
88
+ ? 'Suspend ERC-721C transfer enforcement (validator → 0x0; the token stays enrolled)'
89
+ : `Set ERC-721C transfer validator → ${args.validator}`,
90
+ fields: { contract: args.contract, validator: args.validator },
91
+ };
92
+ }
93
+ //# sourceMappingURL=creator-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creator-token.js","sourceRoot":"","sources":["../src/creator-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAC,kBAAkB,EAAE,WAAW,EAAkC,MAAM,MAAM,CAAC;AACtF,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAGhD,0FAA0F;AAC1F,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAqB,CAAC;AAChE,qFAAqF;AACrF,MAAM,CAAC,MAAM,iCAAiC,GAAG,YAAqB,CAAC;AACvE,iGAAiG;AACjG,MAAM,CAAC,MAAM,0BAA0B,GACrC,oEAA6E,CAAC;AAEhF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAA4B;IACrE,oBAAoB;IACpB,QAAQ,EAAE,4CAA4C;IACtD,yBAAyB;IACzB,KAAK,EAAE,4CAA4C;CACpD,CAAC;AAEF,4FAA4F;AAC5F,MAAM,UAAU,mCAAmC,CAAC,OAAe;IACjE,OAAO,8BAA8B,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAUD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAoB,EACpB,QAAiB;IAEjB,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,MAAM;aACH,YAAY,CAAC;YACZ,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,gBAAgB;YACrB,YAAY,EAAE,mBAAmB;YACjC,IAAI,EAAE,CAAC,0BAA0B,CAAC;SACnC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAqB;QACzC,MAAM;aACH,YAAY,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,sBAAsB,EAAC,CAAC;aAC9F,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAqB;KAChD,CAAC,CAAC;IACH,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAC,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAI3C;IACC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,KAAK,WAAW,CAAC;IAClD,OAAO;QACL,EAAE,EAAE,wBAAwB;QAC5B,EAAE,EAAE,IAAI,CAAC,QAAQ;QACjB,IAAI,EAAE,kBAAkB,CAAC;YACvB,GAAG,EAAE,gBAAgB;YACrB,YAAY,EAAE,sBAAsB;YACpC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;SACvB,CAAC;QACF,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,UAAU;YACjB,CAAC,CAAC,mFAAmF;YACrF,CAAC,CAAC,qCAAqC,IAAI,CAAC,SAAS,EAAE;QACzD,MAAM,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAC;KAC7D,CAAC;AACJ,CAAC"}
package/dist/deploy.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { type Account, type Address, type Hex, type PublicClient, type WalletClient } from 'viem';
1
+ import { type Address, type Hex, type PublicClient } from 'viem';
2
+ import type { SendTx } from './execute.js';
2
3
  /** One on-chain metadata field to set at deploy (bytes32 `field`/`representation`, bytes `value`). */
3
4
  export interface OnChainFieldInput {
4
5
  field: Hex;
@@ -23,6 +24,11 @@ export interface OneOfOneInitParams {
23
24
  contractURIRenderer: Address;
24
25
  royaltyReceiver: Address;
25
26
  royaltyBps: number;
27
+ /** `zeroAddress` = plain ERC-721 (the default — no trace of 721C, ever); non-zero = permanent
28
+ * ERC-721C enrollment with that transfer validator (must have code on-chain, else the deploy
29
+ * reverts `InvalidTransferValidator()`). Enrollment is deploy-time-only and irreversible —
30
+ * the owner can later re-point or suspend (zero) the validator, never un-enroll. */
31
+ transferValidator: Address;
26
32
  /** Optional on-chain metadata fields for token 0 and for the collection. */
27
33
  tokenFields: OnChainFieldInput[];
28
34
  contractFields: OnChainFieldInput[];
@@ -47,6 +53,11 @@ export interface SeriesInitParams {
47
53
  contractURIRenderer: Address;
48
54
  royaltyReceiver: Address;
49
55
  royaltyBps: number;
56
+ /** `zeroAddress` = plain ERC-721 (the default — no trace of 721C, ever); non-zero = permanent
57
+ * ERC-721C enrollment with that transfer validator (must have code on-chain, else the deploy
58
+ * reverts `InvalidTransferValidator()`). Enrollment is deploy-time-only and irreversible —
59
+ * the owner can later re-point or suspend (zero) the validator, never un-enroll. */
60
+ transferValidator: Address;
50
61
  /** Series size N (> 0): the supply cap. Monotonically non-increasing after deploy. */
51
62
  maxInvocations: bigint | number;
52
63
  /** Primary-sale payout destination (`0x0` = none). */
@@ -98,7 +109,7 @@ export declare function saltGuard(salt: Hex): Address;
98
109
  * once deployed, its address is what platforms allowlist. Deploy this once per
99
110
  * (chain, core version) and reuse it for every clone.
100
111
  */
101
- export declare function deployFactory(wallet: WalletClient, account: Account, publicClient: PublicClient): Promise<DeployResult<'factory'> & {
112
+ export declare function deployFactory(send: SendTx, publicClient: PublicClient): Promise<DeployResult<'factory'> & {
102
113
  factory: Address;
103
114
  implementation: Address;
104
115
  }>;
@@ -107,7 +118,7 @@ export declare function deployFactory(wallet: WalletClient, account: Account, pu
107
118
  * Ownerless and immutable; the sibling of `deployFactory`. Deploy once per (chain, core
108
119
  * version). The shared renderer + chunk store are reused (deploy them separately).
109
120
  */
110
- export declare function deploySeriesFactory(wallet: WalletClient, account: Account, publicClient: PublicClient): Promise<DeployResult<'seriesFactory'> & {
121
+ export declare function deploySeriesFactory(send: SendTx, publicClient: PublicClient): Promise<DeployResult<'seriesFactory'> & {
111
122
  factory: Address;
112
123
  implementation: Address;
113
124
  }>;
@@ -116,9 +127,12 @@ export declare function deploySeriesFactory(wallet: WalletClient, account: Accou
116
127
  * delegatecalled write-path libraries first ({AbxParamsLib}, {AbxCodeLib}), the factory
117
128
  * bytecode LINKED against them (solc placeholders replaced — what forge does at build
118
129
  * time, done here so a sandbox/fresh chain needs no forge), then the factory (whose
119
- * constructor deploys the {SeriesCode} implementation).
130
+ * constructor deploys the {SeriesCode} implementation). Each of the three deploys is a
131
+ * plain contract creation (no canonical/CREATE2 address — the libraries' addresses are
132
+ * nonce-dependent, so there is nothing to predict), sent through `send` in order since the
133
+ * factory's bytecode can only be linked once the two library addresses are known.
120
134
  */
121
- export declare function deploySeriesCodeFactory(wallet: WalletClient, account: Account, publicClient: PublicClient): Promise<{
135
+ export declare function deploySeriesCodeFactory(send: SendTx, publicClient: PublicClient): Promise<{
122
136
  factory: Address;
123
137
  implementation: Address;
124
138
  paramsLib: Address;
@@ -130,7 +144,7 @@ export declare function deploySeriesCodeFactory(wallet: WalletClient, account: A
130
144
  * keyless proxy + canonical salt → the SAME address on every chain (matches `DeploySeedSource.s.sol`
131
145
  * and the manifest). The seed source is single-profile, so — unlike the SeriesCode factory — the
132
146
  * SDK's bytecode is the canonical one. */
133
- export declare function deploySeedSource(wallet: WalletClient, account: Account, publicClient: PublicClient): Promise<{
147
+ export declare function deploySeedSource(send: SendTx, publicClient: PublicClient): Promise<{
134
148
  seedSource: Address;
135
149
  txHash: Hex;
136
150
  }>;
@@ -140,7 +154,7 @@ export declare function deploySeedSource(wallet: WalletClient, account: Account,
140
154
  * their URI-renderer config. It reads each token's on-chain fields and returns a
141
155
  * `data:application/json` URI, so a token using it resolves with zero off-chain infra.
142
156
  */
143
- export declare function deployRenderer(wallet: WalletClient, account: Account, publicClient: PublicClient): Promise<DeployResult<'renderer'> & {
157
+ export declare function deployRenderer(send: SendTx, publicClient: PublicClient): Promise<DeployResult<'renderer'> & {
144
158
  renderer: Address;
145
159
  specVersion: bigint;
146
160
  }>;
@@ -150,7 +164,7 @@ export declare function deployRenderer(wallet: WalletClient, account: Account, p
150
164
  * (config is keyed by token address, authority defers to each token's owner). Sibling of
151
165
  * `deployRenderer` — ownerless, no constructor args, safe for any funded signer to stand up.
152
166
  */
153
- export declare function deployFixedPriceMinter(wallet: WalletClient, account: Account, publicClient: PublicClient): Promise<DeployResult<'fixedPriceMinter'> & {
167
+ export declare function deployFixedPriceMinter(send: SendTx, publicClient: PublicClient): Promise<DeployResult<'fixedPriceMinter'> & {
154
168
  minter: Address;
155
169
  }>;
156
170
  /**
@@ -168,7 +182,7 @@ export declare function predictClone(publicClient: PublicClient, args: {
168
182
  * address (so URIs can be baked in before deploy). Returns the clone address and
169
183
  * the block it landed in — the indexer's start block.
170
184
  */
171
- export declare function deployOneOfOne(wallet: WalletClient, account: Account | Address, publicClient: PublicClient, args: {
185
+ export declare function deployOneOfOne(send: SendTx, publicClient: PublicClient, args: {
172
186
  factory: Address;
173
187
  params: OneOfOneInitParams;
174
188
  salt: Hex;
@@ -182,7 +196,7 @@ export declare function deployOneOfOne(wallet: WalletClient, account: Account |
182
196
  * computes with its own implementation. `params.mintCount`/`mintTo` decide the deploy-time
183
197
  * mint; anything larger mints post-deploy under a gas budget.
184
198
  */
185
- export declare function deploySeries(wallet: WalletClient, account: Account | Address, publicClient: PublicClient, args: {
199
+ export declare function deploySeries(send: SendTx, publicClient: PublicClient, args: {
186
200
  factory: Address;
187
201
  params: SeriesInitParams;
188
202
  salt: Hex;