@artblocks/abx-sdk 0.1.0-alpha.3 → 0.1.0-alpha.30

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 (147) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +130 -0
  3. package/dist/abi/generated.d.ts +8502 -129
  4. package/dist/abi/generated.d.ts.map +1 -1
  5. package/dist/abi/generated.js +40 -22
  6. package/dist/abi/generated.js.map +1 -1
  7. package/dist/abi/index.d.ts +2645 -168
  8. package/dist/abi/index.d.ts.map +1 -1
  9. package/dist/abi/index.js +34 -7
  10. package/dist/abi/index.js.map +1 -1
  11. package/dist/anchors.d.ts +318 -0
  12. package/dist/anchors.d.ts.map +1 -0
  13. package/dist/anchors.js +701 -0
  14. package/dist/anchors.js.map +1 -0
  15. package/dist/chains.d.ts +19 -9
  16. package/dist/chains.d.ts.map +1 -1
  17. package/dist/chains.js +31 -15
  18. package/dist/chains.js.map +1 -1
  19. package/dist/chunks.d.ts +67 -26
  20. package/dist/chunks.d.ts.map +1 -1
  21. package/dist/chunks.js +82 -9
  22. package/dist/chunks.js.map +1 -1
  23. package/dist/clients.d.ts +23 -11
  24. package/dist/clients.d.ts.map +1 -1
  25. package/dist/clients.js +17 -18
  26. package/dist/clients.js.map +1 -1
  27. package/dist/create2.d.ts +84 -1
  28. package/dist/create2.d.ts.map +1 -1
  29. package/dist/create2.js +158 -2
  30. package/dist/create2.js.map +1 -1
  31. package/dist/creator-token.d.ts +132 -0
  32. package/dist/creator-token.d.ts.map +1 -0
  33. package/dist/creator-token.js +183 -0
  34. package/dist/creator-token.js.map +1 -0
  35. package/dist/deploy.d.ts +234 -14
  36. package/dist/deploy.d.ts.map +1 -1
  37. package/dist/deploy.js +289 -111
  38. package/dist/deploy.js.map +1 -1
  39. package/dist/deployments.d.ts +70 -5
  40. package/dist/deployments.d.ts.map +1 -1
  41. package/dist/deployments.js +139 -30
  42. package/dist/deployments.js.map +1 -1
  43. package/dist/deps.d.ts +123 -6
  44. package/dist/deps.d.ts.map +1 -1
  45. package/dist/deps.js +249 -7
  46. package/dist/deps.js.map +1 -1
  47. package/dist/env.d.ts +5 -4
  48. package/dist/env.d.ts.map +1 -1
  49. package/dist/env.js +20 -5
  50. package/dist/env.js.map +1 -1
  51. package/dist/errors.d.ts +94 -0
  52. package/dist/errors.d.ts.map +1 -0
  53. package/dist/errors.js +126 -0
  54. package/dist/errors.js.map +1 -0
  55. package/dist/execute.d.ts +118 -0
  56. package/dist/execute.d.ts.map +1 -0
  57. package/dist/execute.js +159 -0
  58. package/dist/execute.js.map +1 -0
  59. package/dist/gateways.d.ts +79 -0
  60. package/dist/gateways.d.ts.map +1 -0
  61. package/dist/gateways.js +156 -0
  62. package/dist/gateways.js.map +1 -0
  63. package/dist/generator-document.d.ts +57 -0
  64. package/dist/generator-document.d.ts.map +1 -0
  65. package/dist/generator-document.js +123 -0
  66. package/dist/generator-document.js.map +1 -0
  67. package/dist/generator.d.ts +44 -2
  68. package/dist/generator.d.ts.map +1 -1
  69. package/dist/generator.js +29 -0
  70. package/dist/generator.js.map +1 -1
  71. package/dist/index.d.ts +18 -3
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +18 -3
  74. package/dist/index.js.map +1 -1
  75. package/dist/inspect.d.ts +48 -0
  76. package/dist/inspect.d.ts.map +1 -0
  77. package/dist/inspect.js +295 -0
  78. package/dist/inspect.js.map +1 -0
  79. package/dist/migrate.d.ts +41 -0
  80. package/dist/migrate.d.ts.map +1 -0
  81. package/dist/migrate.js +142 -0
  82. package/dist/migrate.js.map +1 -0
  83. package/dist/mime.d.ts +11 -0
  84. package/dist/mime.d.ts.map +1 -0
  85. package/dist/mime.js +40 -0
  86. package/dist/mime.js.map +1 -0
  87. package/dist/node.d.ts +10 -0
  88. package/dist/node.d.ts.map +1 -0
  89. package/dist/node.js +24 -0
  90. package/dist/node.js.map +1 -0
  91. package/dist/onchain-uri.d.ts +110 -0
  92. package/dist/onchain-uri.d.ts.map +1 -0
  93. package/dist/onchain-uri.js +276 -0
  94. package/dist/onchain-uri.js.map +1 -0
  95. package/dist/ops.d.ts +507 -14
  96. package/dist/ops.d.ts.map +1 -1
  97. package/dist/ops.js +850 -34
  98. package/dist/ops.js.map +1 -1
  99. package/dist/policy.d.ts +57 -0
  100. package/dist/policy.d.ts.map +1 -0
  101. package/dist/policy.js +35 -0
  102. package/dist/policy.js.map +1 -0
  103. package/dist/probe.d.ts +58 -0
  104. package/dist/probe.d.ts.map +1 -1
  105. package/dist/probe.js +190 -9
  106. package/dist/probe.js.map +1 -1
  107. package/dist/reconstruct.d.ts +114 -2
  108. package/dist/reconstruct.d.ts.map +1 -1
  109. package/dist/reconstruct.js +443 -98
  110. package/dist/reconstruct.js.map +1 -1
  111. package/dist/resume.d.ts +96 -0
  112. package/dist/resume.d.ts.map +1 -0
  113. package/dist/resume.js +95 -0
  114. package/dist/resume.js.map +1 -0
  115. package/dist/script-chunks.d.ts +24 -0
  116. package/dist/script-chunks.d.ts.map +1 -0
  117. package/dist/script-chunks.js +63 -0
  118. package/dist/script-chunks.js.map +1 -0
  119. package/dist/service.d.ts +151 -9
  120. package/dist/service.d.ts.map +1 -1
  121. package/dist/service.js +103 -11
  122. package/dist/service.js.map +1 -1
  123. package/dist/spine.d.ts +47 -4
  124. package/dist/spine.d.ts.map +1 -1
  125. package/dist/spine.js +0 -0
  126. package/dist/spine.js.map +1 -1
  127. package/dist/staging.d.ts +139 -0
  128. package/dist/staging.d.ts.map +1 -0
  129. package/dist/staging.js +139 -0
  130. package/dist/staging.js.map +1 -0
  131. package/dist/token.d.ts +1 -1
  132. package/dist/token.js +1 -1
  133. package/dist/tokendata.d.ts +63 -3
  134. package/dist/tokendata.d.ts.map +1 -1
  135. package/dist/tokendata.js +81 -19
  136. package/dist/tokendata.js.map +1 -1
  137. package/dist/tokens.d.ts +119 -0
  138. package/dist/tokens.d.ts.map +1 -0
  139. package/dist/tokens.js +317 -0
  140. package/dist/tokens.js.map +1 -0
  141. package/dist/types.d.ts +107 -5
  142. package/dist/types.d.ts.map +1 -1
  143. package/dist/util.d.ts +74 -0
  144. package/dist/util.d.ts.map +1 -0
  145. package/dist/util.js +106 -0
  146. package/dist/util.js.map +1 -0
  147. package/package.json +15 -6
