glamsterdam-compat-lab 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +20 -5
  2. package/ROADMAP.md +5 -0
  3. package/data/client-compat/clients.example.json +15 -0
  4. package/datasets/public-seed/README.md +30 -0
  5. package/datasets/public-seed/comparisons/bytecode-ens-registry-mainnet-runtime--default-vs-research.json +136 -0
  6. package/datasets/public-seed/comparisons/bytecode-multicall3-mainnet-runtime--default-vs-research.json +139 -0
  7. package/datasets/public-seed/comparisons/bytecode-storage-heavy--default-vs-research.json +168 -0
  8. package/datasets/public-seed/comparisons/bytecode-uniswap-v2-factory-mainnet-runtime--default-vs-research.json +168 -0
  9. package/datasets/public-seed/comparisons/bytecode-usdc-proxy-mainnet-runtime--default-vs-research.json +154 -0
  10. package/datasets/public-seed/comparisons/bytecode-weth9-mainnet-runtime--default-vs-research.json +136 -0
  11. package/datasets/public-seed/comparisons/traces-besu-debug-structlogs--default-vs-research.json +91 -0
  12. package/datasets/public-seed/comparisons/traces-besu-mainnet-tracoor-debug-structlogs--default-vs-research.json +140 -0
  13. package/datasets/public-seed/comparisons/traces-call-tracer-tree--default-vs-research.json +121 -0
  14. package/datasets/public-seed/comparisons/traces-drpc-call-tracer-real--default-vs-research.json +123 -0
  15. package/datasets/public-seed/comparisons/traces-erigon-action-trace--default-vs-research.json +121 -0
  16. package/datasets/public-seed/comparisons/traces-foundry-json-trace--default-vs-research.json +124 -0
  17. package/datasets/public-seed/comparisons/traces-geth-json-rpc-structlogs--default-vs-research.json +108 -0
  18. package/datasets/public-seed/comparisons/traces-hardhat-debug-trace--default-vs-research.json +108 -0
  19. package/datasets/public-seed/comparisons/traces-nethermind-debug-structlogs--default-vs-research.json +153 -0
  20. package/datasets/public-seed/comparisons/traces-nethermind-mainnet-tracoor-debug-structlogs--default-vs-research.json +140 -0
  21. package/datasets/public-seed/comparisons/traces-storage-heavy-trace--default-vs-research.json +155 -0
  22. package/datasets/public-seed/findings.csv +139 -0
  23. package/datasets/public-seed/manifest.json +757 -0
  24. package/datasets/public-seed/reports/bytecode-ens-registry-mainnet-runtime--default.json +126 -0
  25. package/datasets/public-seed/reports/bytecode-ens-registry-mainnet-runtime--research.json +126 -0
  26. package/datasets/public-seed/reports/bytecode-multicall3-mainnet-runtime--default.json +97 -0
  27. package/datasets/public-seed/reports/bytecode-multicall3-mainnet-runtime--research.json +124 -0
  28. package/datasets/public-seed/reports/bytecode-storage-heavy--default.json +172 -0
  29. package/datasets/public-seed/reports/bytecode-storage-heavy--research.json +172 -0
  30. package/datasets/public-seed/reports/bytecode-uniswap-v2-factory-mainnet-runtime--default.json +172 -0
  31. package/datasets/public-seed/reports/bytecode-uniswap-v2-factory-mainnet-runtime--research.json +172 -0
  32. package/datasets/public-seed/reports/bytecode-usdc-proxy-mainnet-runtime--default.json +127 -0
  33. package/datasets/public-seed/reports/bytecode-usdc-proxy-mainnet-runtime--research.json +150 -0
  34. package/datasets/public-seed/reports/bytecode-weth9-mainnet-runtime--default.json +127 -0
  35. package/datasets/public-seed/reports/bytecode-weth9-mainnet-runtime--research.json +127 -0
  36. package/datasets/public-seed/reports/indexers-balance-diff-indexer--default.json +63 -0
  37. package/datasets/public-seed/reports/indexers-explorer-replay-indexer--default.json +45 -0
  38. package/datasets/public-seed/reports/indexers-subgraph--default.json +123 -0
  39. package/datasets/public-seed/reports/traces-besu-debug-structlogs--default.json +54 -0
  40. package/datasets/public-seed/reports/traces-besu-debug-structlogs--research.json +54 -0
  41. package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--default.json +131 -0
  42. package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--research.json +131 -0
  43. package/datasets/public-seed/reports/traces-call-tracer-tree--default.json +99 -0
  44. package/datasets/public-seed/reports/traces-call-tracer-tree--research.json +99 -0
  45. package/datasets/public-seed/reports/traces-drpc-call-tracer-real--default.json +103 -0
  46. package/datasets/public-seed/reports/traces-drpc-call-tracer-real--research.json +103 -0
  47. package/datasets/public-seed/reports/traces-erigon-action-trace--default.json +99 -0
  48. package/datasets/public-seed/reports/traces-erigon-action-trace--research.json +99 -0
  49. package/datasets/public-seed/reports/traces-foundry-json-trace--default.json +76 -0
  50. package/datasets/public-seed/reports/traces-foundry-json-trace--research.json +104 -0
  51. package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--default.json +78 -0
  52. package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--research.json +78 -0
  53. package/datasets/public-seed/reports/traces-hardhat-debug-trace--default.json +78 -0
  54. package/datasets/public-seed/reports/traces-hardhat-debug-trace--research.json +78 -0
  55. package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--default.json +100 -0
  56. package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--research.json +100 -0
  57. package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--default.json +131 -0
  58. package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--research.json +131 -0
  59. package/datasets/public-seed/reports/traces-storage-heavy-trace--default.json +151 -0
  60. package/datasets/public-seed/reports/traces-storage-heavy-trace--research.json +151 -0
  61. package/datasets/public-seed/reports/validator-operator-config--default.json +154 -0
  62. package/datasets/public-seed/reports/validator-operator-config-builder-gap--default.json +91 -0
  63. package/datasets/public-seed/reports/validator-operator-config-complete--default.json +27 -0
  64. package/datasets/public-seed/reports.csv +41 -0
  65. package/datasets/public-seed/summary.csv +42 -0
  66. package/datasets/public-seed/summary.json +176 -0
  67. package/dist/fixtures/provenance.d.ts +143 -0
  68. package/dist/fixtures/provenance.js +81 -0
  69. package/dist/fixtures/provenance.js.map +1 -0
  70. package/dist/index.d.ts +2 -0
  71. package/dist/index.js +1 -0
  72. package/dist/index.js.map +1 -1
  73. package/dist/reports/reportTypes.d.ts +7 -7
  74. package/dist/reports/reportTypes.js +1 -1
  75. package/dist/scanners/validatorScanner.d.ts +1 -1
  76. package/dist/scanners/validatorScanner.js +4 -2
  77. package/dist/scanners/validatorScanner.js.map +1 -1
  78. package/docs/fixtures.md +33 -0
  79. package/docs/release.md +2 -2
  80. package/examples/baseline-comparison.md +76 -0
  81. package/fixtures/bytecode/ens-registry-mainnet-runtime.hex +1 -0
  82. package/fixtures/bytecode/multicall3-mainnet-runtime.hex +1 -0
  83. package/fixtures/bytecode/uniswap-v2-factory-mainnet-runtime.hex +1 -0
  84. package/fixtures/bytecode/usdc-proxy-mainnet-runtime.hex +1 -0
  85. package/fixtures/bytecode/weth9-mainnet-runtime.hex +1 -0
  86. package/fixtures/indexers/explorer-replay-indexer.json +64 -0
  87. package/fixtures/provenance.json +926 -0
  88. package/fixtures/traces/besu-mainnet-tracoor-debug-structlogs.json +4217 -0
  89. package/fixtures/traces/nethermind-mainnet-tracoor-debug-structlogs.json +5419 -0
  90. package/fixtures/validator/operator-config-builder-gap.yaml +22 -0
  91. package/fixtures/validator/operator-config-complete.yaml +28 -0
  92. package/package.json +4 -2
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.0
39
+ npm install -g glamsterdam-compat-lab@0.3.2
40
40
  glamsterdam eips
