glamsterdam-compat-lab 0.2.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 (96) hide show
  1. package/CONTRIBUTING.md +59 -0
  2. package/LICENSE +21 -0
  3. package/README.md +187 -0
  4. package/ROADMAP.md +76 -0
  5. package/SECURITY.md +19 -0
  6. package/data/client-compat/clients.example.json +42 -0
  7. package/data/detectors/thresholds.ci.json +33 -0
  8. package/data/detectors/thresholds.json +33 -0
  9. package/data/detectors/thresholds.research.json +33 -0
  10. package/data/eips/glamsterdam.json +85 -0
  11. package/dist/cli.d.ts +2 -0
  12. package/dist/cli.js +163 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/detectors/balDetectors.d.ts +3 -0
  15. package/dist/detectors/balDetectors.js +26 -0
  16. package/dist/detectors/balDetectors.js.map +1 -0
  17. package/dist/detectors/contractSizeDetectors.d.ts +3 -0
  18. package/dist/detectors/contractSizeDetectors.js +37 -0
  19. package/dist/detectors/contractSizeDetectors.js.map +1 -0
  20. package/dist/detectors/epbsDetectors.d.ts +7 -0
  21. package/dist/detectors/epbsDetectors.js +33 -0
  22. package/dist/detectors/epbsDetectors.js.map +1 -0
  23. package/dist/detectors/gasRepricingDetectors.d.ts +4 -0
  24. package/dist/detectors/gasRepricingDetectors.js +135 -0
  25. package/dist/detectors/gasRepricingDetectors.js.map +1 -0
  26. package/dist/detectors/nativeEthTransferLogDetectors.d.ts +8 -0
  27. package/dist/detectors/nativeEthTransferLogDetectors.js +54 -0
  28. package/dist/detectors/nativeEthTransferLogDetectors.js.map +1 -0
  29. package/dist/detectors/stateCreationDetectors.d.ts +4 -0
  30. package/dist/detectors/stateCreationDetectors.js +46 -0
  31. package/dist/detectors/stateCreationDetectors.js.map +1 -0
  32. package/dist/detectors/thresholds.d.ts +34 -0
  33. package/dist/detectors/thresholds.js +45 -0
  34. package/dist/detectors/thresholds.js.map +1 -0
  35. package/dist/detectors/types.d.ts +15 -0
  36. package/dist/detectors/types.js +23 -0
  37. package/dist/detectors/types.js.map +1 -0
  38. package/dist/index.d.ts +16 -0
  39. package/dist/index.js +13 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/registry/eipRegistry.d.ts +6 -0
  42. package/dist/registry/eipRegistry.js +30 -0
  43. package/dist/registry/eipRegistry.js.map +1 -0
  44. package/dist/registry/schemas.d.ts +76 -0
  45. package/dist/registry/schemas.js +34 -0
  46. package/dist/registry/schemas.js.map +1 -0
  47. package/dist/reports/jsonReporter.d.ts +2 -0
  48. package/dist/reports/jsonReporter.js +5 -0
  49. package/dist/reports/jsonReporter.js.map +1 -0
  50. package/dist/reports/markdownReporter.d.ts +2 -0
  51. package/dist/reports/markdownReporter.js +75 -0
  52. package/dist/reports/markdownReporter.js.map +1 -0
  53. package/dist/reports/reportTypes.d.ts +150 -0
  54. package/dist/reports/reportTypes.js +111 -0
  55. package/dist/reports/reportTypes.js.map +1 -0
  56. package/dist/scanners/bytecodeScanner.d.ts +11 -0
  57. package/dist/scanners/bytecodeScanner.js +107 -0
  58. package/dist/scanners/bytecodeScanner.js.map +1 -0
  59. package/dist/scanners/indexerScanner.d.ts +13 -0
  60. package/dist/scanners/indexerScanner.js +129 -0
  61. package/dist/scanners/indexerScanner.js.map +1 -0
  62. package/dist/scanners/rpcTraceScanner.d.ts +40 -0
  63. package/dist/scanners/rpcTraceScanner.js +121 -0
  64. package/dist/scanners/rpcTraceScanner.js.map +1 -0
  65. package/dist/scanners/traceScanner.d.ts +24 -0
  66. package/dist/scanners/traceScanner.js +272 -0
  67. package/dist/scanners/traceScanner.js.map +1 -0
  68. package/dist/scanners/validatorScanner.d.ts +40 -0
  69. package/dist/scanners/validatorScanner.js +210 -0
  70. package/dist/scanners/validatorScanner.js.map +1 -0
  71. package/dist/utils/bytecode.d.ts +11 -0
  72. package/dist/utils/bytecode.js +140 -0
  73. package/dist/utils/bytecode.js.map +1 -0
  74. package/dist/utils/files.d.ts +10 -0
  75. package/dist/utils/files.js +51 -0
  76. package/dist/utils/files.js.map +1 -0
  77. package/dist/utils/severity.d.ts +2 -0
  78. package/dist/utils/severity.js +13 -0
  79. package/dist/utils/severity.js.map +1 -0
  80. package/docs/fixtures.md +60 -0
  81. package/docs/release.md +132 -0
  82. package/examples/storage-heavy-bytecode.md +57 -0
  83. package/fixtures/bytecode/storage-heavy.hex +1 -0
  84. package/fixtures/indexers/balance-diff-indexer.json +15 -0
  85. package/fixtures/indexers/subgraph.yaml +24 -0
  86. package/fixtures/traces/besu-debug-structlogs.json +18 -0
  87. package/fixtures/traces/call-tracer-tree.json +27 -0
  88. package/fixtures/traces/drpc-call-tracer-real.json +373 -0
  89. package/fixtures/traces/erigon-action-trace.json +29 -0
  90. package/fixtures/traces/foundry-json-trace.json +19 -0
  91. package/fixtures/traces/geth-json-rpc-structlogs.json +16 -0
  92. package/fixtures/traces/hardhat-debug-trace.json +13 -0
  93. package/fixtures/traces/nethermind-debug-structlogs.json +17 -0
  94. package/fixtures/traces/storage-heavy-trace.json +25 -0
  95. package/fixtures/validator/operator-config.yaml +15 -0
  96. package/package.json +80 -0