@@ -20,9 +20,8 @@
20
20
  * shipped yet, or a private deployment — the operator declares it, the tool never writes it)
21
21
  * - manifest: the canonical address below
22
22
  *
23
- * ALPHA SCOPE: the initial npm alpha ships **testnet only** — Base Sepolia (the default,
24
- * chainId 84532) and Sepolia (11155111). Mainnet entries are intentionally absent until the
25
- * canonical set is deployed + funded on mainnet (Distribution roadmap step 4).
23
+ * ALPHA SCOPE: the npm alpha supports Base Sepolia (the default, chainId 84532) and Sepolia
24
+ * (11155111). Mainnet entries are absent until canonical infrastructure is deployed and recorded.
26
25
  *
27
26
  * Changing a contract → redeploy → repoint here: see contracts/README.md#changing-a-contract.
28
27
  */
@@ -36,9 +35,71 @@ export interface ChainDeployment {
36
35
  fixedPriceMinter?: Address;
37
36
  seedSource?: Address;
38
37
  generator?: Address;
38
+ oneOfOneEditionFactory?: Address;
39
+ editionFactory?: Address;
40
+ editionCodeFactory?: Address;
41
+ fixedPriceMinter1155?: Address;
42
+ metadataLib?: Address;
43
+ paramsLib?: Address;
44
+ codeLib?: Address;
45
+ editionLib?: Address;
39
46
  }
47
+ /**
48
+ * One generation of the six trust anchors — a single redeploy batch of the token layer.
49
+ *
50
+ * **Identified by the on-chain core version**, and that choice is the whole design. `abxVersion()`
51
+ * is on every clone and in its `AbxDeployed` beacon, so a collection can say what it is by reading
52
+ * *itself* — which keeps working after its factory is retired, and cannot be an assertion our
53
+ * manifest makes on a contract's behalf. The alternative (a semver label we mint here) would be a
54
+ * third version dial next to core v2 and renderer spec v11, and unverifiable.
55
+ *
56
+ * The invariant that makes the identity work — **one core version, one anchor generation** — is a
57
+ * step in the redeploy checklist (`contracts/README.md`) and is enforced by `deployments.test.ts`:
58
+ * the recorded generations must have unique, increasing `coreVersion`s, and the newest must match
59
+ * `AbxVersion.CORE_VERSION` in the contracts. A batch that forgets to bump fails the suite instead
60
+ * of shipping two generations that both claim to be v2.
61
+ *
62
+ * Not backfilled. The generations that preceded this one were testnet-only and are deliberately
63
+ * unenumerated (greenfield: a pre-launch collection re-registers or redeploys, and reads as
64
+ * not-canonical until it does). The shape ships now so the *forward* answer exists from the first
65
+ * batch that retires one.
66
+ */
67
+ export interface AnchorGeneration {
68
+ /** The core spec version clones of this generation report as `abxVersion()`. */
69
+ coreVersion: number;
70
+ /** ISO date the batch went live on chain (same date on every chain — CREATE2). */
71
+ deployed: string;
72
+ /** ISO date it was superseded. Absent ⇒ this is the current generation. */
73
+ retired?: string;
74
+ /** The six trust anchors, and nothing else. Never libraries or shared singletons. */
75
+ factories: {
76
+ factory: Address;
77
+ seriesFactory: Address;
78
+ seriesCodeFactory: Address;
79
+ oneOfOneEditionFactory: Address;
80
+ editionFactory: Address;
81
+ editionCodeFactory: Address;
82
+ };
83
+ /** What this generation is, for a human reading a provenance answer. Never dispatched on. */
84
+ note?: string;
85
+ }
86
+ /**
87
+ * Every anchor generation, newest first. `[0]` is current (no `retired` date).
88
+ *
89
+ * The addresses are *referenced* from {@link CANONICAL} rather than re-typed, so the current
90
+ * generation cannot drift from the live record — there is one literal per address in this file. When
91
+ * a batch retires this generation, its six literals move into a new entry below (the only place a
92
+ * superseded anchor is allowed to appear), it gains a `retired` date, and the new batch takes the
93
+ * live record. See {@link AnchorGeneration} for why the core version is the identity.
94
+ */
95
+ export declare const ANCHOR_GENERATIONS: readonly AnchorGeneration[];
96
+ /** The generation currently stamping clones — {@link ANCHOR_GENERATIONS}`[0]`, by construction. */
97
+ export declare function currentAnchorGeneration(): AnchorGeneration;
40
98
  export declare const DEPLOYMENTS: Record<number, ChainDeployment>;