41
41
  ```
42
42
 
43
- The v0.3.0 GitHub release tarball remains available as a reproducible release artifact:
43
+ The v0.3.2 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.0/glamsterdam-compat-lab-0.3.0.tgz
46
+ npm install -g https://github.com/CruzMolina/glamsterdam-compat-lab/releases/download/v0.3.2/glamsterdam-compat-lab-0.3.2.tgz
47
47
  ```
48
48
 
49
49
  See [docs/release.md](docs/release.md) for maintainer release checks and npm publishing notes.
@@ -65,6 +65,21 @@ pnpm glamsterdam compare-reports baseline-report.json candidate-report.json --fo
65
65
 
66
66
  Each scanner accepts `--registry <path>` and `--thresholds <path>` so EIP metadata and detector thresholds can be updated without editing detector code.
67
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, 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
+ Regenerate it with:
78
+
79
+ ```sh
80
+ pnpm dataset:generate
81
+ ```
82
+
68
83
  ## What the scanners can detect
69
84
 
70
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.
@@ -116,7 +131,7 @@ Each scanner returns a `CompatibilityReport`:
116
131
 
117
132
  ```json
118
133
  {
119
- "toolVersion": "0.3.0",
134
+ "toolVersion": "0.3.2",
120
135
  "fork": "glamsterdam",
121
136
  "target": {
122
137
  "kind": "bytecode",
@@ -204,7 +219,7 @@ Release publishing notes live in [docs/release.md](docs/release.md).
204
219
 
205
220
  ## Roadmap
206
221
 
207
- 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.
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; `v0.3.2` adds packaged CSV dataset exports.
208
223
 
209
224
  ## Disclaimer
210
225
 
package/ROADMAP.md CHANGED
@@ -52,8 +52,13 @@ 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`; packaged CSV exports added in `v0.3.2`.
56
+
55
57
  Goal: publish reproducible compatibility research.
