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
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.1",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"target": {
|
|
5
|
+
"kind": "trace",
|
|
6
|
+
"name": "fixtures/traces/drpc-call-tracer-real.json"
|
|
7
|
+
},
|
|
8
|
+
"summary": {
|
|
9
|
+
"risk": "medium",
|
|
10
|
+
"findingCount": 3,
|
|
11
|
+
"highCount": 0,
|
|
12
|
+
"mediumCount": 1,
|
|
13
|
+
"lowCount": 1,
|
|
14
|
+
"unknownCount": 1
|
|
15
|
+
},
|
|
16
|
+
"findings": [
|
|
17
|
+
{
|
|
18
|
+
"id": "trace.calldata-heavy-execution",
|
|
19
|
+
"title": "Trace includes visible calldata-heavy execution",
|
|
20
|
+
"severity": "medium",
|
|
21
|
+
"confidence": "high",
|
|
22
|
+
"domain": [
|
|
23
|
+
"contracts",
|
|
24
|
+
"execution"
|
|
25
|
+
],
|
|
26
|
+
"relatedEips": [
|
|
27
|
+
"GAS-REPRICING",
|
|
28
|
+
"EIP-7976",
|
|
29
|
+
"EIP-7904",
|
|
30
|
+
"EIP-8038"
|
|
31
|
+
],
|
|
32
|
+
"description": "The trace includes CALLDATACOPY or explicit calldata byte counts. Calldata repricing candidates are considered registry items, so large input paths should be tested.",
|
|
33
|
+
"evidence": [
|
|
34
|
+
{
|
|
35
|
+
"CALLDATACOPY": 0,
|
|
36
|
+
"calldataBytes": 4776
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"recommendation": "Replay large-input transactions and compare gas envelopes once a Glamsterdam configuration is available."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "trace.logs-calls-visible",
|
|
43
|
+
"title": "Trace includes logs or external calls",
|
|
44
|
+
"severity": "low",
|
|
45
|
+
"confidence": "high",
|
|
46
|
+
"domain": [
|
|
47
|
+
"contracts",
|
|
48
|
+
"indexer",
|
|
49
|
+
"monitoring"
|
|
50
|
+
],
|
|
51
|
+
"relatedEips": [
|
|
52
|
+
"EIP-7708",
|
|
53
|
+
"EIP-7928"
|
|
54
|
+
],
|
|
55
|
+
"description": "The trace includes log or call activity that may be relevant to indexer, explorer, and monitoring assumptions under Glamsterdam-era changes.",
|
|
56
|
+
"evidence": [
|
|
57
|
+
{
|
|
58
|
+
"logOps": 0,
|
|
59
|
+
"explicitLogEntries": 0,
|
|
60
|
+
"callOps": 36,
|
|
61
|
+
"maxDepth": 5
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"recommendation": "Use traces like this to test indexer replay, alerting, and explorer display paths alongside contract gas behavior."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "trace.partial-evidence",
|
|
68
|
+
"title": "Trace omits some useful compatibility evidence",
|
|
69
|
+
"severity": "unknown",
|
|
70
|
+
"confidence": "low",
|
|
71
|
+
"domain": [
|
|
72
|
+
"contracts",
|
|
73
|
+
"execution"
|
|
74
|
+
],
|
|
75
|
+
"relatedEips": [
|
|
76
|
+
"GAS-REPRICING",
|
|
77
|
+
"EIP-7976"
|
|
78
|
+
],
|
|
79
|
+
"description": "The trace was usable, but some formats omit calldata byte counts or per-op gas costs. The scanner reports what it can see and avoids inferring missing data.",
|
|
80
|
+
"evidence": [
|
|
81
|
+
{
|
|
82
|
+
"hasCalldataEvidence": true,
|
|
83
|
+
"hasGasCostEvidence": false,
|
|
84
|
+
"warnings": [
|
|
85
|
+
"Unwrapped JSON-RPC result object."
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"recommendation": "Prefer traces that include executed opcodes, depth, calldata/input sizes, and gas costs when comparing current and Glamsterdam behavior."
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"assumptions": [
|
|
93
|
+
"Trace input was normalized from an array of steps, a JSON-RPC result wrapper, a structLogs object, this project's normalized format, an action trace array, or a call-tracer-like calls tree.",
|
|
94
|
+
"The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
|
|
95
|
+
"Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
|
|
96
|
+
],
|
|
97
|
+
"limitations": [
|
|
98
|
+
"Trace coverage is only as good as the transaction samples provided.",
|
|
99
|
+
"Foundry and Hardhat can emit multiple trace shapes depending on command, plugin, and verbosity; this scanner supports representative JSON-like exports, not every console rendering.",
|
|
100
|
+
"Some trace formats omit calldata sizes, storage keys, gas costs, logs, or call details.",
|
|
101
|
+
"Findings are compatibility prompts and should be validated through replay or benchmarking."
|
|
102
|
+
]
|
|
103
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.1",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"target": {
|
|
5
|
+
"kind": "trace",
|
|
6
|
+
"name": "fixtures/traces/erigon-action-trace.json"
|
|
7
|
+
},
|
|
8
|
+
"summary": {
|
|
9
|
+
"risk": "medium",
|
|
10
|
+
"findingCount": 3,
|
|
11
|
+
"highCount": 0,
|
|
12
|
+
"mediumCount": 1,
|
|
13
|
+
"lowCount": 1,
|
|
14
|
+
"unknownCount": 1
|
|
15
|
+
},
|
|
16
|
+
"findings": [
|
|
17
|
+
{
|
|
18
|
+
"id": "trace.contract-creation-executed",
|
|
19
|
+
"title": "Trace executed contract creation",
|
|
20
|
+
"severity": "medium",
|
|
21
|
+
"confidence": "high",
|
|
22
|
+
"domain": [
|
|
23
|
+
"contracts",
|
|
24
|
+
"execution"
|
|
25
|
+
],
|
|
26
|
+
"relatedEips": [
|
|
27
|
+
"GAS-REPRICING",
|
|
28
|
+
"EIP-8037"
|
|
29
|
+
],
|
|
30
|
+
"description": "The trace executed CREATE or CREATE2. This is direct evidence that this transaction class exercises state creation.",
|
|
31
|
+
"evidence": [
|
|
32
|
+
{
|
|
33
|
+
"CREATE": 1,
|
|
34
|
+
"CREATE2": 0
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"recommendation": "Replay creation-heavy flows against Glamsterdam test environments and verify gas budgeting, relayer assumptions, and deployment automation."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "trace.logs-calls-visible",
|
|
41
|
+
"title": "Trace includes logs or external calls",
|
|
42
|
+
"severity": "low",
|
|
43
|
+
"confidence": "high",
|
|
44
|
+
"domain": [
|
|
45
|
+
"contracts",
|
|
46
|
+
"indexer",
|
|
47
|
+
"monitoring"
|
|
48
|
+
],
|
|
49
|
+
"relatedEips": [
|
|
50
|
+
"EIP-7708",
|
|
51
|
+
"EIP-7928"
|
|
52
|
+
],
|
|
53
|
+
"description": "The trace includes log or call activity that may be relevant to indexer, explorer, and monitoring assumptions under Glamsterdam-era changes.",
|
|
54
|
+
"evidence": [
|
|
55
|
+
{
|
|
56
|
+
"logOps": 0,
|
|
57
|
+
"explicitLogEntries": 0,
|
|
58
|
+
"callOps": 2,
|
|
59
|
+
"maxDepth": 2
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"recommendation": "Use traces like this to test indexer replay, alerting, and explorer display paths alongside contract gas behavior."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "trace.partial-evidence",
|
|
66
|
+
"title": "Trace omits some useful compatibility evidence",
|
|
67
|
+
"severity": "unknown",
|
|
68
|
+
"confidence": "low",
|
|
69
|
+
"domain": [
|
|
70
|
+
"contracts",
|
|
71
|
+
"execution"
|
|
72
|
+
],
|
|
73
|
+
"relatedEips": [
|
|
74
|
+
"GAS-REPRICING",
|
|
75
|
+
"EIP-7976"
|
|
76
|
+
],
|
|
77
|
+
"description": "The trace was usable, but some formats omit calldata byte counts or per-op gas costs. The scanner reports what it can see and avoids inferring missing data.",
|
|
78
|
+
"evidence": [
|
|
79
|
+
{
|
|
80
|
+
"hasCalldataEvidence": true,
|
|
81
|
+
"hasGasCostEvidence": false,
|
|
82
|
+
"warnings": []
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"recommendation": "Prefer traces that include executed opcodes, depth, calldata/input sizes, and gas costs when comparing current and Glamsterdam behavior."
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"assumptions": [
|
|
89
|
+
"Trace input was normalized from an array of steps, a JSON-RPC result wrapper, a structLogs object, this project's normalized format, an action trace array, or a call-tracer-like calls tree.",
|
|
90
|
+
"The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
|
|
91
|
+
"Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
|
|
92
|
+
],
|
|
93
|
+
"limitations": [
|
|
94
|
+
"Trace coverage is only as good as the transaction samples provided.",
|
|
95
|
+
"Foundry and Hardhat can emit multiple trace shapes depending on command, plugin, and verbosity; this scanner supports representative JSON-like exports, not every console rendering.",
|
|
96
|
+
"Some trace formats omit calldata sizes, storage keys, gas costs, logs, or call details.",
|
|
97
|
+
"Findings are compatibility prompts and should be validated through replay or benchmarking."
|
|
98
|
+
]
|
|
99
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.1",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"target": {
|
|
5
|
+
"kind": "trace",
|
|
6
|
+
"name": "fixtures/traces/erigon-action-trace.json"
|
|
7
|
+
},
|
|
8
|
+
"summary": {
|
|
9
|
+
"risk": "medium",
|
|
10
|
+
"findingCount": 3,
|
|
11
|
+
"highCount": 0,
|
|
12
|
+
"mediumCount": 1,
|
|
13
|
+
"lowCount": 1,
|
|
14
|
+
"unknownCount": 1
|
|
15
|
+
},
|
|
16
|
+
"findings": [
|
|
17
|
+
{
|
|
18
|
+
"id": "trace.contract-creation-executed",
|
|
19
|
+
"title": "Trace executed contract creation",
|
|
20
|
+
"severity": "medium",
|
|
21
|
+
"confidence": "high",
|
|
22
|
+
"domain": [
|
|
23
|
+
"contracts",
|
|
24
|
+
"execution"
|
|
25
|
+
],
|
|
26
|
+
"relatedEips": [
|
|
27
|
+
"GAS-REPRICING",
|
|
28
|
+
"EIP-8037"
|
|
29
|
+
],
|
|
30
|
+
"description": "The trace executed CREATE or CREATE2. This is direct evidence that this transaction class exercises state creation.",
|
|
31
|
+
"evidence": [
|
|
32
|
+
{
|
|
33
|
+
"CREATE": 1,
|
|
34
|
+
"CREATE2": 0
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"recommendation": "Replay creation-heavy flows against Glamsterdam test environments and verify gas budgeting, relayer assumptions, and deployment automation."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "trace.logs-calls-visible",
|
|
41
|
+
"title": "Trace includes logs or external calls",
|
|
42
|
+
"severity": "low",
|
|
43
|
+
"confidence": "high",
|
|
44
|
+
"domain": [
|
|
45
|
+
"contracts",
|
|
46
|
+
"indexer",
|
|
47
|
+
"monitoring"
|
|
48
|
+
],
|
|
49
|
+
"relatedEips": [
|
|
50
|
+
"EIP-7708",
|
|
51
|
+
"EIP-7928"
|
|
52
|
+
],
|
|
53
|
+
"description": "The trace includes log or call activity that may be relevant to indexer, explorer, and monitoring assumptions under Glamsterdam-era changes.",
|
|
54
|
+
"evidence": [
|
|
55
|
+
{
|
|
56
|
+
"logOps": 0,
|
|
57
|
+
"explicitLogEntries": 0,
|
|
58
|
+
"callOps": 2,
|
|
59
|
+
"maxDepth": 2
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"recommendation": "Use traces like this to test indexer replay, alerting, and explorer display paths alongside contract gas behavior."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "trace.partial-evidence",
|
|
66
|
+
"title": "Trace omits some useful compatibility evidence",
|
|
67
|
+
"severity": "unknown",
|
|
68
|
+
"confidence": "low",
|
|
69
|
+
"domain": [
|
|
70
|
+
"contracts",
|
|
71
|
+
"execution"
|
|
72
|
+
],
|
|
73
|
+
"relatedEips": [
|
|
74
|
+
"GAS-REPRICING",
|
|
75
|
+
"EIP-7976"
|
|
76
|
+
],
|
|
77
|
+
"description": "The trace was usable, but some formats omit calldata byte counts or per-op gas costs. The scanner reports what it can see and avoids inferring missing data.",
|
|
78
|
+
"evidence": [
|
|
79
|
+
{
|
|
80
|
+
"hasCalldataEvidence": true,
|
|
81
|
+
"hasGasCostEvidence": false,
|
|
82
|
+
"warnings": []
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"recommendation": "Prefer traces that include executed opcodes, depth, calldata/input sizes, and gas costs when comparing current and Glamsterdam behavior."
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"assumptions": [
|
|
89
|
+
"Trace input was normalized from an array of steps, a JSON-RPC result wrapper, a structLogs object, this project's normalized format, an action trace array, or a call-tracer-like calls tree.",
|
|
90
|
+
"The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
|
|
91
|
+
"Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
|
|
92
|
+
],
|
|
93
|
+
"limitations": [
|
|
94
|
+
"Trace coverage is only as good as the transaction samples provided.",
|
|
95
|
+
"Foundry and Hardhat can emit multiple trace shapes depending on command, plugin, and verbosity; this scanner supports representative JSON-like exports, not every console rendering.",
|
|
96
|
+
"Some trace formats omit calldata sizes, storage keys, gas costs, logs, or call details.",
|
|
97
|
+
"Findings are compatibility prompts and should be validated through replay or benchmarking."
|
|
98
|
+
]
|
|
99
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.1",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"target": {
|
|
5
|
+
"kind": "trace",
|
|
6
|
+
"name": "fixtures/traces/foundry-json-trace.json"
|
|
7
|
+
},
|
|
8
|
+
"summary": {
|
|
9
|
+
"risk": "medium",
|
|
10
|
+
"findingCount": 2,
|
|
11
|
+
"highCount": 0,
|
|
12
|
+
"mediumCount": 1,
|
|
13
|
+
"lowCount": 1,
|
|
14
|
+
"unknownCount": 0
|
|
15
|
+
},
|
|
16
|
+
"findings": [
|
|
17
|
+
{
|
|
18
|
+
"id": "trace.contract-creation-executed",
|
|
19
|
+
"title": "Trace executed contract creation",
|
|
20
|
+
"severity": "medium",
|
|
21
|
+
"confidence": "high",
|
|
22
|
+
"domain": [
|
|
23
|
+
"contracts",
|
|
24
|
+
"execution"
|
|
25
|
+
],
|
|
26
|
+
"relatedEips": [
|
|
27
|
+
"GAS-REPRICING",
|
|
28
|
+
"EIP-8037"
|
|
29
|
+
],
|
|
30
|
+
"description": "The trace executed CREATE or CREATE2. This is direct evidence that this transaction class exercises state creation.",
|
|
31
|
+
"evidence": [
|
|
32
|
+
{
|
|
33
|
+
"CREATE": 0,
|
|
34
|
+
"CREATE2": 1
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"recommendation": "Replay creation-heavy flows against Glamsterdam test environments and verify gas budgeting, relayer assumptions, and deployment automation."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "trace.logs-calls-visible",
|
|
41
|
+
"title": "Trace includes logs or external calls",
|
|
42
|
+
"severity": "low",
|
|
43
|
+
"confidence": "high",
|
|
44
|
+
"domain": [
|
|
45
|
+
"contracts",
|
|
46
|
+
"indexer",
|
|
47
|
+
"monitoring"
|
|
48
|
+
],
|
|
49
|
+
"relatedEips": [
|
|
50
|
+
"EIP-7708",
|
|
51
|
+
"EIP-7928"
|
|
52
|
+
],
|
|
53
|
+
"description": "The trace includes log or call activity that may be relevant to indexer, explorer, and monitoring assumptions under Glamsterdam-era changes.",
|
|
54
|
+
"evidence": [
|
|
55
|
+
{
|
|
56
|
+
"logOps": 1,
|
|
57
|
+
"explicitLogEntries": 0,
|
|
58
|
+
"callOps": 1,
|
|
59
|
+
"maxDepth": 1
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"recommendation": "Use traces like this to test indexer replay, alerting, and explorer display paths alongside contract gas behavior."
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"assumptions": [
|
|
66
|
+
"Trace input was normalized from an array of steps, a JSON-RPC result wrapper, a structLogs object, this project's normalized format, an action trace array, or a call-tracer-like calls tree.",
|
|
67
|
+
"The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
|
|
68
|
+
"Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
|
|
69
|
+
],
|
|
70
|
+
"limitations": [
|
|
71
|
+
"Trace coverage is only as good as the transaction samples provided.",
|
|
72
|
+
"Foundry and Hardhat can emit multiple trace shapes depending on command, plugin, and verbosity; this scanner supports representative JSON-like exports, not every console rendering.",
|
|
73
|
+
"Some trace formats omit calldata sizes, storage keys, gas costs, logs, or call details.",
|
|
74
|
+
"Findings are compatibility prompts and should be validated through replay or benchmarking."
|
|
75
|
+
]
|
|
76
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.1",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"target": {
|
|
5
|
+
"kind": "trace",
|
|
6
|
+
"name": "fixtures/traces/foundry-json-trace.json"
|
|
7
|
+
},
|
|
8
|
+
"summary": {
|
|
9
|
+
"risk": "medium",
|
|
10
|
+
"findingCount": 3,
|
|
11
|
+
"highCount": 0,
|
|
12
|
+
"mediumCount": 2,
|
|
13
|
+
"lowCount": 1,
|
|
14
|
+
"unknownCount": 0
|
|
15
|
+
},
|
|
16
|
+
"findings": [
|
|
17
|
+
{
|
|
18
|
+
"id": "trace.state-heavy-execution-medium",
|
|
19
|
+
"title": "Trace shows state-heavy execution",
|
|
20
|
+
"severity": "medium",
|
|
21
|
+
"confidence": "high",
|
|
22
|
+
"domain": [
|
|
23
|
+
"contracts",
|
|
24
|
+
"execution"
|
|
25
|
+
],
|
|
26
|
+
"relatedEips": [
|
|
27
|
+
"GAS-REPRICING",
|
|
28
|
+
"EIP-7904",
|
|
29
|
+
"EIP-8038",
|
|
30
|
+
"EIP-7976"
|
|
31
|
+
],
|
|
32
|
+
"description": "The executed trace includes repeated storage or state/account access operations. Glamsterdam repricing candidates may affect this cost profile, depending on final fork scope.",
|
|
33
|
+
"evidence": [
|
|
34
|
+
{
|
|
35
|
+
"storageOps": 4,
|
|
36
|
+
"sensitiveOpcodeCount": 4,
|
|
37
|
+
"opcodeCounts": {
|
|
38
|
+
"SLOAD": 2,
|
|
39
|
+
"SSTORE": 2
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"recommendation": "Keep this trace as a regression fixture and replay it when final Glamsterdam client configurations are available."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "trace.contract-creation-executed",
|
|
47
|
+
"title": "Trace executed contract creation",
|
|
48
|
+
"severity": "medium",
|
|
49
|
+
"confidence": "high",
|
|
50
|
+
"domain": [
|
|
51
|
+
"contracts",
|
|
52
|
+
"execution"
|
|
53
|
+
],
|
|
54
|
+
"relatedEips": [
|
|
55
|
+
"GAS-REPRICING",
|
|
56
|
+
"EIP-8037"
|
|
57
|
+
],
|
|
58
|
+
"description": "The trace executed CREATE or CREATE2. This is direct evidence that this transaction class exercises state creation.",
|
|
59
|
+
"evidence": [
|
|
60
|
+
{
|
|
61
|
+
"CREATE": 0,
|
|
62
|
+
"CREATE2": 1
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"recommendation": "Replay creation-heavy flows against Glamsterdam test environments and verify gas budgeting, relayer assumptions, and deployment automation."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "trace.logs-calls-visible",
|
|
69
|
+
"title": "Trace includes logs or external calls",
|
|
70
|
+
"severity": "low",
|
|
71
|
+
"confidence": "high",
|
|
72
|
+
"domain": [
|
|
73
|
+
"contracts",
|
|
74
|
+
"indexer",
|
|
75
|
+
"monitoring"
|
|
76
|
+
],
|
|
77
|
+
"relatedEips": [
|
|
78
|
+
"EIP-7708",
|
|
79
|
+
"EIP-7928"
|
|
80
|
+
],
|
|
81
|
+
"description": "The trace includes log or call activity that may be relevant to indexer, explorer, and monitoring assumptions under Glamsterdam-era changes.",
|
|
82
|
+
"evidence": [
|
|
83
|
+
{
|
|
84
|
+
"logOps": 1,
|
|
85
|
+
"explicitLogEntries": 0,
|
|
86
|
+
"callOps": 1,
|
|
87
|
+
"maxDepth": 1
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"recommendation": "Use traces like this to test indexer replay, alerting, and explorer display paths alongside contract gas behavior."
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"assumptions": [
|
|
94
|
+
"Trace input was normalized from an array of steps, a JSON-RPC result wrapper, a structLogs object, this project's normalized format, an action trace array, or a call-tracer-like calls tree.",
|
|
95
|
+
"The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
|
|
96
|
+
"Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
|
|
97
|
+
],
|
|
98
|
+
"limitations": [
|
|
99
|
+
"Trace coverage is only as good as the transaction samples provided.",
|
|
100
|
+
"Foundry and Hardhat can emit multiple trace shapes depending on command, plugin, and verbosity; this scanner supports representative JSON-like exports, not every console rendering.",
|
|
101
|
+
"Some trace formats omit calldata sizes, storage keys, gas costs, logs, or call details.",
|
|
102
|
+
"Findings are compatibility prompts and should be validated through replay or benchmarking."
|
|
103
|
+
]
|
|
104
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.1",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"target": {
|
|
5
|
+
"kind": "trace",
|
|
6
|
+
"name": "fixtures/traces/geth-json-rpc-structlogs.json"
|
|
7
|
+
},
|
|
8
|
+
"summary": {
|
|
9
|
+
"risk": "low",
|
|
10
|
+
"findingCount": 2,
|
|
11
|
+
"highCount": 0,
|
|
12
|
+
"mediumCount": 0,
|
|
13
|
+
"lowCount": 2,
|
|
14
|
+
"unknownCount": 0
|
|
15
|
+
},
|
|
16
|
+
"findings": [
|
|
17
|
+
{
|
|
18
|
+
"id": "trace.calldata-heavy-execution",
|
|
19
|
+
"title": "Trace includes visible calldata-heavy execution",
|
|
20
|
+
"severity": "low",
|
|
21
|
+
"confidence": "high",
|
|
22
|
+
"domain": [
|
|
23
|
+
"contracts",
|
|
24
|
+
"execution"
|
|
25
|
+
],
|
|
26
|
+
"relatedEips": [
|
|
27
|
+
"GAS-REPRICING",
|
|
28
|
+
"EIP-7976",
|
|
29
|
+
"EIP-7904",
|
|
30
|
+
"EIP-8038"
|
|
31
|
+
],
|
|
32
|
+
"description": "The trace includes CALLDATACOPY or explicit calldata byte counts. Calldata repricing candidates are considered registry items, so large input paths should be tested.",
|
|
33
|
+
"evidence": [
|
|
34
|
+
{
|
|
35
|
+
"CALLDATACOPY": 1,
|
|
36
|
+
"calldataBytes": 512
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"recommendation": "Replay large-input transactions and compare gas envelopes once a Glamsterdam configuration is available."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "trace.logs-calls-visible",
|
|
43
|
+
"title": "Trace includes logs or external calls",
|
|
44
|
+
"severity": "low",
|
|
45
|
+
"confidence": "high",
|
|
46
|
+
"domain": [
|
|
47
|
+
"contracts",
|
|
48
|
+
"indexer",
|
|
49
|
+
"monitoring"
|
|
50
|
+
],
|
|
51
|
+
"relatedEips": [
|
|
52
|
+
"EIP-7708",
|
|
53
|
+
"EIP-7928"
|
|
54
|
+
],
|
|
55
|
+
"description": "The trace includes log or call activity that may be relevant to indexer, explorer, and monitoring assumptions under Glamsterdam-era changes.",
|
|
56
|
+
"evidence": [
|
|
57
|
+
{
|
|
58
|
+
"logOps": 1,
|
|
59
|
+
"explicitLogEntries": 0,
|
|
60
|
+
"callOps": 0,
|
|
61
|
+
"maxDepth": 1
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"recommendation": "Use traces like this to test indexer replay, alerting, and explorer display paths alongside contract gas behavior."
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"assumptions": [
|
|
68
|
+
"Trace input was normalized from an array of steps, a JSON-RPC result wrapper, a structLogs object, this project's normalized format, an action trace array, or a call-tracer-like calls tree.",
|
|
69
|
+
"The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
|
|
70
|
+
"Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
|
|
71
|
+
],
|
|
72
|
+
"limitations": [
|
|
73
|
+
"Trace coverage is only as good as the transaction samples provided.",
|
|
74
|
+
"Foundry and Hardhat can emit multiple trace shapes depending on command, plugin, and verbosity; this scanner supports representative JSON-like exports, not every console rendering.",
|
|
75
|
+
"Some trace formats omit calldata sizes, storage keys, gas costs, logs, or call details.",
|
|
76
|
+
"Findings are compatibility prompts and should be validated through replay or benchmarking."
|
|
77
|
+
]
|
|
78
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"toolVersion": "0.3.1",
|
|
3
|
+
"fork": "glamsterdam",
|
|
4
|
+
"target": {
|
|
5
|
+
"kind": "trace",
|
|
6
|
+
"name": "fixtures/traces/geth-json-rpc-structlogs.json"
|
|
7
|
+
},
|
|
8
|
+
"summary": {
|
|
9
|
+
"risk": "low",
|
|
10
|
+
"findingCount": 2,
|
|
11
|
+
"highCount": 0,
|
|
12
|
+
"mediumCount": 0,
|
|
13
|
+
"lowCount": 2,
|
|
14
|
+
"unknownCount": 0
|
|
15
|
+
},
|
|
16
|
+
"findings": [
|
|
17
|
+
{
|
|
18
|
+
"id": "trace.calldata-heavy-execution",
|
|
19
|
+
"title": "Trace includes visible calldata-heavy execution",
|
|
20
|
+
"severity": "low",
|
|
21
|
+
"confidence": "high",
|
|
22
|
+
"domain": [
|
|
23
|
+
"contracts",
|
|
24
|
+
"execution"
|
|
25
|
+
],
|
|
26
|
+
"relatedEips": [
|
|
27
|
+
"GAS-REPRICING",
|
|
28
|
+
"EIP-7976",
|
|
29
|
+
"EIP-7904",
|
|
30
|
+
"EIP-8038"
|
|
31
|
+
],
|
|
32
|
+
"description": "The trace includes CALLDATACOPY or explicit calldata byte counts. Calldata repricing candidates are considered registry items, so large input paths should be tested.",
|
|
33
|
+
"evidence": [
|
|
34
|
+
{
|
|
35
|
+
"CALLDATACOPY": 1,
|
|
36
|
+
"calldataBytes": 512
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"recommendation": "Replay large-input transactions and compare gas envelopes once a Glamsterdam configuration is available."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "trace.logs-calls-visible",
|
|
43
|
+
"title": "Trace includes logs or external calls",
|
|
44
|
+
"severity": "low",
|
|
45
|
+
"confidence": "high",
|
|
46
|
+
"domain": [
|
|
47
|
+
"contracts",
|
|
48
|
+
"indexer",
|
|
49
|
+
"monitoring"
|
|
50
|
+
],
|
|
51
|
+
"relatedEips": [
|
|
52
|
+
"EIP-7708",
|
|
53
|
+
"EIP-7928"
|
|
54
|
+
],
|
|
55
|
+
"description": "The trace includes log or call activity that may be relevant to indexer, explorer, and monitoring assumptions under Glamsterdam-era changes.",
|
|
56
|
+
"evidence": [
|
|
57
|
+
{
|
|
58
|
+
"logOps": 1,
|
|
59
|
+
"explicitLogEntries": 0,
|
|
60
|
+
"callOps": 0,
|
|
61
|
+
"maxDepth": 1
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"recommendation": "Use traces like this to test indexer replay, alerting, and explorer display paths alongside contract gas behavior."
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"assumptions": [
|
|
68
|
+
"Trace input was normalized from an array of steps, a JSON-RPC result wrapper, a structLogs object, this project's normalized format, an action trace array, or a call-tracer-like calls tree.",
|
|
69
|
+
"The loaded registry is dated 2026-05-08. Glamsterdam scope and gas parameters may change.",
|
|
70
|
+
"Detector thresholds are dated 2026-05-09 and are MVP heuristics, not protocol gas parameters."
|
|
71
|
+
],
|
|
72
|
+
"limitations": [
|
|
73
|
+
"Trace coverage is only as good as the transaction samples provided.",
|
|
74
|
+
"Foundry and Hardhat can emit multiple trace shapes depending on command, plugin, and verbosity; this scanner supports representative JSON-like exports, not every console rendering.",
|
|
75
|
+
"Some trace formats omit calldata sizes, storage keys, gas costs, logs, or call details.",
|
|
76
|
+
"Findings are compatibility prompts and should be validated through replay or benchmarking."
|
|
77
|
+
]
|
|
78
|
+
}
|