41
- /** The canonical deployment record for a chain (empty if the chain isn't shipped yet). */
99
+ /** The canonical deployment record a *new* deploy on this chain should use (empty if the chain
100
+ * isn't shipped yet). Not "what this already-deployed collection points at" — reconstruct that
101
+ * collection, then read `state.tokenURIRenderer` and `generatorFor(state)`. Later releases can
102
+ * move the canonical singletons without changing addresses already stored by a collection. */
42
103
  export declare function getDeployment(chainId: number): ChainDeployment;
43
104
  export declare function resolveFactory(chainId: number, override?: string): Address | undefined;
44
105
  export declare function resolveSeriesFactory(chainId: number, override?: string): Address | undefined;
@@ -47,10 +108,14 @@ export declare function resolveChunkStore(chainId: number, override?: string): A
47
108
  export declare function resolveFixedPriceMinter(chainId: number, override?: string): Address | undefined;
48
109
  export declare function resolveSeriesCodeFactory(chainId: number, override?: string): Address | undefined;
49
110
  export declare function resolveSeedSource(chainId: number, override?: string): Address | undefined;
111
+ export declare function resolveOneOfOneEditionFactory(chainId: number, override?: string): Address | undefined;
112
+ export declare function resolveEditionFactory(chainId: number, override?: string): Address | undefined;
113
+ export declare function resolveEditionCodeFactory(chainId: number, override?: string): Address | undefined;
114
+ export declare function resolveFixedPriceMinter1155(chainId: number, override?: string): Address | undefined;
50
115
  export declare function resolveGenerator(chainId: number, override?: string): Address | undefined;
51
116
  /**
52
117
  * The known `name@version` resolution roots per chain — Art Blocks' DependencyRegistryV0
53
- * (specs/protocol/dependency-registry.md). ABX points at it and speaks its READ interface;
118
+ * (site/content/docs/protocol/code-projects.mdx). ABX points at it and speaks its READ interface;
54
119
  * we never deploy our own. The pointer a collection stores is soft and non-validating, so
55
120
  * a chain with no entry simply deploys without one (the resolver falls back to its built-in
56
121
  * CDN map) — never a blocker.
@@ -1 +1 @@
1
- {"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAElC,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAqBD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAevD,CAAC;AAEF,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAE9D;AAOD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEtF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE5F;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEvF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEzF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE/F;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEhG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEzF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAExF;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAG1D,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEjG"}
1
+ {"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"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"}
@@ -1,38 +1,134 @@
1
+ import { readEnv } from './util.js';
1
2
  /**
2
3
  * The cross-chain-identical set — CREATE2 (keyless proxy + `AbxSalts`), so these addresses are the
3
4
  * SAME on every chain. Factory addresses list their EIP-1167 implementation; the implementations are
4
5
  * identical cross-chain too (a factory does exactly one CREATE at nonce 1 from its own — identical —
5
- * address). The renderer is spec v3 (artifacts manifest + authorship/rights contractURI fields).
6
- * SeriesCode's delegatecalled write-path libraries are also CREATE2-deterministic and identical
7
- * everywhere: AbxParamsLib 0x7DAa26bADD99812a77384B461b6375e0c04F2865,
8
- * AbxCodeLib 0xCd12078E81A3BDEACdcd57AE390f4D59F832766B.
6
+ * address). The renderer is **spec v11** — the version `isCurrentRenderer` gates on, and the reason a
7
+ * behind-spec renderer is treated as stale rather than merely older: each bump changed what the
8
+ * document actually contains (v5 escaped the provenance note, v6 changed rendered output for hostile
9
+ * input, v7 renamed the `artist` collection field to `creator`, v8 retired the `abx_params` block and
10
+ * narrowed provenance to the route a field took rather than a claim about its destination, v9 stopped
11
+ * duplicating a computed image into `artifacts`, which changes what the document contains, v10 added
12
+ * four reserved keys neither plane emitted, and v11 moved `ipfs`/`arweave` out of the fallback set:
13
+ * a v10 renderer serves the placeholder SVG for chain state a v11 renderer resolves).
14
+ *
15
+ * The delegatecalled write-path libraries are CREATE2-deterministic and identical everywhere too —
16
+ * that is a property of CREATE2, not a lucky accident, and linking a library does not cost the
17
+ * linking factory its own deterministic address (see `create2.ts`'s write-path-library note, which
18
+ * explains what IS a real trap here). They are deployed EXPLICITLY at `AbxSalts.METADATA_LIB` /
19
+ * `.PARAMS_LIB` / `.CODE_LIB` / `.EDITION_LIB` (`abx.lib.metadata.v1` / `abx.lib.params.v1` /
20
+ * `abx.lib.code.v1` / `abx.lib.edition.v1`) by
21
+ * `DeployLibraries.s.sol` and by the SDK's own bootstrap — not by forge's automatic linking, which
22
+ * routes through the same proxy but at its own salt of zero. So every library address below is
23
+ * recomputable from (proxy, salt, creation bytecode) alone: `predictMetadataLib()` /
24
+ * `predictParamsLib()` / `predictCodeLib()` / `predictEditionLib()`.
25
+ *
26
+ * NO SUPERSEDED ADDRESS IS EVER LIVE STATE IN THIS FILE, deliberately — and the rule is narrower and
27
+ * more useful than "no old addresses anywhere", which is what it used to say while the entries below
28
+ * carried `replaces 0x…` notes. The hazard was never provenance; it is a stale address sitting where
29
+ * something might *bind* it, because several superseded contracts still have code on chain and a
30
+ * factory bound to an un-manifested library is the exact failure this file exists to prevent. So:
31
+ *
32
+ * · The live record ({@link CANONICAL} + the per-chain blocks) holds only what is current. A
33
+ * superseded address may appear beside it as a `replaces 0x…` note, which is prose, and inside
34
+ * {@link ANCHOR_GENERATIONS}, which is typed to hold nothing but the six FACTORY anchors — never
35
+ * a library, renderer, minter or seed source, the entries where a wrong bind would do damage.
36
+ * · {@link ANCHOR_GENERATIONS} is **provenance, never trust.** It answers "was this deployed by an
37
+ * ABX factory, and which generation" — it must never widen an allowlist or feed
38
+ * `verifyCanonical`.
39
+ *
9
40
  */