56
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
57
62
  - Scan popular contracts and protocol surfaces
58
63
  - Publish deterministic report artifacts
59
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,30 @@
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
+ - `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`.
14
+ - `reports/`: JSON compatibility reports generated from source fixtures.
15
+ - `comparisons/`: JSON comparison reports for default-vs-research threshold profiles on bytecode and trace fixtures.
16
+
17
+ ## Regenerate
18
+
19
+ ```sh
20
+ pnpm dataset:generate
21
+ ```
22
+
23
+ Then run:
24
+
25
+ ```sh
26
+ pnpm test
27
+ pnpm build
28
+ ```
29
+
30
+ 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,136 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "comparison": {
5
+ "baseline": {
6
+ "toolVersion": "0.3.2",
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.2",
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
+ }
@@ -0,0 +1,139 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "comparison": {
5
+ "baseline": {
6
+ "toolVersion": "0.3.2",
7
+ "fork": "glamsterdam",
8
+ "target": {
9
+ "kind": "bytecode",
10
+ "name": "fixtures/bytecode/multicall3-mainnet-runtime.hex"
11
+ },
12
+ "summary": {
13
+ "risk": "low",
14
+ "findingCount": 3,
15
+ "highCount": 0,
16
+ "mediumCount": 0,
17
+ "lowCount": 2,
18
+ "unknownCount": 1
19
+ }
20
+ },
21
+ "candidate": {
22
+ "toolVersion": "0.3.2",
23
+ "fork": "glamsterdam",
24
+ "target": {
25
+ "kind": "bytecode",
26
+ "name": "fixtures/bytecode/multicall3-mainnet-runtime.hex"
27
+ },
28
+ "summary": {
29
+ "risk": "low",
30
+ "findingCount": 4,
31
+ "highCount": 0,
32
+ "mediumCount": 0,
33
+ "lowCount": 3,
34
+ "unknownCount": 1
35
+ }
36
+ }
37
+ },
38
+ "summary": {
39
+ "riskChange": {
40
+ "from": "low",
41
+ "to": "low",
42
+ "direction": "unchanged"
43
+ },
44
+ "findingCount": {
45
+ "baseline": 3,
46
+ "candidate": 4,
47
+ "delta": 1
48
+ },
49
+ "addedCount": 1,
50
+ "removedCount": 0,
51
+ "changedCount": 0,
52
+ "unchangedCount": 3,
53
+ "severityIncreasedCount": 0,
54
+ "severityDecreasedCount": 0,
55
+ "severityChangedCount": 0,
56
+ "confidenceIncreasedCount": 0,
57
+ "confidenceDecreasedCount": 0,
58
+ "confidenceChangedCount": 0
59
+ },
60
+ "changes": {
61
+ "added": [
62
+ {
63
+ "key": "bytecode.state-account-opcode-presence",
64
+ "id": "bytecode.state-account-opcode-presence",
65
+ "title": "State and account access opcodes are present",
66
+ "severity": "low",
67
+ "confidence": "medium",
68
+ "domain": [
69
+ "contracts",
70
+ "execution"
71
+ ],
72
+ "relatedEips": [
73
+ "GAS-REPRICING",
74
+ "EIP-7904",
75
+ "EIP-8038",
76
+ "EIP-7976"
77
+ ]
78
+ }
79
+ ],
80
+ "removed": [],
81
+ "changed": [],
82
+ "unchanged": [
83
+ {
84
+ "key": "bytecode.calldata-copy-exposure",
85
+ "id": "bytecode.calldata-copy-exposure",
86
+ "title": "Calldata copy opcode is present",
87
+ "severity": "low",
88
+ "confidence": "medium",
89
+ "domain": [
90
+ "contracts",
91
+ "execution"
92
+ ],
93
+ "relatedEips": [
94
+ "GAS-REPRICING",
95
+ "EIP-7976",
96
+ "EIP-7904",
97
+ "EIP-8038"
98
+ ]
99
+ },
100
+ {
101
+ "key": "bytecode.log-opcodes-present",
102
+ "id": "bytecode.log-opcodes-present",
103
+ "title": "Log opcodes are present",
104
+ "severity": "low",
105
+ "confidence": "medium",
106
+ "domain": [
107
+ "contracts",
108
+ "indexer",
109
+ "monitoring"
110
+ ],
111
+ "relatedEips": [
112
+ "EIP-7708"
113
+ ]
114
+ },
115
+ {
116
+ "key": "bytecode.manual-review-required",
117
+ "id": "bytecode.manual-review-required",
118
+ "title": "Manual review is still required for runtime behavior",
119
+ "severity": "unknown",
120
+ "confidence": "low",
121
+ "domain": [
122
+ "contracts",
123
+ "execution"
124
+ ],
125
+ "relatedEips": [
126
+ "GAS-REPRICING"
127
+ ]
128
+ }
129
+ ]
130
+ },
131
+ "assumptions": [
132
+ "Reports were compared by finding id. Repeated finding ids are disambiguated with deterministic occurrence suffixes.",
133
+ "Severity and confidence changes are structural report changes, not protocol gas estimates."
134
+ ],
135
+ "limitations": [
136
+ "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.",
137
+ "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."
138
+ ]
139
+ }
@@ -0,0 +1,168 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "comparison": {
5
+ "baseline": {
6
+ "toolVersion": "0.3.2",
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.2",
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
+ }