@artblocks/abx-sdk 0.1.0-alpha.15 → 0.1.0-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/inspect.d.ts.map +1 -1
- package/dist/inspect.js +8 -3
- package/dist/inspect.js.map +1 -1
- package/dist/probe.d.ts +29 -0
- package/dist/probe.d.ts.map +1 -1
- package/dist/probe.js +104 -9
- package/dist/probe.js.map +1 -1
- package/dist/script-chunks.d.ts +24 -0
- package/dist/script-chunks.d.ts.map +1 -0
- package/dist/script-chunks.js +63 -0
- package/dist/script-chunks.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -35,6 +35,7 @@ export * from './gateways.js';
|
|
|
35
35
|
export * from './generator.js';
|
|
36
36
|
export * from './generator-document.js';
|
|
37
37
|
export * from './inspect.js';
|
|
38
|
+
export * from './script-chunks.js';
|
|
38
39
|
export * from './migrate.js';
|
|
39
40
|
export * from './mime.js';
|
|
40
41
|
export * from './onchain-uri.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EAAC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAC,MAAM,MAAM,CAAC;AAE5E,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,GACd,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EAAC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAC,MAAM,MAAM,CAAC;AAE5E,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,GACd,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -24,6 +24,7 @@ export * from './gateways.js';
|
|
|
24
24
|
export * from './generator.js';
|
|
25
25
|
export * from './generator-document.js';
|
|
26
26
|
export * from './inspect.js';
|
|
27
|
+
export * from './script-chunks.js';
|
|
27
28
|
export * from './migrate.js';
|
|
28
29
|
export * from './mime.js';
|
|
29
30
|
export * from './onchain-uri.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,GACd,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,GACd,MAAM,gBAAgB,CAAC"}
|
package/dist/inspect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAE9F,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,CAAC;IAC9F,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE;QAAC,OAAO,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC;IACzD,GAAG,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAC,CAAC;IAM3F,OAAO,EAAE;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,CAAC;CACxF;AAoID,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAE9F,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,CAAC;IAC9F,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE;QAAC,OAAO,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC;IACzD,GAAG,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAC,CAAC;IAM3F,OAAO,EAAE;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,CAAC;CACxF;AAoID,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,cAAc,CA+FzF;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CA0BvD"}
|
package/dist/inspect.js
CHANGED
|
@@ -167,7 +167,11 @@ export function analyzeScript(source, declaredDeps = []) {
|
|
|
167
167
|
// `code` for flags that must reflect real code, `noComments` for literal-content extraction.
|
|
168
168
|
// Never run a detector against the raw source — a comment mentioning p5 is not a p5 dependency.
|
|
169
169
|
const { code, noComments } = sourceViews(source);
|
|
170
|
-
|
|
170
|
+
// Runtime flags must read CODE (strings blanked). Trait-key extraction needs the intact
|
|
171
|
+
// object-literal (`'Plant Count':`), so it runs on `noComments` — but ONLY when a real
|
|
172
|
+
// `abx.traits(` call survives in `code`. A string that *mentions* `abx.traits({foo:1})`
|
|
173
|
+
// used to list `foo` while Runtime said "no abx.traits call" — two sections contradicting
|
|
174
|
+
// each other on a correct program. Gate the extractor on the same view the flag uses.
|
|
171
175
|
const usesMathRandom = /Math\s*\.\s*random\s*\(/.test(code);
|
|
172
176
|
// p5's bare random(...) — a `random(` NOT preceded by `.` or a word char (so not Math.random / obj.random)
|
|
173
177
|
const usesBareRandom = /(^|[^.\w])random\s*\(/.test(code);
|
|
@@ -192,6 +196,7 @@ export function analyzeScript(source, declaredDeps = []) {
|
|
|
192
196
|
// `\??\s*\.` tolerates optional chaining (`abx?.tokenData`) — a common, correct way to read it.
|
|
193
197
|
const readsTokenData = /abx\s*\??\s*\.\s*tokenData\b/.test(code) || /window\s*\??\s*\.\s*abxTokenData\b/.test(code);
|
|
194
198
|
const reportsTraits = /abx\s*\??\s*\.\s*traits\s*\(/.test(code);
|
|
199
|
+
const keys = reportsTraits ? traitKeys(noComments) : [];
|
|
195
200
|
let wrongGlobal = null;
|
|
196
201
|
if (!readsTokenData) {
|
|
197
202
|
if (/window\s*\.\s*tokenTraits\b/.test(code))
|
|
@@ -204,7 +209,7 @@ export function analyzeScript(source, declaredDeps = []) {
|
|
|
204
209
|
// Trait-reproducibility rubric (see docs/research/onchain-traits-feasibility.md).
|
|
205
210
|
let verdict;
|
|
206
211
|
let reason;
|
|
207
|
-
if (
|
|
212
|
+
if (!reportsTraits) {
|
|
208
213
|
verdict = 'none';
|
|
209
214
|
reason = 'no abx.traits({…}) call → NO marketplace traits on ANY lane. A resolver captures the keys you pass to abx.traits(); it does not invent traits from internal variables or a global. Call abx.traits({…}) in the sketch if you want filterable traits.';
|
|
210
215
|
}
|
|
@@ -253,7 +258,7 @@ export function analyzeScript(source, declaredDeps = []) {
|
|
|
253
258
|
return {
|
|
254
259
|
bytes,
|
|
255
260
|
estChunks: Math.max(1, Math.ceil(bytes / 22_000)),
|
|
256
|
-
traits: { present:
|
|
261
|
+
traits: { present: reportsTraits, keys },
|
|
257
262
|
paramHints: paramKeys(noComments),
|
|
258
263
|
prng: { seeded, usesBareRandom, usesMathRandom, usesNoise },
|
|
259
264
|
depHints,
|
package/dist/inspect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"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"}
|
package/dist/probe.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type PublicClient } from 'viem';
|
|
1
2
|
/**
|
|
2
3
|
* Capability probe for RPC endpoints. Reconstruction is `eth_getLogs`-heavy and
|
|
3
4
|
* needs *archive* depth (to read a project's deploy block) plus a usable block
|
|
@@ -27,4 +28,32 @@ export declare function probeRpcEndpoints(opts?: {
|
|
|
27
28
|
chainKey?: string;
|
|
28
29
|
urls?: string[];
|
|
29
30
|
}): Promise<RpcProbe[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Can this endpoint still serve LOG HISTORY at `blockNumber`?
|
|
33
|
+
*
|
|
34
|
+
* The check this replaced was `getLogs({address: zeroAddress, fromBlock: old, toBlock: old})` and
|
|
35
|
+
* "any non-throw counts as archive access" — which cannot fail on a pruning node. `zeroAddress`
|
|
36
|
+
* never emits logs, so an empty result is what a *perfect* archive node returns too: the assertion
|
|
37
|
+
* had no discriminating power and only caught endpoints that *error* on old blocks. A node that
|
|
38
|
+
* silently answers `[]` for pruned history was graded `best`, and `abx add` then ground through
|
|
39
|
+
* half a million blocks and reconstructed nothing, because a successful empty response is not an
|
|
40
|
+
* error and never fails over to the next endpoint.
|
|
41
|
+
*
|
|
42
|
+
* So assert on something that MUST come back. Blocks are retained by everyone; receipts and the log
|
|
43
|
+
* index are what get pruned. We read the probe block, ask for one of its transactions' receipts, and
|
|
44
|
+
* — when that receipt carries a log — require `getLogs` to return that same log. Measured on two
|
|
45
|
+
* Base Sepolia endpoints at 500k blocks back, same transaction: one returns a receipt with 1 log,
|
|
46
|
+
* the other returns null. That is the discriminator, and it needs no hardcoded address or block.
|
|
47
|
+
*
|
|
48
|
+
* Fails SAFE, in the direction of the old behaviour: when the probe block has no transactions, or
|
|
49
|
+
* the receipt has no logs, there is nothing to assert on, so we fall back to the lenient
|
|
50
|
+
* "getLogs didn't throw" signal rather than manufacturing a failure.
|
|
51
|
+
*
|
|
52
|
+
* Exported for tests — `probeOne` builds its own transport per URL, so the discriminating logic is
|
|
53
|
+
* what gets asserted directly.
|
|
54
|
+
*/
|
|
55
|
+
export declare function probeHistoryAt(client: PublicClient, blockNumber: bigint): Promise<{
|
|
56
|
+
retained: boolean;
|
|
57
|
+
reason?: string;
|
|
58
|
+
}>;
|
|
30
59
|
//# sourceMappingURL=probe.d.ts.map
|
package/dist/probe.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../src/probe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../src/probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6E,KAAK,YAAY,EAAC,MAAM,MAAM,CAAC;AAInH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD,wBAAsB,iBAAiB,CACrC,IAAI,GAAE;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAM,GAC9C,OAAO,CAAC,QAAQ,EAAE,CAAC,CAIrB;AAyDD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CAgD/C"}
|
package/dist/probe.js
CHANGED
|
@@ -2,7 +2,17 @@ import { createPublicClient, http, zeroAddress } from 'viem';
|
|
|
2
2
|
import { resolveChain, resolveRpcUrls, redactRpcUrl } from './chains.js';
|
|
3
3
|
import { isGetLogsRangeError } from './reconstruct.js';
|
|
4
4
|
const RANGE_PROBE = 2000n; // "wide" recent range to test the getLogs window
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* How far back "archive depth" means. Deliberately deep: reconstruction starts at a project's
|
|
7
|
+
* DEPLOY block, so the bar is "can this endpoint still serve a project that is not new?". At 500k
|
|
8
|
+
* blocks that is ~11 days on Base Sepolia (2s blocks) and ~10 weeks on Ethereum Sepolia (12s) —
|
|
9
|
+
* comfortably past the retention window of the pruning public endpoints, and far short of any
|
|
10
|
+
* genuinely archival node. It was 100_000, which sat *inside* the retained window of at least one
|
|
11
|
+
* default endpoint, so the probe passed on a node that could not reconstruct anything older.
|
|
12
|
+
*/
|
|
13
|
+
const ARCHIVE_DEPTH = 500000n;
|
|
14
|
+
/** How many of a probe block's transactions to try a receipt for before giving up. */
|
|
15
|
+
const RECEIPT_TRIES = 3;
|
|
6
16
|
export async function probeRpcEndpoints(opts = {}) {
|
|
7
17
|
const chain = resolveChain(opts.chainKey);
|
|
8
18
|
const urls = opts.urls ?? resolveRpcUrls(opts.chainKey);
|
|
@@ -46,14 +56,10 @@ async function probeOne(chain, url) {
|
|
|
46
56
|
}
|
|
47
57
|
// archive depth — one block, deep in the past, to isolate archive from range
|
|
48
58
|
const old = head > ARCHIVE_DEPTH ? head - ARCHIVE_DEPTH : 0n;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
catch (err) {
|
|
54
|
-
if (!probe.reason)
|
|
55
|
-
probe.reason = firstLine(err);
|
|
56
|
-
}
|
|
59
|
+
const retention = await probeHistoryAt(client, old);
|
|
60
|
+
probe.archive = retention.retained;
|
|
61
|
+
if (!probe.archive && !probe.reason)
|
|
62
|
+
probe.reason = retention.reason;
|
|
57
63
|
if (!probe.archive) {
|
|
58
64
|
probe.verdict = 'unusable';
|
|
59
65
|
probe.reason = probe.reason ?? 'no archive access — can’t read a project’s deploy block';
|
|
@@ -68,6 +74,95 @@ async function probeOne(chain, url) {
|
|
|
68
74
|
}
|
|
69
75
|
return probe;
|
|
70
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Can this endpoint still serve LOG HISTORY at `blockNumber`?
|
|
79
|
+
*
|
|
80
|
+
* The check this replaced was `getLogs({address: zeroAddress, fromBlock: old, toBlock: old})` and
|
|
81
|
+
* "any non-throw counts as archive access" — which cannot fail on a pruning node. `zeroAddress`
|
|
82
|
+
* never emits logs, so an empty result is what a *perfect* archive node returns too: the assertion
|
|
83
|
+
* had no discriminating power and only caught endpoints that *error* on old blocks. A node that
|
|
84
|
+
* silently answers `[]` for pruned history was graded `best`, and `abx add` then ground through
|
|
85
|
+
* half a million blocks and reconstructed nothing, because a successful empty response is not an
|
|
86
|
+
* error and never fails over to the next endpoint.
|
|
87
|
+
*
|
|
88
|
+
* So assert on something that MUST come back. Blocks are retained by everyone; receipts and the log
|
|
89
|
+
* index are what get pruned. We read the probe block, ask for one of its transactions' receipts, and
|
|
90
|
+
* — when that receipt carries a log — require `getLogs` to return that same log. Measured on two
|
|
91
|
+
* Base Sepolia endpoints at 500k blocks back, same transaction: one returns a receipt with 1 log,
|
|
92
|
+
* the other returns null. That is the discriminator, and it needs no hardcoded address or block.
|
|
93
|
+
*
|
|
94
|
+
* Fails SAFE, in the direction of the old behaviour: when the probe block has no transactions, or
|
|
95
|
+
* the receipt has no logs, there is nothing to assert on, so we fall back to the lenient
|
|
96
|
+
* "getLogs didn't throw" signal rather than manufacturing a failure.
|
|
97
|
+
*
|
|
98
|
+
* Exported for tests — `probeOne` builds its own transport per URL, so the discriminating logic is
|
|
99
|
+
* what gets asserted directly.
|
|
100
|
+
*/
|
|
101
|
+
export async function probeHistoryAt(client, blockNumber) {
|
|
102
|
+
const depth = `~${ARCHIVE_DEPTH} blocks back`; // the FAULT only — each caller words its own remedy
|
|
103
|
+
let txHashes = [];
|
|
104
|
+
try {
|
|
105
|
+
const block = await client.getBlock({ blockNumber, includeTransactions: false });
|
|
106
|
+
txHashes = block.transactions.slice(0, RECEIPT_TRIES);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
return { retained: false, reason: `can't read a block ${depth} — ${firstLine(err)}` };
|
|
110
|
+
}
|
|
111
|
+
for (const hash of txHashes) {
|
|
112
|
+
let logAddress;
|
|
113
|
+
try {
|
|
114
|
+
const receipt = await client.getTransactionReceipt({ hash });
|
|
115
|
+
logAddress = receipt.logs[0]?.address;
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
// Only a genuine "no such receipt" proves pruning. A rate-limit or a transport blip must NOT
|
|
119
|
+
// become a "history pruned" claim about an endpoint that is actually fine — so anything else
|
|
120
|
+
// falls through to the lenient check below, which is what this function did before.
|
|
121
|
+
if (!looksLikeReceiptMissing(err))
|
|
122
|
+
break;
|
|
123
|
+
// The node served the block but not the receipt of a transaction inside it: its history is
|
|
124
|
+
// pruned at this depth. This is exactly what a "recent logs only" endpoint looks like.
|
|
125
|
+
return {
|
|
126
|
+
retained: false,
|
|
127
|
+
reason: `history pruned ${depth} — it serves the block but not the receipts of transactions inside it`,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (!logAddress)
|
|
131
|
+
continue; // nothing to assert on in this tx — try the next
|
|
132
|
+
try {
|
|
133
|
+
const logs = await client.getLogs({ address: logAddress, fromBlock: blockNumber, toBlock: blockNumber });
|
|
134
|
+
if (logs.length > 0)
|
|
135
|
+
return { retained: true };
|
|
136
|
+
return {
|
|
137
|
+
retained: false,
|
|
138
|
+
reason: `log index pruned ${depth} — eth_getLogs returns EMPTY for a block whose receipts still hold logs`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
return { retained: false, reason: `eth_getLogs failed ${depth} — ${firstLine(err)}` };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Inconclusive (no transactions at the probe block, or none of them logged anything): keep the
|
|
146
|
+
// old lenient signal rather than inventing a verdict.
|
|
147
|
+
try {
|
|
148
|
+
await client.getLogs({ address: zeroAddress, fromBlock: blockNumber, toBlock: blockNumber });
|
|
149
|
+
return { retained: true };
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
return { retained: false, reason: firstLine(err) };
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Does this error mean "that receipt does not exist here" (viem's `TransactionReceiptNotFoundError`,
|
|
157
|
+
* i.e. the node answered `null`) as opposed to "I could not ask" (rate limit, timeout, 5xx)? Only the
|
|
158
|
+
* first is evidence about retention; treating the second as evidence would libel a healthy endpoint.
|
|
159
|
+
*/
|
|
160
|
+
function looksLikeReceiptMissing(err) {
|
|
161
|
+
const e = err;
|
|
162
|
+
if (e?.name === 'TransactionReceiptNotFoundError')
|
|
163
|
+
return true;
|
|
164
|
+
return /receipt.*(not be found|not found)|could not be found/i.test(e?.message ?? '');
|
|
165
|
+
}
|
|
71
166
|
function firstLine(err) {
|
|
72
167
|
return (err?.message ?? String(err)).split('\n')[0].slice(0, 100);
|
|
73
168
|
}
|
package/dist/probe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../src/probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,IAAI,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../src/probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* On-chain program chunks — the writer-side twin of {@link AbxGenerator}'s `_escapedScript`.
|
|
3
|
+
*
|
|
4
|
+
* The generator (and the resolver) join `scriptChunk(i)` with a single `'\n'` between chunks. A
|
|
5
|
+
* fixed-size byte slice that ignores that join inserts a newline in the middle of a token — `mass`
|
|
6
|
+
* becomes `ma\nss`, which is invalid JavaScript — and `abx verify` still goes green because it
|
|
7
|
+
* never parses the reassembled program. Splitting AT an existing newline (and dropping it, because
|
|
8
|
+
* the join puts it back) makes `chunks.join('\n') === source`. A 22 kB+ span with no newline is
|
|
9
|
+
* refused: there is no honest split that matches the on-chain join.
|
|
10
|
+
*/
|
|
11
|
+
/** SSTORE2 data-contract code limit is 24576 bytes (EIP-170) minus STOP; stay conservative. */
|
|
12
|
+
export declare const DEFAULT_SCRIPT_CHUNK_SIZE = 22000;
|
|
13
|
+
/** The byte the on-chain generator inserts between script chunks. Must stay in lockstep with
|
|
14
|
+
* `AbxGenerator._escapedScript` and the resolver's `.join('\n')`. */
|
|
15
|
+
export declare const SCRIPT_CHUNK_JOIN = "\n";
|
|
16
|
+
/**
|
|
17
|
+
* Split a program so the generator's newline-join reconstitutes it byte-for-byte.
|
|
18
|
+
* Empty source → no chunks (nothing to store). A single chunk that already fits is stored as-is
|
|
19
|
+
* (the generator inserts no join when `n === 1`).
|
|
20
|
+
*/
|
|
21
|
+
export declare function splitScriptChunks(source: string, chunkSize?: number): Uint8Array[];
|
|
22
|
+
/** Inverse of {@link splitScriptChunks}: the join the generator performs on chain. */
|
|
23
|
+
export declare function joinScriptChunks(chunks: readonly Uint8Array[]): string;
|
|
24
|
+
//# sourceMappingURL=script-chunks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-chunks.d.ts","sourceRoot":"","sources":["../src/script-chunks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,+FAA+F;AAC/F,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD;sEACsE;AACtE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAItC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAkC,GAC5C,UAAU,EAAE,CAmCd;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,CAGtE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* On-chain program chunks — the writer-side twin of {@link AbxGenerator}'s `_escapedScript`.
|
|
3
|
+
*
|
|
4
|
+
* The generator (and the resolver) join `scriptChunk(i)` with a single `'\n'` between chunks. A
|
|
5
|
+
* fixed-size byte slice that ignores that join inserts a newline in the middle of a token — `mass`
|
|
6
|
+
* becomes `ma\nss`, which is invalid JavaScript — and `abx verify` still goes green because it
|
|
7
|
+
* never parses the reassembled program. Splitting AT an existing newline (and dropping it, because
|
|
8
|
+
* the join puts it back) makes `chunks.join('\n') === source`. A 22 kB+ span with no newline is
|
|
9
|
+
* refused: there is no honest split that matches the on-chain join.
|
|
10
|
+
*/
|
|
11
|
+
/** SSTORE2 data-contract code limit is 24576 bytes (EIP-170) minus STOP; stay conservative. */
|
|
12
|
+
export const DEFAULT_SCRIPT_CHUNK_SIZE = 22_000;
|
|
13
|
+
/** The byte the on-chain generator inserts between script chunks. Must stay in lockstep with
|
|
14
|
+
* `AbxGenerator._escapedScript` and the resolver's `.join('\n')`. */
|
|
15
|
+
export const SCRIPT_CHUNK_JOIN = '\n';
|
|
16
|
+
const NL = 0x0a;
|
|
17
|
+
/**
|
|
18
|
+
* Split a program so the generator's newline-join reconstitutes it byte-for-byte.
|
|
19
|
+
* Empty source → no chunks (nothing to store). A single chunk that already fits is stored as-is
|
|
20
|
+
* (the generator inserts no join when `n === 1`).
|
|
21
|
+
*/
|
|
22
|
+
export function splitScriptChunks(source, chunkSize = DEFAULT_SCRIPT_CHUNK_SIZE) {
|
|
23
|
+
if (chunkSize < 1)
|
|
24
|
+
throw new Error('chunkSize must be ≥ 1');
|
|
25
|
+
const bytes = new TextEncoder().encode(source);
|
|
26
|
+
if (bytes.length === 0)
|
|
27
|
+
return [];
|
|
28
|
+
if (bytes.length <= chunkSize)
|
|
29
|
+
return [bytes];
|
|
30
|
+
const chunks = [];
|
|
31
|
+
let i = 0;
|
|
32
|
+
while (i < bytes.length) {
|
|
33
|
+
const remaining = bytes.length - i;
|
|
34
|
+
if (remaining <= chunkSize) {
|
|
35
|
+
chunks.push(bytes.subarray(i));
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
// Last newline in the window. The generator will put it back between this chunk and the next,
|
|
39
|
+
// so the chunk itself excludes it.
|
|
40
|
+
let split = -1;
|
|
41
|
+
for (let j = i + chunkSize - 1; j >= i; j--) {
|
|
42
|
+
if (bytes[j] === NL) {
|
|
43
|
+
split = j;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (split < i) {
|
|
48
|
+
throw new Error(`script has a ${chunkSize}+ byte span with no newline — the on-chain generator joins ` +
|
|
49
|
+
`chunks with a newline, so a split here would insert a byte and can break the program ` +
|
|
50
|
+
`(a 22 kB minified line has been observed to turn \`mass\` into \`ma\\nss\`). ` +
|
|
51
|
+
`Insert a line break, or shrink the file.`);
|
|
52
|
+
}
|
|
53
|
+
chunks.push(bytes.subarray(i, split));
|
|
54
|
+
i = split + 1;
|
|
55
|
+
}
|
|
56
|
+
return chunks;
|
|
57
|
+
}
|
|
58
|
+
/** Inverse of {@link splitScriptChunks}: the join the generator performs on chain. */
|
|
59
|
+
export function joinScriptChunks(chunks) {
|
|
60
|
+
const dec = new TextDecoder();
|
|
61
|
+
return chunks.map((c) => dec.decode(c)).join(SCRIPT_CHUNK_JOIN);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=script-chunks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-chunks.js","sourceRoot":"","sources":["../src/script-chunks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,+FAA+F;AAC/F,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD;sEACsE;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC,MAAM,EAAE,GAAG,IAAI,CAAC;AAEhB;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAc,EACd,YAAoB,yBAAyB;IAE7C,IAAI,SAAS,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM;QACR,CAAC;QACD,8FAA8F;QAC9F,mCAAmC;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBACpB,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,gBAAgB,SAAS,6DAA6D;gBACpF,uFAAuF;gBACvF,+EAA+E;gBAC/E,0CAA0C,CAC7C,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACtC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,gBAAgB,CAAC,MAA6B;IAC5D,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAClE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@artblocks/abx-sdk",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.16",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "ABX SDK (Layer 2) — the neutral, low-level library that turns protocol operations into typed function calls. No provider, no chain, no UX baked in.",
|
|
6
6
|
"type": "module",
|