10
41
  const CANONICAL = {
11
- factory: '0xB9eEE39DB7D03E0b94CE403F69E928e2a5F134Ca', // impl 0xf1F0893897CC19e75d829fa550a5228c5119cA39
12
- seriesFactory: '0x9d97C00100351682e6625961e033b6F43E60639A', // impl 0x58D8b9F7ABa3043734cBeBfaa9c46875070E16ed
13
- seriesCodeFactory: '0x77f61Ead461f368dbF3788EeFe9693bA5a73Bd87', // impl 0xfd2034B6af517AD019f0dD7b007F07eF358D4053
14
- renderer: '0x837A5cF907E7a6727B08acfE2A865F2bD5C50b1D', // spec v3
15
- chunkStore: '0x03d3a962602093a937B96ee9C0b5C54cec3e701E',
16
- fixedPriceMinter: '0xd970A2c936FFbb2130c2e4Ddf4245FF92465fEA5',
17
- seedSource: '0x53eDFD2047e00C133378DEb430183DEE285E652e',
42
+ // Superseded addresses stay out of the live manifest. Two properties hold for every entry:
43
+ // 1. Identical on Sepolia and Base Sepolia — CREATE2 through the keyless proxy at the canonical
44
+ // salts in `AbxSalts.sol` / `ABX_SALT`. Only `generator` differs per chain (its constructor
45
+ // bakes chain-specific immutables), which is why it lives in the per-chain blocks below.
46
+ // 2. Recomputable from this build alone — `predictFactory()`, `predictRenderer()`,
47
+ // `predictSeriesCodeFactory()` and friends reproduce every one of them, and the write-path
48
+ // libraries are now deployed EXPLICITLY by `DeployLibraries.s.sol` at named salts rather
49
+ // than by forge's automatic linking at salt zero.
50
+ //
51
+ // Implementations are noted inline because a factory's implementation is the code a clone runs;
52
+ // `abxVersion()` reads 2 on all six, and `specVersion()` reads 11 on the renderer.
53
+ factory: '0x2824F4b4b4301dB2FcA10b2D80D45b4d463Ba57E', // impl 0x58b5CA27C76c0a1FA00b6ebe28d55d3A98eB1425
54
+ seriesFactory: '0x685B4DfC835b6854590B5437C79D62BB7D52698b', // impl 0x1A8d16407247E801bf15e3c6Dbf2000673Ff474d
55
+ seriesCodeFactory: '0xdDA5174A868A8e099E159E67569900a4F936CFFe', // impl 0xdaEF4B7068c07E380068895aCb48a210cdA30297
56
+ oneOfOneEditionFactory: '0x6ecc7fAd2186965BaECD0Aa215b00239a3459ddF', // impl 0xCbD54eb6781F7A430C974fcbe125B48d4dF1f415
57
+ editionFactory: '0xB6a8f051B08A8d6Fb0B6DA53BD23006CE2da31b7', // impl 0x90A674bce7540eBae92CAa3Ea77ccE1b7eb15f61
58
+ editionCodeFactory: '0x9441Cc75318E20Ae6237EDb213b4C3019d756Bf0', // impl 0x68E57D289288dcAf31256d91c64583254bBb6601
59
+ renderer: '0x85C1aE1F076d808fF7c1729F21B85038Fa16105E', // spec v11
60
+ chunkStore: '0x1Ca63a4ADEeF5e722ADA25b892BA40E3b2bcB905',
61
+ seedSource: '0xD01d4eDc17F8b4493A43A5e70DCD9813FB1b9A0A',
62
+ fixedPriceMinter: '0x1E321A12386cF6BEe49d1270A5EC54DecA88db48',
63
+ fixedPriceMinter1155: '0x8FcC37dCb00A02367838Fa5B37347dCEec060981',
64
+ // The delegatecalled write-path libraries. Every one of the six token implementations links
65
+ // `AbxMetadataLib` — the on-chain metadata field store is external as of this generation, which is
66
+ // what bought the two code types their EIP-170 headroom (and is why the two ERC-721 image
67
+ // factories, which linked NOTHING before, link one now). On top of that: `AbxParamsLib` +
68
+ // `AbxCodeLib` for the two code types, `AbxEditionLib` for all three ERC-1155 types (and
69
+ // `AbxEditionLib` itself links `AbxParamsLib`, which is why it is deployed after it).
70
+ // Recomputable via `predictMetadataLib()` / `predictParamsLib()` / `predictCodeLib()` /
71
+ // `predictEditionLib()`.
72
+ metadataLib: '0x02b819Bb9065cAf0c598A5CB2f5D37A4eb07460f',
73
+ paramsLib: '0x396848cD90aDAbE1F463Cb825ed6507A026dC833',
74
+ codeLib: '0x8dF597246C851E2DF264C8a322c07657395415fc',
75
+ editionLib: '0x7c7D213383D6FC3F1e26A0cB3Ad554c1Aa0011dA',
18
76
  };
