glamsterdam-compat-lab 0.3.1 → 0.3.3
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/CONTRIBUTING.md +2 -2
- package/README.md +9 -7
- package/ROADMAP.md +1 -1
- package/data/client-compat/clients.example.json +287 -2
- package/datasets/public-seed/README.md +4 -0
- package/datasets/public-seed/comparisons/bytecode-ens-registry-mainnet-runtime--default-vs-research.json +136 -0
- package/datasets/public-seed/comparisons/bytecode-erc4337-entrypoint-v06-mainnet-runtime--default-vs-research.json +167 -0
- package/datasets/public-seed/comparisons/bytecode-multicall3-mainnet-runtime--default-vs-research.json +139 -0
- package/datasets/public-seed/comparisons/bytecode-safe-proxy-factory-v130-mainnet-runtime--default-vs-research.json +169 -0
- package/datasets/public-seed/comparisons/bytecode-storage-heavy--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/bytecode-uniswap-v2-factory-mainnet-runtime--default-vs-research.json +168 -0
- package/datasets/public-seed/comparisons/bytecode-usdc-proxy-mainnet-runtime--default-vs-research.json +154 -0
- package/datasets/public-seed/comparisons/bytecode-weth9-mainnet-runtime--default-vs-research.json +136 -0
- package/datasets/public-seed/comparisons/traces-besu-debug-structlogs--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/traces-besu-mainnet-tracoor-debug-structlogs--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/traces-call-tracer-tree--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/traces-drpc-call-tracer-real--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/traces-erigon-action-trace--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/traces-foundry-json-trace--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/traces-geth-json-rpc-structlogs--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/traces-geth-mainnet-tracoor-debug-structlogs--default-vs-research.json +141 -0
- package/datasets/public-seed/comparisons/traces-hardhat-debug-trace--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/traces-nethermind-debug-structlogs--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/traces-nethermind-mainnet-tracoor-debug-structlogs--default-vs-research.json +3 -3
- package/datasets/public-seed/comparisons/traces-reth-mainnet-tracoor-debug-structlogs--default-vs-research.json +141 -0
- package/datasets/public-seed/comparisons/traces-storage-heavy-trace--default-vs-research.json +3 -3
- package/datasets/public-seed/findings.csv +183 -0
- package/datasets/public-seed/manifest.json +395 -2
- package/datasets/public-seed/reports/bytecode-ens-registry-mainnet-runtime--default.json +126 -0
- package/datasets/public-seed/reports/bytecode-ens-registry-mainnet-runtime--research.json +126 -0
- package/datasets/public-seed/reports/bytecode-erc4337-entrypoint-v06-mainnet-runtime--default.json +170 -0
- package/datasets/public-seed/reports/bytecode-erc4337-entrypoint-v06-mainnet-runtime--research.json +170 -0
- package/datasets/public-seed/reports/bytecode-multicall3-mainnet-runtime--default.json +97 -0
- package/datasets/public-seed/reports/bytecode-multicall3-mainnet-runtime--research.json +124 -0
- package/datasets/public-seed/reports/bytecode-safe-proxy-factory-v130-mainnet-runtime--default.json +148 -0
- package/datasets/public-seed/reports/bytecode-safe-proxy-factory-v130-mainnet-runtime--research.json +171 -0
- package/datasets/public-seed/reports/bytecode-storage-heavy--default.json +1 -1
- package/datasets/public-seed/reports/bytecode-storage-heavy--research.json +1 -1
- package/datasets/public-seed/reports/bytecode-uniswap-v2-factory-mainnet-runtime--default.json +172 -0
- package/datasets/public-seed/reports/bytecode-uniswap-v2-factory-mainnet-runtime--research.json +172 -0
- package/datasets/public-seed/reports/bytecode-usdc-proxy-mainnet-runtime--default.json +127 -0
- package/datasets/public-seed/reports/bytecode-usdc-proxy-mainnet-runtime--research.json +150 -0
- package/datasets/public-seed/reports/bytecode-weth9-mainnet-runtime--default.json +127 -0
- package/datasets/public-seed/reports/bytecode-weth9-mainnet-runtime--research.json +127 -0
- package/datasets/public-seed/reports/indexers-balance-diff-indexer--default.json +1 -1
- package/datasets/public-seed/reports/indexers-explorer-replay-indexer--default.json +1 -1
- package/datasets/public-seed/reports/indexers-graph-network-subgraph-reduced--default.json +123 -0
- package/datasets/public-seed/reports/indexers-subgraph--default.json +1 -1
- package/datasets/public-seed/reports/traces-besu-debug-structlogs--default.json +1 -1
- package/datasets/public-seed/reports/traces-besu-debug-structlogs--research.json +1 -1
- package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--default.json +1 -1
- package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--research.json +1 -1
- package/datasets/public-seed/reports/traces-call-tracer-tree--default.json +1 -1
- package/datasets/public-seed/reports/traces-call-tracer-tree--research.json +1 -1
- package/datasets/public-seed/reports/traces-drpc-call-tracer-real--default.json +1 -1
- package/datasets/public-seed/reports/traces-drpc-call-tracer-real--research.json +1 -1
- package/datasets/public-seed/reports/traces-erigon-action-trace--default.json +1 -1
- package/datasets/public-seed/reports/traces-erigon-action-trace--research.json +1 -1
- package/datasets/public-seed/reports/traces-foundry-json-trace--default.json +1 -1
- package/datasets/public-seed/reports/traces-foundry-json-trace--research.json +1 -1
- package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--default.json +1 -1
- package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--research.json +1 -1
- package/datasets/public-seed/reports/traces-geth-mainnet-tracoor-debug-structlogs--default.json +103 -0
- package/datasets/public-seed/reports/traces-geth-mainnet-tracoor-debug-structlogs--research.json +131 -0
- package/datasets/public-seed/reports/traces-hardhat-debug-trace--default.json +1 -1
- package/datasets/public-seed/reports/traces-hardhat-debug-trace--research.json +1 -1
- package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--default.json +1 -1
- package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--research.json +1 -1
- package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--default.json +1 -1
- package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--research.json +1 -1
- package/datasets/public-seed/reports/traces-reth-mainnet-tracoor-debug-structlogs--default.json +103 -0
- package/datasets/public-seed/reports/traces-reth-mainnet-tracoor-debug-structlogs--research.json +131 -0
- package/datasets/public-seed/reports/traces-storage-heavy-trace--default.json +1 -1
- package/datasets/public-seed/reports/traces-storage-heavy-trace--research.json +1 -1
- package/datasets/public-seed/reports/validator-glamsterdam-devnet-operator-public--default.json +92 -0
- package/datasets/public-seed/reports/validator-operator-config--default.json +3 -3
- package/datasets/public-seed/reports/validator-operator-config-builder-gap--default.json +1 -1
- package/datasets/public-seed/reports/validator-operator-config-complete--default.json +1 -1
- package/datasets/public-seed/reports.csv +51 -0
- package/datasets/public-seed/summary.csv +48 -0
- package/datasets/public-seed/summary.json +200 -0
- package/dist/fixtures/provenance.d.ts +7 -0
- package/dist/fixtures/provenance.js +3 -0
- package/dist/fixtures/provenance.js.map +1 -1
- package/dist/reports/reportTypes.d.ts +1 -1
- package/dist/reports/reportTypes.js +1 -1
- package/dist/scanners/validatorScanner.d.ts +83 -1
- package/dist/scanners/validatorScanner.js +39 -3
- package/dist/scanners/validatorScanner.js.map +1 -1
- package/docs/client-compat.md +103 -0
- package/docs/dataset.md +115 -0
- package/docs/fixtures.md +11 -4
- package/docs/release.md +7 -29
- package/examples/baseline-comparison.md +1 -1
- package/examples/public-seed-analysis.md +190 -0
- package/fixtures/bytecode/ens-registry-mainnet-runtime.hex +1 -0
- package/fixtures/bytecode/erc4337-entrypoint-v06-mainnet-runtime.hex +1 -0
- package/fixtures/bytecode/multicall3-mainnet-runtime.hex +1 -0
- package/fixtures/bytecode/safe-proxy-factory-v130-mainnet-runtime.hex +1 -0
- package/fixtures/bytecode/uniswap-v2-factory-mainnet-runtime.hex +1 -0
- package/fixtures/bytecode/usdc-proxy-mainnet-runtime.hex +1 -0
- package/fixtures/bytecode/weth9-mainnet-runtime.hex +1 -0
- package/fixtures/indexers/graph-network-subgraph-reduced.yaml +66 -0
- package/fixtures/provenance.json +496 -1
- package/fixtures/traces/geth-mainnet-tracoor-debug-structlogs.json +2285 -0
- package/fixtures/traces/reth-mainnet-tracoor-debug-structlogs.json +2285 -0
- package/fixtures/validator/glamsterdam-devnet-operator-public.yaml +30 -0
- package/package.json +2 -2
package/CONTRIBUTING.md
CHANGED
|
@@ -22,9 +22,9 @@ pnpm test:update
|
|
|
22
22
|
|
|
23
23
|
Releases are published from semver tags. After CI is green on `main`, create the GitHub release tag, then run the manual `Publish npm` workflow from `main` with the release tag as `release_tag`.
|
|
24
24
|
|
|
25
|
-
Start with `dry_run=true` for a new, unpublished release version. Real publishes use npm Trusted Publishing for `glamsterdam-compat-lab` with repository `CruzMolina/glamsterdam-compat-lab`, workflow file `npm-publish.yml`, and environment `npm-publish`. Do not configure `NPM_TOKEN
|
|
25
|
+
Start with `dry_run=true` for a new, unpublished release version. Real publishes use npm Trusted Publishing for `glamsterdam-compat-lab` with repository `CruzMolina/glamsterdam-compat-lab`, workflow file `npm-publish.yml`, and environment `npm-publish`. Do not configure `NPM_TOKEN`; the release workflow is intentionally tokenless and grants OIDC only to the isolated publish job.
|
|
26
26
|
|
|
27
|
-
The workflow checks out the requested semver tag, verifies that `package.json` matches the tag, installs dependencies, runs tests, builds, and
|
|
27
|
+
The workflow checks out the requested semver tag in a read-only preflight job, verifies that `package.json` matches the tag, installs dependencies, runs tests, builds, packs the npm tarball, and uploads that tarball for the publish job. The publish job downloads the tarball and runs `npm publish --provenance` without dependency install, tests, or build steps.
|
|
28
28
|
|
|
29
29
|
See `docs/release.md` for the full release checklist and npm troubleshooting notes.
|
|
30
30
|
|
package/README.md
CHANGED
|
@@ -36,14 +36,14 @@ pnpm glamsterdam scan-bytecode fixtures/bytecode/storage-heavy.hex
|
|
|
36
36
|
Install the published CLI from npm:
|
|
37
37
|
|
|
38
38
|
```sh
|
|
39
|
-
npm install -g glamsterdam-compat-lab@0.3.
|
|
39
|
+
npm install -g glamsterdam-compat-lab@0.3.3
|
|
40
40
|
glamsterdam eips
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
The v0.3.
|
|
43
|
+
The v0.3.3 GitHub release tarball remains available as a reproducible release artifact:
|
|
44
44
|
|
|
45
45
|
```sh
|
|
46
|
-
npm install -g https://github.com/CruzMolina/glamsterdam-compat-lab/releases/download/v0.3.
|
|
46
|
+
npm install -g https://github.com/CruzMolina/glamsterdam-compat-lab/releases/download/v0.3.3/glamsterdam-compat-lab-0.3.3.tgz
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
See [docs/release.md](docs/release.md) for maintainer release checks and npm publishing notes.
|
|
@@ -72,7 +72,9 @@ Each scanner accepts `--registry <path>` and `--thresholds <path>` so EIP metada
|
|
|
72
72
|
|
|
73
73
|
## Public dataset seed
|
|
74
74
|
|
|
75
|
-
Fixture provenance lives in [fixtures/provenance.json](fixtures/provenance.json). The first deterministic dataset seed lives in [datasets/public-seed](datasets/public-seed) and includes generated JSON reports
|
|
75
|
+
Fixture provenance lives in [fixtures/provenance.json](fixtures/provenance.json). The first deterministic dataset seed lives in [datasets/public-seed](datasets/public-seed) and includes generated JSON reports, default-vs-research threshold comparisons for bytecode and trace fixtures, a `summary.json` file with aggregate counts, and CSV exports (`reports.csv`, `findings.csv`, `summary.csv`) for spreadsheet and warehouse import.
|
|
76
|
+
|
|
77
|
+
See [docs/dataset.md](docs/dataset.md) for the dataset file contract and [examples/public-seed-analysis.md](examples/public-seed-analysis.md) for lightweight analysis snippets.
|
|
76
78
|
|
|
77
79
|
Regenerate it with:
|
|
78
80
|
|
|
@@ -121,7 +123,7 @@ Use `--trace-out <path>` to save the fetched JSON-RPC trace response while also
|
|
|
121
123
|
|
|
122
124
|
`scan-indexer` parses JSON and YAML, including `subgraph.yaml`-style configs. It flags event-only indexing assumptions, missing fork/EIP compatibility metadata, missing replay or testnet plans, missing BAL review metadata, and native ETH transfer log readiness as heuristic findings.
|
|
123
125
|
|
|
124
|
-
`scan-validator` parses JSON and YAML operator configs. It checks for execution, consensus, validator, builder/API, monitoring, and testnet/devnet metadata. It compares client names and versions against `data/client-compat/clients.example.json` or a user-provided matrix, but it does not guess compatibility.
|
|
126
|
+
`scan-validator` parses JSON and YAML operator configs. It checks for execution, consensus, validator, builder/API, monitoring, and testnet/devnet metadata. It compares client names and versions against `data/client-compat/clients.example.json` or a user-provided matrix, but it does not guess compatibility. See [docs/client-compat.md](docs/client-compat.md) for the sourced matrix format.
|
|
125
127
|
|
|
126
128
|
`compare-reports` accepts two saved JSON compatibility reports and emits deterministic JSON or Markdown deltas. It compares findings by stable finding ID, reports findings added, removed, changed, and unchanged, and highlights severity and confidence changes. It does not invent exact gas deltas; those must come from explicit input data or future client outputs.
|
|
127
129
|
|
|
@@ -131,7 +133,7 @@ Each scanner returns a `CompatibilityReport`:
|
|
|
131
133
|
|
|
132
134
|
```json
|
|
133
135
|
{
|
|
134
|
-
"toolVersion": "0.3.
|
|
136
|
+
"toolVersion": "0.3.3",
|
|
135
137
|
"fork": "glamsterdam",
|
|
136
138
|
"target": {
|
|
137
139
|
"kind": "bytecode",
|
|
@@ -219,7 +221,7 @@ Release publishing notes live in [docs/release.md](docs/release.md).
|
|
|
219
221
|
|
|
220
222
|
## Roadmap
|
|
221
223
|
|
|
222
|
-
See [ROADMAP.md](ROADMAP.md) for planned phases. Phase 0 is released as `v0.1.0`; `v0.2.0` starts Phase 1 with RPC transaction trace ingestion and broader trace fixture coverage; `v0.3.0` adds baseline comparison reports; `v0.3.1` expands public-safe fixture and dataset coverage.
|
|
224
|
+
See [ROADMAP.md](ROADMAP.md) for planned phases. Phase 0 is released as `v0.1.0`; `v0.2.0` starts Phase 1 with RPC transaction trace ingestion and broader trace fixture coverage; `v0.3.0` adds baseline comparison reports; `v0.3.1` expands public-safe fixture and dataset coverage; `v0.3.2` adds packaged CSV dataset exports; `v0.3.3` adds additional public Geth and Reth trace fixture coverage.
|
|
223
225
|
|
|
224
226
|
## Disclaimer
|
|
225
227
|
|
package/ROADMAP.md
CHANGED
|
@@ -52,7 +52,7 @@ Goal: compare compatibility reports across profiles and, later, across current-c
|
|
|
52
52
|
|
|
53
53
|
## Phase 2: Public Dataset
|
|
54
54
|
|
|
55
|
-
Status: seeded after `v0.3.0`; expanded with public-safe trace, indexer, and validator fixture coverage in `v0.3.1`.
|
|
55
|
+
Status: seeded after `v0.3.0`; expanded with public-safe trace, indexer, and validator fixture coverage in `v0.3.1`; packaged CSV exports added in `v0.3.2`; additional public Geth and Reth trace fixtures added in `v0.3.3`.
|
|
56
56
|
|
|
57
57
|
Goal: publish reproducible compatibility research.
|
|
58
58
|
|
|
@@ -1,8 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"fork": "glamsterdam",
|
|
3
|
-
"lastUpdated": "2026-05-
|
|
3
|
+
"lastUpdated": "2026-05-12",
|
|
4
4
|
"sources": [
|
|
5
|
-
|
|
5
|
+
{
|
|
6
|
+
"type": "public-interop-recap",
|
|
7
|
+
"url": "https://blog.ethereum.org/2026/05/02/soldogn-interop-recap",
|
|
8
|
+
"sourceDate": "2026-05-02",
|
|
9
|
+
"retrievedAt": "2026-05-12",
|
|
10
|
+
"claim": "The Ethereum Foundation Soldogn recap says the week ended with a stable multi-client Glamsterdam devnet running the latest ePBS, repricing, and block access list specs, and that nearly all clients were running together on glamsterdam-devnet-2 with the external builders pipeline tested end-to-end.",
|
|
11
|
+
"notes": "This source supports devnet/interoperability context, not production release compatibility."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"type": "public-devnet-spec",
|
|
15
|
+
"url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
|
|
16
|
+
"retrievedAt": "2026-05-12",
|
|
17
|
+
"claim": "The EthPandaOps glamsterdam-devnet-2 spec lists a Kurtosis participants matrix with geth as the execution client image and prysm, lodestar, lighthouse, teku, nimbus, and grandine as consensus client images.",
|
|
18
|
+
"notes": "This source supports devnet participant examples. It does not claim mainnet-ready client releases."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"type": "public-spec-release",
|
|
22
|
+
"url": "https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-alpha.7",
|
|
23
|
+
"sourceDate": "2026-04-29",
|
|
24
|
+
"retrievedAt": "2026-05-12",
|
|
25
|
+
"claim": "The consensus-specs v1.7.0-alpha.7 release is a pre-release containing Gloas changes used by the glamsterdam-devnet-2 spec.",
|
|
26
|
+
"notes": "Spec release metadata is useful provenance for devnet test entries, but is not a client release."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"type": "public-spec-release",
|
|
30
|
+
"url": "https://github.com/ethereum/execution-spec-tests/releases/tag/bal%40v5.6.1",
|
|
31
|
+
"sourceDate": "2026-04-02",
|
|
32
|
+
"retrievedAt": "2026-05-12",
|
|
33
|
+
"claim": "The execution-spec-tests bal@v5.6.1 pre-release is labeled for bal-devnet-3 v7 and includes BAL/state-gas test updates referenced by the glamsterdam-devnet-2 spec.",
|
|
34
|
+
"notes": "Spec-test release metadata is useful provenance for devnet test entries, but is not a client release."
|
|
35
|
+
}
|
|
6
36
|
],
|
|
7
37
|
"clients": [
|
|
8
38
|
{
|
|
@@ -12,12 +42,46 @@
|
|
|
12
42
|
{
|
|
13
43
|
"version": "0.0.0-example",
|
|
14
44
|
"status": "unknown",
|
|
45
|
+
"source": {
|
|
46
|
+
"type": "synthetic-example",
|
|
47
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
48
|
+
"retrievedAt": "2026-05-12",
|
|
49
|
+
"claim": "Synthetic unknown status used to exercise matrix behavior when no sourced compatibility statement exists."
|
|
50
|
+
},
|
|
15
51
|
"notes": "Placeholder only. Replace with a sourced compatibility statement before relying on this matrix."
|
|
16
52
|
},
|
|
17
53
|
{
|
|
18
54
|
"version": "1.0.0-compatible",
|
|
19
55
|
"status": "compatible",
|
|
56
|
+
"source": {
|
|
57
|
+
"type": "synthetic-example",
|
|
58
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
59
|
+
"retrievedAt": "2026-05-12",
|
|
60
|
+
"claim": "Synthetic compatible status used by safe fixture variants to exercise clean scanner paths."
|
|
61
|
+
},
|
|
20
62
|
"notes": "Synthetic compatible status used by safe fixture variants; do not treat as a real client release."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"version": "1.1.0-partial",
|
|
66
|
+
"status": "partial",
|
|
67
|
+
"source": {
|
|
68
|
+
"type": "synthetic-example",
|
|
69
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
70
|
+
"retrievedAt": "2026-05-12",
|
|
71
|
+
"claim": "Synthetic partial status used to exercise scanner behavior for incomplete readiness."
|
|
72
|
+
},
|
|
73
|
+
"notes": "Synthetic partial status for tests and examples only."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"version": "2.0.0-incompatible",
|
|
77
|
+
"status": "incompatible",
|
|
78
|
+
"source": {
|
|
79
|
+
"type": "synthetic-example",
|
|
80
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
81
|
+
"retrievedAt": "2026-05-12",
|
|
82
|
+
"claim": "Synthetic incompatible status used to exercise scanner behavior for blocking readiness findings."
|
|
83
|
+
},
|
|
84
|
+
"notes": "Synthetic incompatible status for tests and examples only."
|
|
21
85
|
}
|
|
22
86
|
]
|
|
23
87
|
},
|
|
@@ -28,12 +92,46 @@
|
|
|
28
92
|
{
|
|
29
93
|
"version": "0.0.0-example",
|
|
30
94
|
"status": "unknown",
|
|
95
|
+
"source": {
|
|
96
|
+
"type": "synthetic-example",
|
|
97
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
98
|
+
"retrievedAt": "2026-05-12",
|
|
99
|
+
"claim": "Synthetic unknown status used to exercise matrix behavior when no sourced compatibility statement exists."
|
|
100
|
+
},
|
|
31
101
|
"notes": "Placeholder only. Replace with a sourced compatibility statement before relying on this matrix."
|
|
32
102
|
},
|
|
33
103
|
{
|
|
34
104
|
"version": "1.0.0-compatible",
|
|
35
105
|
"status": "compatible",
|
|
106
|
+
"source": {
|
|
107
|
+
"type": "synthetic-example",
|
|
108
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
109
|
+
"retrievedAt": "2026-05-12",
|
|
110
|
+
"claim": "Synthetic compatible status used by safe fixture variants to exercise clean scanner paths."
|
|
111
|
+
},
|
|
36
112
|
"notes": "Synthetic compatible status used by safe fixture variants; do not treat as a real client release."
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"version": "1.1.0-partial",
|
|
116
|
+
"status": "partial",
|
|
117
|
+
"source": {
|
|
118
|
+
"type": "synthetic-example",
|
|
119
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
120
|
+
"retrievedAt": "2026-05-12",
|
|
121
|
+
"claim": "Synthetic partial status used to exercise scanner behavior for incomplete readiness."
|
|
122
|
+
},
|
|
123
|
+
"notes": "Synthetic partial status for tests and examples only."
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"version": "2.0.0-incompatible",
|
|
127
|
+
"status": "incompatible",
|
|
128
|
+
"source": {
|
|
129
|
+
"type": "synthetic-example",
|
|
130
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
131
|
+
"retrievedAt": "2026-05-12",
|
|
132
|
+
"claim": "Synthetic incompatible status used to exercise scanner behavior for blocking readiness findings."
|
|
133
|
+
},
|
|
134
|
+
"notes": "Synthetic incompatible status for tests and examples only."
|
|
37
135
|
}
|
|
38
136
|
]
|
|
39
137
|
},
|
|
@@ -44,14 +142,201 @@
|
|
|
44
142
|
{
|
|
45
143
|
"version": "0.0.0-example",
|
|
46
144
|
"status": "unknown",
|
|
145
|
+
"source": {
|
|
146
|
+
"type": "synthetic-example",
|
|
147
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
148
|
+
"retrievedAt": "2026-05-12",
|
|
149
|
+
"claim": "Synthetic unknown status used to exercise matrix behavior when no sourced compatibility statement exists."
|
|
150
|
+
},
|
|
47
151
|
"notes": "Placeholder only. Replace with a sourced compatibility statement before relying on this matrix."
|
|
48
152
|
},
|
|
49
153
|
{
|
|
50
154
|
"version": "1.0.0-compatible",
|
|
51
155
|
"status": "compatible",
|
|
156
|
+
"source": {
|
|
157
|
+
"type": "synthetic-example",
|
|
158
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
159
|
+
"retrievedAt": "2026-05-12",
|
|
160
|
+
"claim": "Synthetic compatible status used by safe fixture variants to exercise clean scanner paths."
|
|
161
|
+
},
|
|
52
162
|
"notes": "Synthetic compatible status used by safe fixture variants; do not treat as a real client release."
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"version": "1.1.0-partial",
|
|
166
|
+
"status": "partial",
|
|
167
|
+
"source": {
|
|
168
|
+
"type": "synthetic-example",
|
|
169
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
170
|
+
"retrievedAt": "2026-05-12",
|
|
171
|
+
"claim": "Synthetic partial status used to exercise scanner behavior for incomplete readiness."
|
|
172
|
+
},
|
|
173
|
+
"notes": "Synthetic partial status for tests and examples only."
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"version": "2.0.0-incompatible",
|
|
177
|
+
"status": "incompatible",
|
|
178
|
+
"source": {
|
|
179
|
+
"type": "synthetic-example",
|
|
180
|
+
"url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
|
|
181
|
+
"retrievedAt": "2026-05-12",
|
|
182
|
+
"claim": "Synthetic incompatible status used to exercise scanner behavior for blocking readiness findings."
|
|
183
|
+
},
|
|
184
|
+
"notes": "Synthetic incompatible status for tests and examples only."
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"name": "geth",
|
|
190
|
+
"role": "execution",
|
|
191
|
+
"versions": [
|
|
192
|
+
{
|
|
193
|
+
"version": "ethpandaops/geth:bal-devnet-6",
|
|
194
|
+
"status": "partial",
|
|
195
|
+
"source": {
|
|
196
|
+
"type": "public-devnet-spec",
|
|
197
|
+
"url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
|
|
198
|
+
"retrievedAt": "2026-05-12",
|
|
199
|
+
"claim": "The glamsterdam-devnet-2 Kurtosis example lists geth with image ethpandaops/geth:bal-devnet-6 as the execution-layer participant."
|
|
200
|
+
},
|
|
201
|
+
"notes": "Devnet image only. This is not a production Geth release compatibility claim."
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"name": "lighthouse",
|
|
207
|
+
"role": "consensus",
|
|
208
|
+
"versions": [
|
|
209
|
+
{
|
|
210
|
+
"version": "ethpandaops/lighthouse:glamsterdam-devnet-3",
|
|
211
|
+
"status": "partial",
|
|
212
|
+
"source": {
|
|
213
|
+
"type": "public-devnet-spec",
|
|
214
|
+
"url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
|
|
215
|
+
"retrievedAt": "2026-05-12",
|
|
216
|
+
"claim": "The glamsterdam-devnet-2 Kurtosis example lists lighthouse with image ethpandaops/lighthouse:glamsterdam-devnet-3 as a consensus-layer participant."
|
|
217
|
+
},
|
|
218
|
+
"notes": "Devnet image only. This is not a production Lighthouse release compatibility claim."
|
|
219
|
+
}
|
|
220
|
+
]
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"name": "teku",
|
|
224
|
+
"role": "consensus",
|
|
225
|
+
"versions": [
|
|
226
|
+
{
|
|
227
|
+
"version": "ethpandaops/teku:glamsterdam-devnet-2",
|
|
228
|
+
"status": "partial",
|
|
229
|
+
"source": {
|
|
230
|
+
"type": "public-devnet-spec",
|
|
231
|
+
"url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
|
|
232
|
+
"retrievedAt": "2026-05-12",
|
|
233
|
+
"claim": "The glamsterdam-devnet-2 Kurtosis example lists teku with image ethpandaops/teku:glamsterdam-devnet-2 as a consensus-layer participant."
|
|
234
|
+
},
|
|
235
|
+
"notes": "Devnet image only. This is not a production Teku release compatibility claim."
|
|
53
236
|
}
|
|
54
237
|
]
|
|
55
238
|
}
|
|
239
|
+
],
|
|
240
|
+
"devnets": [
|
|
241
|
+
{
|
|
242
|
+
"name": "glamsterdam-devnet-2",
|
|
243
|
+
"status": "partial",
|
|
244
|
+
"source": {
|
|
245
|
+
"type": "public-devnet-spec",
|
|
246
|
+
"url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
|
|
247
|
+
"retrievedAt": "2026-05-12",
|
|
248
|
+
"claim": "The glamsterdam-devnet-2 spec targets launch on 2026-04-30 and includes a Kurtosis participants matrix with specific EL and CL devnet images."
|
|
249
|
+
},
|
|
250
|
+
"participants": [
|
|
251
|
+
{
|
|
252
|
+
"role": "execution",
|
|
253
|
+
"name": "geth",
|
|
254
|
+
"image": "ethpandaops/geth:bal-devnet-6",
|
|
255
|
+
"status": "partial",
|
|
256
|
+
"notes": "Listed as the execution-layer participant image in the public devnet spec."
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"role": "consensus",
|
|
260
|
+
"name": "prysm",
|
|
261
|
+
"image": "ethpandaops/prysm-beacon-chain:glamsterdam-devnet-3-minimal",
|
|
262
|
+
"status": "partial",
|
|
263
|
+
"notes": "Listed as a consensus-layer participant image in the public devnet spec."
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"role": "consensus",
|
|
267
|
+
"name": "lodestar",
|
|
268
|
+
"image": "ethpandaops/lodestar:glamsterdam-devnet-2",
|
|
269
|
+
"status": "partial",
|
|
270
|
+
"notes": "Listed as a consensus-layer participant image in the public devnet spec."
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"role": "consensus",
|
|
274
|
+
"name": "lighthouse",
|
|
275
|
+
"image": "ethpandaops/lighthouse:glamsterdam-devnet-3",
|
|
276
|
+
"status": "partial",
|
|
277
|
+
"notes": "Listed as a consensus-layer participant image in the public devnet spec."
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"role": "consensus",
|
|
281
|
+
"name": "teku",
|
|
282
|
+
"image": "ethpandaops/teku:glamsterdam-devnet-2",
|
|
283
|
+
"status": "partial",
|
|
284
|
+
"notes": "Listed as a consensus-layer participant image in the public devnet spec."
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"role": "consensus",
|
|
288
|
+
"name": "nimbus",
|
|
289
|
+
"image": "ethpandaops/nimbus-eth2:glamsterdam-devnet-2-minimal",
|
|
290
|
+
"status": "partial",
|
|
291
|
+
"notes": "Listed as a consensus-layer participant image in the public devnet spec."
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"role": "consensus",
|
|
295
|
+
"name": "grandine",
|
|
296
|
+
"image": "ethpandaops/grandine:glamsterdam-devnet-2-minimal",
|
|
297
|
+
"status": "partial",
|
|
298
|
+
"notes": "Listed as a consensus-layer participant image in the public devnet spec."
|
|
299
|
+
}
|
|
300
|
+
],
|
|
301
|
+
"specVersions": [
|
|
302
|
+
{
|
|
303
|
+
"name": "consensus-specs",
|
|
304
|
+
"version": "v1.7.0-alpha.7",
|
|
305
|
+
"source": {
|
|
306
|
+
"type": "public-spec-release",
|
|
307
|
+
"url": "https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-alpha.7",
|
|
308
|
+
"sourceDate": "2026-04-29",
|
|
309
|
+
"retrievedAt": "2026-05-12",
|
|
310
|
+
"claim": "The consensus-specs v1.7.0-alpha.7 release is a pre-release containing Gloas changes used by the glamsterdam-devnet-2 spec."
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"name": "execution-spec-tests",
|
|
315
|
+
"version": "bal@v5.6.1",
|
|
316
|
+
"source": {
|
|
317
|
+
"type": "public-spec-release",
|
|
318
|
+
"url": "https://github.com/ethereum/execution-spec-tests/releases/tag/bal%40v5.6.1",
|
|
319
|
+
"sourceDate": "2026-04-02",
|
|
320
|
+
"retrievedAt": "2026-05-12",
|
|
321
|
+
"claim": "The execution-spec-tests bal@v5.6.1 pre-release is labeled for bal-devnet-3 v7 and includes BAL/state-gas test updates referenced by the glamsterdam-devnet-2 spec."
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
],
|
|
325
|
+
"notes": "Devnet participation is tracked as partial readiness. Production release compatibility must come from client release notes or other explicit public statements."
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
"name": "soldogn-interop",
|
|
329
|
+
"status": "stable-multi-client-devnet-reported",
|
|
330
|
+
"source": {
|
|
331
|
+
"type": "public-interop-recap",
|
|
332
|
+
"url": "https://blog.ethereum.org/2026/05/02/soldogn-interop-recap",
|
|
333
|
+
"sourceDate": "2026-05-02",
|
|
334
|
+
"retrievedAt": "2026-05-12",
|
|
335
|
+
"claim": "The Ethereum Foundation Soldogn recap reports a stable multi-client Glamsterdam devnet running the latest ePBS, repricing, and block access list specs, with nearly all clients running together on glamsterdam-devnet-2 by Friday."
|
|
336
|
+
},
|
|
337
|
+
"participants": [],
|
|
338
|
+
"specVersions": [],
|
|
339
|
+
"notes": "Interop recap is useful context for the matrix, but this entry intentionally avoids per-client production compatibility claims."
|
|
340
|
+
}
|
|
56
341
|
]
|
|
57
342
|
}
|
|
@@ -7,6 +7,10 @@ The seed is intentionally small. It is meant to prove the dataset workflow, not
|
|
|
7
7
|
## Contents
|
|
8
8
|
|
|
9
9
|
- `manifest.json`: index of generated reports, comparisons, source fixtures, threshold profiles, and limitations.
|
|
10
|
+
- `summary.json`: aggregate counts by fixture kind, source type, report risk, threshold profile, and finding ID.
|
|
11
|
+
- `reports.csv`: flat index of generated reports for spreadsheet and warehouse import.
|
|
12
|
+
- `findings.csv`: one row per generated report finding, including severity, confidence, domains, and related EIPs.
|
|
13
|
+
- `summary.csv`: flattened aggregate totals and counts from `summary.json`.
|
|
10
14
|
- `reports/`: JSON compatibility reports generated from source fixtures.
|
|
11
15
|
- `comparisons/`: JSON comparison reports for default-vs-research threshold profiles on bytecode and trace fixtures.
|
|
12
16
|
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.3",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"comparison": {
|
|
5
|
+
"baseline": {
|
|
6
|
+
"toolVersion": "0.3.3",
|
|
7
|
+
"fork": "glamsterdam",
|
|
8
|
+
"target": {
|
|
9
|
+
"kind": "bytecode",
|
|
10
|
+
"name": "fixtures/bytecode/ens-registry-mainnet-runtime.hex"
|
|
11
|
+
},
|
|
12
|
+
"summary": {
|
|
13
|
+
"risk": "medium",
|
|
14
|
+
"findingCount": 4,
|
|
15
|
+
"highCount": 0,
|
|
16
|
+
"mediumCount": 2,
|
|
17
|
+
"lowCount": 1,
|
|
18
|
+
"unknownCount": 1
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"candidate": {
|
|
22
|
+
"toolVersion": "0.3.3",
|
|
23
|
+
"fork": "glamsterdam",
|
|
24
|
+
"target": {
|
|
25
|
+
"kind": "bytecode",
|
|
26
|
+
"name": "fixtures/bytecode/ens-registry-mainnet-runtime.hex"
|
|
27
|
+
},
|
|
28
|
+
"summary": {
|
|
29
|
+
"risk": "medium",
|
|
30
|
+
"findingCount": 4,
|
|
31
|
+
"highCount": 0,
|
|
32
|
+
"mediumCount": 2,
|
|
33
|
+
"lowCount": 1,
|
|
34
|
+
"unknownCount": 1
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"summary": {
|
|
39
|
+
"riskChange": {
|
|
40
|
+
"from": "medium",
|
|
41
|
+
"to": "medium",
|
|
42
|
+
"direction": "unchanged"
|
|
43
|
+
},
|
|
44
|
+
"findingCount": {
|
|
45
|
+
"baseline": 4,
|
|
46
|
+
"candidate": 4,
|
|
47
|
+
"delta": 0
|
|
48
|
+
},
|
|
49
|
+
"addedCount": 0,
|
|
50
|
+
"removedCount": 0,
|
|
51
|
+
"changedCount": 0,
|
|
52
|
+
"unchangedCount": 4,
|
|
53
|
+
"severityIncreasedCount": 0,
|
|
54
|
+
"severityDecreasedCount": 0,
|
|
55
|
+
"severityChangedCount": 0,
|
|
56
|
+
"confidenceIncreasedCount": 0,
|
|
57
|
+
"confidenceDecreasedCount": 0,
|
|
58
|
+
"confidenceChangedCount": 0
|
|
59
|
+
},
|
|
60
|
+
"changes": {
|
|
61
|
+
"added": [],
|
|
62
|
+
"removed": [],
|
|
63
|
+
"changed": [],
|
|
64
|
+
"unchanged": [
|
|
65
|
+
{
|
|
66
|
+
"key": "bytecode.log-opcodes-present",
|
|
67
|
+
"id": "bytecode.log-opcodes-present",
|
|
68
|
+
"title": "Log opcodes are present",
|
|
69
|
+
"severity": "low",
|
|
70
|
+
"confidence": "medium",
|
|
71
|
+
"domain": [
|
|
72
|
+
"contracts",
|
|
73
|
+
"indexer",
|
|
74
|
+
"monitoring"
|
|
75
|
+
],
|
|
76
|
+
"relatedEips": [
|
|
77
|
+
"EIP-7708"
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"key": "bytecode.manual-review-required",
|
|
82
|
+
"id": "bytecode.manual-review-required",
|
|
83
|
+
"title": "Manual review is still required for runtime behavior",
|
|
84
|
+
"severity": "unknown",
|
|
85
|
+
"confidence": "low",
|
|
86
|
+
"domain": [
|
|
87
|
+
"contracts",
|
|
88
|
+
"execution"
|
|
89
|
+
],
|
|
90
|
+
"relatedEips": [
|
|
91
|
+
"GAS-REPRICING"
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"key": "bytecode.state-account-opcode-exposure",
|
|
96
|
+
"id": "bytecode.state-account-opcode-exposure",
|
|
97
|
+
"title": "State and account access opcodes are prominent in bytecode",
|
|
98
|
+
"severity": "medium",
|
|
99
|
+
"confidence": "medium",
|
|
100
|
+
"domain": [
|
|
101
|
+
"contracts",
|
|
102
|
+
"execution"
|
|
103
|
+
],
|
|
104
|
+
"relatedEips": [
|
|
105
|
+
"GAS-REPRICING",
|
|
106
|
+
"EIP-7904",
|
|
107
|
+
"EIP-8038",
|
|
108
|
+
"EIP-7976"
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"key": "bytecode.storage-heavy-pattern",
|
|
113
|
+
"id": "bytecode.storage-heavy-pattern",
|
|
114
|
+
"title": "Storage-related opcodes appear frequently",
|
|
115
|
+
"severity": "medium",
|
|
116
|
+
"confidence": "medium",
|
|
117
|
+
"domain": [
|
|
118
|
+
"contracts",
|
|
119
|
+
"execution"
|
|
120
|
+
],
|
|
121
|
+
"relatedEips": [
|
|
122
|
+
"GAS-REPRICING",
|
|
123
|
+
"EIP-8038"
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
"assumptions": [
|
|
129
|
+
"Reports were compared by finding id. Repeated finding ids are disambiguated with deterministic occurrence suffixes.",
|
|
130
|
+
"Severity and confidence changes are structural report changes, not protocol gas estimates."
|
|
131
|
+
],
|
|
132
|
+
"limitations": [
|
|
133
|
+
"The comparison does not infer exact gas deltas, final Glamsterdam parameters, or current-vs-Glamsterdam client behavior unless those values are already present in the input reports.",
|
|
134
|
+
"Added and removed findings can reflect threshold profile differences, fixture coverage changes, registry updates, or detector changes; review the source reports before treating a diff as a protocol risk change."
|
|
135
|
+
]
|
|
136
|
+
}
|