@pimlico/alto 0.0.0-main.20240607T104359 → 0.0.0-staging.20240606T095015

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 (369) hide show
  1. package/lib/cli/config/bundler.js +73 -76
  2. package/lib/cli/config/bundler.js.map +1 -1
  3. package/lib/cli/config/index.js +2 -18
  4. package/lib/cli/config/index.js.map +1 -1
  5. package/lib/cli/config/options.js +10 -13
  6. package/lib/cli/config/options.js.map +1 -1
  7. package/lib/cli/customTransport.js +7 -11
  8. package/lib/cli/customTransport.js.map +1 -1
  9. package/lib/cli/handler.js +24 -28
  10. package/lib/cli/handler.js.map +1 -1
  11. package/lib/cli/index.d.ts +0 -1
  12. package/lib/cli/index.js +2 -19
  13. package/lib/cli/index.js.map +1 -1
  14. package/lib/cli/instrumentation.js +20 -22
  15. package/lib/cli/instrumentation.js.map +1 -1
  16. package/lib/cli/setupServer.js +17 -21
  17. package/lib/cli/setupServer.js.map +1 -1
  18. package/lib/cli/util.js +1 -5
  19. package/lib/cli/util.js.map +1 -1
  20. package/lib/executor/executor.js +56 -90
  21. package/lib/executor/executor.js.map +1 -1
  22. package/lib/executor/executorManager.js +7 -12
  23. package/lib/executor/executorManager.js.map +1 -1
  24. package/lib/executor/index.js +4 -20
  25. package/lib/executor/index.js.map +1 -1
  26. package/lib/executor/senderManager.js +8 -12
  27. package/lib/executor/senderManager.js.map +1 -1
  28. package/lib/executor/test/utils.js +22 -28
  29. package/lib/executor/test/utils.js.map +1 -1
  30. package/lib/executor/utils.js +32 -64
  31. package/lib/executor/utils.js.map +1 -1
  32. package/lib/index.d.ts +5 -1
  33. package/lib/index.js +91 -3
  34. package/lib/index.js.map +1 -1
  35. package/lib/mempool/index.js +4 -20
  36. package/lib/mempool/index.js.map +1 -1
  37. package/lib/mempool/mempool.js +55 -59
  38. package/lib/mempool/mempool.js.map +1 -1
  39. package/lib/mempool/monitoring.js +1 -5
  40. package/lib/mempool/monitoring.js.map +1 -1
  41. package/lib/mempool/nullMempool.js +1 -5
  42. package/lib/mempool/nullMempool.js.map +1 -1
  43. package/lib/mempool/reputationManager.js +44 -49
  44. package/lib/mempool/reputationManager.js.map +1 -1
  45. package/lib/mempool/store.js +1 -5
  46. package/lib/mempool/store.js.map +1 -1
  47. package/lib/rpc/EntryPointSimulationsV07.js +44 -50
  48. package/lib/rpc/EntryPointSimulationsV07.js.map +1 -1
  49. package/lib/rpc/ExecuteSimulator.js +2 -5
  50. package/lib/rpc/ExecuteSimulator.js.map +1 -1
  51. package/lib/rpc/gasEstimation.js +62 -69
  52. package/lib/rpc/gasEstimation.js.map +1 -1
  53. package/lib/rpc/index.js +4 -20
  54. package/lib/rpc/index.js.map +1 -1
  55. package/lib/rpc/nonceQueuer.js +16 -20
  56. package/lib/rpc/nonceQueuer.js.map +1 -1
  57. package/lib/rpc/rpcHandler.js +76 -103
  58. package/lib/rpc/rpcHandler.js.map +1 -1
  59. package/lib/rpc/server.js +27 -58
  60. package/lib/rpc/server.js.map +1 -1
  61. package/lib/rpc/validation/BundlerCollectorTracerV06.js +1 -5
  62. package/lib/rpc/validation/BundlerCollectorTracerV06.js.map +1 -1
  63. package/lib/rpc/validation/BundlerCollectorTracerV07.js +1 -5
  64. package/lib/rpc/validation/BundlerCollectorTracerV07.js.map +1 -1
  65. package/lib/rpc/validation/SafeValidator.js +65 -69
  66. package/lib/rpc/validation/SafeValidator.js.map +1 -1
  67. package/lib/rpc/validation/TracerResultParserV06.js +26 -30
  68. package/lib/rpc/validation/TracerResultParserV06.js.map +1 -1
  69. package/lib/rpc/validation/TracerResultParserV07.js +29 -36
  70. package/lib/rpc/validation/TracerResultParserV07.js.map +1 -1
  71. package/lib/rpc/validation/UnsafeValidator.js +46 -73
  72. package/lib/rpc/validation/UnsafeValidator.js.map +1 -1
  73. package/lib/rpc/validation/index.js +2 -18
  74. package/lib/rpc/validation/index.js.map +1 -1
  75. package/lib/rpc/validation/tracer.js +7 -37
  76. package/lib/rpc/validation/tracer.js.map +1 -1
  77. package/lib/types/contracts/BundleBulker.js +1 -4
  78. package/lib/types/contracts/BundleBulker.js.map +1 -1
  79. package/lib/types/contracts/CallEngine.js +1 -4
  80. package/lib/types/contracts/CallEngine.js.map +1 -1
  81. package/lib/types/contracts/CodeHashGetter.js +2 -5
  82. package/lib/types/contracts/CodeHashGetter.js.map +1 -1
  83. package/lib/types/contracts/EntryPoint.js +4 -7
  84. package/lib/types/contracts/EntryPoint.js.map +1 -1
  85. package/lib/types/contracts/EntryPointSimulations.js +3 -6
  86. package/lib/types/contracts/EntryPointSimulations.js.map +1 -1
  87. package/lib/types/contracts/IOpInflator.js +1 -4
  88. package/lib/types/contracts/IOpInflator.js.map +1 -1
  89. package/lib/types/contracts/IPaymaster.js +1 -4
  90. package/lib/types/contracts/IPaymaster.js.map +1 -1
  91. package/lib/types/contracts/Inflator.js +1 -4
  92. package/lib/types/contracts/Inflator.js.map +1 -1
  93. package/lib/types/contracts/PerOpInflator.js +1 -4
  94. package/lib/types/contracts/PerOpInflator.js.map +1 -1
  95. package/lib/types/contracts/PimlicoEntryPointSimulations.js +2 -5
  96. package/lib/types/contracts/PimlicoEntryPointSimulations.js.map +1 -1
  97. package/lib/types/contracts/SenderCreator.js +2 -5
  98. package/lib/types/contracts/SenderCreator.js.map +1 -1
  99. package/lib/types/contracts/SimpleAccountFactory.js +2 -5
  100. package/lib/types/contracts/SimpleAccountFactory.js.map +1 -1
  101. package/lib/types/contracts/TestOpcodesAccount.js +2 -5
  102. package/lib/types/contracts/TestOpcodesAccount.js.map +1 -1
  103. package/lib/types/contracts/TestOpcodesAccountFactory.js +2 -5
  104. package/lib/types/contracts/TestOpcodesAccountFactory.js.map +1 -1
  105. package/lib/types/contracts/TestStorageAccount.js +2 -5
  106. package/lib/types/contracts/TestStorageAccount.js.map +1 -1
  107. package/lib/types/contracts/index.js +16 -32
  108. package/lib/types/contracts/index.js.map +1 -1
  109. package/lib/types/gasPrice.js +14 -17
  110. package/lib/types/gasPrice.js.map +1 -1
  111. package/lib/types/index.js +10 -26
  112. package/lib/types/index.js.map +1 -1
  113. package/lib/types/interfaces.js +1 -2
  114. package/lib/types/mempool.d.ts +1 -2
  115. package/lib/types/mempool.js +5 -10
  116. package/lib/types/mempool.js.map +1 -1
  117. package/lib/types/schemas.js +254 -284
  118. package/lib/types/schemas.js.map +1 -1
  119. package/lib/types/test/validationTestErrors.js +2 -5
  120. package/lib/types/test/validationTestErrors.js.map +1 -1
  121. package/lib/types/utils.js +5 -9
  122. package/lib/types/utils.js.map +1 -1
  123. package/lib/types/validation.js +139 -142
  124. package/lib/types/validation.js.map +1 -1
  125. package/lib/utils/bigInt.js +2 -7
  126. package/lib/utils/bigInt.js.map +1 -1
  127. package/lib/utils/compressionHandler.js +7 -11
  128. package/lib/utils/compressionHandler.js.map +1 -1
  129. package/lib/utils/gasPriceManager.js +30 -57
  130. package/lib/utils/gasPriceManager.js.map +1 -1
  131. package/lib/utils/helpers.js +5 -10
  132. package/lib/utils/helpers.js.map +1 -1
  133. package/lib/utils/index.js +9 -25
  134. package/lib/utils/index.js.map +1 -1
  135. package/lib/utils/logger.js +10 -19
  136. package/lib/utils/logger.js.map +1 -1
  137. package/lib/utils/metrics.js +20 -24
  138. package/lib/utils/metrics.js.map +1 -1
  139. package/lib/utils/rpc-reply.js +1 -3
  140. package/lib/utils/rpc-reply.js.map +1 -1
  141. package/lib/utils/test.js +36 -67
  142. package/lib/utils/test.js.map +1 -1
  143. package/lib/utils/userop.js +62 -107
  144. package/lib/utils/userop.js.map +1 -1
  145. package/lib/utils/validation.js +64 -99
  146. package/lib/utils/validation.js.map +1 -1
  147. package/package.json +68 -70
  148. package/esm/cli/alto.d.ts +0 -6
  149. package/esm/cli/alto.js +0 -92
  150. package/esm/cli/alto.js.map +0 -1
  151. package/esm/cli/config/bundler.d.ts +0 -391
  152. package/esm/cli/config/bundler.js +0 -132
  153. package/esm/cli/config/bundler.js.map +0 -1
  154. package/esm/cli/config/index.d.ts +0 -3
  155. package/esm/cli/config/index.js +0 -3
  156. package/esm/cli/config/index.js.map +0 -1
  157. package/esm/cli/config/options.d.ts +0 -11
  158. package/esm/cli/config/options.js +0 -336
  159. package/esm/cli/config/options.js.map +0 -1
  160. package/esm/cli/customTransport.d.ts +0 -14
  161. package/esm/cli/customTransport.js +0 -53
  162. package/esm/cli/customTransport.js.map +0 -1
  163. package/esm/cli/handler.d.ts +0 -3
  164. package/esm/cli/handler.js +0 -116
  165. package/esm/cli/handler.js.map +0 -1
  166. package/esm/cli/index.d.ts +0 -4
  167. package/esm/cli/index.js +0 -4
  168. package/esm/cli/index.js.map +0 -1
  169. package/esm/cli/instrumentation.d.ts +0 -2
  170. package/esm/cli/instrumentation.js +0 -39
  171. package/esm/cli/instrumentation.js.map +0 -1
  172. package/esm/cli/setupServer.d.ts +0 -17
  173. package/esm/cli/setupServer.js +0 -155
  174. package/esm/cli/setupServer.js.map +0 -1
  175. package/esm/cli/util.d.ts +0 -22
  176. package/esm/cli/util.js +0 -30
  177. package/esm/cli/util.js.map +0 -1
  178. package/esm/executor/executor.d.ts +0 -54
  179. package/esm/executor/executor.js +0 -643
  180. package/esm/executor/executor.js.map +0 -1
  181. package/esm/executor/executorManager.d.ts +0 -34
  182. package/esm/executor/executorManager.js +0 -402
  183. package/esm/executor/executorManager.js.map +0 -1
  184. package/esm/executor/index.d.ts +0 -5
  185. package/esm/executor/index.js +0 -5
  186. package/esm/executor/index.js.map +0 -1
  187. package/esm/executor/senderManager.d.ts +0 -17
  188. package/esm/executor/senderManager.js +0 -160
  189. package/esm/executor/senderManager.js.map +0 -1
  190. package/esm/executor/test/utils.d.ts +0 -13
  191. package/esm/executor/test/utils.js +0 -75
  192. package/esm/executor/test/utils.js.map +0 -1
  193. package/esm/executor/utils.d.ts +0 -32
  194. package/esm/executor/utils.js +0 -241
  195. package/esm/executor/utils.js.map +0 -1
  196. package/esm/index.d.ts +0 -2
  197. package/esm/index.js +0 -2
  198. package/esm/index.js.map +0 -1
  199. package/esm/mempool/index.d.ts +0 -5
  200. package/esm/mempool/index.js +0 -5
  201. package/esm/mempool/index.js.map +0 -1
  202. package/esm/mempool/mempool.d.ts +0 -64
  203. package/esm/mempool/mempool.js +0 -489
  204. package/esm/mempool/mempool.js.map +0 -1
  205. package/esm/mempool/monitoring.d.ts +0 -10
  206. package/esm/mempool/monitoring.js +0 -34
  207. package/esm/mempool/monitoring.js.map +0 -1
  208. package/esm/mempool/nullMempool.d.ts +0 -15
  209. package/esm/mempool/nullMempool.js +0 -36
  210. package/esm/mempool/nullMempool.js.map +0 -1
  211. package/esm/mempool/reputationManager.d.ts +0 -115
  212. package/esm/mempool/reputationManager.js +0 -397
  213. package/esm/mempool/reputationManager.js.map +0 -1
  214. package/esm/mempool/store.d.ts +0 -22
  215. package/esm/mempool/store.js +0 -123
  216. package/esm/mempool/store.js.map +0 -1
  217. package/esm/rpc/EntryPointSimulationsV07.d.ts +0 -58
  218. package/esm/rpc/EntryPointSimulationsV07.js +0 -407
  219. package/esm/rpc/EntryPointSimulationsV07.js.map +0 -1
  220. package/esm/rpc/ExecuteSimulator.d.ts +0 -37
  221. package/esm/rpc/ExecuteSimulator.js +0 -48
  222. package/esm/rpc/ExecuteSimulator.js.map +0 -1
  223. package/esm/rpc/gasEstimation.d.ts +0 -17
  224. package/esm/rpc/gasEstimation.js +0 -410
  225. package/esm/rpc/gasEstimation.js.map +0 -1
  226. package/esm/rpc/index.d.ts +0 -5
  227. package/esm/rpc/index.js +0 -5
  228. package/esm/rpc/index.js.map +0 -1
  229. package/esm/rpc/nonceQueuer.d.ts +0 -25
  230. package/esm/rpc/nonceQueuer.js +0 -135
  231. package/esm/rpc/nonceQueuer.js.map +0 -1
  232. package/esm/rpc/rpcHandler.d.ts +0 -64
  233. package/esm/rpc/rpcHandler.js +0 -727
  234. package/esm/rpc/rpcHandler.js.map +0 -1
  235. package/esm/rpc/server.d.ts +0 -31
  236. package/esm/rpc/server.js +0 -239
  237. package/esm/rpc/server.js.map +0 -1
  238. package/esm/rpc/validation/BundlerCollectorTracerV06.d.ts +0 -102
  239. package/esm/rpc/validation/BundlerCollectorTracerV06.js +0 -255
  240. package/esm/rpc/validation/BundlerCollectorTracerV06.js.map +0 -1
  241. package/esm/rpc/validation/BundlerCollectorTracerV07.d.ts +0 -102
  242. package/esm/rpc/validation/BundlerCollectorTracerV07.js +0 -254
  243. package/esm/rpc/validation/BundlerCollectorTracerV07.js.map +0 -1
  244. package/esm/rpc/validation/SafeValidator.d.ts +0 -35
  245. package/esm/rpc/validation/SafeValidator.js +0 -487
  246. package/esm/rpc/validation/SafeValidator.js.map +0 -1
  247. package/esm/rpc/validation/TracerResultParserV06.d.ts +0 -13
  248. package/esm/rpc/validation/TracerResultParserV06.js +0 -578
  249. package/esm/rpc/validation/TracerResultParserV06.js.map +0 -1
  250. package/esm/rpc/validation/TracerResultParserV07.d.ts +0 -33
  251. package/esm/rpc/validation/TracerResultParserV07.js +0 -557
  252. package/esm/rpc/validation/TracerResultParserV07.js.map +0 -1
  253. package/esm/rpc/validation/UnsafeValidator.d.ts +0 -63
  254. package/esm/rpc/validation/UnsafeValidator.js +0 -257
  255. package/esm/rpc/validation/UnsafeValidator.js.map +0 -1
  256. package/esm/rpc/validation/index.d.ts +0 -3
  257. package/esm/rpc/validation/index.js +0 -3
  258. package/esm/rpc/validation/index.js.map +0 -1
  259. package/esm/rpc/validation/tracer.d.ts +0 -122
  260. package/esm/rpc/validation/tracer.js +0 -82
  261. package/esm/rpc/validation/tracer.js.map +0 -1
  262. package/esm/types/contracts/BundleBulker.d.ts +0 -120
  263. package/esm/types/contracts/BundleBulker.js +0 -157
  264. package/esm/types/contracts/BundleBulker.js.map +0 -1
  265. package/esm/types/contracts/CallEngine.d.ts +0 -28
  266. package/esm/types/contracts/CallEngine.js +0 -37
  267. package/esm/types/contracts/CallEngine.js.map +0 -1
  268. package/esm/types/contracts/CodeHashGetter.d.ts +0 -37
  269. package/esm/types/contracts/CodeHashGetter.js +0 -45
  270. package/esm/types/contracts/CodeHashGetter.js.map +0 -1
  271. package/esm/types/contracts/EntryPoint.d.ts +0 -1789
  272. package/esm/types/contracts/EntryPoint.js +0 -2304
  273. package/esm/types/contracts/EntryPoint.js.map +0 -1
  274. package/esm/types/contracts/EntryPointSimulations.d.ts +0 -153
  275. package/esm/types/contracts/EntryPointSimulations.js +0 -15
  276. package/esm/types/contracts/EntryPointSimulations.js.map +0 -1
  277. package/esm/types/contracts/IOpInflator.d.ts +0 -61
  278. package/esm/types/contracts/IOpInflator.js +0 -80
  279. package/esm/types/contracts/IOpInflator.js.map +0 -1
  280. package/esm/types/contracts/IPaymaster.d.ts +0 -3
  281. package/esm/types/contracts/IPaymaster.js +0 -117
  282. package/esm/types/contracts/IPaymaster.js.map +0 -1
  283. package/esm/types/contracts/Inflator.d.ts +0 -65
  284. package/esm/types/contracts/Inflator.js +0 -84
  285. package/esm/types/contracts/Inflator.js.map +0 -1
  286. package/esm/types/contracts/PerOpInflator.d.ts +0 -176
  287. package/esm/types/contracts/PerOpInflator.js +0 -229
  288. package/esm/types/contracts/PerOpInflator.js.map +0 -1
  289. package/esm/types/contracts/PimlicoEntryPointSimulations.d.ts +0 -23
  290. package/esm/types/contracts/PimlicoEntryPointSimulations.js +0 -33
  291. package/esm/types/contracts/PimlicoEntryPointSimulations.js.map +0 -1
  292. package/esm/types/contracts/SenderCreator.d.ts +0 -4
  293. package/esm/types/contracts/SenderCreator.js +0 -23
  294. package/esm/types/contracts/SenderCreator.js.map +0 -1
  295. package/esm/types/contracts/SimpleAccountFactory.d.ts +0 -57
  296. package/esm/types/contracts/SimpleAccountFactory.js +0 -76
  297. package/esm/types/contracts/SimpleAccountFactory.js.map +0 -1
  298. package/esm/types/contracts/TestOpcodesAccount.d.ts +0 -4
  299. package/esm/types/contracts/TestOpcodesAccount.js +0 -281
  300. package/esm/types/contracts/TestOpcodesAccount.js.map +0 -1
  301. package/esm/types/contracts/TestOpcodesAccountFactory.d.ts +0 -4
  302. package/esm/types/contracts/TestOpcodesAccountFactory.js +0 -23
  303. package/esm/types/contracts/TestOpcodesAccountFactory.js.map +0 -1
  304. package/esm/types/contracts/TestStorageAccount.d.ts +0 -4
  305. package/esm/types/contracts/TestStorageAccount.js +0 -313
  306. package/esm/types/contracts/TestStorageAccount.js.map +0 -1
  307. package/esm/types/contracts/index.d.ts +0 -17
  308. package/esm/types/contracts/index.js +0 -17
  309. package/esm/types/contracts/index.js.map +0 -1
  310. package/esm/types/gasPrice.d.ts +0 -110
  311. package/esm/types/gasPrice.js +0 -52
  312. package/esm/types/gasPrice.js.map +0 -1
  313. package/esm/types/index.d.ts +0 -11
  314. package/esm/types/index.js +0 -11
  315. package/esm/types/index.js.map +0 -1
  316. package/esm/types/interfaces.d.ts +0 -26
  317. package/esm/types/interfaces.js +0 -2
  318. package/esm/types/interfaces.js.map +0 -1
  319. package/esm/types/mempool.d.ts +0 -79
  320. package/esm/types/mempool.js +0 -16
  321. package/esm/types/mempool.js.map +0 -1
  322. package/esm/types/schemas.d.ts +0 -4791
  323. package/esm/types/schemas.js +0 -497
  324. package/esm/types/schemas.js.map +0 -1
  325. package/esm/types/test/validationTestErrors.d.ts +0 -3
  326. package/esm/types/test/validationTestErrors.js +0 -229
  327. package/esm/types/test/validationTestErrors.js.map +0 -1
  328. package/esm/types/utils.d.ts +0 -24
  329. package/esm/types/utils.js +0 -30
  330. package/esm/types/utils.js.map +0 -1
  331. package/esm/types/validation.d.ts +0 -14327
  332. package/esm/types/validation.js +0 -304
  333. package/esm/types/validation.js.map +0 -1
  334. package/esm/utils/bigInt.d.ts +0 -3
  335. package/esm/utils/bigInt.js +0 -9
  336. package/esm/utils/bigInt.js.map +0 -1
  337. package/esm/utils/compressionHandler.d.ts +0 -11
  338. package/esm/utils/compressionHandler.js +0 -39
  339. package/esm/utils/compressionHandler.js.map +0 -1
  340. package/esm/utils/gasPriceManager.d.ts +0 -34
  341. package/esm/utils/gasPriceManager.js +0 -338
  342. package/esm/utils/gasPriceManager.js.map +0 -1
  343. package/esm/utils/helpers.d.ts +0 -4
  344. package/esm/utils/helpers.js +0 -13
  345. package/esm/utils/helpers.js.map +0 -1
  346. package/esm/utils/index.d.ts +0 -11
  347. package/esm/utils/index.js +0 -10
  348. package/esm/utils/index.js.map +0 -1
  349. package/esm/utils/logger.d.ts +0 -6
  350. package/esm/utils/logger.js +0 -76
  351. package/esm/utils/logger.js.map +0 -1
  352. package/esm/utils/metrics.d.ts +0 -22
  353. package/esm/utils/metrics.js +0 -150
  354. package/esm/utils/metrics.js.map +0 -1
  355. package/esm/utils/rpc-reply.d.ts +0 -17
  356. package/esm/utils/rpc-reply.js +0 -41
  357. package/esm/utils/rpc-reply.js.map +0 -1
  358. package/esm/utils/test.d.ts +0 -17
  359. package/esm/utils/test.js +0 -130
  360. package/esm/utils/test.js.map +0 -1
  361. package/esm/utils/userop.d.ts +0 -49
  362. package/esm/utils/userop.js +0 -408
  363. package/esm/utils/userop.js.map +0 -1
  364. package/esm/utils/validation.d.ts +0 -65
  365. package/esm/utils/validation.js +0 -461
  366. package/esm/utils/validation.js.map +0 -1
  367. package/lib/cli/alto.d.ts +0 -6
  368. package/lib/cli/alto.js +0 -123
  369. package/lib/cli/alto.js.map +0 -1