77
+ /**
78
+ * Every anchor generation, newest first. `[0]` is current (no `retired` date).
79
+ *
80
+ * The addresses are *referenced* from {@link CANONICAL} rather than re-typed, so the current
81
+ * generation cannot drift from the live record — there is one literal per address in this file. When
82
+ * a batch retires this generation, its six literals move into a new entry below (the only place a
83
+ * superseded anchor is allowed to appear), it gains a `retired` date, and the new batch takes the
84
+ * live record. See {@link AnchorGeneration} for why the core version is the identity.
85
+ */
86
+ export const ANCHOR_GENERATIONS = [
87
+ {
88
+ coreVersion: 2,
89
+ deployed: '2026-08-20',
90
+ factories: {
91
+ factory: CANONICAL.factory,
92
+ seriesFactory: CANONICAL.seriesFactory,
93
+ seriesCodeFactory: CANONICAL.seriesCodeFactory,
94
+ oneOfOneEditionFactory: CANONICAL.oneOfOneEditionFactory,
95
+ editionFactory: CANONICAL.editionFactory,
96
+ editionCodeFactory: CANONICAL.editionCodeFactory,
97
+ },
98
+ note: 'Current canonical testnet factory generation.',
99
+ },
100
+ ];
101
+ /** The generation currently stamping clones — {@link ANCHOR_GENERATIONS}`[0]`, by construction. */
102
+ export function currentAnchorGeneration() {
103
+ return ANCHOR_GENERATIONS[0];
104
+ }
19
105
  export const DEPLOYMENTS = {
20
- // Sepolia (testnet) — CANONICAL infra + its own generator. Generator wired to AB's Sepolia
21
- // dependency registry; default gateways ipfs.io / arweave.net.
106
+ // Sepolia (testnet). Generator wired to Art Blocks' Sepolia DependencyRegistryV0
107
+ // (0x5Fcc415BCFb164C5F826B5305274749BeB684e9b); SSTORE2 asset pointers
108
+ // abxJsPointer 0xe34D9e7054c85E5dCfAFBD0c1E8ff48E206ebBf7,
109
+ // gunzipScriptPointer 0xC8739F87eDE0278532ACE0f51936b4A3fA8d5C55.
22
110
  11155111: {
23
111
  ...CANONICAL,
24
- generator: '0x819D26830E1FbD1a3b383EcA1C24bc2770000910',
112
+ // Replaces 0xf099C8fc301340dE2C4D1D2b76fcA05D852dF14A: the directory branch reads the
113
+ // collection's `abx_gateway_*` field instead of the `display.gateway` param. Redeployed with the
114
+ // pointers above PINNED, so only the generator moved — the assets did not have to be rewritten.
115
+ generator: '0xb7104ADfa6fb5615E46e2a681A2Ff043B08fADB5',
25
116
  },
26
- // Base Sepolia (testnet) — same CANONICAL infra; its own generator (no AB DependencyRegistry on
27
- // this chain, so deployed with defaultDependencyRegistry = address(0); collections point at
28
- // their own). Runtime asset pointers (SSTORE2): abxJsPointer 0x4525c352EFaeb3F3124399706Ec33B95f2230410,
29
- // gunzipScriptPointer 0xa8Bc1339781deEbeb1eC949cD0641eb53D1044a6.
117
+ // Base Sepolia (testnet). No Art Blocks DependencyRegistry on this chain, so the generator is
118
+ // deployed with defaultDependencyRegistry = address(0) — collections point at their own. SSTORE2
119
+ // asset pointers: abxJsPointer 0xF5c9CE4486574c962fA61EdB297845085B6736Ab,
120
+ // gunzipScriptPointer 0xB162Fa1B55b9Ad6e1c211c02f4c3f60c87036f03. Recorded here because they are
121
+ // the ONLY way to re-run `DeployAbxGenerator` idempotently — without them the script writes fresh
122
+ // pointers, which moves the generator's CREATE2 address and quietly deploys a second one.
30
123
  84532: {
31
124
  ...CANONICAL,
32
- generator: '0x229337CA6A442b266BD43B7C70F0f24A2E378cB2',
125
+ generator: '0x2C1B7Cf6c54E4ACbcB54FCC395f7Af88eb4fc8CE',
33
126
  },
34
127
  };
35
- /** The canonical deployment record for a chain (empty if the chain isn't shipped yet). */
128
+ /** The canonical deployment record a *new* deploy on this chain should use (empty if the chain
129
+ * isn't shipped yet). Not "what this already-deployed collection points at" — reconstruct that
130
+ * collection, then read `state.tokenURIRenderer` and `generatorFor(state)`. Later releases can
131
+ * move the canonical singletons without changing addresses already stored by a collection. */
36
132
  export function getDeployment(chainId) {
37
133
  return DEPLOYMENTS[chainId] ?? {};
38
134
  }
@@ -41,32 +137,45 @@ function pick(override, env, manifest) {
41
137
  return (override ?? env ?? manifest);
42
138
  }
43
139
  export function resolveFactory(chainId, override) {
44
- return pick(override, process.env.ABX_FACTORY, getDeployment(chainId).factory);
140
+ return pick(override, readEnv('ABX_FACTORY'), getDeployment(chainId).factory);
45
141
  }
46
142
  export function resolveSeriesFactory(chainId, override) {
47
- return pick(override, process.env.ABX_SERIES_FACTORY, getDeployment(chainId).seriesFactory);
143
+ return pick(override, readEnv('ABX_SERIES_FACTORY'), getDeployment(chainId).seriesFactory);
48
144
  }
49
145
  export function resolveRenderer(chainId, override) {
50
- return pick(override, process.env.ABX_RENDERER, getDeployment(chainId).renderer);
146
+ return pick(override, readEnv('ABX_RENDERER'), getDeployment(chainId).renderer);
51
147
  }
52
148
  export function resolveChunkStore(chainId, override) {
53
- return pick(override, process.env.ABX_CHUNK_STORE, getDeployment(chainId).chunkStore);
149
+ return pick(override, readEnv('ABX_CHUNK_STORE'), getDeployment(chainId).chunkStore);
54
150
  }
