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
@@ -0,0 +1,172 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "target": {
5
+ "kind": "bytecode",
6
+ "name": "fixtures/bytecode/storage-heavy.hex"
7
+ },
8
+ "summary": {
9
+ "risk": "medium",
10
+ "findingCount": 6,
11
+ "highCount": 0,
12
+ "mediumCount": 3,
13
+ "lowCount": 2,
14
+ "unknownCount": 1
15
+ },
16
+ "findings": [
17
+ {
18
+ "id": "bytecode.state-account-opcode-exposure",
19
+ "title": "State and account access opcodes are prominent in bytecode",
20
+ "severity": "medium",
21
+ "confidence": "medium",
22
+ "domain": [
23
+ "contracts",
24
+ "execution"
25
+ ],
26
+ "relatedEips": [
27
+ "GAS-REPRICING",
28
+ "EIP-7904",
29
+ "EIP-8038",
30
+ "EIP-7976"
31
+ ],
32
+ "description": "This bytecode contains multiple storage, account, or hashing opcodes. Glamsterdam gas repricing candidates may change the cost profile of state-heavy execution, but static bytecode does not prove those paths are hot.",
33
+ "evidence": [
34
+ {
35
+ "sensitiveOpcodeCount": 13,
36
+ "opcodeCounts": {
37
+ "SLOAD": 5,
38
+ "SSTORE": 5,
39
+ "BALANCE": 1,
40
+ "EXTCODESIZE": 1,
41
+ "EXTCODEHASH": 1
42
+ }
43
+ }
44
+ ],
45
+ "recommendation": "Replay representative transactions and benchmark hot paths once a Glamsterdam client/devnet or local fork configuration is available."
46
+ },
47
+ {
48
+ "id": "bytecode.calldata-copy-exposure",
49
+ "title": "Calldata copy opcode is present",
50
+ "severity": "low",
51
+ "confidence": "medium",
52
+ "domain": [
53
+ "contracts",
54
+ "execution"
55
+ ],
56
+ "relatedEips": [
57
+ "GAS-REPRICING",
58
+ "EIP-7976",
59
+ "EIP-7904",
60
+ "EIP-8038"
61
+ ],
62
+ "description": "CALLDATACOPY appears in the bytecode. Calldata-related repricing candidates should be tested if this contract processes large calldata in production.",
63
+ "evidence": [
64
+ {
65
+ "CALLDATACOPY": 1
66
+ }
67
+ ],
68
+ "recommendation": "Add large-calldata cases to benchmarks and trace replay when final Glamsterdam parameters are known."
69
+ },
70
+ {
71
+ "id": "bytecode.contract-creation-opcodes",
72
+ "title": "Contract creation opcodes are present",
73
+ "severity": "medium",
74
+ "confidence": "high",
75
+ "domain": [
76
+ "contracts",
77
+ "execution"
78
+ ],
79
+ "relatedEips": [
80
+ "GAS-REPRICING",
81
+ "EIP-8037"
82
+ ],
83
+ "description": "CREATE or CREATE2 appears in the bytecode. State-creation repricing candidates may affect factory, clone, deployment, or account-creation-heavy paths depending on final Glamsterdam scope.",
84
+ "evidence": [
85
+ {
86
+ "CREATE": 1,
87
+ "CREATE2": 1
88
+ }
89
+ ],
90
+ "recommendation": "Identify representative deployment/factory transactions and add them to fork-readiness replay tests."
91
+ },
92
+ {
93
+ "id": "bytecode.storage-heavy-pattern",
94
+ "title": "Storage-related opcodes appear frequently",
95
+ "severity": "medium",
96
+ "confidence": "medium",
97
+ "domain": [
98
+ "contracts",
99
+ "execution"
100
+ ],
101
+ "relatedEips": [
102
+ "GAS-REPRICING",
103
+ "EIP-8038"
104
+ ],
105
+ "description": "This bytecode contains many storage-related opcodes. Glamsterdam gas repricing candidates may change the cost profile of storage-heavy execution.",
106
+ "evidence": [
107
+ {
108
+ "SLOAD": 5,
109
+ "SSTORE": 5,
110
+ "storageOps": 10
111
+ }
112
+ ],
113
+ "recommendation": "Replay representative storage-heavy transactions against a Glamsterdam devnet or fork configuration when available."
114
+ },
115
+ {
116
+ "id": "bytecode.log-opcodes-present",
117
+ "title": "Log opcodes are present",
118
+ "severity": "low",
119
+ "confidence": "medium",
120
+ "domain": [
121
+ "contracts",
122
+ "indexer",
123
+ "monitoring"
124
+ ],
125
+ "relatedEips": [
126
+ "EIP-7708"
127
+ ],
128
+ "description": "The bytecode can emit logs. Indexers and monitoring systems should include representative log-emitting transactions when testing Glamsterdam-era assumptions.",
129
+ "evidence": [
130
+ {
131
+ "LOG0": 0,
132
+ "LOG1": 1,
133
+ "LOG2": 0,
134
+ "LOG3": 0,
135
+ "LOG4": 0
136
+ }
137
+ ],
138
+ "recommendation": "Include log-emitting paths in trace replay and indexer regression tests, especially where native ETH transfer visibility matters."
139
+ },
140
+ {
141
+ "id": "bytecode.manual-review-required",
142
+ "title": "Manual review is still required for runtime behavior",
143
+ "severity": "unknown",
144
+ "confidence": "low",
145
+ "domain": [
146
+ "contracts",
147
+ "execution"
148
+ ],
149
+ "relatedEips": [
150
+ "GAS-REPRICING"
151
+ ],
152
+ "description": "The scanner found static opcode evidence, but exact fork impact depends on executed paths, calldata, storage warmness, account state, compiler output, and final Glamsterdam parameters.",
153
+ "evidence": [
154
+ {
155
+ "byteLength": 56,
156
+ "opcodeKinds": 11
157
+ }
158
+ ],
159
+ "recommendation": "Use this report to choose transactions for trace replay and benchmark them under current and Glamsterdam configurations."
160
+ }
161
+ ],
162
+ "assumptions": [
163
+ "Input was interpreted as EVM bytecode after removing whitespace and an optional 0x prefix.",
164
+ "The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
165
+ "Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
166
+ ],
167
+ "limitations": [
168
+ "Static bytecode scanning cannot determine which branches are executed in production.",
169
+ "Opcode counts are not gas estimates and do not include dynamic call targets, storage keys, calldata sizes, or transaction context.",
170
+ "Findings are compatibility prompts, not predictions that a contract will fail."
171
+ ]
172
+ }
@@ -0,0 +1,172 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "target": {
5
+ "kind": "bytecode",
6
+ "name": "fixtures/bytecode/uniswap-v2-factory-mainnet-runtime.hex"
7
+ },
8
+ "summary": {
9
+ "risk": "medium",
10
+ "findingCount": 6,
11
+ "highCount": 0,
12
+ "mediumCount": 3,
13
+ "lowCount": 2,
14
+ "unknownCount": 1
15
+ },
16
+ "findings": [
17
+ {
18
+ "id": "bytecode.state-account-opcode-exposure",
19
+ "title": "State and account access opcodes are prominent in bytecode",
20
+ "severity": "medium",
21
+ "confidence": "medium",
22
+ "domain": [
23
+ "contracts",
24
+ "execution"
25
+ ],
26
+ "relatedEips": [
27
+ "GAS-REPRICING",
28
+ "EIP-7904",
29
+ "EIP-8038",
30
+ "EIP-7976"
31
+ ],
32
+ "description": "This bytecode contains multiple storage, account, or hashing opcodes. Glamsterdam gas repricing candidates may change the cost profile of state-heavy execution, but static bytecode does not prove those paths are hot.",
33
+ "evidence": [
34
+ {
35
+ "sensitiveOpcodeCount": 191,
36
+ "opcodeCounts": {
37
+ "SLOAD": 86,
38
+ "SSTORE": 50,
39
+ "BALANCE": 1,
40
+ "EXTCODESIZE": 15,
41
+ "SHA3": 39
42
+ }
43
+ }
44
+ ],
45
+ "recommendation": "Replay representative transactions and benchmark hot paths once a Glamsterdam client/devnet or local fork configuration is available."
46
+ },
47
+ {
48
+ "id": "bytecode.calldata-copy-exposure",
49
+ "title": "Calldata copy opcode is present",
50
+ "severity": "low",
51
+ "confidence": "medium",
52
+ "domain": [
53
+ "contracts",
54
+ "execution"
55
+ ],
56
+ "relatedEips": [
57
+ "GAS-REPRICING",
58
+ "EIP-7976",
59
+ "EIP-7904",
60
+ "EIP-8038"
61
+ ],
62
+ "description": "CALLDATACOPY appears in the bytecode. Calldata-related repricing candidates should be tested if this contract processes large calldata in production.",
63
+ "evidence": [
64
+ {
65
+ "CALLDATACOPY": 2
66
+ }
67
+ ],
68
+ "recommendation": "Add large-calldata cases to benchmarks and trace replay when final Glamsterdam parameters are known."
69
+ },
70
+ {
71
+ "id": "bytecode.contract-creation-opcodes",
72
+ "title": "Contract creation opcodes are present",
73
+ "severity": "medium",
74
+ "confidence": "high",
75
+ "domain": [
76
+ "contracts",
77
+ "execution"
78
+ ],
79
+ "relatedEips": [
80
+ "GAS-REPRICING",
81
+ "EIP-8037"
82
+ ],
83
+ "description": "CREATE or CREATE2 appears in the bytecode. State-creation repricing candidates may affect factory, clone, deployment, or account-creation-heavy paths depending on final Glamsterdam scope.",
84
+ "evidence": [
85
+ {
86
+ "CREATE": 0,
87
+ "CREATE2": 1
88
+ }
89
+ ],
90
+ "recommendation": "Identify representative deployment/factory transactions and add them to fork-readiness replay tests."
91
+ },
92
+ {
93
+ "id": "bytecode.storage-heavy-pattern",
94
+ "title": "Storage-related opcodes appear frequently",
95
+ "severity": "medium",
96
+ "confidence": "medium",
97
+ "domain": [
98
+ "contracts",
99
+ "execution"
100
+ ],
101
+ "relatedEips": [
102
+ "GAS-REPRICING",
103
+ "EIP-8038"
104
+ ],
105
+ "description": "This bytecode contains many storage-related opcodes. Glamsterdam gas repricing candidates may change the cost profile of storage-heavy execution.",
106
+ "evidence": [
107
+ {
108
+ "SLOAD": 86,
109
+ "SSTORE": 50,
110
+ "storageOps": 136
111
+ }
112
+ ],
113
+ "recommendation": "Replay representative storage-heavy transactions against a Glamsterdam devnet or fork configuration when available."
114
+ },
115
+ {
116
+ "id": "bytecode.log-opcodes-present",
117
+ "title": "Log opcodes are present",
118
+ "severity": "low",
119
+ "confidence": "medium",
120
+ "domain": [
121
+ "contracts",
122
+ "indexer",
123
+ "monitoring"
124
+ ],
125
+ "relatedEips": [
126
+ "EIP-7708"
127
+ ],
128
+ "description": "The bytecode can emit logs. Indexers and monitoring systems should include representative log-emitting transactions when testing Glamsterdam-era assumptions.",
129
+ "evidence": [
130
+ {
131
+ "LOG0": 0,
132
+ "LOG1": 1,
133
+ "LOG2": 3,
134
+ "LOG3": 7,
135
+ "LOG4": 0
136
+ }
137
+ ],
138
+ "recommendation": "Include log-emitting paths in trace replay and indexer regression tests, especially where native ETH transfer visibility matters."
139
+ },
140
+ {
141
+ "id": "bytecode.manual-review-required",
142
+ "title": "Manual review is still required for runtime behavior",
143
+ "severity": "unknown",
144
+ "confidence": "low",
145
+ "domain": [
146
+ "contracts",
147
+ "execution"
148
+ ],
149
+ "relatedEips": [
150
+ "GAS-REPRICING"
151
+ ],
152
+ "description": "The scanner found static opcode evidence, but exact fork impact depends on executed paths, calldata, storage warmness, account state, compiler output, and final Glamsterdam parameters.",
153
+ "evidence": [
154
+ {
155
+ "byteLength": 13859,
156
+ "opcodeKinds": 106
157
+ }
158
+ ],
159
+ "recommendation": "Use this report to choose transactions for trace replay and benchmark them under current and Glamsterdam configurations."
160
+ }
161
+ ],
162
+ "assumptions": [
163
+ "Input was interpreted as EVM bytecode after removing whitespace and an optional 0x prefix.",
164
+ "The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
165
+ "Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
166
+ ],
167
+ "limitations": [
168
+ "Static bytecode scanning cannot determine which branches are executed in production.",
169
+ "Opcode counts are not gas estimates and do not include dynamic call targets, storage keys, calldata sizes, or transaction context.",
170
+ "Findings are compatibility prompts, not predictions that a contract will fail."
171
+ ]
172
+ }
@@ -0,0 +1,172 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "target": {
5
+ "kind": "bytecode",
6
+ "name": "fixtures/bytecode/uniswap-v2-factory-mainnet-runtime.hex"
7
+ },
8
+ "summary": {
9
+ "risk": "medium",
10
+ "findingCount": 6,
11
+ "highCount": 0,
12
+ "mediumCount": 3,
13
+ "lowCount": 2,
14
+ "unknownCount": 1
15
+ },
16
+ "findings": [
17
+ {
18
+ "id": "bytecode.state-account-opcode-exposure",
19
+ "title": "State and account access opcodes are prominent in bytecode",
20
+ "severity": "medium",
21
+ "confidence": "medium",
22
+ "domain": [
23
+ "contracts",
24
+ "execution"
25
+ ],
26
+ "relatedEips": [
27
+ "GAS-REPRICING",
28
+ "EIP-7904",
29
+ "EIP-8038",
30
+ "EIP-7976"
31
+ ],
32
+ "description": "This bytecode contains multiple storage, account, or hashing opcodes. Glamsterdam gas repricing candidates may change the cost profile of state-heavy execution, but static bytecode does not prove those paths are hot.",
33
+ "evidence": [
34
+ {
35
+ "sensitiveOpcodeCount": 191,
36
+ "opcodeCounts": {
37
+ "SLOAD": 86,
38
+ "SSTORE": 50,
39
+ "BALANCE": 1,
40
+ "EXTCODESIZE": 15,
41
+ "SHA3": 39
42
+ }
43
+ }
44
+ ],
45
+ "recommendation": "Replay representative transactions and benchmark hot paths once a Glamsterdam client/devnet or local fork configuration is available."
46
+ },
47
+ {
48
+ "id": "bytecode.calldata-copy-exposure",
49
+ "title": "Calldata copy opcode is present",
50
+ "severity": "low",
51
+ "confidence": "medium",
52
+ "domain": [
53
+ "contracts",
54
+ "execution"
55
+ ],
56
+ "relatedEips": [
57
+ "GAS-REPRICING",
58
+ "EIP-7976",
59
+ "EIP-7904",
60
+ "EIP-8038"
61
+ ],
62
+ "description": "CALLDATACOPY appears in the bytecode. Calldata-related repricing candidates should be tested if this contract processes large calldata in production.",
63
+ "evidence": [
64
+ {
65
+ "CALLDATACOPY": 2
66
+ }
67
+ ],
68
+ "recommendation": "Add large-calldata cases to benchmarks and trace replay when final Glamsterdam parameters are known."
69
+ },
70
+ {
71
+ "id": "bytecode.contract-creation-opcodes",
72
+ "title": "Contract creation opcodes are present",
73
+ "severity": "medium",
74
+ "confidence": "high",
75
+ "domain": [
76
+ "contracts",
77
+ "execution"
78
+ ],
79
+ "relatedEips": [
80
+ "GAS-REPRICING",
81
+ "EIP-8037"
82
+ ],
83
+ "description": "CREATE or CREATE2 appears in the bytecode. State-creation repricing candidates may affect factory, clone, deployment, or account-creation-heavy paths depending on final Glamsterdam scope.",
84
+ "evidence": [
85
+ {
86
+ "CREATE": 0,
87
+ "CREATE2": 1
88
+ }
89
+ ],
90
+ "recommendation": "Identify representative deployment/factory transactions and add them to fork-readiness replay tests."
91
+ },
92
+ {
93
+ "id": "bytecode.storage-heavy-pattern",
94
+ "title": "Storage-related opcodes appear frequently",
95
+ "severity": "medium",
96
+ "confidence": "medium",
97
+ "domain": [
98
+ "contracts",
99
+ "execution"
100
+ ],
101
+ "relatedEips": [
102
+ "GAS-REPRICING",
103
+ "EIP-8038"
104
+ ],
105
+ "description": "This bytecode contains many storage-related opcodes. Glamsterdam gas repricing candidates may change the cost profile of storage-heavy execution.",
106
+ "evidence": [
107
+ {
108
+ "SLOAD": 86,
109
+ "SSTORE": 50,
110
+ "storageOps": 136
111
+ }
112
+ ],
113
+ "recommendation": "Replay representative storage-heavy transactions against a Glamsterdam devnet or fork configuration when available."
114
+ },
115
+ {
116
+ "id": "bytecode.log-opcodes-present",
117
+ "title": "Log opcodes are present",
118
+ "severity": "low",
119
+ "confidence": "medium",
120
+ "domain": [
121
+ "contracts",
122
+ "indexer",
123
+ "monitoring"
124
+ ],
125
+ "relatedEips": [
126
+ "EIP-7708"
127
+ ],
128
+ "description": "The bytecode can emit logs. Indexers and monitoring systems should include representative log-emitting transactions when testing Glamsterdam-era assumptions.",
129
+ "evidence": [
130
+ {
131
+ "LOG0": 0,
132
+ "LOG1": 1,
133
+ "LOG2": 3,
134
+ "LOG3": 7,
135
+ "LOG4": 0
136
+ }
137
+ ],
138
+ "recommendation": "Include log-emitting paths in trace replay and indexer regression tests, especially where native ETH transfer visibility matters."
139
+ },
140
+ {
141
+ "id": "bytecode.manual-review-required",
142
+ "title": "Manual review is still required for runtime behavior",
143
+ "severity": "unknown",
144
+ "confidence": "low",
145
+ "domain": [
146
+ "contracts",
147
+ "execution"
148
+ ],
149
+ "relatedEips": [
150
+ "GAS-REPRICING"
151
+ ],
152
+ "description": "The scanner found static opcode evidence, but exact fork impact depends on executed paths, calldata, storage warmness, account state, compiler output, and final Glamsterdam parameters.",
153
+ "evidence": [
154
+ {
155
+ "byteLength": 13859,
156
+ "opcodeKinds": 106
157
+ }
158
+ ],
159
+ "recommendation": "Use this report to choose transactions for trace replay and benchmark them under current and Glamsterdam configurations."
160
+ }
161
+ ],
162
+ "assumptions": [
163
+ "Input was interpreted as EVM bytecode after removing whitespace and an optional 0x prefix.",
164
+ "The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
165
+ "Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
166
+ ],
167
+ "limitations": [
168
+ "Static bytecode scanning cannot determine which branches are executed in production.",
169
+ "Opcode counts are not gas estimates and do not include dynamic call targets, storage keys, calldata sizes, or transaction context.",
170
+ "Findings are compatibility prompts, not predictions that a contract will fail."
171
+ ]
172
+ }
@@ -0,0 +1,127 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "target": {
5
+ "kind": "bytecode",
6
+ "name": "fixtures/bytecode/usdc-proxy-mainnet-runtime.hex"
7
+ },
8
+ "summary": {
9
+ "risk": "medium",
10
+ "findingCount": 4,
11
+ "highCount": 0,
12
+ "mediumCount": 1,
13
+ "lowCount": 2,
14
+ "unknownCount": 1
15
+ },
16
+ "findings": [
17
+ {
18
+ "id": "bytecode.state-account-opcode-exposure",
19
+ "title": "State and account access opcodes are prominent in bytecode",
20
+ "severity": "medium",
21
+ "confidence": "medium",
22
+ "domain": [
23
+ "contracts",
24
+ "execution"
25
+ ],
26
+ "relatedEips": [
27
+ "GAS-REPRICING",
28
+ "EIP-7904",
29
+ "EIP-8038",
30
+ "EIP-7976"
31
+ ],
32
+ "description": "This bytecode contains multiple storage, account, or hashing opcodes. Glamsterdam gas repricing candidates may change the cost profile of state-heavy execution, but static bytecode does not prove those paths are hot.",
33
+ "evidence": [
34
+ {
35
+ "sensitiveOpcodeCount": 9,
36
+ "opcodeCounts": {
37
+ "SLOAD": 2,
38
+ "SSTORE": 3,
39
+ "EXTCODESIZE": 1,
40
+ "SELFBALANCE": 1,
41
+ "SHA3": 2
42
+ }
43
+ }
44
+ ],
45
+ "recommendation": "Replay representative transactions and benchmark hot paths once a Glamsterdam client/devnet or local fork configuration is available."
46
+ },
47
+ {
48
+ "id": "bytecode.calldata-copy-exposure",
49
+ "title": "Calldata copy opcode is present",
50
+ "severity": "low",
51
+ "confidence": "medium",
52
+ "domain": [
53
+ "contracts",
54
+ "execution"
55
+ ],
56
+ "relatedEips": [
57
+ "GAS-REPRICING",
58
+ "EIP-7976",
59
+ "EIP-7904",
60
+ "EIP-8038"
61
+ ],
62
+ "description": "CALLDATACOPY appears in the bytecode. Calldata-related repricing candidates should be tested if this contract processes large calldata in production.",
63
+ "evidence": [
64
+ {
65
+ "CALLDATACOPY": 2
66
+ }
67
+ ],
68
+ "recommendation": "Add large-calldata cases to benchmarks and trace replay when final Glamsterdam parameters are known."
69
+ },
70
+ {
71
+ "id": "bytecode.log-opcodes-present",
72
+ "title": "Log opcodes are present",
73
+ "severity": "low",
74
+ "confidence": "medium",
75
+ "domain": [
76
+ "contracts",
77
+ "indexer",
78
+ "monitoring"
79
+ ],
80
+ "relatedEips": [
81
+ "EIP-7708"
82
+ ],
83
+ "description": "The bytecode can emit logs. Indexers and monitoring systems should include representative log-emitting transactions when testing Glamsterdam-era assumptions.",
84
+ "evidence": [
85
+ {
86
+ "LOG0": 0,
87
+ "LOG1": 3,
88
+ "LOG2": 0,
89
+ "LOG3": 0,
90
+ "LOG4": 1
91
+ }
92
+ ],
93
+ "recommendation": "Include log-emitting paths in trace replay and indexer regression tests, especially where native ETH transfer visibility matters."
94
+ },
95
+ {
96
+ "id": "bytecode.manual-review-required",
97
+ "title": "Manual review is still required for runtime behavior",
98
+ "severity": "unknown",
99
+ "confidence": "low",
100
+ "domain": [
101
+ "contracts",
102
+ "execution"
103
+ ],
104
+ "relatedEips": [
105
+ "GAS-REPRICING"
106
+ ],
107
+ "description": "The scanner found static opcode evidence, but exact fork impact depends on executed paths, calldata, storage warmness, account state, compiler output, and final Glamsterdam parameters.",
108
+ "evidence": [
109
+ {
110
+ "byteLength": 2186,
111
+ "opcodeKinds": 80
112
+ }
113
+ ],
114
+ "recommendation": "Use this report to choose transactions for trace replay and benchmark them under current and Glamsterdam configurations."
115
+ }
116
+ ],
117
+ "assumptions": [
118
+ "Input was interpreted as EVM bytecode after removing whitespace and an optional 0x prefix.",
119
+ "The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
120
+ "Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
121
+ ],
122
+ "limitations": [
123
+ "Static bytecode scanning cannot determine which branches are executed in production.",
124
+ "Opcode counts are not gas estimates and do not include dynamic call targets, storage keys, calldata sizes, or transaction context.",
125
+ "Findings are compatibility prompts, not predictions that a contract will fail."
126
+ ]
127
+ }