@@ -1,255 +0,0 @@
1
- // javascript code of tracer function
2
- // NOTE: we process this locally for hardhat, but send to geth for remote tracing.
3
- // should NOT "require" anything, or use logs.
4
- // see LogTrace for valid types (but alas, this one must be javascript, not typescript).
5
- /**
6
- * tracer to collect data for opcode banning.
7
- * this method is passed as the "tracer" for eth_traceCall (note, the function itself)
8
- *
9
- * returned data:
10
- * numberLevels: opcodes and memory access, split on execution of "number" opcode.
11
- * keccak: input data of keccak opcode.
12
- * calls: for each call, an array of [type, from, to, value]
13
- * slots: accessed slots (on any address)
14
- */
15
- export function bundlerCollectorTracer() {
16
- return {
17
- callsFromEntryPoint: [],
18
- // biome-ignore lint/suspicious/noExplicitAny: it's a generic type
19
- currentLevel: null,
20
- keccak: [],
21
- calls: [],
22
- logs: [],
23
- debug: [],
24
- lastOp: "",
25
- lastThreeOpcodes: [],
26
- // event sent after all validations are done: keccak("BeforeExecution()")
27
- stopCollectingTopic: "bb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972",
28
- stopCollecting: false,
29
- topLevelCallCounter: 0,
30
- fault(log, _db) {
31
- this.debug.push(JSON.stringify({
32
- type: "fault",
33
- depth: log.getDepth(),
34
- gas: log.getGas(),
35
- cost: log.getCost(),
36
- err: log.getError()
37
- }));
38
- },
39
- result(_ctx, _db) {
40
- return {
41
- callsFromEntryPoint: this.callsFromEntryPoint,
42
- keccak: this.keccak,
43
- logs: this.logs,
44
- calls: this.calls,
45
- debug: this.debug // for internal debugging.
46
- };
47
- },
48
- enter(frame) {
49
- if (this.stopCollecting) {
50
- return;
51
- }
52
- this.calls.push({
53
- type: frame.getType(),
54
- from: toHex(frame.getFrom()),
55
- to: toHex(frame.getTo()),
56
- method: toHex(frame.getInput()).slice(0, 10),
57
- gas: frame.getGas(),
58
- value: frame.getValue()
59
- });
60
- },
61
- exit(frame) {
62
- if (this.stopCollecting) {
63
- return;
64
- }
65
- this.calls.push({
66
- type: frame.getError() != null ? "REVERT" : "RETURN",
67
- gasUsed: frame.getGasUsed(),
68
- data: toHex(frame.getOutput()).slice(0, 4000)
69
- });
70
- },
71
- // increment the "key" in the list. if the key is not defined yet, then set it to "1"
72
- // biome-ignore lint/suspicious/noExplicitAny: it's a generic type
73
- countSlot(list, key) {
74
- if (list[key]) {
75
- // @ts-ignore
76
- list[key] += 1;
77
- }
78
- else {
79
- list[key] = 1;
80
- }
81
- },
82
- // biome-ignore lint/suspicious/noExplicitAny: it's a generic type
83
- step(log, db) {
84
- if (this.stopCollecting) {
85
- return;
86
- }
87
- const opcode = log.op.toString();
88
- const stackSize = log.stack.length();
89
- const stackTop3 = [];
90
- for (let i = 0; i < 3 && i < stackSize; i++) {
91
- stackTop3.push(log.stack.peek(i));
92
- }
93
- this.lastThreeOpcodes.push({ opcode, stackTop3 });
94
- if (this.lastThreeOpcodes.length > 3) {
95
- this.lastThreeOpcodes.shift();
96
- }
97
- if (log.getGas() < log.getCost() ||
98
- // special rule for SSTORE with gas metering
99
- (opcode === "SSTORE" && log.getGas() < 2300)) {
100
- this.currentLevel.oog = true;
101
- }
102
- if (opcode === "REVERT" || opcode === "RETURN") {
103
- if (log.getDepth() === 1) {
104
- // exit() is not called on top-level return/revent, so we reconstruct it
105
- // from opcode
106
- const ofs = Number.parseInt(log.stack.peek(0).toString());
107
- const len = Number.parseInt(log.stack.peek(1).toString());
108
- const data = toHex(log.memory.slice(ofs, ofs + len)).slice(0, 4000);
109
- // this.debug.push(opcode + ' ' + data)
110
- this.calls.push({
111
- type: opcode,
112
- gasUsed: 0,
113
- data
114
- });
115
- }
116
- // NOTE: flushing all history after RETURN
117
- this.lastThreeOpcodes = [];
118
- }
119
- if (log.getDepth() === 1) {
120
- if (opcode === "CALL" || opcode === "STATICCALL") {
121
- // stack.peek(0) - gas
122
- const addr = toAddress(log.stack.peek(1).toString(16));
123
- const topLevelTargetAddress = toHex(addr);
124
- // stack.peek(2) - value
125
- const ofs = Number.parseInt(log.stack.peek(3).toString());
126
- // stack.peek(4) - len
127
- const topLevelMethodSig = toHex(log.memory.slice(ofs, ofs + 4));
128
- this.currentLevel = this.callsFromEntryPoint[this.topLevelCallCounter] = {
129
- topLevelMethodSig,
130
- topLevelTargetAddress,
131
- access: {},
132
- opcodes: {},
133
- extCodeAccessInfo: {},
134
- contractSize: {}
135
- };
136
- this.topLevelCallCounter++;
137
- }
138
- else if (opcode === "LOG1") {
139
- // ignore log data ofs, len
140
- const topic = log.stack.peek(2).toString(16);
141
- if (topic === this.stopCollectingTopic) {
142
- this.stopCollecting = true;
143
- }
144
- }
145
- this.lastOp = "";
146
- return;
147
- }
148
- const lastOpInfo = this.lastThreeOpcodes[this.lastThreeOpcodes.length - 2];
149
- // store all addresses touched by EXTCODE* opcodes
150
- if (lastOpInfo &&
151
- lastOpInfo.opcode &&
152
- lastOpInfo.opcode.match(/^(EXT.*)$/) != null) {
153
- const addr = toAddress(lastOpInfo.stackTop3[0].toString(16));
154
- const addrHex = toHex(addr);
155
- // [OP-051]
156
- if (!(this.lastThreeOpcodes[0].opcode.match(/\w+/) !== null &&
157
- this.lastThreeOpcodes[1].opcode === "EXTCODESIZE" &&
158
- this.lastThreeOpcodes[2].opcode === "ISZERO")) {
159
- this.currentLevel.extCodeAccessInfo[addrHex] = opcode;
160
- }
161
- // this.debug.push({
162
- // last3opcodes: JSON.stringify(this.lastThreeOpcodes.map(x => x.opcode)),
163
- // extCodeAccessInfo: this.currentLevel.extCodeAccessInfo
164
- // })
165
- }
166
- // not using 'isPrecompiled' to only allow the ones defined by the ERC-4337 as stateless precompiles
167
- // [OP-062]
168
- // biome-ignore lint/suspicious/noExplicitAny: it's a generic type
169
- const isAllowedPrecompiled = (address) => {
170
- const addrHex = toHex(address);
171
- const addressInt = Number.parseInt(addrHex);
172
- // this.debug.push(`isPrecompiled address=${addrHex} addressInt=${addressInt}`)
173
- return addressInt > 0 && addressInt < 10;
174
- };
175
- // [OP-041]
176
- if (opcode.match(/^(EXT.*|CALL|CALLCODE|DELEGATECALL|STATICCALL)$/) != null) {
177
- const idx = opcode.startsWith("EXT") ? 0 : 1;
178
- const addr = toAddress(log.stack.peek(idx).toString(16));
179
- const addrHex = toHex(addr);
180
- // this.debug.push('op=' + opcode + ' last=' + this.lastOp + ' stacksize=' + log.stack.length() + ' addr=' + addrHex)
181
- if (this.currentLevel.contractSize[addrHex] == null &&
182
- !isAllowedPrecompiled(addr)) {
183
- this.currentLevel.contractSize[addrHex] = {
184
- contractSize: db.getCode(addr).length,
185
- opcode
186
- };
187
- }
188
- }
189
- // [OP-012]
190
- if (this.lastOp === "GAS" && !opcode.includes("CALL")) {
191
- // count "GAS" opcode only if not followed by "CALL"
192
- this.countSlot(this.currentLevel.opcodes, "GAS");
193
- }
194
- if (opcode !== "GAS") {
195
- // ignore "unimportant" opcodes:
196
- if (opcode.match(/^(DUP\d+|PUSH\d+|SWAP\d+|POP|ADD|SUB|MUL|DIV|EQ|LTE?|S?GTE?|SLT|SH[LR]|AND|OR|NOT|ISZERO)$/) == null) {
197
- this.countSlot(this.currentLevel.opcodes, opcode);
198
- }
199
- }
200
- this.lastOp = opcode;
201
- if (opcode === "SLOAD" || opcode === "SSTORE") {
202
- const slot = toWord(log.stack.peek(0).toString(16));
203
- const slotHex = toHex(slot);
204
- const addr = log.contract.getAddress();
205
- const addrHex = toHex(addr);
206
- let access = this.currentLevel.access[addrHex];
207
- if (access == null) {
208
- access = {
209
- reads: {},
210
- writes: {}
211
- };
212
- this.currentLevel.access[addrHex] = access;
213
- }
214
- if (opcode === "SLOAD") {
215
- // read slot values before this UserOp was created
216
- // (so saving it if it was written before the first read)
217
- if (access.reads[slotHex] == null &&
218
- access.writes[slotHex] == null) {
219
- access.reads[slotHex] = toHex(db.getState(addr, slot));
220
- }
221
- }
222
- else {
223
- this.countSlot(access.writes, slotHex);
224
- }
225
- }
226
- if (opcode === "KECCAK256") {
227
- // collect keccak on 64-byte blocks
228
- const ofs = Number.parseInt(log.stack.peek(0).toString());
229
- const len = Number.parseInt(log.stack.peek(1).toString());
230
- // currently, solidity uses only 2-word (6-byte) for a key. this might change..
231
- // still, no need to return too much
232
- if (len > 20 && len < 512) {
233
- // if (len === 64) {
234
- this.keccak.push(toHex(log.memory.slice(ofs, ofs + len)));
235
- }
236
- }
237
- else if (opcode.startsWith("LOG")) {
238
- const count = Number.parseInt(opcode.substring(3));
239
- const ofs = Number.parseInt(log.stack.peek(0).toString());
240
- const len = Number.parseInt(log.stack.peek(1).toString());
241
- const topics = [];
242
- for (let i = 0; i < count; i++) {
243
- // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
244
- topics.push("0x" + log.stack.peek(2 + i).toString(16));
245
- }
246
- const data = toHex(log.memory.slice(ofs, ofs + len));
247
- this.logs.push({
248
- topics,
249
- data
250
- });
251
- }
252
- }
253
- };
254
- }
255
- //# sourceMappingURL=BundlerCollectorTracerV06.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BundlerCollectorTracerV06.js","sourceRoot":"","sources":["../../../rpc/validation/BundlerCollectorTracerV06.ts"],"names":[],"mappings":"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"}
@@ -1,102 +0,0 @@
1
- import type { Address, Hex } from "viem";
2
- import type { LogTracer } from "./tracer.js";
3
- /**
4
- * return type of our BundlerCollectorTracer.
5
- * collect access and opcodes, split into "levels" based on NUMBER opcode
6
- * keccak, calls and logs are collected globally, since the levels are unimportant for them.
7
- */
8
- export interface BundlerTracerResult {
9
- /**
10
- * storage and opcode info, collected on top-level calls from EntryPoint
11
- */
12
- callsFromEntryPoint: TopLevelCallInfo[];
13
- /**
14
- * values passed into KECCAK opcode
15
- */
16
- keccak: Hex[];
17
- calls: Array<ExitInfo | MethodInfo>;
18
- logs: LogInfo[];
19
- debug: any[];
20
- }
21
- export interface MethodInfo {
22
- type: string;
23
- from: Address;
24
- to: Address;
25
- method: string;
26
- value: bigint;
27
- gas: number;
28
- }
29
- export interface ExitInfo {
30
- type: "REVERT" | "RETURN";
31
- gasUsed: number;
32
- data: Hex;
33
- }
34
- export interface TopLevelCallInfo {
35
- topLevelMethodSig: Hex;
36
- topLevelTargetAddress: Address;
37
- opcodes: {
38
- [opcode: string]: number;
39
- };
40
- access: {
41
- [address: string]: AccessInfo;
42
- };
43
- contractSize: {
44
- [addr: string]: ContractSizeInfo;
45
- };
46
- extCodeAccessInfo: {
47
- [addr: string]: string;
48
- };
49
- oog?: boolean;
50
- }
51
- /**
52
- * It is illegal to access contracts with no code in validation even if it gets deployed later.
53
- * This means we need to store the {@link contractSize} of accessed addresses at the time of access.
54
- */
55
- export interface ContractSizeInfo {
56
- opcode: string;
57
- contractSize: number;
58
- }
59
- export interface AccessInfo {
60
- reads: {
61
- [slot: string]: string;
62
- };
63
- writes: {
64
- [slot: string]: number;
65
- };
66
- }
67
- export interface LogInfo {
68
- topics: string[];
69
- data: string;
70
- }
71
- interface RelevantStepData {
72
- opcode: string;
73
- stackTop3: any[];
74
- }
75
- /**
76
- * type-safe local storage of our collector. contains all return-value properties.
77
- * (also defines all "trace-local" variables and functions)
78
- */
79
- interface BundlerCollectorTracer extends LogTracer, BundlerTracerResult {
80
- lastOp: string;
81
- lastThreeOpcodes: RelevantStepData[];
82
- stopCollectingTopic: string;
83
- stopCollecting: boolean;
84
- currentLevel: TopLevelCallInfo;
85
- topLevelCallCounter: number;
86
- countSlot: (list: {
87
- [key: string]: number | undefined;
88
- }, key: any) => void;
89
- }
90
- /**
91
- * tracer to collect data for opcode banning.
92
- * this method is passed as the "tracer" for eth_traceCall (note, the function itself)
93
- *
94
- * returned data:
95
- * numberLevels: opcodes and memory access, split on execution of "number" opcode.
96
- * keccak: input data of keccak opcode.
97
- * calls: for each call, an array of [type, from, to, value]
98
- * slots: accessed slots (on any address)
99
- */
100
- export declare function bundlerCollectorTracer(): BundlerCollectorTracer;
101
- export {};
102
- //# sourceMappingURL=BundlerCollectorTracerV07.d.ts.map
@@ -1,254 +0,0 @@
1
- // javascript code of tracer function
2
- // NOTE: we process this locally for hardhat, but send to geth for remote tracing.
3
- // should NOT "require" anything, or use logs.
4
- // see LogTrace for valid types (but alas, this one must be javascript, not typescript).
5
- /**
6
- * tracer to collect data for opcode banning.
7
- * this method is passed as the "tracer" for eth_traceCall (note, the function itself)
8
- *
9
- * returned data:
10
- * numberLevels: opcodes and memory access, split on execution of "number" opcode.
11
- * keccak: input data of keccak opcode.
12
- * calls: for each call, an array of [type, from, to, value]
13
- * slots: accessed slots (on any address)
14
- */
15
- export function bundlerCollectorTracer() {
16
- return {
17
- callsFromEntryPoint: [],
18
- // biome-ignore lint/suspicious/noExplicitAny: it's a generic type
19
- currentLevel: null,
20
- keccak: [],
21
- calls: [],
22
- logs: [],
23
- debug: [],
24
- lastOp: "",
25
- lastThreeOpcodes: [],
26
- // event sent after all validations are done: keccak("BeforeExecution()")
27
- stopCollectingTopic: "bb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972",
28
- stopCollecting: false,
29
- topLevelCallCounter: 0,
30
- fault(log, _db) {
31
- this.debug.push(JSON.stringify({
32
- type: "fault",
33
- depth: log.getDepth(),
34
- gas: log.getGas(),
35
- cost: log.getCost(),
36
- err: log.getError()
37
- }));
38
- },
39
- result(_ctx, _db) {
40
- return {
41
- callsFromEntryPoint: this.callsFromEntryPoint,
42
- keccak: this.keccak,
43
- logs: this.logs,
44
- calls: this.calls,
45
- debug: this.debug // for internal debugging.
46
- };
47
- },
48
- enter(frame) {
49
- if (this.stopCollecting) {
50
- return;
51
- }
52
- this.calls.push({
53
- type: frame.getType(),
54
- from: toHex(frame.getFrom()),
55
- to: toHex(frame.getTo()),
56
- method: toHex(frame.getInput()).slice(0, 10),
57
- gas: frame.getGas(),
58
- value: frame.getValue()
59
- });
60
- },
61
- exit(frame) {
62
- if (this.stopCollecting) {
63
- return;
64
- }
65
- this.calls.push({
66
- type: frame.getError() != null ? "REVERT" : "RETURN",
67
- gasUsed: frame.getGasUsed(),
68
- data: toHex(frame.getOutput()).slice(0, 4000)
69
- });
70
- },
71
- // increment the "key" in the list. if the key is not defined yet, then set it to "1"
72
- // biome-ignore lint/suspicious/noExplicitAny: it's a generic type
73
- countSlot(list, key) {
74
- if (list[key]) {
75
- // @ts-ignore
76
- list[key] += 1;
77
- }
78
- else {
79
- list[key] = 1;
80
- }
81
- },
82
- // biome-ignore lint/suspicious/noExplicitAny: it's a generic type
83
- step(log, db) {
84
- if (log.getDepth() < 3) {
85
- return;
86
- }
87
- if (this.stopCollecting) {
88
- return;
89
- }
90
- const opcode = log.op.toString();
91
- const stackSize = log.stack.length();
92
- const stackTop3 = [];
93
- for (let i = 0; i < 3 && i < stackSize; i++) {
94
- stackTop3.push(log.stack.peek(i));
95
- }
96
- this.lastThreeOpcodes.push({ opcode, stackTop3 });
97
- if (this.lastThreeOpcodes.length > 3) {
98
- this.lastThreeOpcodes.shift();
99
- }
100
- if (log.getGas() < log.getCost() ||
101
- // special rule for SSTORE with gas metering
102
- (opcode === "SSTORE" && log.getGas() < 2300)) {
103
- this.currentLevel.oog = true;
104
- }
105
- if (opcode === "REVERT" || opcode === "RETURN") {
106
- if (log.getDepth() === 3) {
107
- // exit() is not called on top-level return/revent, so we reconstruct it
108
- // from opcode
109
- const ofs = Number.parseInt(log.stack.peek(0).toString());
110
- const len = Number.parseInt(log.stack.peek(1).toString());
111
- const data = toHex(log.memory.slice(ofs, ofs + len)).slice(0, 4000);
112
- // this.debug.push(opcode + ' ' + data)
113
- this.calls.push({
114
- type: opcode,
115
- gasUsed: 0,
116
- data
117
- });
118
- }
119
- // NOTE: flushing all history after RETURN
120
- this.lastThreeOpcodes = [];
121
- }
122
- if (log.getDepth() === 3) {
123
- if (opcode === "CALL" || opcode === "STATICCALL") {
124
- // stack.peek(0) - gas
125
- const addr = toAddress(log.stack.peek(1).toString(16));
126
- const topLevelTargetAddress = toHex(addr);
127
- // stack.peek(2) - value
128
- const ofs = Number.parseInt(log.stack.peek(3).toString());
129
- // stack.peek(4) - len
130
- const topLevelMethodSig = toHex(log.memory.slice(ofs, ofs + 4));
131
- this.currentLevel = this.callsFromEntryPoint[this.topLevelCallCounter] = {
132
- topLevelMethodSig,
133
- topLevelTargetAddress,
134
- access: {},
135
- opcodes: {},
136
- extCodeAccessInfo: {},
137
- contractSize: {}
138
- };
139
- this.topLevelCallCounter++;
140
- }
141
- else if (opcode === "LOG1") {
142
- // ignore log data ofs, len
143
- const topic = log.stack.peek(2).toString(16);
144
- if (topic === this.stopCollectingTopic) {
145
- this.stopCollecting = true;
146
- }
147
- }
148
- this.lastOp = "";
149
- return;
150
- }
151
- const lastOpInfo = this.lastThreeOpcodes[this.lastThreeOpcodes.length - 2];
152
- // store all addresses touched by EXTCODE* opcodes
153
- if (lastOpInfo &&
154
- lastOpInfo.opcode &&
155
- lastOpInfo.opcode.match(/^(EXT.*)$/) != null) {
156
- const addr = toAddress(lastOpInfo.stackTop3[0].toString(16));
157
- const addrHex = toHex(addr);
158
- // [OP-051]
159
- if (!(this.lastThreeOpcodes[0].opcode.match(/\w+/) !== null &&
160
- this.lastThreeOpcodes[1].opcode === "EXTCODESIZE" &&
161
- this.lastThreeOpcodes[2].opcode === "ISZERO")) {
162
- this.currentLevel.extCodeAccessInfo[addrHex] = opcode;
163
- }
164
- }
165
- // not using 'isPrecompiled' to only allow the ones defined by the ERC-4337 as stateless precompiles
166
- // [OP-062]
167
- // biome-ignore lint/suspicious/noExplicitAny: it's a generic type
168
- const isAllowedPrecompiled = (address) => {
169
- const addrHex = toHex(address);
170
- const addressInt = Number.parseInt(addrHex);
171
- // this.debug.push(`isPrecompiled address=${addrHex} addressInt=${addressInt}`)
172
- return addressInt > 0 && addressInt < 10;
173
- };
174
- // [OP-041]
175
- if (opcode.match(/^(EXT.*|CALL|CALLCODE|DELEGATECALL|STATICCALL)$/) != null) {
176
- const idx = opcode.startsWith("EXT") ? 0 : 1;
177
- const addr = toAddress(log.stack.peek(idx).toString(16));
178
- const addrHex = toHex(addr);
179
- // this.debug.push('op=' + opcode + ' last=' + this.lastOp + ' stacksize=' + log.stack.length() + ' addr=' + addrHex)
180
- if (this.currentLevel.contractSize[addrHex] == null &&
181
- !isAllowedPrecompiled(addr)) {
182
- this.currentLevel.contractSize[addrHex] = {
183
- contractSize: db.getCode(addr).length,
184
- opcode
185
- };
186
- }
187
- }
188
- // [OP-012]
189
- if (this.lastOp === "GAS" && !opcode.includes("CALL")) {
190
- // count "GAS" opcode only if not followed by "CALL"
191
- this.countSlot(this.currentLevel.opcodes, "GAS");
192
- }
193
- if (opcode !== "GAS") {
194
- // ignore "unimportant" opcodes:
195
- if (opcode.match(/^(DUP\d+|PUSH\d+|SWAP\d+|POP|ADD|SUB|MUL|DIV|EQ|LTE?|S?GTE?|SLT|SH[LR]|AND|OR|NOT|ISZERO)$/) == null) {
196
- this.countSlot(this.currentLevel.opcodes, opcode);
197
- }
198
- }
199
- this.lastOp = opcode;
200
- if (opcode === "SLOAD" || opcode === "SSTORE") {
201
- const slot = toWord(log.stack.peek(0).toString(16));
202
- const slotHex = toHex(slot);
203
- const addr = log.contract.getAddress();
204
- const addrHex = toHex(addr);
205
- let access = this.currentLevel.access[addrHex];
206
- if (access == null) {
207
- access = {
208
- reads: {},
209
- writes: {}
210
- };
211
- this.currentLevel.access[addrHex] = access;
212
- }
213
- if (opcode === "SLOAD") {
214
- // read slot values before this UserOp was created
215
- // (so saving it if it was written before the first read)
216
- if (access.reads[slotHex] == null &&
217
- access.writes[slotHex] == null) {
218
- access.reads[slotHex] = toHex(db.getState(addr, slot));
219
- }
220
- }
221
- else {
222
- this.countSlot(access.writes, slotHex);
223
- }
224
- }
225
- if (opcode === "KECCAK256") {
226
- // collect keccak on 64-byte blocks
227
- const ofs = Number.parseInt(log.stack.peek(0).toString());
228
- const len = Number.parseInt(log.stack.peek(1).toString());
229
- // currently, solidity uses only 2-word (6-byte) for a key. this might change..
230
- // still, no need to return too much
231
- if (len > 20 && len < 512) {
232
- // if (len === 64) {
233
- this.keccak.push(toHex(log.memory.slice(ofs, ofs + len)));
234
- }
235
- }
236
- else if (opcode.startsWith("LOG")) {
237
- const count = Number.parseInt(opcode.substring(3));
238
- const ofs = Number.parseInt(log.stack.peek(0).toString());
239
- const len = Number.parseInt(log.stack.peek(1).toString());
240
- const topics = [];
241
- for (let i = 0; i < count; i++) {
242
- // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
243
- topics.push(`0x${log.stack.peek(2 + i).toString(16)}`);
244
- }
245
- const data = toHex(log.memory.slice(ofs, ofs + len));
246
- this.logs.push({
247
- topics,
248
- data
249
- });
250
- }
251
- }
252
- };
253
- }
254
- //# sourceMappingURL=BundlerCollectorTracerV07.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BundlerCollectorTracerV07.js","sourceRoot":"","sources":["../../../rpc/validation/BundlerCollectorTracerV07.ts"],"names":[],"mappings":"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"}