55
151
  export function resolveFixedPriceMinter(chainId, override) {
56
- return pick(override, process.env.ABX_FIXED_PRICE_MINTER, getDeployment(chainId).fixedPriceMinter);
152
+ return pick(override, readEnv('ABX_FIXED_PRICE_MINTER'), getDeployment(chainId).fixedPriceMinter);
57
153
  }
58
154
  export function resolveSeriesCodeFactory(chainId, override) {
59
- return pick(override, process.env.ABX_SERIES_CODE_FACTORY, getDeployment(chainId).seriesCodeFactory);
155
+ return pick(override, readEnv('ABX_SERIES_CODE_FACTORY'), getDeployment(chainId).seriesCodeFactory);
60
156
  }
61
157
  export function resolveSeedSource(chainId, override) {
62
- return pick(override, process.env.ABX_SEED_SOURCE, getDeployment(chainId).seedSource);
158
+ return pick(override, readEnv('ABX_SEED_SOURCE'), getDeployment(chainId).seedSource);
159
+ }
160
+ // ERC-1155 editions — same override → env → manifest precedence as every resolver above.
161
+ export function resolveOneOfOneEditionFactory(chainId, override) {
162
+ return pick(override, readEnv('ABX_ONE_OF_ONE_EDITION_FACTORY'), getDeployment(chainId).oneOfOneEditionFactory);
163
+ }
164
+ export function resolveEditionFactory(chainId, override) {
165
+ return pick(override, readEnv('ABX_EDITION_FACTORY'), getDeployment(chainId).editionFactory);
166
+ }
167
+ export function resolveEditionCodeFactory(chainId, override) {
168
+ return pick(override, readEnv('ABX_EDITION_CODE_FACTORY'), getDeployment(chainId).editionCodeFactory);
169
+ }
170
+ export function resolveFixedPriceMinter1155(chainId, override) {
171
+ return pick(override, readEnv('ABX_FIXED_PRICE_MINTER_1155'), getDeployment(chainId).fixedPriceMinter1155);
63
172
  }
64
173
  export function resolveGenerator(chainId, override) {
65
- return pick(override, process.env.ABX_GENERATOR, getDeployment(chainId).generator);
174
+ return pick(override, readEnv('ABX_GENERATOR'), getDeployment(chainId).generator);
66
175
  }
67
176
  /**
68
177
  * The known `name@version` resolution roots per chain — Art Blocks' DependencyRegistryV0
69
- * (specs/protocol/dependency-registry.md). ABX points at it and speaks its READ interface;
178
+ * (site/content/docs/protocol/code-projects.mdx). ABX points at it and speaks its READ interface;
70
179
  * we never deploy our own. The pointer a collection stores is soft and non-validating, so
71
180
  * a chain with no entry simply deploys without one (the resolver falls back to its built-in
72
181
  * CDN map) — never a blocker.
@@ -76,6 +185,6 @@ export const AB_DEPENDENCY_REGISTRY = {
76
185
  11155111: '0x5Fcc415BCFb164C5F826B5305274749BeB684e9b', // Sepolia
77
186
  };
78
187
  export function resolveDependencyRegistry(chainId, override) {
79
- return pick(override, process.env.ABX_DEPENDENCY_REGISTRY, AB_DEPENDENCY_REGISTRY[chainId]);
188
+ return pick(override, readEnv('ABX_DEPENDENCY_REGISTRY'), AB_DEPENDENCY_REGISTRY[chainId]);
80
189
  }
81
190
  //# sourceMappingURL=deployments.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deployments.js","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deployments.js","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAkElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,SAAS,GAAG;IAChB,2FAA2F;IAC3F,kGAAkG;IAClG,iGAAiG;IACjG,8FAA8F;IAC9F,qFAAqF;IACrF,gGAAgG;IAChG,8FAA8F;IAC9F,uDAAuD;IACvD,EAAE;IACF,gGAAgG;IAChG,mFAAmF;IACnF,OAAO,EAAE,4CAA4C,EAAE,kDAAkD;IACzG,aAAa,EAAE,4CAA4C,EAAE,kDAAkD;IAC/G,iBAAiB,EAAE,4CAA4C,EAAE,kDAAkD;IACnH,sBAAsB,EAAE,4CAA4C,EAAE,kDAAkD;IACxH,cAAc,EAAE,4CAA4C,EAAE,kDAAkD;IAChH,kBAAkB,EAAE,4CAA4C,EAAE,kDAAkD;IAEpH,QAAQ,EAAE,4CAA4C,EAAE,WAAW;IACnE,UAAU,EAAE,4CAA4C;IACxD,UAAU,EAAE,4CAA4C;IACxD,gBAAgB,EAAE,4CAA4C;IAC9D,oBAAoB,EAAE,4CAA4C;IAElE,4FAA4F;IAC5F,mGAAmG;IACnG,0FAA0F;IAC1F,0FAA0F;IAC1F,yFAAyF;IACzF,sFAAsF;IACtF,wFAAwF;IACxF,yBAAyB;IACzB,WAAW,EAAE,4CAA4C;IACzD,SAAS,EAAE,4CAA4C;IACvD,OAAO,EAAE,4CAA4C;IACrD,UAAU,EAAE,4CAA4C;CACH,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgC;IAC7D;QACE,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE;YACT,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;YAC9C,sBAAsB,EAAE,SAAS,CAAC,sBAAsB;YACxD,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;SACjD;QACD,IAAI,EAAE,+CAA+C;KACtD;CACF,CAAC;AAEF,mGAAmG;AACnG,MAAM,UAAU,uBAAuB;IACrC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAoC;IAC1D,iFAAiF;IACjF,uEAAuE;IACvE,2DAA2D;IAC3D,kEAAkE;IAClE,QAAQ,EAAE;QACR,GAAG,SAAS;QACZ,sFAAsF;QACtF,iGAAiG;QACjG,gGAAgG;QAChG,SAAS,EAAE,4CAA4C;KACxD;IACD,8FAA8F;IAC9F,iGAAiG;IACjG,2EAA2E;IAC3E,iGAAiG;IACjG,kGAAkG;IAClG,0FAA0F;IAC1F,KAAK,EAAE;QACL,GAAG,SAAS;QACZ,SAAS,EAAE,4CAA4C;KACxD;CACF,CAAC;AAEF;;;+FAG+F;AAC/F,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,mFAAmF;AACnF,SAAS,IAAI,CAAC,QAA4B,EAAE,GAAuB,EAAE,QAA6B;IAChG,OAAO,CAAC,QAAQ,IAAI,GAAG,IAAI,QAAQ,CAAwB,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,QAAiB;IAC/D,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,QAAiB;IACrE,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,QAAiB;IAChE,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAiB;IAClE,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,QAAiB;IACxE,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,wBAAwB,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,QAAiB;IACzE,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAiB;IAClE,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;AACvF,CAAC;AAED,yFAAyF;AAEzF,MAAM,UAAU,6BAA6B,CAAC,OAAe,EAAE,QAAiB;IAC9E,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,gCAAgC,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAClH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,QAAiB;IACtE,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,qBAAqB,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAe,EAAE,QAAiB;IAC1E,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,0BAA0B,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAe,EAAE,QAAiB;IAC5E,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,6BAA6B,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAiB;IACjE,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;AACpF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,CAAC,EAAE,4CAA4C,EAAE,UAAU;IAC3D,QAAQ,EAAE,4CAA4C,EAAE,UAAU;CACnE,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,OAAe,EAAE,QAAiB;IAC1E,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7F,CAAC"}
package/dist/deps.d.ts CHANGED
@@ -11,10 +11,15 @@
11
11
  * in bytes32 — read directly, never through a registry.
12
12
  *
13
13
  * Also speaks the AB-compatible registry READ interface (`IDependencyRegistryV0`,
14
- * specs/protocol/dependency-registry.md): `getDependencyDetails(bytes32)` is the
15
- * load-bearing read behind the CLI's best-effort selection-time check.
14
+ * site/content/docs/protocol/code-projects.mdx): `getDependencyDetails(bytes32)` is the
15
+ * load-bearing read behind the CLI's best-effort selection-time check, and
16
+ * `getDependencyScript(bytes32, index)` is the resolver's own read for on-chain bytes (see the
17
+ * "resolver's registry-aware serving lane" section below — shared with
18
+ * `@artblocks/abx-token-api`, because it uses this exact
19
+ * vocabulary end to end).
16
20
  */
