glamsterdam-compat-lab 0.2.2 → 0.3.1
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 +1 -1
- package/README.md +44 -5
- package/ROADMAP.md +8 -2
- package/data/client-compat/clients.example.json +15 -0
- package/datasets/public-seed/README.md +26 -0
- package/datasets/public-seed/comparisons/bytecode-storage-heavy--default-vs-research.json +168 -0
- package/datasets/public-seed/comparisons/traces-besu-debug-structlogs--default-vs-research.json +91 -0
- package/datasets/public-seed/comparisons/traces-besu-mainnet-tracoor-debug-structlogs--default-vs-research.json +140 -0
- package/datasets/public-seed/comparisons/traces-call-tracer-tree--default-vs-research.json +121 -0
- package/datasets/public-seed/comparisons/traces-drpc-call-tracer-real--default-vs-research.json +123 -0
- package/datasets/public-seed/comparisons/traces-erigon-action-trace--default-vs-research.json +121 -0
- package/datasets/public-seed/comparisons/traces-foundry-json-trace--default-vs-research.json +124 -0
- package/datasets/public-seed/comparisons/traces-geth-json-rpc-structlogs--default-vs-research.json +108 -0
- package/datasets/public-seed/comparisons/traces-hardhat-debug-trace--default-vs-research.json +108 -0
- package/datasets/public-seed/comparisons/traces-nethermind-debug-structlogs--default-vs-research.json +153 -0
- package/datasets/public-seed/comparisons/traces-nethermind-mainnet-tracoor-debug-structlogs--default-vs-research.json +140 -0
- package/datasets/public-seed/comparisons/traces-storage-heavy-trace--default-vs-research.json +155 -0
- package/datasets/public-seed/manifest.json +552 -0
- package/datasets/public-seed/reports/bytecode-storage-heavy--default.json +172 -0
- package/datasets/public-seed/reports/bytecode-storage-heavy--research.json +172 -0
- package/datasets/public-seed/reports/indexers-balance-diff-indexer--default.json +63 -0
- package/datasets/public-seed/reports/indexers-explorer-replay-indexer--default.json +45 -0
- package/datasets/public-seed/reports/indexers-subgraph--default.json +123 -0
- package/datasets/public-seed/reports/traces-besu-debug-structlogs--default.json +54 -0
- package/datasets/public-seed/reports/traces-besu-debug-structlogs--research.json +54 -0
- package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--default.json +131 -0
- package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--research.json +131 -0
- package/datasets/public-seed/reports/traces-call-tracer-tree--default.json +99 -0
- package/datasets/public-seed/reports/traces-call-tracer-tree--research.json +99 -0
- package/datasets/public-seed/reports/traces-drpc-call-tracer-real--default.json +103 -0
- package/datasets/public-seed/reports/traces-drpc-call-tracer-real--research.json +103 -0
- package/datasets/public-seed/reports/traces-erigon-action-trace--default.json +99 -0
- package/datasets/public-seed/reports/traces-erigon-action-trace--research.json +99 -0
- package/datasets/public-seed/reports/traces-foundry-json-trace--default.json +76 -0
- package/datasets/public-seed/reports/traces-foundry-json-trace--research.json +104 -0
- package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--default.json +78 -0
- package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--research.json +78 -0
- package/datasets/public-seed/reports/traces-hardhat-debug-trace--default.json +78 -0
- package/datasets/public-seed/reports/traces-hardhat-debug-trace--research.json +78 -0
- package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--default.json +100 -0
- package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--research.json +100 -0
- package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--default.json +131 -0
- package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--research.json +131 -0
- package/datasets/public-seed/reports/traces-storage-heavy-trace--default.json +151 -0
- package/datasets/public-seed/reports/traces-storage-heavy-trace--research.json +151 -0
- package/datasets/public-seed/reports/validator-operator-config--default.json +154 -0
- package/datasets/public-seed/reports/validator-operator-config-builder-gap--default.json +91 -0
- package/datasets/public-seed/reports/validator-operator-config-complete--default.json +27 -0
- package/dist/cli.js +17 -1
- package/dist/cli.js.map +1 -1
- package/dist/fixtures/provenance.d.ts +139 -0
- package/dist/fixtures/provenance.js +79 -0
- package/dist/fixtures/provenance.js.map +1 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/reports/compareReports.d.ts +2 -0
- package/dist/reports/compareReports.js +201 -0
- package/dist/reports/compareReports.js.map +1 -0
- package/dist/reports/jsonReporter.d.ts +2 -1
- package/dist/reports/jsonReporter.js +4 -1
- package/dist/reports/jsonReporter.js.map +1 -1
- package/dist/reports/markdownReporter.d.ts +2 -1
- package/dist/reports/markdownReporter.js +74 -0
- package/dist/reports/markdownReporter.js.map +1 -1
- package/dist/reports/reportTypes.d.ts +517 -1
- package/dist/reports/reportTypes.js +86 -1
- package/dist/reports/reportTypes.js.map +1 -1
- package/dist/scanners/validatorScanner.d.ts +1 -1
- package/dist/scanners/validatorScanner.js +4 -2
- package/dist/scanners/validatorScanner.js.map +1 -1
- package/docs/fixtures.md +34 -0
- package/docs/release.md +26 -20
- package/examples/baseline-comparison.md +76 -0
- package/fixtures/indexers/explorer-replay-indexer.json +64 -0
- package/fixtures/provenance.json +697 -0
- package/fixtures/reports/baseline-default-report.json +68 -0
- package/fixtures/reports/candidate-research-report.json +68 -0
- package/fixtures/traces/besu-mainnet-tracoor-debug-structlogs.json +4217 -0
- package/fixtures/traces/nethermind-mainnet-tracoor-debug-structlogs.json +5419 -0
- package/fixtures/validator/operator-config-builder-gap.yaml +22 -0
- package/fixtures/validator/operator-config-complete.yaml +28 -0
- package/package.json +4 -2
package/CONTRIBUTING.md
CHANGED
|
@@ -22,7 +22,7 @@ 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
|
|
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` for the normal release path; use a short-lived token only as an emergency fallback, remove the GitHub secret immediately afterward, and revoke the npm token.
|
|
26
26
|
|
|
27
27
|
The workflow checks out the requested semver tag, verifies that `package.json` matches the tag, installs dependencies, runs tests, builds, and then runs `npm publish --provenance`.
|
|
28
28
|
|
package/README.md
CHANGED
|
@@ -33,13 +33,20 @@ pnpm glamsterdam eips
|
|
|
33
33
|
pnpm glamsterdam scan-bytecode fixtures/bytecode/storage-heavy.hex
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Install the published CLI from npm:
|
|
37
37
|
|
|
38
38
|
```sh
|
|
39
|
-
npm install -g
|
|
39
|
+
npm install -g glamsterdam-compat-lab@0.3.1
|
|
40
|
+
glamsterdam eips
|
|
40
41
|
```
|
|
41
42
|
|
|
42
|
-
|
|
43
|
+
The v0.3.1 GitHub release tarball remains available as a reproducible release artifact:
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
npm install -g https://github.com/CruzMolina/glamsterdam-compat-lab/releases/download/v0.3.1/glamsterdam-compat-lab-0.3.1.tgz
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
See [docs/release.md](docs/release.md) for maintainer release checks and npm publishing notes.
|
|
43
50
|
|
|
44
51
|
The default output format is Markdown. Use `--format json` for machine-readable reports.
|
|
45
52
|
|
|
@@ -53,10 +60,26 @@ ETH_RPC_URL=https://your-execution-rpc.example pnpm glamsterdam scan-tx --tx 0x0
|
|
|
53
60
|
pnpm glamsterdam scan-indexer fixtures/indexers/subgraph.yaml --format markdown
|
|
54
61
|
pnpm glamsterdam scan-validator --config fixtures/validator/operator-config.yaml --format markdown
|
|
55
62
|
pnpm glamsterdam report report-a.json report-b.json --format markdown
|
|
63
|
+
pnpm glamsterdam compare-reports baseline-report.json candidate-report.json --format markdown
|
|
56
64
|
```
|
|
57
65
|
|
|
58
66
|
Each scanner accepts `--registry <path>` and `--thresholds <path>` so EIP metadata and detector thresholds can be updated without editing detector code.
|
|
59
67
|
|
|
68
|
+
## Examples
|
|
69
|
+
|
|
70
|
+
- [Storage-heavy bytecode report](examples/storage-heavy-bytecode.md)
|
|
71
|
+
- [Baseline comparison reports](examples/baseline-comparison.md)
|
|
72
|
+
|
|
73
|
+
## Public dataset seed
|
|
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 plus default-vs-research threshold comparisons for bytecode and trace fixtures.
|
|
76
|
+
|
|
77
|
+
Regenerate it with:
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
pnpm dataset:generate
|
|
81
|
+
```
|
|
82
|
+
|
|
60
83
|
## What the scanners can detect
|
|
61
84
|
|
|
62
85
|
`scan-bytecode` normalizes EVM bytecode, disassembles opcodes while skipping PUSH data, counts relevant opcodes, and reports conservative risks around contract size, storage/account access, CREATE/CREATE2 usage, calldata copying, logs, and manual-review limits.
|
|
@@ -100,13 +123,15 @@ Use `--trace-out <path>` to save the fetched JSON-RPC trace response while also
|
|
|
100
123
|
|
|
101
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.
|
|
102
125
|
|
|
126
|
+
`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
|
+
|
|
103
128
|
## Report model
|
|
104
129
|
|
|
105
130
|
Each scanner returns a `CompatibilityReport`:
|
|
106
131
|
|
|
107
132
|
```json
|
|
108
133
|
{
|
|
109
|
-
"toolVersion": "0.
|
|
134
|
+
"toolVersion": "0.3.1",
|
|
110
135
|
"fork": "glamsterdam",
|
|
111
136
|
"target": {
|
|
112
137
|
"kind": "bytecode",
|
|
@@ -139,6 +164,20 @@ Confidence means:
|
|
|
139
164
|
- `medium`: strong heuristic
|
|
140
165
|
- `low`: weak heuristic or incomplete input
|
|
141
166
|
|
|
167
|
+
Comparison reports include baseline and candidate report references, risk and finding-count deltas, added/removed/changed/unchanged finding lists, and comparison assumptions and limitations. This supports workflows such as comparing default, research, and CI threshold-profile outputs:
|
|
168
|
+
|
|
169
|
+
```sh
|
|
170
|
+
pnpm glamsterdam scan-traces fixtures/traces/storage-heavy-trace.json \
|
|
171
|
+
--thresholds data/detectors/thresholds.json \
|
|
172
|
+
--format json > default-report.json
|
|
173
|
+
|
|
174
|
+
pnpm glamsterdam scan-traces fixtures/traces/storage-heavy-trace.json \
|
|
175
|
+
--thresholds data/detectors/thresholds.research.json \
|
|
176
|
+
--format json > research-report.json
|
|
177
|
+
|
|
178
|
+
pnpm glamsterdam compare-reports default-report.json research-report.json --format markdown
|
|
179
|
+
```
|
|
180
|
+
|
|
142
181
|
## Updating the EIP registry
|
|
143
182
|
|
|
144
183
|
Edit `data/eips/glamsterdam.json`.
|
|
@@ -180,7 +219,7 @@ Release publishing notes live in [docs/release.md](docs/release.md).
|
|
|
180
219
|
|
|
181
220
|
## Roadmap
|
|
182
221
|
|
|
183
|
-
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.
|
|
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.
|
|
184
223
|
|
|
185
224
|
## Disclaimer
|
|
186
225
|
|
package/ROADMAP.md
CHANGED
|
@@ -44,15 +44,21 @@ Target release: `v0.3.0`.
|
|
|
44
44
|
|
|
45
45
|
Goal: compare compatibility reports across profiles and, later, across current-client and Glamsterdam-aware traces.
|
|
46
46
|
|
|
47
|
+
- Add `compare-reports` for deterministic JSON and Markdown report comparisons
|
|
47
48
|
- Compare one trace against multiple threshold profiles
|
|
48
|
-
- Emit report deltas for findings added, removed, or changed in severity
|
|
49
|
-
- Keep comparisons deterministic and JSON-friendly
|
|
49
|
+
- Emit report deltas for findings added, removed, or changed in severity or confidence
|
|
50
|
+
- Keep comparisons deterministic and JSON-friendly with golden fixtures and snapshots
|
|
50
51
|
- Defer fork-specific gas deltas until they are present in explicit data files or client configs
|
|
51
52
|
|
|
52
53
|
## Phase 2: Public Dataset
|
|
53
54
|
|
|
55
|
+
Status: seeded after `v0.3.0`; expanded with public-safe trace, indexer, and validator fixture coverage in `v0.3.1`.
|
|
56
|
+
|
|
54
57
|
Goal: publish reproducible compatibility research.
|
|
55
58
|
|
|
59
|
+
- Track fixture provenance, source type, redaction posture, expected scanner signals, and known metadata gaps
|
|
60
|
+
- Generate a deterministic public seed dataset from safe-to-publish fixtures
|
|
61
|
+
- Compare default and research threshold profiles for bytecode and trace fixtures
|
|
56
62
|
- Scan popular contracts and protocol surfaces
|
|
57
63
|
- Publish deterministic report artifacts
|
|
58
64
|
- Generate aggregate risk statistics
|
|
@@ -13,6 +13,11 @@
|
|
|
13
13
|
"version": "0.0.0-example",
|
|
14
14
|
"status": "unknown",
|
|
15
15
|
"notes": "Placeholder only. Replace with a sourced compatibility statement before relying on this matrix."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"version": "1.0.0-compatible",
|
|
19
|
+
"status": "compatible",
|
|
20
|
+
"notes": "Synthetic compatible status used by safe fixture variants; do not treat as a real client release."
|
|
16
21
|
}
|
|
17
22
|
]
|
|
18
23
|
},
|
|
@@ -24,6 +29,11 @@
|
|
|
24
29
|
"version": "0.0.0-example",
|
|
25
30
|
"status": "unknown",
|
|
26
31
|
"notes": "Placeholder only. Replace with a sourced compatibility statement before relying on this matrix."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"version": "1.0.0-compatible",
|
|
35
|
+
"status": "compatible",
|
|
36
|
+
"notes": "Synthetic compatible status used by safe fixture variants; do not treat as a real client release."
|
|
27
37
|
}
|
|
28
38
|
]
|
|
29
39
|
},
|
|
@@ -35,6 +45,11 @@
|
|
|
35
45
|
"version": "0.0.0-example",
|
|
36
46
|
"status": "unknown",
|
|
37
47
|
"notes": "Placeholder only. Replace with a sourced compatibility statement before relying on this matrix."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"version": "1.0.0-compatible",
|
|
51
|
+
"status": "compatible",
|
|
52
|
+
"notes": "Synthetic compatible status used by safe fixture variants; do not treat as a real client release."
|
|
38
53
|
}
|
|
39
54
|
]
|
|
40
55
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Public Seed Dataset
|
|
2
|
+
|
|
3
|
+
This directory contains the first deterministic dataset seed for Glamsterdam Compatibility Lab. It is generated from safe-to-publish fixtures documented in `fixtures/provenance.json`.
|
|
4
|
+
|
|
5
|
+
The seed is intentionally small. It is meant to prove the dataset workflow, not to measure aggregate public-chain readiness.
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
- `manifest.json`: index of generated reports, comparisons, source fixtures, threshold profiles, and limitations.
|
|
10
|
+
- `reports/`: JSON compatibility reports generated from source fixtures.
|
|
11
|
+
- `comparisons/`: JSON comparison reports for default-vs-research threshold profiles on bytecode and trace fixtures.
|
|
12
|
+
|
|
13
|
+
## Regenerate
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
pnpm dataset:generate
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Then run:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
pnpm test
|
|
23
|
+
pnpm build
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Review generated changes before publishing. Dataset comparisons are structural report differences only; they do not infer final Glamsterdam gas deltas or client behavior.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.1",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"comparison": {
|
|
5
|
+
"baseline": {
|
|
6
|
+
"toolVersion": "0.3.1",
|
|
7
|
+
"fork": "glamsterdam",
|
|
8
|
+
"target": {
|
|
9
|
+
"kind": "bytecode",
|
|
10
|
+
"name": "fixtures/bytecode/storage-heavy.hex"
|
|
11
|
+
},
|
|
12
|
+
"summary": {
|
|
13
|
+
"risk": "medium",
|
|
14
|
+
"findingCount": 6,
|
|
15
|
+
"highCount": 0,
|
|
16
|
+
"mediumCount": 3,
|
|
17
|
+
"lowCount": 2,
|
|
18
|
+
"unknownCount": 1
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"candidate": {
|
|
22
|
+
"toolVersion": "0.3.1",
|
|
23
|
+
"fork": "glamsterdam",
|
|
24
|
+
"target": {
|
|
25
|
+
"kind": "bytecode",
|
|
26
|
+
"name": "fixtures/bytecode/storage-heavy.hex"
|
|
27
|
+
},
|
|
28
|
+
"summary": {
|
|
29
|
+
"risk": "medium",
|
|
30
|
+
"findingCount": 6,
|
|
31
|
+
"highCount": 0,
|
|
32
|
+
"mediumCount": 3,
|
|
33
|
+
"lowCount": 2,
|
|
34
|
+
"unknownCount": 1
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"summary": {
|
|
39
|
+
"riskChange": {
|
|
40
|
+
"from": "medium",
|
|
41
|
+
"to": "medium",
|
|
42
|
+
"direction": "unchanged"
|
|
43
|
+
},
|
|
44
|
+
"findingCount": {
|
|
45
|
+
"baseline": 6,
|
|
46
|
+
"candidate": 6,
|
|
47
|
+
"delta": 0
|
|
48
|
+
},
|
|
49
|
+
"addedCount": 0,
|
|
50
|
+
"removedCount": 0,
|
|
51
|
+
"changedCount": 0,
|
|
52
|
+
"unchangedCount": 6,
|
|
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.calldata-copy-exposure",
|
|
67
|
+
"id": "bytecode.calldata-copy-exposure",
|
|
68
|
+
"title": "Calldata copy opcode is present",
|
|
69
|
+
"severity": "low",
|
|
70
|
+
"confidence": "medium",
|
|
71
|
+
"domain": [
|
|
72
|
+
"contracts",
|
|
73
|
+
"execution"
|
|
74
|
+
],
|
|
75
|
+
"relatedEips": [
|
|
76
|
+
"GAS-REPRICING",
|
|
77
|
+
"EIP-7976",
|
|
78
|
+
"EIP-7904",
|
|
79
|
+
"EIP-8038"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"key": "bytecode.contract-creation-opcodes",
|
|
84
|
+
"id": "bytecode.contract-creation-opcodes",
|
|
85
|
+
"title": "Contract creation opcodes are present",
|
|
86
|
+
"severity": "medium",
|
|
87
|
+
"confidence": "high",
|
|
88
|
+
"domain": [
|
|
89
|
+
"contracts",
|
|
90
|
+
"execution"
|
|
91
|
+
],
|
|
92
|
+
"relatedEips": [
|
|
93
|
+
"GAS-REPRICING",
|
|
94
|
+
"EIP-8037"
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"key": "bytecode.log-opcodes-present",
|
|
99
|
+
"id": "bytecode.log-opcodes-present",
|
|
100
|
+
"title": "Log opcodes are present",
|
|
101
|
+
"severity": "low",
|
|
102
|
+
"confidence": "medium",
|
|
103
|
+
"domain": [
|
|
104
|
+
"contracts",
|
|
105
|
+
"indexer",
|
|
106
|
+
"monitoring"
|
|
107
|
+
],
|
|
108
|
+
"relatedEips": [
|
|
109
|
+
"EIP-7708"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"key": "bytecode.manual-review-required",
|
|
114
|
+
"id": "bytecode.manual-review-required",
|
|
115
|
+
"title": "Manual review is still required for runtime behavior",
|
|
116
|
+
"severity": "unknown",
|
|
117
|
+
"confidence": "low",
|
|
118
|
+
"domain": [
|
|
119
|
+
"contracts",
|
|
120
|
+
"execution"
|
|
121
|
+
],
|
|
122
|
+
"relatedEips": [
|
|
123
|
+
"GAS-REPRICING"
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"key": "bytecode.state-account-opcode-exposure",
|
|
128
|
+
"id": "bytecode.state-account-opcode-exposure",
|
|
129
|
+
"title": "State and account access opcodes are prominent in bytecode",
|
|
130
|
+
"severity": "medium",
|
|
131
|
+
"confidence": "medium",
|
|
132
|
+
"domain": [
|
|
133
|
+
"contracts",
|
|
134
|
+
"execution"
|
|
135
|
+
],
|
|
136
|
+
"relatedEips": [
|
|
137
|
+
"GAS-REPRICING",
|
|
138
|
+
"EIP-7904",
|
|
139
|
+
"EIP-8038",
|
|
140
|
+
"EIP-7976"
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"key": "bytecode.storage-heavy-pattern",
|
|
145
|
+
"id": "bytecode.storage-heavy-pattern",
|
|
146
|
+
"title": "Storage-related opcodes appear frequently",
|
|
147
|
+
"severity": "medium",
|
|
148
|
+
"confidence": "medium",
|
|
149
|
+
"domain": [
|
|
150
|
+
"contracts",
|
|
151
|
+
"execution"
|
|
152
|
+
],
|
|
153
|
+
"relatedEips": [
|
|
154
|
+
"GAS-REPRICING",
|
|
155
|
+
"EIP-8038"
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
"assumptions": [
|
|
161
|
+
"Reports were compared by finding id. Repeated finding ids are disambiguated with deterministic occurrence suffixes.",
|
|
162
|
+
"Severity and confidence changes are structural report changes, not protocol gas estimates."
|
|
163
|
+
],
|
|
164
|
+
"limitations": [
|
|
165
|
+
"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.",
|
|
166
|
+
"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."
|
|
167
|
+
]
|
|
168
|
+
}
|
package/datasets/public-seed/comparisons/traces-besu-debug-structlogs--default-vs-research.json
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.1",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"comparison": {
|
|
5
|
+
"baseline": {
|
|
6
|
+
"toolVersion": "0.3.1",
|
|
7
|
+
"fork": "glamsterdam",
|
|
8
|
+
"target": {
|
|
9
|
+
"kind": "trace",
|
|
10
|
+
"name": "fixtures/traces/besu-debug-structlogs.json"
|
|
11
|
+
},
|
|
12
|
+
"summary": {
|
|
13
|
+
"risk": "low",
|
|
14
|
+
"findingCount": 1,
|
|
15
|
+
"highCount": 0,
|
|
16
|
+
"mediumCount": 0,
|
|
17
|
+
"lowCount": 1,
|
|
18
|
+
"unknownCount": 0
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"candidate": {
|
|
22
|
+
"toolVersion": "0.3.1",
|
|
23
|
+
"fork": "glamsterdam",
|
|
24
|
+
"target": {
|
|
25
|
+
"kind": "trace",
|
|
26
|
+
"name": "fixtures/traces/besu-debug-structlogs.json"
|
|
27
|
+
},
|
|
28
|
+
"summary": {
|
|
29
|
+
"risk": "low",
|
|
30
|
+
"findingCount": 1,
|
|
31
|
+
"highCount": 0,
|
|
32
|
+
"mediumCount": 0,
|
|
33
|
+
"lowCount": 1,
|
|
34
|
+
"unknownCount": 0
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"summary": {
|
|
39
|
+
"riskChange": {
|
|
40
|
+
"from": "low",
|
|
41
|
+
"to": "low",
|
|
42
|
+
"direction": "unchanged"
|
|
43
|
+
},
|
|
44
|
+
"findingCount": {
|
|
45
|
+
"baseline": 1,
|
|
46
|
+
"candidate": 1,
|
|
47
|
+
"delta": 0
|
|
48
|
+
},
|
|
49
|
+
"addedCount": 0,
|
|
50
|
+
"removedCount": 0,
|
|
51
|
+
"changedCount": 0,
|
|
52
|
+
"unchangedCount": 1,
|
|
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": "trace.logs-calls-visible",
|
|
67
|
+
"id": "trace.logs-calls-visible",
|
|
68
|
+
"title": "Trace includes logs or external calls",
|
|
69
|
+
"severity": "low",
|
|
70
|
+
"confidence": "high",
|
|
71
|
+
"domain": [
|
|
72
|
+
"contracts",
|
|
73
|
+
"indexer",
|
|
74
|
+
"monitoring"
|
|
75
|
+
],
|
|
76
|
+
"relatedEips": [
|
|
77
|
+
"EIP-7708",
|
|
78
|
+
"EIP-7928"
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"assumptions": [
|
|
84
|
+
"Reports were compared by finding id. Repeated finding ids are disambiguated with deterministic occurrence suffixes.",
|
|
85
|
+
"Severity and confidence changes are structural report changes, not protocol gas estimates."
|
|
86
|
+
],
|
|
87
|
+
"limitations": [
|
|
88
|
+
"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.",
|
|
89
|
+
"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."
|
|
90
|
+
]
|
|
91
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.1",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"comparison": {
|
|
5
|
+
"baseline": {
|
|
6
|
+
"toolVersion": "0.3.1",
|
|
7
|
+
"fork": "glamsterdam",
|
|
8
|
+
"target": {
|
|
9
|
+
"kind": "trace",
|
|
10
|
+
"name": "fixtures/traces/besu-mainnet-tracoor-debug-structlogs.json"
|
|
11
|
+
},
|
|
12
|
+
"summary": {
|
|
13
|
+
"risk": "medium",
|
|
14
|
+
"findingCount": 4,
|
|
15
|
+
"highCount": 0,
|
|
16
|
+
"mediumCount": 1,
|
|
17
|
+
"lowCount": 2,
|
|
18
|
+
"unknownCount": 1
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"candidate": {
|
|
22
|
+
"toolVersion": "0.3.1",
|
|
23
|
+
"fork": "glamsterdam",
|
|
24
|
+
"target": {
|
|
25
|
+
"kind": "trace",
|
|
26
|
+
"name": "fixtures/traces/besu-mainnet-tracoor-debug-structlogs.json"
|
|
27
|
+
},
|
|
28
|
+
"summary": {
|
|
29
|
+
"risk": "medium",
|
|
30
|
+
"findingCount": 4,
|
|
31
|
+
"highCount": 0,
|
|
32
|
+
"mediumCount": 1,
|
|
33
|
+
"lowCount": 2,
|
|
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": "trace.calldata-heavy-execution",
|
|
67
|
+
"id": "trace.calldata-heavy-execution",
|
|
68
|
+
"title": "Trace includes visible calldata-heavy execution",
|
|
69
|
+
"severity": "low",
|
|
70
|
+
"confidence": "medium",
|
|
71
|
+
"domain": [
|
|
72
|
+
"contracts",
|
|
73
|
+
"execution"
|
|
74
|
+
],
|
|
75
|
+
"relatedEips": [
|
|
76
|
+
"GAS-REPRICING",
|
|
77
|
+
"EIP-7976",
|
|
78
|
+
"EIP-7904",
|
|
79
|
+
"EIP-8038"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"key": "trace.logs-calls-visible",
|
|
84
|
+
"id": "trace.logs-calls-visible",
|
|
85
|
+
"title": "Trace includes logs or external calls",
|
|
86
|
+
"severity": "low",
|
|
87
|
+
"confidence": "high",
|
|
88
|
+
"domain": [
|
|
89
|
+
"contracts",
|
|
90
|
+
"indexer",
|
|
91
|
+
"monitoring"
|
|
92
|
+
],
|
|
93
|
+
"relatedEips": [
|
|
94
|
+
"EIP-7708",
|
|
95
|
+
"EIP-7928"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"key": "trace.partial-evidence",
|
|
100
|
+
"id": "trace.partial-evidence",
|
|
101
|
+
"title": "Trace omits some useful compatibility evidence",
|
|
102
|
+
"severity": "unknown",
|
|
103
|
+
"confidence": "low",
|
|
104
|
+
"domain": [
|
|
105
|
+
"contracts",
|
|
106
|
+
"execution"
|
|
107
|
+
],
|
|
108
|
+
"relatedEips": [
|
|
109
|
+
"GAS-REPRICING",
|
|
110
|
+
"EIP-7976"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"key": "trace.state-heavy-execution-medium",
|
|
115
|
+
"id": "trace.state-heavy-execution-medium",
|
|
116
|
+
"title": "Trace shows state-heavy execution",
|
|
117
|
+
"severity": "medium",
|
|
118
|
+
"confidence": "high",
|
|
119
|
+
"domain": [
|
|
120
|
+
"contracts",
|
|
121
|
+
"execution"
|
|
122
|
+
],
|
|
123
|
+
"relatedEips": [
|
|
124
|
+
"GAS-REPRICING",
|
|
125
|
+
"EIP-7904",
|
|
126
|
+
"EIP-8038",
|
|
127
|
+
"EIP-7976"
|
|
128
|
+
]
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
"assumptions": [
|
|
133
|
+
"Reports were compared by finding id. Repeated finding ids are disambiguated with deterministic occurrence suffixes.",
|
|
134
|
+
"Severity and confidence changes are structural report changes, not protocol gas estimates."
|
|
135
|
+
],
|
|
136
|
+
"limitations": [
|
|
137
|
+
"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.",
|
|
138
|
+
"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."
|
|
139
|
+
]
|
|
140
|
+
}
|