@@ -0,0 +1,373 @@
1
+ {
2
+ "jsonrpc": "2.0",
3
+ "id": 1,
4
+ "result": {
5
+ "from": "0x5875db54cd9ae2b2a875e09bb731772297ae9d92",
6
+ "gas": "0x74779",
7
+ "gasUsed": "0x41565",
8
+ "to": "0x0000000aa232009084bd71a5797d089aa4edfad4",
9
+ "input": "0x09c5eabe000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002bd0000cca0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000100120000000000000000000000004797b451c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000011121b4a000000000000000012b5d4ab31bd49a800000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000721766b900004c000000010000000000000000000000000000000000000053571d4f8b994ba8524b490ff0fa9800010002000100000000000000000000000000000000000000000000000020113a04ae4ba5250000660300000000000000000000000000004796b43f0000000000000000000000000001001200000000000000000690bb575103b58d020001000000000000000000000000721766b90000000000000000000050818221f80e000000000000000005fbfcd86252a6950001300e0000000000000000000000004797b451000000000000000007368dc704215ac00000000000000000000000000000000100000000000000000000000000000000000073d53553ee552c1f2a9722e6407d43e41e19593f1b9cc55eb1cf9c28d93a001bf2cfe2b9522bd6beea4c7ae469d08ba578e9ddc6b05707a05c35526e4b6b76d5cddf21996b8ca4750ac97ef7d74cf1e1714ed1f6290c000000000000000000000000721766b900000000000000000b7ef662a6dc97000000000000000000000000000c7534120000000000000000000000000c74bb70000173d53553ee552c1f2a9722e6407d43e41e19593f1b1a42849419b9537c55fdce09eb46d5f2b3dea63f466d14c29c64c84ec21890ab1eb9449ca27ac1fb7c0fb35dbbc44dbc6125c9ffa77f891080b4bad42394c5b9000000000000",
10
+ "calls": [
11
+ {
12
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
13
+ "gas": "0x692f5",
14
+ "gasUsed": "0x384b2",
15
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
16
+ "input": "0x48c89491000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002bd0000cca0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000100120000000000000000000000004797b451c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000011121b4a000000000000000012b5d4ab31bd49a800000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000721766b900004c000000010000000000000000000000000000000000000053571d4f8b994ba8524b490ff0fa9800010002000100000000000000000000000000000000000000000000000020113a04ae4ba5250000660300000000000000000000000000004796b43f0000000000000000000000000001001200000000000000000690bb575103b58d020001000000000000000000000000721766b90000000000000000000050818221f80e000000000000000005fbfcd86252a6950001300e0000000000000000000000004797b451000000000000000007368dc704215ac00000000000000000000000000000000100000000000000000000000000000000000073d53553ee552c1f2a9722e6407d43e41e19593f1b9cc55eb1cf9c28d93a001bf2cfe2b9522bd6beea4c7ae469d08ba578e9ddc6b05707a05c35526e4b6b76d5cddf21996b8ca4750ac97ef7d74cf1e1714ed1f6290c000000000000000000000000721766b900000000000000000b7ef662a6dc97000000000000000000000000000c7534120000000000000000000000000c74bb70000173d53553ee552c1f2a9722e6407d43e41e19593f1b1a42849419b9537c55fdce09eb46d5f2b3dea63f466d14c29c64c84ec21890ab1eb9449ca27ac1fb7c0fb35dbbc44dbc6125c9ffa77f891080b4bad42394c5b9000000000000",
17
+ "output": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000",
18
+ "calls": [
19
+ {
20
+ "from": "0x000000000004444c5dc75cb358380d2e3de08a90",
21
+ "gas": "0x673ff",
22
+ "gasUsed": "0x37c98",
23
+ "to": "0x0000000aa232009084bd71a5797d089aa4edfad4",
24
+ "input": "0x91dd7346000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002bd0000cca0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000100120000000000000000000000004797b451c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000011121b4a000000000000000012b5d4ab31bd49a800000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000721766b900004c000000010000000000000000000000000000000000000053571d4f8b994ba8524b490ff0fa9800010002000100000000000000000000000000000000000000000000000020113a04ae4ba5250000660300000000000000000000000000004796b43f0000000000000000000000000001001200000000000000000690bb575103b58d020001000000000000000000000000721766b90000000000000000000050818221f80e000000000000000005fbfcd86252a6950001300e0000000000000000000000004797b451000000000000000007368dc704215ac00000000000000000000000000000000100000000000000000000000000000000000073d53553ee552c1f2a9722e6407d43e41e19593f1b9cc55eb1cf9c28d93a001bf2cfe2b9522bd6beea4c7ae469d08ba578e9ddc6b05707a05c35526e4b6b76d5cddf21996b8ca4750ac97ef7d74cf1e1714ed1f6290c000000000000000000000000721766b900000000000000000b7ef662a6dc97000000000000000000000000000c7534120000000000000000000000000c74bb70000173d53553ee552c1f2a9722e6407d43e41e19593f1b1a42849419b9537c55fdce09eb46d5f2b3dea63f466d14c29c64c84ec21890ab1eb9449ca27ac1fb7c0fb35dbbc44dbc6125c9ffa77f891080b4bad42394c5b9000000000000",
25
+ "output": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000",
26
+ "calls": [
27
+ {
28
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
29
+ "gas": "0x63ef8",
30
+ "gasUsed": "0x6bf8",
31
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
32
+ "input": "0x0b0d9c09000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000aa232009084bd71a5797d089aa4edfad40000000000000000000000000000000000000000000000000000000000010012",
33
+ "calls": [
34
+ {
35
+ "from": "0x000000000004444c5dc75cb358380d2e3de08a90",
36
+ "gas": "0x616a1",
37
+ "gasUsed": "0x5c00",
38
+ "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
39
+ "input": "0xa9059cbb0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad40000000000000000000000000000000000000000000000000000000000010012",
40
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001",
41
+ "calls": [
42
+ {
43
+ "from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
44
+ "gas": "0x5e26b",
45
+ "gasUsed": "0x3f87",
46
+ "to": "0x43506849d7c04f9138d1a2050bbf3a0c054402dd",
47
+ "input": "0xa9059cbb0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad40000000000000000000000000000000000000000000000000000000000010012",
48
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001",
49
+ "value": "0x0",
50
+ "type": "DELEGATECALL"
51
+ }
52
+ ],
53
+ "value": "0x0",
54
+ "type": "CALL"
55
+ }
56
+ ],
57
+ "value": "0x0",
58
+ "type": "CALL"
59
+ },
60
+ {
61
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
62
+ "gas": "0x5d0c7",
63
+ "gasUsed": "0x4236",
64
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
65
+ "input": "0x0b0d9c09000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000aa232009084bd71a5797d089aa4edfad400000000000000000000000000000000000000000000000012b5d4ab31bd49a8",
66
+ "calls": [
67
+ {
68
+ "from": "0x000000000004444c5dc75cb358380d2e3de08a90",
69
+ "gas": "0x5aa29",
70
+ "gasUsed": "0x323e",
71
+ "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
72
+ "input": "0xa9059cbb0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad400000000000000000000000000000000000000000000000012b5d4ab31bd49a8",
73
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001",
74
+ "value": "0x0",
75
+ "type": "CALL"
76
+ }
77
+ ],
78
+ "value": "0x0",
79
+ "type": "CALL"
80
+ },
81
+ {
82
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
83
+ "gas": "0x58876",
84
+ "gasUsed": "0x947",
85
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
86
+ "input": "0x1e2eaeaf9562c77e4b5d35fd9cc398adeebe261d0a2fcaa1fb2694c99fe44c44eaa0b79a",
87
+ "output": "0x0000000000000000000308d3000000000000514333e20a7da9030d5a00f01064",
88
+ "type": "STATICCALL"
89
+ },
90
+ {
91
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
92
+ "gas": "0x57e1d",
93
+ "gasUsed": "0x5e2f",
94
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
95
+ "input": "0xf3cd914c000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad40000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb8694bc100000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000",
96
+ "output": "0xffffffffffffffffffffffffb8694bc1000000000000000007368dc708beba9a",
97
+ "value": "0x0",
98
+ "type": "CALL"
99
+ },
100
+ {
101
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
102
+ "gas": "0x5202f",
103
+ "gasUsed": "0x177",
104
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
105
+ "input": "0x1e2eaeaf9562c77e4b5d35fd9cc398adeebe261d0a2fcaa1fb2694c99fe44c44eaa0b79a",
106
+ "output": "0x0000000000000000000308d200000000000051421aa03833a3c95220f6170fa7",
107
+ "type": "STATICCALL"
108
+ },
109
+ {
110
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
111
+ "gas": "0x51af0",
112
+ "gasUsed": "0x177",
113
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
114
+ "input": "0x1e2eaeaf9562c77e4b5d35fd9cc398adeebe261d0a2fcaa1fb2694c99fe44c44eaa0b79d",
115
+ "output": "0x0000000000000000000000000000000000000000000000000690bb575103b58d",
116
+ "type": "STATICCALL"
117
+ },
118
+ {
119
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
120
+ "gas": "0x4ffef",
121
+ "gasUsed": "0x947",
122
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
123
+ "input": "0x1e2eaeaf82232e698fca37bffdc4ba59dc51d114512f26d3cdb80a0642b2956bd02c575d",
124
+ "output": "0x000000000000000000fcf72b000000000000000000032666899c51833025979a",
125
+ "type": "STATICCALL"
126
+ },
127
+ {
128
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
129
+ "gas": "0x4f597",
130
+ "gasUsed": "0x5c67",
131
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
132
+ "input": "0xf3cd914c000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad40000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8de89947000000000000000000000000fffd8963efd1fc6a506488495d951d5263988d2500000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000",
133
+ "output": "0x00000000000000000b7f46e428fe8f0effffffffffffffffffffffff8de89947",
134
+ "value": "0x0",
135
+ "type": "CALL"
136
+ },
137
+ {
138
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
139
+ "gas": "0x4996a",
140
+ "gasUsed": "0x177",
141
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
142
+ "input": "0x1e2eaeaf82232e698fca37bffdc4ba59dc51d114512f26d3cdb80a0642b2956bd02c575d",
143
+ "output": "0x000000000000000000fcf72c0000000000000000000326799a42900be84ac31b",
144
+ "type": "STATICCALL"
145
+ },
146
+ {
147
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
148
+ "gas": "0x49422",
149
+ "gasUsed": "0x177",
150
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
151
+ "input": "0x1e2eaeaf82232e698fca37bffdc4ba59dc51d114512f26d3cdb80a0642b2956bd02c5760",
152
+ "output": "0x00000000000000000000000000000000000000000000000005fbfcd86252a695",
153
+ "type": "STATICCALL"
154
+ },
155
+ {
156
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
157
+ "gas": "0x4768d",
158
+ "gasUsed": "0xbb8",
159
+ "to": "0x0000000000000000000000000000000000000001",
160
+ "input": "0x333b22a82646d082991b25a537b98c347d359861dad4e9e724005dd7af161493000000000000000000000000000000000000000000000000000000000000001b9cc55eb1cf9c28d93a001bf2cfe2b9522bd6beea4c7ae469d08ba578e9ddc6b05707a05c35526e4b6b76d5cddf21996b8ca4750ac97ef7d74cf1e1714ed1f629",
161
+ "output": "0x00000000000000000000000073d53553ee552c1f2a9722e6407d43e41e19593f",
162
+ "type": "STATICCALL"
163
+ },
164
+ {
165
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
166
+ "gas": "0x46606",
167
+ "gasUsed": "0x3f15",
168
+ "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
169
+ "input": "0x23b872dd00000000000000000000000073d53553ee552c1f2a9722e6407d43e41e19593f0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad4000000000000000000000000000000000000000000000000000000004797b451",
170
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001",
171
+ "calls": [
172
+ {
173
+ "from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
174
+ "gas": "0x4518b",
175
+ "gasUsed": "0x3bfa",
176
+ "to": "0x43506849d7c04f9138d1a2050bbf3a0c054402dd",
177
+ "input": "0x23b872dd00000000000000000000000073d53553ee552c1f2a9722e6407d43e41e19593f0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad4000000000000000000000000000000000000000000000000000000004797b451",
178
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001",
179
+ "value": "0x0",
180
+ "type": "DELEGATECALL"
181
+ }
182
+ ],
183
+ "value": "0x0",
184
+ "type": "CALL"
185
+ },
186
+ {
187
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
188
+ "gas": "0x424d3",
189
+ "gasUsed": "0x1f7e",
190
+ "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
191
+ "input": "0xa9059cbb00000000000000000000000073d53553ee552c1f2a9722e6407d43e41e19593f00000000000000000000000000000000000000000000000007368dc704215ac0",
192
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001",
193
+ "value": "0x0",
194
+ "type": "CALL"
195
+ },
196
+ {
197
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
198
+ "gas": "0x40167",
199
+ "gasUsed": "0xbb8",
200
+ "to": "0x0000000000000000000000000000000000000001",
201
+ "input": "0xc79df3d4fe399eb88a98738340475551125d19623d42cf85568be59b64df52c0000000000000000000000000000000000000000000000000000000000000001b1a42849419b9537c55fdce09eb46d5f2b3dea63f466d14c29c64c84ec21890ab1eb9449ca27ac1fb7c0fb35dbbc44dbc6125c9ffa77f891080b4bad42394c5b9",
202
+ "output": "0x00000000000000000000000073d53553ee552c1f2a9722e6407d43e41e19593f",
203
+ "type": "STATICCALL"
204
+ },
205
+ {
206
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
207
+ "gas": "0x3e74d",
208
+ "gasUsed": "0x67a2",
209
+ "to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
210
+ "input": "0x23b872dd00000000000000000000000073d53553ee552c1f2a9722e6407d43e41e19593f0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad400000000000000000000000000000000000000000000000000000000721766b9",
211
+ "value": "0x0",
212
+ "type": "CALL"
213
+ },
214
+ {
215
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
216
+ "gas": "0x37daf",
217
+ "gasUsed": "0xcbe",
218
+ "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
219
+ "input": "0xa9059cbb00000000000000000000000073d53553ee552c1f2a9722e6407d43e41e19593f0000000000000000000000000000000000000000000000000b7ef6629a67db90",
220
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001",
221
+ "value": "0x0",
222
+ "type": "CALL"
223
+ },
224
+ {
225
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
226
+ "gas": "0x36990",
227
+ "gasUsed": "0xa98",
228
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
229
+ "input": "0xa5841194000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
230
+ "calls": [
231
+ {
232
+ "from": "0x000000000004444c5dc75cb358380d2e3de08a90",
233
+ "gas": "0x35843",
234
+ "gasUsed": "0x53b",
235
+ "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
236
+ "input": "0x70a08231000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90",
237
+ "output": "0x00000000000000000000000000000000000000000000000000005c86213da4a8",
238
+ "calls": [
239
+ {
240
+ "from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
241
+ "gas": "0x34808",
242
+ "gasUsed": "0x229",
243
+ "to": "0x43506849d7c04f9138d1a2050bbf3a0c054402dd",
244
+ "input": "0x70a08231000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90",
245
+ "output": "0x00000000000000000000000000000000000000000000000000005c86213da4a8",
246
+ "value": "0x0",
247
+ "type": "DELEGATECALL"
248
+ }
249
+ ],
250
+ "type": "STATICCALL"
251
+ }
252
+ ],
253
+ "value": "0x0",
254
+ "type": "CALL"
255
+ },
256
+ {
257
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
258
+ "gas": "0x35e4a",
259
+ "gasUsed": "0x154c",
260
+ "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
261
+ "input": "0xa9059cbb000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90000000000000000000000000000000000000000000000000000000004797b451",
262
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001",
263
+ "calls": [
264
+ {
265
+ "from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
266
+ "gas": "0x34df4",
267
+ "gasUsed": "0x1237",
268
+ "to": "0x43506849d7c04f9138d1a2050bbf3a0c054402dd",
269
+ "input": "0xa9059cbb000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90000000000000000000000000000000000000000000000000000000004797b451",
270
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001",
271
+ "value": "0x0",
272
+ "type": "DELEGATECALL"
273
+ }
274
+ ],
275
+ "value": "0x0",
276
+ "type": "CALL"
277
+ },
278
+ {
279
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
280
+ "gas": "0x34866",
281
+ "gasUsed": "0xcf1",
282
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
283
+ "input": "0x11da60b4",
284
+ "output": "0x000000000000000000000000000000000000000000000000000000004797b451",
285
+ "calls": [
286
+ {
287
+ "from": "0x000000000004444c5dc75cb358380d2e3de08a90",
288
+ "gas": "0x3382f",
289
+ "gasUsed": "0x53b",
290
+ "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
291
+ "input": "0x70a08231000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90",
292
+ "output": "0x00000000000000000000000000000000000000000000000000005c8668d558f9",
293
+ "calls": [
294
+ {
295
+ "from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
296
+ "gas": "0x32874",
297
+ "gasUsed": "0x229",
298
+ "to": "0x43506849d7c04f9138d1a2050bbf3a0c054402dd",
299
+ "input": "0x70a08231000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90",
300
+ "output": "0x00000000000000000000000000000000000000000000000000005c8668d558f9",
301
+ "value": "0x0",
302
+ "type": "DELEGATECALL"
303
+ }
304
+ ],
305
+ "type": "STATICCALL"
306
+ }
307
+ ],
308
+ "value": "0x0",
309
+ "type": "CALL"
310
+ },
311
+ {
312
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
313
+ "gas": "0x33396",
314
+ "gasUsed": "0x1134",
315
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
316
+ "input": "0xa5841194000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7",
317
+ "calls": [
318
+ {
319
+ "from": "0x000000000004444c5dc75cb358380d2e3de08a90",
320
+ "gas": "0x32321",
321
+ "gasUsed": "0xbd7",
322
+ "to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
323
+ "input": "0x70a08231000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90",
324
+ "output": "0x00000000000000000000000000000000000000000000000000002cb38fcab61b",
325
+ "type": "STATICCALL"
326
+ }
327
+ ],
328
+ "value": "0x0",
329
+ "type": "CALL"
330
+ },
331
+ {
332
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
333
+ "gas": "0x321ce",
334
+ "gasUsed": "0x25e5",
335
+ "to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
336
+ "input": "0xa9059cbb000000000000000000000000000000000004444c5dc75cb358380d2e3de08a9000000000000000000000000000000000000000000000000000000000721766b9",
337
+ "value": "0x0",
338
+ "type": "CALL"
339
+ },
340
+ {
341
+ "from": "0x0000000aa232009084bd71a5797d089aa4edfad4",
342
+ "gas": "0x2fb14",
343
+ "gasUsed": "0xbbd",
344
+ "to": "0x000000000004444c5dc75cb358380d2e3de08a90",
345
+ "input": "0x11da60b4",
346
+ "output": "0x00000000000000000000000000000000000000000000000000000000721766b9",
347
+ "calls": [
348
+ {
349
+ "from": "0x000000000004444c5dc75cb358380d2e3de08a90",
350
+ "gas": "0x2ec13",
351
+ "gasUsed": "0x407",
352
+ "to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
353
+ "input": "0x70a08231000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90",
354
+ "output": "0x00000000000000000000000000000000000000000000000000002cb401e21cd4",
355
+ "type": "STATICCALL"
356
+ }
357
+ ],
358
+ "value": "0x0",
359
+ "type": "CALL"
360
+ }
361
+ ],
362
+ "value": "0x0",
363
+ "type": "CALL"
364
+ }
365
+ ],
366
+ "value": "0x0",
367
+ "type": "CALL"
368
+ }
369
+ ],
370
+ "value": "0x0",
371
+ "type": "CALL"
372
+ }
373
+ }
@@ -0,0 +1,29 @@
1
+ [
2
+ {
3
+ "type": "call",
4
+ "action": {
5
+ "callType": "call",
6
+ "from": "0x0000000000000000000000000000000000000001",
7
+ "to": "0x0000000000000000000000000000000000000002",
8
+ "input": "0x12345678"
9
+ },
10
+ "traceAddress": []
11
+ },
12
+ {
13
+ "type": "create",
14
+ "action": {
15
+ "from": "0x0000000000000000000000000000000000000002",
16
+ "init": "0x60006000"
17
+ },
18
+ "traceAddress": [0]
19
+ },
20
+ {
21
+ "type": "call",
22
+ "action": {
23
+ "callType": "delegatecall",
24
+ "to": "0x0000000000000000000000000000000000000003",
25
+ "input": "0xabcdef"
26
+ },
27
+ "traceAddress": [1]
28
+ }
29
+ ]
@@ -0,0 +1,19 @@
1
+ {
2
+ "format": "foundry-json-trace-fixture-v0",
3
+ "source": "Synthetic fixture shaped like a nested Foundry trace export.",
4
+ "traces": [
5
+ {
6
+ "kind": "CALL",
7
+ "depth": 1,
8
+ "calldata": "0x12345678",
9
+ "children": [
10
+ { "kind": "SLOAD", "depth": 1, "gasCost": 100 },
11
+ { "kind": "SSTORE", "depth": 1, "gasCost": 2900 },
12
+ { "kind": "SLOAD", "depth": 1, "gasCost": 100 },
13
+ { "kind": "SSTORE", "depth": 1, "gasCost": 2900 },
14
+ { "kind": "CREATE2", "depth": 1, "calldata": "0x60006000", "gasCost": 32000 },
15
+ { "kind": "LOG1", "depth": 1, "gasCost": 375 }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "jsonrpc": "2.0",
3
+ "id": 1,
4
+ "result": {
5
+ "gas": 210000,
6
+ "failed": false,
7
+ "returnValue": "0x",
8
+ "structLogs": [
9
+ { "pc": 0, "op": "PUSH1", "depth": 1, "gas": 200000, "gasCost": 3 },
10
+ { "pc": 2, "op": "SLOAD", "depth": 1, "gas": 199997, "gasCost": 100 },
11
+ { "pc": 3, "op": "SSTORE", "depth": 1, "gas": 199897, "gasCost": 2900 },
12
+ { "pc": 4, "op": "CALLDATACOPY", "depth": 1, "gas": 196997, "gasCost": 6, "calldataBytes": 512 },
13
+ { "pc": 5, "op": "LOG2", "depth": 1, "gas": 196991, "gasCost": 750 }
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "format": "hardhat-debug-trace-fixture-v0",
3
+ "source": "Synthetic fixture shaped like a Hardhat/debug plugin JSON trace.",
4
+ "trace": {
5
+ "steps": [
6
+ { "opcode": { "name": "CALLDATACOPY" }, "depth": 1, "gas": 120000, "gasCost": 6, "calldataBytes": 6144 },
7
+ { "opName": "SLOAD", "depth": 1, "gas": 119994, "gasCost": 100 },
8
+ { "instruction": "SSTORE", "depth": 1, "gas": 119894, "gasCost": 2900 },
9
+ { "type": "CALL", "depth": 2, "input": "0xabcdef", "gas": 116994 },
10
+ { "op": "LOG2", "depth": 1, "gas": 116000, "gasCost": 750 }
11
+ ]
12
+ }
13
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "format": "nethermind-debug-structlogs-fixture-v0",
3
+ "source": "Synthetic fixture shaped like a Nethermind debug_traceTransaction structLogs response.",
4
+ "result": {
5
+ "gas": 180000,
6
+ "failed": false,
7
+ "returnValue": "0x",
8
+ "structLogs": [
9
+ { "pc": 0, "op": "CALLDATACOPY", "depth": 1, "gas": 180000, "gasCost": "6", "calldataBytes": 1536 },
10
+ { "pc": 1, "op": "SLOAD", "depth": 1, "gas": 179994, "gasCost": "100" },
11
+ { "pc": 2, "op": "SLOAD", "depth": 1, "gas": 179894, "gasCost": "100" },
12
+ { "pc": 3, "op": "SSTORE", "depth": 1, "gas": 179794, "gasCost": "2900" },
13
+ { "pc": 4, "op": "CREATE", "depth": 1, "gas": 176894, "gasCost": "32000" },
14
+ { "pc": 5, "op": "DELEGATECALL", "depth": 2, "gas": 144894, "gasCost": "700", "calldataBytes": 128 }
15
+ ]
16
+ }
17
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "format": "glamsterdam-normalized-trace-v0",
3
+ "metadata": {
4
+ "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
5
+ "description": "Synthetic fixture with storage, create, calldata, call, and log activity."
6
+ },
7
+ "steps": [
8
+ { "pc": 0, "op": "SLOAD", "depth": 1, "gas": 100000 },
9
+ { "pc": 1, "op": "SSTORE", "depth": 1, "gas": 99000 },
10
+ { "pc": 2, "op": "SLOAD", "depth": 1, "gas": 98000 },
11
+ { "pc": 3, "op": "SSTORE", "depth": 1, "gas": 97000 },
12
+ { "pc": 4, "op": "SLOAD", "depth": 1, "gas": 96000 },
13
+ { "pc": 5, "op": "SSTORE", "depth": 1, "gas": 95000 },
14
+ { "pc": 6, "op": "SLOAD", "depth": 1, "gas": 94000 },
15
+ { "pc": 7, "op": "SSTORE", "depth": 1, "gas": 93000 },
16
+ { "pc": 8, "op": "SLOAD", "depth": 1, "gas": 92000 },
17
+ { "pc": 9, "op": "SSTORE", "depth": 1, "gas": 91000 },
18
+ { "pc": 10, "op": "SLOAD", "depth": 1, "gas": 90000 },
19
+ { "pc": 11, "op": "SSTORE", "depth": 1, "gas": 89000 },
20
+ { "pc": 12, "op": "CALLDATACOPY", "depth": 1, "calldataBytes": 8192 },
21
+ { "pc": 13, "op": "CREATE2", "depth": 1 },
22
+ { "pc": 14, "op": "CALL", "depth": 2, "calldataBytes": 512 },
23
+ { "pc": 15, "op": "LOG1", "depth": 1 }
24
+ ]
25
+ }
@@ -0,0 +1,15 @@
1
+ executionClient:
2
+ name: geth
3
+ version: v1.99.0-example
4
+ consensusClient:
5
+ name: lighthouse
6
+ version: v9.99.0-example
7
+ validatorClient:
8
+ name: lighthouse
9
+ builder:
10
+ enabled: true
11
+ monitoring:
12
+ prometheus: ""
13
+ networks:
14
+ testnetParticipation: []
15
+ notes: "Synthetic fixture intentionally leaves readiness metadata incomplete."
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "glamsterdam-compat-lab",
3
+ "version": "0.2.2",
4
+ "description": "Deterministic Glamsterdam compatibility scanners for Ethereum contracts, traces, indexers, and validator operators.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "private": false,
8
+ "packageManager": "pnpm@10.28.2",
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ },
16
+ "./package.json": "./package.json"
17
+ },
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/CruzMolina/glamsterdam-compat-lab.git"
24
+ },
25
+ "bugs": {
26
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/issues"
27
+ },
28
+ "homepage": "https://github.com/CruzMolina/glamsterdam-compat-lab#readme",
29
+ "bin": {
30
+ "glamsterdam": "dist/cli.js"
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "data",
35
+ "fixtures",
36
+ "docs",
37
+ "examples",
38
+ "README.md",
39
+ "ROADMAP.md",
40
+ "CONTRIBUTING.md",
41
+ "SECURITY.md",
42
+ "LICENSE"
43
+ ],
44
+ "scripts": {
45
+ "build": "tsc -p tsconfig.json",
46
+ "glamsterdam": "tsx src/cli.ts",
47
+ "pack:dry-run": "npm publish --dry-run",
48
+ "prepublishOnly": "pnpm test && pnpm build",
49
+ "release:check-pack": "node scripts/check-packed-install.mjs",
50
+ "release:check-npm": "node scripts/check-npm-release.mjs",
51
+ "test": "vitest run",
52
+ "test:integration": "vitest run --config vitest.integration.config.ts",
53
+ "test:update": "vitest run -u",
54
+ "test:watch": "vitest",
55
+ "typecheck": "tsc -p tsconfig.json --noEmit"
56
+ },
57
+ "dependencies": {
58
+ "commander": "^14.0.3",
59
+ "yaml": "^2.6.1",
60
+ "zod": "^4.4.3"
61
+ },
62
+ "devDependencies": {
63
+ "@types/node": "^22.10.5",
64
+ "tsx": "^4.19.2",
65
+ "typescript": "^5.7.2",
66
+ "vite": "^6.4.2",
67
+ "vitest": "^3.2.4"
68
+ },
69
+ "engines": {
70
+ "node": ">=20"
71
+ },
72
+ "keywords": [
73
+ "ethereum",
74
+ "glamsterdam",
75
+ "compatibility",
76
+ "evm",
77
+ "validator",
78
+ "indexer"
79
+ ]
80
+ }