17
- import { type Address, type Hex } from 'viem';
21
+ import { type Address, type Hex, type PublicClient } from 'viem';
22
+ import type { DependencyInfo, ProjectState } from './types.js';
18
23
  /** `IAbxDependencies.Resolution` — index-aligned with the Solidity enum. */
19
24
  export declare const DEP_RESOLUTION: {
20
25
  readonly registry: 0;
@@ -40,9 +45,16 @@ export declare function parseDependencyRef(input: string): ParsedDependencyRef;
40
45
  /** The reverse read: an evented `(resolution, bytes32)` back to its human form (the twin of
41
46
  * the reconstruction fold's decode — registry ⇒ the tag, onchain ⇒ the address). */
42
47
  export declare function decodeDependencyRef(resolution: DepResolution, ref: Hex): string;
43
- /** The load-bearing read of AB's `IDependencyRegistryV0` — the exact upstream signature
44
- * (any registry ABX consumers read from speaks this shape; see the dependency-registry spec). */
45
- export declare const dependencyRegistryReadAbi: readonly [{
48
+ /**
49
+ * The load-bearing reads of AB's `IDependencyRegistryV0` — the exact upstream signatures (any
50
+ * registry ABX consumers read from speaks this shape; see the dependency-registry spec).
51
+ * `getDependencyDetails` backs both the CLI's best-effort selection-time check and the
52
+ * resolver's own resolution; `getDependencyScript` is the resolver-only per-chunk read for a
53
+ * dep whose bytes live on chain. (Merging this hoist: token-api's `DEPENDENCY_REGISTRY_ABI` and
54
+ * this module's prior `dependencyRegistryReadAbi` declared the identical `getDependencyDetails`
55
+ * entry twice — one array now backs both callers.)
56
+ */
57
+ export declare const DEPENDENCY_REGISTRY_ABI: readonly [{
46
58
  readonly type: "function";
47
59
  readonly name: "getDependencyDetails";
48
60
  readonly stateMutability: "view";
@@ -78,6 +90,20 @@ export declare const dependencyRegistryReadAbi: readonly [{
78
90
  readonly name: "scriptCount";
79
91
  readonly type: "uint24";
80
92
  }];
93
+ }, {
94
+ readonly type: "function";
95
+ readonly name: "getDependencyScript";
96
+ readonly stateMutability: "view";
97
+ readonly inputs: readonly [{
98
+ readonly name: "dependencyNameAndVersion";
99
+ readonly type: "bytes32";
100
+ }, {
101
+ readonly name: "index";
102
+ readonly type: "uint256";
103
+ }];
104
+ readonly outputs: readonly [{
105
+ readonly type: "string";
106
+ }];
81
107
  }];
82
108
  /** What the selection-time check cares about from a registry record. */
83
109
  export interface RegistryDependencyDetails {
@@ -106,4 +132,95 @@ export interface DependencyReadClient {
106
132
  * (a revert) or "check unavailable" (RPC down); this stays a pure read.
107
133
  */
108
134
  export declare function readRegistryDependency(client: DependencyReadClient, registry: Address, ref: Hex): Promise<RegistryDependencyDetails | null>;
135
+ /**
136
+ * The registry pointer a deploy with ≥1 Registry-resolution dep should set: an explicit
137
+ * `--dep-registry` wins (validated), else the chain's known AB registry (env-overridable),
138
+ * else none — the caller WARNS and skips the leg (soft pointer; the resolver falls back to
139
+ * its built-in CDN map). Never a blocker.
140
+ */
141
+ export declare function resolveDepRegistryPointer(flagValue: string | undefined, chainId: number): {
142
+ registry: Address | null;
143
+ source: 'flag' | 'default' | 'none';
144
+ };
145
+ /**
146
+ * The dependency legs of the setup multicall: one `setDependency(i, resolution, ref)` per
147
+ * dep in index order, plus the `setDependencyRegistry` leg when a pointer resolved. These
148
+ * ride the SAME atomic setup multicall as script chunks/schemas/mints, in every signing lane.
149
+ */
150
+ export declare function dependencySetupCalls(deps: ParsedDependencyRef[], registry: Address | null): Hex[];
151
+ /** One dep's selection-time verdict (Registry-resolution deps only — OnChain refs never touch a registry). */
152
+ export type DepCheck = {
153
+ dep: string;
154
+ status: 'found';
155
+ details: RegistryDependencyDetails;
156
+ } | {
157
+ dep: string;
158
+ status: 'not-found';
159
+ } | {
160
+ dep: string;
161
+ status: 'skipped';
162
+ };
163
+ /**
164
+ * Best-effort existence/on-chain-ness check of every Registry-resolution dep against the
165
+ * pointer registry. A revert or an empty record ⇒ `not-found` (a warning — the owner may
166
+ * intend a custom registry). A transport failure ⇒ the remaining checks are `skipped` and
167
+ * `rpcOk: false` — one info line, never an error: the deploy proceeds regardless.
168
+ */
169
+ export declare function checkRegistryDeps(client: DependencyReadClient, registry: Address, deps: ParsedDependencyRef[]): Promise<{
170
+ checks: DepCheck[];
171
+ rpcOk: boolean;
172
+ }>;
173
+ /** What a registry ref resolved to: on-chain bytes (decompressed, inline-ready JS) or a CDN URL. */
174
+ export type RegistryResolution = {
175
+ kind: 'onchain';
176
+ script: string;
177
+ } | {
178
+ kind: 'cdn';
179
+ url: string;
180
+ };
181
+ export interface RegistryResolveOptions {
182
+ /** Decompress gzip bytes — required only when the resolved dependency is on-chain bytes
183
+ * (`availableOnChain` with `scriptCount > 0`); a CDN-resolved or unresolved dep never needs
184
+ * it. Omitting it in that case throws {@link InflateRequiredError} naming the fix. */
185
+ inflate?: (bytes: Uint8Array) => Uint8Array;
186
+ }
187
+ /** Reset the in-process registry-resolution cache — for tests. */
188
+ export declare function resetRegistryDependencyCache(): void;
189
+ /** The collection's registry pointer, if set to a real address (zero/undefined ⇒ none). */
190
+ export declare function activeRegistry(state: ProjectState): Address | null;
191
+ /**
192
+ * Resolve one `name@version` ref through the collection's registry. Returns the resolution
193
+ * (or null when the registry couldn't answer — caller falls back to the built-in map) plus
194
+ * whether it was served from cache. Never throws for a resolution failure; a fresh one logs ONE
195
+ * warn (the negative cache rate-limits it) naming the dep and why. DOES throw
196
+ * {@link InflateRequiredError} when the resolution needs decompression and `opts.inflate` is
197
+ * absent — that is a caller-configuration bug, not a resolution outcome.
198
+ */
199
+ export declare function resolveRegistryDep(client: PublicClient, registry: Address, dep: DependencyInfo, opts?: RegistryResolveOptions): Promise<{
200
+ resolution: RegistryResolution | null;
201
+ cached: boolean;
202
+ error?: string;
203
+ }>;
204
+ /**
205
+ * Resolve a `name@version` registry ref to a CDN URL — the built-in reference convention,
206
+ * the LAST-resort rung of the resolution order (the soft registry pointer stays
207
+ * non-validating). Known runtimes get their real dist paths; anything else is best-effort npm.
208
+ */
209
+ export declare function registryDepUrl(ref: string): string | null;
210
+ /**
211
+ * The ordered dependency `<script>` tags for the generator document, each dep resolved per
212
+ * the Consumers table: registry on-chain bytes → registry preferredCDN → built-in map;
213
+ * `onchain`-resolution refs read their SSTORE2 data contract directly (never a registry).
214
+ * Never throws for a resolution failure — an unresolvable dep is skipped (after the warn) and
215
+ * the document assembles. DOES propagate {@link InflateRequiredError} (see
216
+ * {@link resolveRegistryDep}) — a missing `inflate` is a host wiring bug, not a bad dep.
217
+ */
218
+ export declare function dependencyScriptTags(client: PublicClient, state: ProjectState, opts?: RegistryResolveOptions): Promise<string[]>;
219
+ /** The spec's URL-carried tokenData size budget: gateway front-ends commonly cap request lines
220
+ * near 8KB. Applies to URL-carried `?abx=` payloads (a resolver's directory-mode 302 fallback);
221
+ * inline document serving is unaffected. Hoisted alongside the rest of this lane — the
222
+ * budget-tracking/observability surface built on it (`checkUrlBudget`, `urlBudgetStatus`) stays
223
+ * resolver-local (token-api/src/deps.ts), since it's a serving-observability concern rather than
224
+ * a resolution rule. */
225
+ export declare const URL_BUDGET_BYTES = 8192;
109
226
  //# sourceMappingURL=deps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,GAAG,EAAC,MAAM,MAAM,CAAC;AAG3D,4EAA4E;AAC5E,eAAO,MAAM,cAAc;;;CAAqC,CAAC;AACjE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEjF,oGAAoG;AACpG,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,aAAa,CAAC;IAC1B,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;sFAEsF;AACtF,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,GAAG,CAahE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAOrE;AAED;qFACqF;AACrF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAE/E;AAID;kGACkG;AAClG,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB5B,CAAC;AAEX,wEAAwE;AACxE,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,uGAAuG;AACvG,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,IAAI,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,SAAS,OAAO,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAA;KAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnI;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,oBAAoB,EAC5B,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAW3C"}
1
+ {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"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"}