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,150 @@
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": 5,
11
+ "highCount": 0,
12
+ "mediumCount": 2,
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.storage-heavy-pattern",
72
+ "title": "Storage-related opcodes appear frequently",
73
+ "severity": "medium",
74
+ "confidence": "medium",
75
+ "domain": [
76
+ "contracts",
77
+ "execution"
78
+ ],
79
+ "relatedEips": [
80
+ "GAS-REPRICING",
81
+ "EIP-8038"
82
+ ],
83
+ "description": "This bytecode contains many storage-related opcodes. Glamsterdam gas repricing candidates may change the cost profile of storage-heavy execution.",
84
+ "evidence": [
85
+ {
86
+ "SLOAD": 2,
87
+ "SSTORE": 3,
88
+ "storageOps": 5
89
+ }
90
+ ],
91
+ "recommendation": "Replay representative storage-heavy transactions against a Glamsterdam devnet or fork configuration when available."
92
+ },
93
+ {
94
+ "id": "bytecode.log-opcodes-present",
95
+ "title": "Log opcodes are present",
96
+ "severity": "low",
97
+ "confidence": "medium",
98
+ "domain": [
99
+ "contracts",
100
+ "indexer",
101
+ "monitoring"
102
+ ],
103
+ "relatedEips": [
104
+ "EIP-7708"
105
+ ],
106
+ "description": "The bytecode can emit logs. Indexers and monitoring systems should include representative log-emitting transactions when testing Glamsterdam-era assumptions.",
107
+ "evidence": [
108
+ {
109
+ "LOG0": 0,
110
+ "LOG1": 3,
111
+ "LOG2": 0,
112
+ "LOG3": 0,
113
+ "LOG4": 1
114
+ }
115
+ ],
116
+ "recommendation": "Include log-emitting paths in trace replay and indexer regression tests, especially where native ETH transfer visibility matters."
117
+ },
118
+ {
119
+ "id": "bytecode.manual-review-required",
120
+ "title": "Manual review is still required for runtime behavior",
121
+ "severity": "unknown",
122
+ "confidence": "low",
123
+ "domain": [
124
+ "contracts",
125
+ "execution"
126
+ ],
127
+ "relatedEips": [
128
+ "GAS-REPRICING"
129
+ ],
130
+ "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.",
131
+ "evidence": [
132
+ {
133
+ "byteLength": 2186,
134
+ "opcodeKinds": 80
135
+ }
136
+ ],
137
+ "recommendation": "Use this report to choose transactions for trace replay and benchmark them under current and Glamsterdam configurations."
138
+ }
139
+ ],
140
+ "assumptions": [
141
+ "Input was interpreted as EVM bytecode after removing whitespace and an optional 0x prefix.",
142
+ "The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
143
+ "Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
144
+ ],
145
+ "limitations": [
146
+ "Static bytecode scanning cannot determine which branches are executed in production.",
147
+ "Opcode counts are not gas estimates and do not include dynamic call targets, storage keys, calldata sizes, or transaction context.",
148
+ "Findings are compatibility prompts, not predictions that a contract will fail."
149
+ ]
150
+ }
@@ -0,0 +1,127 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "target": {
5
+ "kind": "bytecode",
6
+ "name": "fixtures/bytecode/weth9-mainnet-runtime.hex"
7
+ },
8
+ "summary": {
9
+ "risk": "medium",
10
+ "findingCount": 4,
11
+ "highCount": 0,
12
+ "mediumCount": 2,
13
+ "lowCount": 1,
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": 48,
36
+ "opcodeCounts": {
37
+ "SLOAD": 20,
38
+ "SSTORE": 6,
39
+ "BALANCE": 1,
40
+ "EXTCODECOPY": 1,
41
+ "SHA3": 20
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.storage-heavy-pattern",
49
+ "title": "Storage-related opcodes appear frequently",
50
+ "severity": "medium",
51
+ "confidence": "medium",
52
+ "domain": [
53
+ "contracts",
54
+ "execution"
55
+ ],
56
+ "relatedEips": [
57
+ "GAS-REPRICING",
58
+ "EIP-8038"
59
+ ],
60
+ "description": "This bytecode contains many storage-related opcodes. Glamsterdam gas repricing candidates may change the cost profile of storage-heavy execution.",
61
+ "evidence": [
62
+ {
63
+ "SLOAD": 20,
64
+ "SSTORE": 6,
65
+ "storageOps": 26
66
+ }
67
+ ],
68
+ "recommendation": "Replay representative storage-heavy transactions against a Glamsterdam devnet or fork configuration when available."
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": 1,
88
+ "LOG2": 2,
89
+ "LOG3": 3,
90
+ "LOG4": 0
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": 3124,
111
+ "opcodeKinds": 68
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
+ }
@@ -0,0 +1,127 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "target": {
5
+ "kind": "bytecode",
6
+ "name": "fixtures/bytecode/weth9-mainnet-runtime.hex"
7
+ },
8
+ "summary": {
9
+ "risk": "medium",
10
+ "findingCount": 4,
11
+ "highCount": 0,
12
+ "mediumCount": 2,
13
+ "lowCount": 1,
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": 48,
36
+ "opcodeCounts": {
37
+ "SLOAD": 20,
38
+ "SSTORE": 6,
39
+ "BALANCE": 1,
40
+ "EXTCODECOPY": 1,
41
+ "SHA3": 20
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.storage-heavy-pattern",
49
+ "title": "Storage-related opcodes appear frequently",
50
+ "severity": "medium",
51
+ "confidence": "medium",
52
+ "domain": [
53
+ "contracts",
54
+ "execution"
55
+ ],
56
+ "relatedEips": [
57
+ "GAS-REPRICING",
58
+ "EIP-8038"
59
+ ],
60
+ "description": "This bytecode contains many storage-related opcodes. Glamsterdam gas repricing candidates may change the cost profile of storage-heavy execution.",
61
+ "evidence": [
62
+ {
63
+ "SLOAD": 20,
64
+ "SSTORE": 6,
65
+ "storageOps": 26
66
+ }
67
+ ],
68
+ "recommendation": "Replay representative storage-heavy transactions against a Glamsterdam devnet or fork configuration when available."
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": 1,
88
+ "LOG2": 2,
89
+ "LOG3": 3,
90
+ "LOG4": 0
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": 3124,
111
+ "opcodeKinds": 68
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
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "target": {
5
+ "kind": "indexer",
6
+ "name": "fixtures/indexers/balance-diff-indexer.json"
7
+ },
8
+ "summary": {
9
+ "risk": "medium",
10
+ "findingCount": 2,
11
+ "highCount": 0,
12
+ "mediumCount": 2,
13
+ "lowCount": 0,
14
+ "unknownCount": 0
15
+ },
16
+ "findings": [
17
+ {
18
+ "id": "indexer.balance-diff-native-transfer-assumption",
19
+ "title": "Indexer mentions balance-diff based native transfer handling",
20
+ "severity": "medium",
21
+ "confidence": "medium",
22
+ "domain": [
23
+ "indexer",
24
+ "monitoring"
25
+ ],
26
+ "relatedEips": [
27
+ "EIP-7708"
28
+ ],
29
+ "description": "The configuration mentions balance-diff based transfer handling. That can be a valid design, but it should be reviewed if native ETH transfer log proposals remain active or considered.",
30
+ "evidence": [
31
+ "Balance-diff marker found in configuration text."
32
+ ],
33
+ "recommendation": "Document whether native ETH transfers come from logs, balance diffs, traces, receipts, or a combined pipeline, and add replay tests for representative transfer cases."
34
+ },
35
+ {
36
+ "id": "indexer.missing-bal-readiness-metadata",
37
+ "title": "No explicit Block-Level Access List readiness metadata found",
38
+ "severity": "medium",
39
+ "confidence": "medium",
40
+ "domain": [
41
+ "indexer",
42
+ "monitoring"
43
+ ],
44
+ "relatedEips": [
45
+ "EIP-7928"
46
+ ],
47
+ "description": "The configuration does not mention BALs or EIP-7928. Static config cannot prove whether the indexer is incompatible, but explorer and indexer teams should explicitly track BAL ingestion and monitoring assumptions.",
48
+ "evidence": [
49
+ "No BAL/EIP-7928 marker found in configuration text."
50
+ ],
51
+ "recommendation": "Add fork-readiness metadata documenting whether BAL-related block data is ignored, stored, displayed, monitored, or replay-tested."
52
+ }
53
+ ],
54
+ "assumptions": [
55
+ "JSON and YAML configs were parsed statically; subgraph-style handler fields were summarized when present.",
56
+ "The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change."
57
+ ],
58
+ "limitations": [
59
+ "Static indexer configuration cannot prove runtime indexing behavior.",
60
+ "Heuristics may miss compatibility logic implemented in code, environment variables, infrastructure manifests, or downstream pipelines.",
61
+ "Findings marked heuristic should be treated as review prompts."
62
+ ]
63
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "target": {
5
+ "kind": "indexer",
6
+ "name": "fixtures/indexers/explorer-replay-indexer.json"
7
+ },
8
+ "summary": {
9
+ "risk": "medium",
10
+ "findingCount": 1,
11
+ "highCount": 0,
12
+ "mediumCount": 1,
13
+ "lowCount": 0,
14
+ "unknownCount": 0
15
+ },
16
+ "findings": [
17
+ {
18
+ "id": "indexer.balance-diff-native-transfer-assumption",
19
+ "title": "Indexer mentions balance-diff based native transfer handling",
20
+ "severity": "medium",
21
+ "confidence": "medium",
22
+ "domain": [
23
+ "indexer",
24
+ "monitoring"
25
+ ],
26
+ "relatedEips": [
27
+ "EIP-7708"
28
+ ],
29
+ "description": "The configuration mentions balance-diff based transfer handling. That can be a valid design, but it should be reviewed if native ETH transfer log proposals remain active or considered.",
30
+ "evidence": [
31
+ "Balance-diff marker found in configuration text."
32
+ ],
33
+ "recommendation": "Document whether native ETH transfers come from logs, balance diffs, traces, receipts, or a combined pipeline, and add replay tests for representative transfer cases."
34
+ }
35
+ ],
36
+ "assumptions": [
37
+ "JSON and YAML configs were parsed statically; subgraph-style handler fields were summarized when present.",
38
+ "The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change."
39
+ ],
40
+ "limitations": [
41
+ "Static indexer configuration cannot prove runtime indexing behavior.",
42
+ "Heuristics may miss compatibility logic implemented in code, environment variables, infrastructure manifests, or downstream pipelines.",
43
+ "Findings marked heuristic should be treated as review prompts."
44
+ ]
45
+ }
@@ -0,0 +1,123 @@
1
+ {
2
+ "toolVersion": "0.3.2",
3
+ "fork": "glamsterdam",
4
+ "target": {
5
+ "kind": "indexer",
6
+ "name": "fixtures/indexers/subgraph.yaml"
7
+ },
8
+ "summary": {
9
+ "risk": "medium",
10
+ "findingCount": 5,
11
+ "highCount": 0,
12
+ "mediumCount": 4,
13
+ "lowCount": 0,
14
+ "unknownCount": 1
15
+ },
16
+ "findings": [
17
+ {
18
+ "id": "indexer.event-only-assumption",
19
+ "title": "Indexer appears to rely on event-only handlers",
20
+ "severity": "medium",
21
+ "confidence": "medium",
22
+ "domain": [
23
+ "indexer"
24
+ ],
25
+ "relatedEips": [
26
+ "EIP-7708"
27
+ ],
28
+ "description": "This looks like an event-only indexer configuration. Event-only pipelines should be reviewed for native ETH transfer visibility, balance-diff assumptions, and fork-specific log semantics if related EIPs remain active or considered.",
29
+ "evidence": [
30
+ {
31
+ "eventHandlers": 1,
32
+ "callHandlers": 0,
33
+ "blockHandlers": 0
34
+ }
35
+ ],
36
+ "recommendation": "Document how native ETH transfers are represented today, how they would be represented if transfer-log proposals are included, and how historical replay would be validated."
37
+ },
38
+ {
39
+ "id": "indexer.native-eth-transfer-review-missing",
40
+ "title": "No native ETH transfer handling metadata found",
41
+ "severity": "unknown",
42
+ "confidence": "low",
43
+ "domain": [
44
+ "indexer",
45
+ "monitoring"
46
+ ],
47
+ "relatedEips": [
48
+ "EIP-7708"
49
+ ],
50
+ "description": "The configuration does not mention native ETH transfers, balance diffs, or EIP-7708. Static config cannot determine whether the runtime indexer already handles this elsewhere.",
51
+ "evidence": [
52
+ "No native-transfer marker found in configuration text."
53
+ ],
54
+ "recommendation": "Add an explicit compatibility note or test plan for native ETH transfers, especially if dashboards or alerts currently infer transfers from balance diffs."
55
+ },
56
+ {
57
+ "id": "indexer.missing-bal-readiness-metadata",
58
+ "title": "No explicit Block-Level Access List readiness metadata found",
59
+ "severity": "medium",
60
+ "confidence": "medium",
61
+ "domain": [
62
+ "indexer",
63
+ "monitoring"
64
+ ],
65
+ "relatedEips": [
66
+ "EIP-7928"
67
+ ],
68
+ "description": "The configuration does not mention BALs or EIP-7928. Static config cannot prove whether the indexer is incompatible, but explorer and indexer teams should explicitly track BAL ingestion and monitoring assumptions.",
69
+ "evidence": [
70
+ "No BAL/EIP-7928 marker found in configuration text."
71
+ ],
72
+ "recommendation": "Add fork-readiness metadata documenting whether BAL-related block data is ignored, stored, displayed, monitored, or replay-tested."
73
+ },
74
+ {
75
+ "id": "indexer.missing-fork-compatibility-metadata",
76
+ "title": "No explicit fork or EIP compatibility metadata found",
77
+ "severity": "medium",
78
+ "confidence": "medium",
79
+ "domain": [
80
+ "indexer",
81
+ "tooling"
82
+ ],
83
+ "relatedEips": [
84
+ "EIP-7928",
85
+ "EIP-7708"
86
+ ],
87
+ "description": "The config does not include explicit Glamsterdam, fork, or EIP compatibility metadata. That may be fine for older configs, but it makes readiness tracking harder.",
88
+ "evidence": [
89
+ "No Glamsterdam/fork/EIP/compatibility marker found in configuration text."
90
+ ],
91
+ "recommendation": "Add a small compatibility section that records reviewed EIPs, replay status, testnet/devnet coverage, and owner notes."
92
+ },
93
+ {
94
+ "id": "indexer.missing-replay-plan",
95
+ "title": "No replay, testnet, or devnet plan found",
96
+ "severity": "medium",
97
+ "confidence": "medium",
98
+ "domain": [
99
+ "indexer",
100
+ "monitoring"
101
+ ],
102
+ "relatedEips": [
103
+ "EIP-7928",
104
+ "EIP-7708",
105
+ "GAS-REPRICING"
106
+ ],
107
+ "description": "The config does not mention a replay or testnet/devnet plan. Indexer compatibility is usually validated by replaying representative data rather than by static config alone.",
108
+ "evidence": [
109
+ "No replay/testnet/devnet marker found in configuration text."
110
+ ],
111
+ "recommendation": "Add a replay plan that covers historical sync, recent blocks, expected reorg behavior, native ETH transfer handling, and BAL-related block data."
112
+ }
113
+ ],
114
+ "assumptions": [
115
+ "JSON and YAML configs were parsed statically; subgraph-style handler fields were summarized when present.",
116
+ "The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change."
117
+ ],
118
+ "limitations": [
119
+ "Static indexer configuration cannot prove runtime indexing behavior.",
120
+ "Heuristics may miss compatibility logic implemented in code, environment variables, infrastructure manifests, or downstream pipelines.",
121
+ "Findings marked heuristic should be treated as review prompts."
122
+ ]
123
+ }