ponder 0.9.4-debug.1 → 0.9.5-debug.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.
Files changed (476) hide show
  1. package/CHANGELOG.md +2201 -0
  2. package/dist/esm/bin/commands/codegen.js +37 -0
  3. package/dist/esm/bin/commands/codegen.js.map +1 -0
  4. package/dist/esm/bin/commands/dev.js +242 -0
  5. package/dist/esm/bin/commands/dev.js.map +1 -0
  6. package/dist/esm/bin/commands/list.js +103 -0
  7. package/dist/esm/bin/commands/list.js.map +1 -0
  8. package/dist/esm/bin/commands/serve.js +123 -0
  9. package/dist/esm/bin/commands/serve.js.map +1 -0
  10. package/dist/esm/bin/commands/start.js +136 -0
  11. package/dist/esm/bin/commands/start.js.map +1 -0
  12. package/dist/esm/bin/ponder.js +118 -0
  13. package/dist/esm/bin/ponder.js.map +1 -0
  14. package/dist/esm/bin/utils/codegen.js +26 -0
  15. package/dist/esm/bin/utils/codegen.js.map +1 -0
  16. package/dist/esm/bin/utils/exit.js +69 -0
  17. package/dist/esm/bin/utils/exit.js.map +1 -0
  18. package/dist/esm/bin/utils/run.js +247 -0
  19. package/dist/esm/bin/utils/run.js.map +1 -0
  20. package/dist/esm/bin/utils/runServer.js +8 -0
  21. package/dist/esm/bin/utils/runServer.js.map +1 -0
  22. package/dist/esm/build/configAndIndexingFunctions.js +654 -0
  23. package/dist/esm/build/configAndIndexingFunctions.js.map +1 -0
  24. package/dist/esm/build/factory.js +43 -0
  25. package/dist/esm/build/factory.js.map +1 -0
  26. package/dist/esm/build/index.js +431 -0
  27. package/dist/esm/build/index.js.map +1 -0
  28. package/dist/esm/build/plugin.js +43 -0
  29. package/dist/esm/build/plugin.js.map +1 -0
  30. package/dist/esm/build/pre.js +112 -0
  31. package/dist/esm/build/pre.js.map +1 -0
  32. package/dist/esm/build/schema.js +89 -0
  33. package/dist/esm/build/schema.js.map +1 -0
  34. package/dist/esm/build/stacktrace.js +137 -0
  35. package/dist/esm/build/stacktrace.js.map +1 -0
  36. package/dist/esm/client/index.js +124 -0
  37. package/dist/esm/client/index.js.map +1 -0
  38. package/dist/esm/client/validate.js +1151 -0
  39. package/dist/esm/client/validate.js.map +1 -0
  40. package/dist/esm/config/address.js +2 -0
  41. package/dist/esm/config/address.js.map +1 -0
  42. package/dist/esm/config/eventFilter.js +2 -0
  43. package/dist/esm/config/eventFilter.js.map +1 -0
  44. package/dist/esm/config/index.js +2 -0
  45. package/dist/esm/config/index.js.map +1 -0
  46. package/dist/esm/config/networks.js +120 -0
  47. package/dist/esm/config/networks.js.map +1 -0
  48. package/dist/esm/config/utilityTypes.js +2 -0
  49. package/dist/esm/config/utilityTypes.js.map +1 -0
  50. package/dist/esm/database/index.js +914 -0
  51. package/dist/esm/database/index.js.map +1 -0
  52. package/dist/esm/drizzle/bigint.js +36 -0
  53. package/dist/esm/drizzle/bigint.js.map +1 -0
  54. package/dist/esm/drizzle/hex.js +38 -0
  55. package/dist/esm/drizzle/hex.js.map +1 -0
  56. package/dist/esm/drizzle/index.js +43 -0
  57. package/dist/esm/drizzle/index.js.map +1 -0
  58. package/dist/esm/drizzle/kit/index.js +658 -0
  59. package/dist/esm/drizzle/kit/index.js.map +1 -0
  60. package/dist/esm/drizzle/onchain.js +102 -0
  61. package/dist/esm/drizzle/onchain.js.map +1 -0
  62. package/dist/esm/graphql/index.js +704 -0
  63. package/dist/esm/graphql/index.js.map +1 -0
  64. package/dist/esm/graphql/json.js +42 -0
  65. package/dist/esm/graphql/json.js.map +1 -0
  66. package/dist/esm/graphql/middleware.js +80 -0
  67. package/dist/esm/graphql/middleware.js.map +1 -0
  68. package/dist/esm/index.js +9 -0
  69. package/dist/esm/index.js.map +1 -0
  70. package/dist/esm/indexing/addStackTrace.js +54 -0
  71. package/dist/esm/indexing/addStackTrace.js.map +1 -0
  72. package/dist/esm/indexing/index.js +10 -0
  73. package/dist/esm/indexing/index.js.map +1 -0
  74. package/dist/esm/indexing/ponderActions.js +60 -0
  75. package/dist/esm/indexing/ponderActions.js.map +1 -0
  76. package/dist/esm/indexing/service.js +312 -0
  77. package/dist/esm/indexing/service.js.map +1 -0
  78. package/dist/esm/indexing-store/historical.js +591 -0
  79. package/dist/esm/indexing-store/historical.js.map +1 -0
  80. package/dist/esm/indexing-store/index.js +19 -0
  81. package/dist/esm/indexing-store/index.js.map +1 -0
  82. package/dist/esm/indexing-store/metadata.js +46 -0
  83. package/dist/esm/indexing-store/metadata.js.map +1 -0
  84. package/dist/esm/indexing-store/realtime.js +295 -0
  85. package/dist/esm/indexing-store/realtime.js.map +1 -0
  86. package/dist/esm/internal/common.js +2 -0
  87. package/dist/esm/internal/common.js.map +1 -0
  88. package/dist/esm/internal/errors.js +175 -0
  89. package/dist/esm/internal/errors.js.map +1 -0
  90. package/dist/esm/internal/logger.js +96 -0
  91. package/dist/esm/internal/logger.js.map +1 -0
  92. package/dist/esm/internal/metrics.js +569 -0
  93. package/dist/esm/internal/metrics.js.map +1 -0
  94. package/dist/esm/internal/options.js +69 -0
  95. package/dist/esm/internal/options.js.map +1 -0
  96. package/dist/esm/internal/shutdown.js +18 -0
  97. package/dist/esm/internal/shutdown.js.map +1 -0
  98. package/dist/esm/internal/telemetry.js +199 -0
  99. package/dist/esm/internal/telemetry.js.map +1 -0
  100. package/dist/esm/internal/types.js +2 -0
  101. package/dist/esm/internal/types.js.map +1 -0
  102. package/dist/esm/server/error.js +55 -0
  103. package/dist/esm/server/error.js.map +1 -0
  104. package/dist/esm/server/index.js +107 -0
  105. package/dist/esm/server/index.js.map +1 -0
  106. package/dist/esm/sync/abi.js +67 -0
  107. package/dist/esm/sync/abi.js.map +1 -0
  108. package/dist/esm/sync/events.js +607 -0
  109. package/dist/esm/sync/events.js.map +1 -0
  110. package/dist/esm/sync/filter.js +356 -0
  111. package/dist/esm/sync/filter.js.map +1 -0
  112. package/dist/esm/sync/fragments.js +300 -0
  113. package/dist/esm/sync/fragments.js.map +1 -0
  114. package/dist/esm/sync/index.js +1001 -0
  115. package/dist/esm/sync/index.js.map +1 -0
  116. package/dist/esm/sync/transport.js +94 -0
  117. package/dist/esm/sync/transport.js.map +1 -0
  118. package/dist/esm/sync-historical/index.js +590 -0
  119. package/dist/esm/sync-historical/index.js.map +1 -0
  120. package/dist/esm/sync-realtime/bloom.js +75 -0
  121. package/dist/esm/sync-realtime/bloom.js.map +1 -0
  122. package/dist/esm/sync-realtime/index.js +794 -0
  123. package/dist/esm/sync-realtime/index.js.map +1 -0
  124. package/dist/esm/sync-store/encoding.js +157 -0
  125. package/dist/esm/sync-store/encoding.js.map +1 -0
  126. package/dist/esm/sync-store/index.js +727 -0
  127. package/dist/esm/sync-store/index.js.map +1 -0
  128. package/dist/esm/sync-store/migrations.js +1186 -0
  129. package/dist/esm/sync-store/migrations.js.map +1 -0
  130. package/dist/esm/types/db.js +2 -0
  131. package/dist/esm/types/db.js.map +1 -0
  132. package/dist/esm/types/eth.js +2 -0
  133. package/dist/esm/types/eth.js.map +1 -0
  134. package/dist/esm/types/sync.js +2 -0
  135. package/dist/esm/types/sync.js.map +1 -0
  136. package/dist/esm/types/utils.js +2 -0
  137. package/dist/esm/types/utils.js.map +1 -0
  138. package/dist/esm/types/virtual.js +2 -0
  139. package/dist/esm/types/virtual.js.map +1 -0
  140. package/dist/esm/ui/ProgressBar.js +11 -0
  141. package/dist/esm/ui/ProgressBar.js.map +1 -0
  142. package/dist/esm/ui/Table.js +50 -0
  143. package/dist/esm/ui/Table.js.map +1 -0
  144. package/dist/esm/ui/app.js +113 -0
  145. package/dist/esm/ui/app.js.map +1 -0
  146. package/dist/esm/ui/graphiql.html.js +59 -0
  147. package/dist/esm/ui/graphiql.html.js.map +1 -0
  148. package/dist/esm/ui/index.js +21 -0
  149. package/dist/esm/ui/index.js.map +1 -0
  150. package/dist/esm/utils/bigint.js +37 -0
  151. package/dist/esm/utils/bigint.js.map +1 -0
  152. package/dist/esm/utils/chains.js +3 -0
  153. package/dist/esm/utils/chains.js.map +1 -0
  154. package/dist/esm/utils/checkpoint.js +114 -0
  155. package/dist/esm/utils/checkpoint.js.map +1 -0
  156. package/dist/esm/utils/chunk.js +8 -0
  157. package/dist/esm/utils/chunk.js.map +1 -0
  158. package/dist/esm/utils/date.js +27 -0
  159. package/dist/esm/utils/date.js.map +1 -0
  160. package/dist/esm/utils/debug.js +2 -0
  161. package/dist/esm/utils/debug.js.map +1 -0
  162. package/dist/esm/utils/dedupe.js +33 -0
  163. package/dist/esm/utils/dedupe.js.map +1 -0
  164. package/dist/esm/utils/duplicates.js +19 -0
  165. package/dist/esm/utils/duplicates.js.map +1 -0
  166. package/dist/esm/utils/estimate.js +6 -0
  167. package/dist/esm/utils/estimate.js.map +1 -0
  168. package/dist/esm/utils/extend.js +28 -0
  169. package/dist/esm/utils/extend.js.map +1 -0
  170. package/dist/esm/utils/format.js +20 -0
  171. package/dist/esm/utils/format.js.map +1 -0
  172. package/dist/esm/utils/generators.js +77 -0
  173. package/dist/esm/utils/generators.js.map +1 -0
  174. package/dist/esm/utils/hash.js +11 -0
  175. package/dist/esm/utils/hash.js.map +1 -0
  176. package/dist/esm/utils/interval.js +171 -0
  177. package/dist/esm/utils/interval.js.map +1 -0
  178. package/dist/esm/utils/lowercase.js +7 -0
  179. package/dist/esm/utils/lowercase.js.map +1 -0
  180. package/dist/esm/utils/mutex.js +25 -0
  181. package/dist/esm/utils/mutex.js.map +1 -0
  182. package/dist/esm/utils/never.js +4 -0
  183. package/dist/esm/utils/never.js.map +1 -0
  184. package/dist/esm/utils/offset.js +73 -0
  185. package/dist/esm/utils/offset.js.map +1 -0
  186. package/dist/esm/utils/order.js +18 -0
  187. package/dist/esm/utils/order.js.map +1 -0
  188. package/dist/esm/utils/partition.js +37 -0
  189. package/dist/esm/utils/partition.js.map +1 -0
  190. package/dist/esm/utils/pg.js +126 -0
  191. package/dist/esm/utils/pg.js.map +1 -0
  192. package/dist/esm/utils/pglite.js +80 -0
  193. package/dist/esm/utils/pglite.js.map +1 -0
  194. package/dist/esm/utils/port.js +30 -0
  195. package/dist/esm/utils/port.js.map +1 -0
  196. package/dist/esm/utils/print.js +23 -0
  197. package/dist/esm/utils/print.js.map +1 -0
  198. package/dist/esm/utils/promiseWithResolvers.js +13 -0
  199. package/dist/esm/utils/promiseWithResolvers.js.map +1 -0
  200. package/dist/esm/utils/queue.js +145 -0
  201. package/dist/esm/utils/queue.js.map +1 -0
  202. package/dist/esm/utils/range.js +8 -0
  203. package/dist/esm/utils/range.js.map +1 -0
  204. package/dist/esm/utils/requestQueue.js +127 -0
  205. package/dist/esm/utils/requestQueue.js.map +1 -0
  206. package/dist/esm/utils/result.js +10 -0
  207. package/dist/esm/utils/result.js.map +1 -0
  208. package/dist/esm/utils/rpc.js +202 -0
  209. package/dist/esm/utils/rpc.js.map +1 -0
  210. package/dist/esm/utils/serialize.js +23 -0
  211. package/dist/esm/utils/serialize.js.map +1 -0
  212. package/dist/esm/utils/timer.js +17 -0
  213. package/dist/esm/utils/timer.js.map +1 -0
  214. package/dist/esm/utils/wait.js +8 -0
  215. package/dist/esm/utils/wait.js.map +1 -0
  216. package/dist/esm/utils/zipper.js +67 -0
  217. package/dist/esm/utils/zipper.js.map +1 -0
  218. package/dist/types/bin/commands/codegen.d.ts +5 -0
  219. package/dist/types/bin/commands/codegen.d.ts.map +1 -0
  220. package/dist/types/bin/commands/dev.d.ts +5 -0
  221. package/dist/types/bin/commands/dev.d.ts.map +1 -0
  222. package/dist/types/bin/commands/list.d.ts +5 -0
  223. package/dist/types/bin/commands/list.d.ts.map +1 -0
  224. package/dist/types/bin/commands/serve.d.ts +5 -0
  225. package/dist/types/bin/commands/serve.d.ts.map +1 -0
  226. package/dist/types/bin/commands/start.d.ts +5 -0
  227. package/dist/types/bin/commands/start.d.ts.map +1 -0
  228. package/dist/{bin → types/bin}/ponder.d.ts +5 -6
  229. package/dist/types/bin/ponder.d.ts.map +1 -0
  230. package/dist/types/bin/utils/codegen.d.ts +6 -0
  231. package/dist/types/bin/utils/codegen.d.ts.map +1 -0
  232. package/dist/types/bin/utils/exit.d.ts +9 -0
  233. package/dist/types/bin/utils/exit.d.ts.map +1 -0
  234. package/dist/types/bin/utils/run.d.ts +14 -0
  235. package/dist/types/bin/utils/run.d.ts.map +1 -0
  236. package/dist/types/bin/utils/runServer.d.ts +12 -0
  237. package/dist/types/bin/utils/runServer.d.ts.map +1 -0
  238. package/dist/types/build/configAndIndexingFunctions.d.ts +37 -0
  239. package/dist/types/build/configAndIndexingFunctions.d.ts.map +1 -0
  240. package/dist/types/build/factory.d.ts +10 -0
  241. package/dist/types/build/factory.d.ts.map +1 -0
  242. package/dist/types/build/index.d.ts +70 -0
  243. package/dist/types/build/index.d.ts.map +1 -0
  244. package/dist/types/build/plugin.d.ts +4 -0
  245. package/dist/types/build/plugin.d.ts.map +1 -0
  246. package/dist/types/build/pre.d.ts +35 -0
  247. package/dist/types/build/pre.d.ts.map +1 -0
  248. package/dist/types/build/schema.d.ts +18 -0
  249. package/dist/types/build/schema.d.ts.map +1 -0
  250. package/dist/types/build/stacktrace.d.ts +13 -0
  251. package/dist/types/build/stacktrace.d.ts.map +1 -0
  252. package/dist/types/client/index.d.ts +27 -0
  253. package/dist/types/client/index.d.ts.map +1 -0
  254. package/dist/types/client/validate.d.ts +2 -0
  255. package/dist/types/client/validate.d.ts.map +1 -0
  256. package/dist/types/config/address.d.ts +14 -0
  257. package/dist/types/config/address.d.ts.map +1 -0
  258. package/dist/types/config/eventFilter.d.ts +18 -0
  259. package/dist/types/config/eventFilter.d.ts.map +1 -0
  260. package/dist/types/config/index.d.ts +143 -0
  261. package/dist/types/config/index.d.ts.map +1 -0
  262. package/dist/types/config/networks.d.ts +30 -0
  263. package/dist/types/config/networks.d.ts.map +1 -0
  264. package/dist/types/config/utilityTypes.d.ts +43 -0
  265. package/dist/types/config/utilityTypes.d.ts.map +1 -0
  266. package/dist/types/database/index.d.ts +91 -0
  267. package/dist/types/database/index.d.ts.map +1 -0
  268. package/dist/types/drizzle/bigint.d.ts +25 -0
  269. package/dist/types/drizzle/bigint.d.ts.map +1 -0
  270. package/dist/types/drizzle/hex.d.ts +25 -0
  271. package/dist/types/drizzle/hex.d.ts.map +1 -0
  272. package/dist/types/drizzle/index.d.ts +14 -0
  273. package/dist/types/drizzle/index.d.ts.map +1 -0
  274. package/dist/types/drizzle/kit/index.d.ts +49 -0
  275. package/dist/types/drizzle/kit/index.d.ts.map +1 -0
  276. package/dist/{drizzle → types/drizzle}/onchain.d.ts +49 -96
  277. package/dist/types/drizzle/onchain.d.ts.map +1 -0
  278. package/dist/types/graphql/index.d.ts +14 -0
  279. package/dist/types/graphql/index.d.ts.map +1 -0
  280. package/dist/types/graphql/json.d.ts +3 -0
  281. package/dist/types/graphql/json.d.ts.map +1 -0
  282. package/dist/types/graphql/middleware.d.ts +29 -0
  283. package/dist/types/graphql/middleware.d.ts.map +1 -0
  284. package/dist/types/index.d.ts +18 -0
  285. package/dist/types/index.d.ts.map +1 -0
  286. package/dist/types/indexing/addStackTrace.d.ts +3 -0
  287. package/dist/types/indexing/addStackTrace.d.ts.map +1 -0
  288. package/dist/types/indexing/index.d.ts +575 -0
  289. package/dist/types/indexing/index.d.ts.map +1 -0
  290. package/dist/types/indexing/ponderActions.d.ts +47 -0
  291. package/dist/types/indexing/ponderActions.d.ts.map +1 -0
  292. package/dist/types/indexing/service.d.ts +73 -0
  293. package/dist/types/indexing/service.d.ts.map +1 -0
  294. package/dist/types/indexing-store/historical.d.ts +19 -0
  295. package/dist/types/indexing-store/historical.d.ts.map +1 -0
  296. package/dist/types/indexing-store/index.d.ts +10 -0
  297. package/dist/types/indexing-store/index.d.ts.map +1 -0
  298. package/dist/types/indexing-store/metadata.d.ts +10 -0
  299. package/dist/types/indexing-store/metadata.d.ts.map +1 -0
  300. package/dist/types/indexing-store/realtime.d.ts +10 -0
  301. package/dist/types/indexing-store/realtime.d.ts.map +1 -0
  302. package/dist/types/internal/common.d.ts +13 -0
  303. package/dist/types/internal/common.d.ts.map +1 -0
  304. package/dist/types/internal/errors.d.ts +55 -0
  305. package/dist/types/internal/errors.d.ts.map +1 -0
  306. package/dist/types/internal/logger.d.ts +26 -0
  307. package/dist/types/internal/logger.d.ts.map +1 -0
  308. package/dist/types/internal/metrics.d.ts +77 -0
  309. package/dist/types/internal/metrics.d.ts.map +1 -0
  310. package/dist/types/internal/options.d.ts +59 -0
  311. package/dist/types/internal/options.d.ts.map +1 -0
  312. package/dist/types/internal/shutdown.d.ts +8 -0
  313. package/dist/types/internal/shutdown.d.ts.map +1 -0
  314. package/dist/types/internal/telemetry.d.ts +43 -0
  315. package/dist/types/internal/telemetry.d.ts.map +1 -0
  316. package/dist/types/internal/types.d.ts +328 -0
  317. package/dist/types/internal/types.d.ts.map +1 -0
  318. package/dist/types/server/error.d.ts +5 -0
  319. package/dist/types/server/error.d.ts.map +1 -0
  320. package/dist/types/server/index.d.ts +13 -0
  321. package/dist/types/server/index.d.ts.map +1 -0
  322. package/dist/types/sync/abi.d.ts +54 -0
  323. package/dist/types/sync/abi.d.ts.map +1 -0
  324. package/dist/types/sync/events.d.ts +24 -0
  325. package/dist/types/sync/events.d.ts.map +1 -0
  326. package/dist/types/sync/filter.d.ts +71 -0
  327. package/dist/types/sync/filter.d.ts.map +1 -0
  328. package/dist/types/sync/fragments.d.ts +21 -0
  329. package/dist/types/sync/fragments.d.ts.map +1 -0
  330. package/dist/types/sync/index.d.ts +112 -0
  331. package/dist/types/sync/index.d.ts.map +1 -0
  332. package/dist/types/sync/transport.d.ts +8 -0
  333. package/dist/types/sync/transport.d.ts.map +1 -0
  334. package/dist/types/sync-historical/index.d.ts +28 -0
  335. package/dist/types/sync-historical/index.d.ts.map +1 -0
  336. package/dist/types/sync-realtime/bloom.d.ts +19 -0
  337. package/dist/types/sync-realtime/bloom.d.ts.map +1 -0
  338. package/dist/types/sync-realtime/index.d.ts +48 -0
  339. package/dist/types/sync-realtime/index.d.ts.map +1 -0
  340. package/dist/types/sync-store/encoding.d.ts +151 -0
  341. package/dist/types/sync-store/encoding.d.ts.map +1 -0
  342. package/dist/types/sync-store/index.d.ts +104 -0
  343. package/dist/types/sync-store/index.d.ts.map +1 -0
  344. package/dist/types/sync-store/migrations.d.ts +13 -0
  345. package/dist/types/sync-store/migrations.d.ts.map +1 -0
  346. package/dist/types/types/db.d.ts +213 -0
  347. package/dist/types/types/db.d.ts.map +1 -0
  348. package/dist/types/types/eth.d.ts +196 -0
  349. package/dist/types/types/eth.d.ts.map +1 -0
  350. package/dist/types/types/sync.d.ts +15 -0
  351. package/dist/types/types/sync.d.ts.map +1 -0
  352. package/dist/types/types/utils.d.ts +22 -0
  353. package/dist/types/types/utils.d.ts.map +1 -0
  354. package/dist/types/types/virtual.d.ts +95 -0
  355. package/dist/types/types/virtual.d.ts.map +1 -0
  356. package/dist/types/ui/ProgressBar.d.ts +7 -0
  357. package/dist/types/ui/ProgressBar.d.ts.map +1 -0
  358. package/dist/types/ui/Table.d.ts +24 -0
  359. package/dist/types/ui/Table.d.ts.map +1 -0
  360. package/dist/types/ui/app.d.ts +14 -0
  361. package/dist/types/ui/app.d.ts.map +1 -0
  362. package/dist/types/ui/graphiql.html.d.ts +2 -0
  363. package/dist/types/ui/graphiql.html.d.ts.map +1 -0
  364. package/dist/types/ui/index.d.ts +5 -0
  365. package/dist/types/ui/index.d.ts.map +1 -0
  366. package/dist/types/utils/bigint.d.ts +15 -0
  367. package/dist/types/utils/bigint.d.ts.map +1 -0
  368. package/dist/types/utils/chains.d.ts +3 -0
  369. package/dist/types/utils/chains.d.ts.map +1 -0
  370. package/dist/types/utils/checkpoint.d.ts +40 -0
  371. package/dist/types/utils/checkpoint.d.ts.map +1 -0
  372. package/dist/types/utils/chunk.d.ts +2 -0
  373. package/dist/types/utils/chunk.d.ts.map +1 -0
  374. package/dist/types/utils/date.d.ts +7 -0
  375. package/dist/types/utils/date.d.ts.map +1 -0
  376. package/dist/types/utils/debug.d.ts +105 -0
  377. package/dist/types/utils/debug.d.ts.map +1 -0
  378. package/dist/types/utils/dedupe.d.ts +20 -0
  379. package/dist/types/utils/dedupe.d.ts.map +1 -0
  380. package/dist/types/utils/duplicates.d.ts +7 -0
  381. package/dist/types/utils/duplicates.d.ts.map +1 -0
  382. package/dist/types/utils/estimate.d.ts +11 -0
  383. package/dist/types/utils/estimate.d.ts.map +1 -0
  384. package/dist/types/utils/extend.d.ts +13 -0
  385. package/dist/types/utils/extend.d.ts.map +1 -0
  386. package/dist/types/utils/format.d.ts +3 -0
  387. package/dist/types/utils/format.d.ts.map +1 -0
  388. package/dist/types/utils/generators.d.ts +23 -0
  389. package/dist/types/utils/generators.d.ts.map +1 -0
  390. package/dist/types/utils/hash.d.ts +11 -0
  391. package/dist/types/utils/hash.d.ts.map +1 -0
  392. package/dist/types/utils/interval.d.ts +53 -0
  393. package/dist/types/utils/interval.d.ts.map +1 -0
  394. package/dist/types/utils/lowercase.d.ts +5 -0
  395. package/dist/types/utils/lowercase.d.ts.map +1 -0
  396. package/dist/types/utils/mutex.d.ts +8 -0
  397. package/dist/types/utils/mutex.d.ts.map +1 -0
  398. package/dist/types/utils/never.d.ts +2 -0
  399. package/dist/types/utils/never.d.ts.map +1 -0
  400. package/dist/types/utils/offset.d.ts +3 -0
  401. package/dist/types/utils/offset.d.ts.map +1 -0
  402. package/dist/types/utils/order.d.ts +2 -0
  403. package/dist/types/utils/order.d.ts.map +1 -0
  404. package/dist/types/utils/partition.d.ts +22 -0
  405. package/dist/types/utils/partition.d.ts.map +1 -0
  406. package/dist/types/utils/pg.d.ts +5 -0
  407. package/dist/types/utils/pg.d.ts.map +1 -0
  408. package/dist/types/utils/pglite.d.ts +25 -0
  409. package/dist/types/utils/pglite.d.ts.map +1 -0
  410. package/dist/types/utils/port.d.ts +5 -0
  411. package/dist/types/utils/port.d.ts.map +1 -0
  412. package/dist/types/utils/print.d.ts +2 -0
  413. package/dist/types/utils/print.d.ts.map +1 -0
  414. package/dist/types/utils/promiseWithResolvers.d.ts +10 -0
  415. package/dist/types/utils/promiseWithResolvers.d.ts.map +1 -0
  416. package/dist/types/utils/queue.d.ts +33 -0
  417. package/dist/types/utils/queue.d.ts.map +1 -0
  418. package/dist/types/utils/range.d.ts +8 -0
  419. package/dist/types/utils/range.d.ts.map +1 -0
  420. package/dist/types/utils/requestQueue.d.ts +21 -0
  421. package/dist/types/utils/requestQueue.d.ts.map +1 -0
  422. package/dist/types/utils/result.d.ts +17 -0
  423. package/dist/types/utils/result.d.ts.map +1 -0
  424. package/dist/types/utils/rpc.d.ts +57 -0
  425. package/dist/types/utils/rpc.d.ts.map +1 -0
  426. package/dist/types/utils/serialize.d.ts +19 -0
  427. package/dist/types/utils/serialize.d.ts.map +1 -0
  428. package/dist/types/utils/timer.d.ts +11 -0
  429. package/dist/types/utils/timer.d.ts.map +1 -0
  430. package/dist/types/utils/wait.d.ts +6 -0
  431. package/dist/types/utils/wait.d.ts.map +1 -0
  432. package/dist/types/utils/zipper.d.ts +36 -0
  433. package/dist/types/utils/zipper.d.ts.map +1 -0
  434. package/package.json +17 -21
  435. package/src/bin/commands/dev.ts +1 -1
  436. package/src/bin/ponder.ts +1 -1
  437. package/src/bin/utils/run.ts +7 -18
  438. package/src/build/configAndIndexingFunctions.ts +1 -1
  439. package/src/build/factory.ts +1 -1
  440. package/src/build/index.ts +0 -2
  441. package/src/client/index.ts +1 -1
  442. package/src/graphql/index.ts +1 -1
  443. package/src/indexing-store/historical.ts +1 -1
  444. package/src/indexing-store/realtime.ts +1 -1
  445. package/src/internal/telemetry.ts +1 -1
  446. package/src/sync/fragments.ts +1 -1
  447. package/src/sync/index.ts +60 -20
  448. package/src/sync-historical/index.ts +26 -26
  449. package/src/sync-realtime/index.ts +1 -1
  450. package/src/utils/dedupe.ts +40 -0
  451. package/src/utils/generators.ts +1 -1
  452. package/src/utils/mutex.ts +1 -1
  453. package/src/utils/promiseWithResolvers.ts +20 -0
  454. package/src/utils/queue.ts +250 -0
  455. package/src/utils/requestQueue.ts +1 -1
  456. package/dist/bin/ponder.js +0 -11243
  457. package/dist/bin/ponder.js.map +0 -1
  458. package/dist/chunk-6AOFLZJ4.js +0 -1692
  459. package/dist/chunk-6AOFLZJ4.js.map +0 -1
  460. package/dist/chunk-DZFRP3KH.js +0 -70
  461. package/dist/chunk-DZFRP3KH.js.map +0 -1
  462. package/dist/chunk-K2TLRLX3.js +0 -163
  463. package/dist/chunk-K2TLRLX3.js.map +0 -1
  464. package/dist/chunk-MJKRYIBO.js +0 -190
  465. package/dist/chunk-MJKRYIBO.js.map +0 -1
  466. package/dist/db-in86nyw7.d.ts +0 -625
  467. package/dist/drizzle/onchain.js +0 -19
  468. package/dist/drizzle/onchain.js.map +0 -1
  469. package/dist/experimental_unsafe_stores.d.ts +0 -375
  470. package/dist/experimental_unsafe_stores.js +0 -11
  471. package/dist/experimental_unsafe_stores.js.map +0 -1
  472. package/dist/index.d.ts +0 -404
  473. package/dist/index.js +0 -2219
  474. package/dist/index.js.map +0 -1
  475. package/dist/utils-ceNucOJb.d.ts +0 -14
  476. package/src/experimental_unsafe_stores.ts +0 -4
@@ -0,0 +1,590 @@
1
+ import { ShutdownError } from '../internal/errors.js';
2
+ import { isAddressFactory, isTraceFilterMatched, isTransactionFilterMatched, isTransferFilterMatched, } from '../sync/filter.js';
3
+ import { shouldGetTransactionReceipt } from '../sync/filter.js';
4
+ import { recoverFilter } from '../sync/fragments.js';
5
+ import { getChunks, intervalBounds, intervalDifference, intervalRange, } from '../utils/interval.js';
6
+ import { _debug_traceBlockByNumber, _eth_getBlockByNumber, _eth_getBlockReceipts, _eth_getLogs, _eth_getTransactionReceipt, } from '../utils/rpc.js';
7
+ import { getLogsRetryHelper } from "@ponder/utils";
8
+ import { hexToBigInt, hexToNumber, toHex, zeroHash, } from "viem";
9
+ export const createHistoricalSync = async (args) => {
10
+ /**
11
+ * Flag to fetch transaction receipts through _eth_getBlockReceipts (true) or _eth_getTransactionReceipt (false)
12
+ */
13
+ let isBlockReceipts = true;
14
+ /**
15
+ * Blocks that have already been extracted.
16
+ * Note: All entries are deleted at the end of each call to `sync()`.
17
+ */
18
+ const blockCache = new Map();
19
+ /**
20
+ * Traces that have already been fetched.
21
+ * Note: All entries are deleted at the end of each call to `sync()`.
22
+ */
23
+ const traceCache = new Map();
24
+ /**
25
+ * Transactions that should be saved to the sync-store.
26
+ * Note: All entries are deleted at the end of each call to `sync()`.
27
+ */
28
+ const transactionsCache = new Set();
29
+ /**
30
+ * Block transaction receipts that have already been fetched.
31
+ * Note: All entries are deleted at the end of each call to `sync()`.
32
+ */
33
+ const blockReceiptsCache = new Map();
34
+ /**
35
+ * Transaction receipts that have already been fetched.
36
+ * Note: All entries are deleted at the end of each call to `sync()`.
37
+ */
38
+ const transactionReceiptsCache = new Map();
39
+ /**
40
+ * Data about the range passed to "eth_getLogs" share among all log
41
+ * filters and log factories.
42
+ */
43
+ let logsRequestMetadata = {
44
+ estimatedRange: 500,
45
+ };
46
+ /**
47
+ * Intervals that have been completed for all filters in `args.sources`.
48
+ *
49
+ * Note: `intervalsCache` is not updated after a new interval is synced.
50
+ */
51
+ let intervalsCache;
52
+ if (args.network.disableCache) {
53
+ intervalsCache = new Map();
54
+ for (const { filter } of args.sources) {
55
+ intervalsCache.set(filter, []);
56
+ }
57
+ }
58
+ else {
59
+ intervalsCache = await args.syncStore.getIntervals({
60
+ filters: args.sources.map(({ filter }) => filter),
61
+ });
62
+ }
63
+ // Closest-to-tip block that has been synced.
64
+ let latestBlock;
65
+ ////////
66
+ // Helper functions for sync tasks
67
+ ////////
68
+ /**
69
+ * Split "eth_getLogs" requests into ranges inferred from errors
70
+ * and batch requests.
71
+ */
72
+ const syncLogsDynamic = async ({ filter, address, interval, }) => {
73
+ // Use the recommended range if available, else don't chunk the interval at all.
74
+ const intervals = getChunks({
75
+ interval,
76
+ maxChunkSize: logsRequestMetadata.confirmedRange ??
77
+ logsRequestMetadata.estimatedRange,
78
+ });
79
+ const topics = "eventSelector" in filter
80
+ ? [filter.eventSelector]
81
+ : [
82
+ filter.topic0 ?? null,
83
+ filter.topic1 ?? null,
84
+ filter.topic2 ?? null,
85
+ filter.topic3 ?? null,
86
+ ];
87
+ // Note: the `topics` field is very fragile for many rpc providers, and
88
+ // cannot handle extra "null" topics
89
+ if (topics[3] === null) {
90
+ topics.pop();
91
+ if (topics[2] === null) {
92
+ topics.pop();
93
+ if (topics[1] === null) {
94
+ topics.pop();
95
+ if (topics[0] === null) {
96
+ topics.pop();
97
+ }
98
+ }
99
+ }
100
+ }
101
+ // Batch large arrays of addresses, handling arrays that are empty
102
+ let addressBatches;
103
+ if (address === undefined) {
104
+ // no address (match all)
105
+ addressBatches = [undefined];
106
+ }
107
+ else if (typeof address === "string") {
108
+ // single address
109
+ addressBatches = [address];
110
+ }
111
+ else if (address.length === 0) {
112
+ // no address (factory with no children)
113
+ return [];
114
+ }
115
+ else {
116
+ // many addresses
117
+ // Note: it is assumed that `address` is deduplicated
118
+ addressBatches = [];
119
+ for (let i = 0; i < address.length; i += 50) {
120
+ addressBatches.push(address.slice(i, i + 50));
121
+ }
122
+ }
123
+ const logs = await Promise.all(intervals.flatMap((interval) => addressBatches.map((address) => _eth_getLogs(args.requestQueue, {
124
+ address,
125
+ topics,
126
+ fromBlock: interval[0],
127
+ toBlock: interval[1],
128
+ }).catch((error) => {
129
+ const getLogsErrorResponse = getLogsRetryHelper({
130
+ params: [
131
+ {
132
+ address,
133
+ topics,
134
+ fromBlock: toHex(interval[0]),
135
+ toBlock: toHex(interval[1]),
136
+ },
137
+ ],
138
+ error: error,
139
+ });
140
+ if (getLogsErrorResponse.shouldRetry === false)
141
+ throw error;
142
+ const range = hexToNumber(getLogsErrorResponse.ranges[0].toBlock) -
143
+ hexToNumber(getLogsErrorResponse.ranges[0].fromBlock);
144
+ args.common.logger.debug({
145
+ service: "sync",
146
+ msg: `Caught eth_getLogs error on '${args.network.name}', updating recommended range to ${range}.`,
147
+ });
148
+ logsRequestMetadata = {
149
+ estimatedRange: range,
150
+ confirmedRange: getLogsErrorResponse.isSuggestedRange
151
+ ? range
152
+ : undefined,
153
+ };
154
+ return syncLogsDynamic({ address, interval, filter });
155
+ })))).then((logs) => logs.flat());
156
+ const logIds = new Set();
157
+ for (const log of logs) {
158
+ const id = `${log.blockHash}-${log.logIndex}`;
159
+ if (logIds.has(id)) {
160
+ args.common.logger.warn({
161
+ service: "sync",
162
+ msg: `Detected invalid eth_getLogs response. Duplicate log index ${log.logIndex} for block ${log.blockHash}.`,
163
+ });
164
+ }
165
+ else {
166
+ logIds.add(id);
167
+ }
168
+ }
169
+ /**
170
+ * Dynamically increase the range used in "eth_getLogs" if an
171
+ * error has been received but the error didn't suggest a range.
172
+ */
173
+ if (logsRequestMetadata.confirmedRange === undefined) {
174
+ logsRequestMetadata.estimatedRange = Math.round(logsRequestMetadata.estimatedRange * 1.05);
175
+ }
176
+ return logs;
177
+ };
178
+ /**
179
+ * Extract block, using `blockCache` to avoid fetching
180
+ * the same block twice. Also, update `latestBlock`.
181
+ *
182
+ * @param number Block to be extracted
183
+ *
184
+ * Note: This function could more accurately skip network requests by taking
185
+ * advantage of `syncStore.hasBlock` and `syncStore.hasTransaction`.
186
+ */
187
+ const syncBlock = async (number) => {
188
+ let block;
189
+ /**
190
+ * `blockCache` contains all blocks that have been extracted during the
191
+ * current call to `sync()`. If `number` is present in `blockCache` use it,
192
+ * otherwise, request the block and add it to `blockCache` and the sync-store.
193
+ */
194
+ if (blockCache.has(number)) {
195
+ block = await blockCache.get(number);
196
+ }
197
+ else {
198
+ const _block = _eth_getBlockByNumber(args.requestQueue, {
199
+ blockNumber: toHex(number),
200
+ });
201
+ blockCache.set(number, _block);
202
+ block = await _block;
203
+ // Update `latestBlock` if `block` is closer to tip.
204
+ if (hexToBigInt(block.number) >= hexToBigInt(latestBlock?.number ?? "0x0")) {
205
+ latestBlock = block;
206
+ }
207
+ }
208
+ return block;
209
+ };
210
+ const syncTrace = async (block) => {
211
+ if (traceCache.has(block)) {
212
+ return await traceCache.get(block);
213
+ }
214
+ else {
215
+ const traces = _debug_traceBlockByNumber(args.requestQueue, {
216
+ blockNumber: block,
217
+ });
218
+ traceCache.set(block, traces);
219
+ return await traces;
220
+ }
221
+ };
222
+ const syncTransactionReceipts = async (block, transactionHashes) => {
223
+ if (transactionHashes.size === 0) {
224
+ return [];
225
+ }
226
+ if (isBlockReceipts === false) {
227
+ const transactionReceipts = await Promise.all(Array.from(transactionHashes).map((hash) => syncTransactionReceipt(hash)));
228
+ return transactionReceipts;
229
+ }
230
+ let blockReceipts;
231
+ try {
232
+ blockReceipts = await syncBlockReceipts(block);
233
+ }
234
+ catch (_error) {
235
+ const error = _error;
236
+ args.common.logger.warn({
237
+ service: "sync",
238
+ msg: `Caught eth_getBlockReceipts error on '${args.network.name}', switching to eth_getTransactionReceipt method.`,
239
+ error,
240
+ });
241
+ isBlockReceipts = false;
242
+ return syncTransactionReceipts(block, transactionHashes);
243
+ }
244
+ const blockReceiptsTransactionHashes = new Set(blockReceipts.map((r) => r.transactionHash));
245
+ // Validate that block transaction receipts include all required transactions
246
+ for (const hash of Array.from(transactionHashes)) {
247
+ if (blockReceiptsTransactionHashes.has(hash) === false) {
248
+ throw new Error(`Detected inconsistent RPC responses. 'transaction.hash' ${hash} not found in eth_getBlockReceipts response for block '${block}'`);
249
+ }
250
+ }
251
+ const transactionReceipts = blockReceipts.filter((receipt) => transactionHashes.has(receipt.transactionHash));
252
+ return transactionReceipts;
253
+ };
254
+ const syncTransactionReceipt = async (transaction) => {
255
+ if (transactionReceiptsCache.has(transaction)) {
256
+ return await transactionReceiptsCache.get(transaction);
257
+ }
258
+ else {
259
+ const receipt = _eth_getTransactionReceipt(args.requestQueue, {
260
+ hash: transaction,
261
+ });
262
+ transactionReceiptsCache.set(transaction, receipt);
263
+ return await receipt;
264
+ }
265
+ };
266
+ const syncBlockReceipts = async (block) => {
267
+ if (blockReceiptsCache.has(block)) {
268
+ return await blockReceiptsCache.get(block);
269
+ }
270
+ else {
271
+ const blockReceipts = _eth_getBlockReceipts(args.requestQueue, {
272
+ blockHash: block,
273
+ });
274
+ blockReceiptsCache.set(block, blockReceipts);
275
+ return await blockReceipts;
276
+ }
277
+ };
278
+ /** Extract and insert the log-based addresses that match `filter` + `interval`. */
279
+ const syncLogFactory = async (filter, interval) => {
280
+ const logs = await syncLogsDynamic({
281
+ filter,
282
+ interval,
283
+ address: filter.address,
284
+ });
285
+ // Insert `logs` into the sync-store
286
+ await args.syncStore.insertLogs({
287
+ logs: logs.map((log) => ({ log })),
288
+ shouldUpdateCheckpoint: false,
289
+ chainId: args.network.chainId,
290
+ });
291
+ };
292
+ /**
293
+ * Return all addresses that match `filter` after extracting addresses
294
+ * that match `filter` and `interval`. Returns `undefined` if the number of
295
+ * child addresses is above the limit.
296
+ */
297
+ const syncAddressFactory = async (filter, interval) => {
298
+ await syncLogFactory(filter, interval);
299
+ // Query the sync-store for all addresses that match `filter`.
300
+ const addresses = await args.syncStore.getChildAddresses({
301
+ filter,
302
+ limit: args.common.options.factoryAddressCountThreshold,
303
+ });
304
+ if (addresses.length === args.common.options.factoryAddressCountThreshold) {
305
+ return undefined;
306
+ }
307
+ return addresses;
308
+ };
309
+ ////////
310
+ // Helper function for filter types
311
+ ////////
312
+ const syncLogFilter = async (filter, interval) => {
313
+ // Resolve `filter.address`
314
+ const address = isAddressFactory(filter.address)
315
+ ? await syncAddressFactory(filter.address, interval)
316
+ : filter.address;
317
+ const logs = await syncLogsDynamic({ filter, interval, address });
318
+ const blocks = await Promise.all(logs.map((log) => syncBlock(hexToNumber(log.blockNumber))));
319
+ const requiredBlocks = new Set(blocks.map((b) => b.hash));
320
+ // Validate that logs point to the valid transaction hash in the block
321
+ for (let i = 0; i < logs.length; i++) {
322
+ const log = logs[i];
323
+ const block = blocks[i];
324
+ if (block.hash !== log.blockHash) {
325
+ throw new Error(`Detected inconsistent RPC responses. 'log.blockHash' ${log.blockHash} does not match 'block.hash' ${block.hash}`);
326
+ }
327
+ if (block.transactions.find((t) => t.hash === log.transactionHash) ===
328
+ undefined) {
329
+ if (log.transactionHash === zeroHash) {
330
+ args.common.logger.warn({
331
+ service: "sync",
332
+ msg: `Detected log with empty transaction hash in block ${block.hash} at log index ${hexToNumber(log.logIndex)}. This is expected for some networks like ZKsync.`,
333
+ });
334
+ }
335
+ else {
336
+ throw new Error(`Detected inconsistent RPC responses. 'log.transactionHash' ${log.transactionHash} not found in 'block.transactions' ${block.hash}`);
337
+ }
338
+ }
339
+ }
340
+ const transactionHashes = new Set(logs.map((l) => l.transactionHash));
341
+ for (const hash of transactionHashes) {
342
+ transactionsCache.add(hash);
343
+ }
344
+ await args.syncStore.insertLogs({
345
+ logs: logs.map((log, i) => ({ log, block: blocks[i] })),
346
+ shouldUpdateCheckpoint: true,
347
+ chainId: args.network.chainId,
348
+ });
349
+ if (shouldGetTransactionReceipt(filter)) {
350
+ const transactionReceipts = await Promise.all(Array.from(requiredBlocks).map((blockHash) => {
351
+ const blockTransactionHashes = new Set();
352
+ for (const log of logs) {
353
+ if (log.blockHash === blockHash) {
354
+ if (log.transactionHash === zeroHash) {
355
+ args.common.logger.warn({
356
+ service: "sync",
357
+ msg: `Detected log with empty transaction hash in block ${log.blockHash} at log index ${hexToNumber(log.logIndex)}. This is expected for some networks like ZKsync.`,
358
+ });
359
+ }
360
+ else {
361
+ blockTransactionHashes.add(log.transactionHash);
362
+ }
363
+ }
364
+ }
365
+ return syncTransactionReceipts(blockHash, blockTransactionHashes);
366
+ })).then((receipts) => receipts.flat());
367
+ await args.syncStore.insertTransactionReceipts({
368
+ transactionReceipts,
369
+ chainId: args.network.chainId,
370
+ });
371
+ }
372
+ };
373
+ const syncBlockFilter = async (filter, interval) => {
374
+ const baseOffset = (interval[0] - filter.offset) % filter.interval;
375
+ const offset = baseOffset === 0 ? 0 : filter.interval - baseOffset;
376
+ // Determine which blocks are matched by the block filter.
377
+ const requiredBlocks = [];
378
+ for (let b = interval[0] + offset; b <= interval[1]; b += filter.interval) {
379
+ requiredBlocks.push(b);
380
+ }
381
+ await Promise.all(requiredBlocks.map((number) => syncBlock(number)));
382
+ };
383
+ const syncTransactionFilter = async (filter, interval) => {
384
+ const fromChildAddresses = isAddressFactory(filter.fromAddress)
385
+ ? await syncAddressFactory(filter.fromAddress, interval).then((addresses) => addresses === undefined ? undefined : new Set(addresses))
386
+ : undefined;
387
+ const toChildAddresses = isAddressFactory(filter.toAddress)
388
+ ? await syncAddressFactory(filter.toAddress, interval).then((addresses) => addresses === undefined ? undefined : new Set(addresses))
389
+ : undefined;
390
+ const blocks = await Promise.all(intervalRange(interval).map((number) => syncBlock(number)));
391
+ const transactionHashes = new Set();
392
+ const requiredBlocks = new Set();
393
+ for (const block of blocks) {
394
+ block.transactions.map((transaction) => {
395
+ if (isTransactionFilterMatched({
396
+ filter,
397
+ block,
398
+ transaction,
399
+ fromChildAddresses,
400
+ toChildAddresses,
401
+ })) {
402
+ transactionHashes.add(transaction.hash);
403
+ requiredBlocks.add(block);
404
+ }
405
+ });
406
+ }
407
+ for (const hash of transactionHashes) {
408
+ transactionsCache.add(hash);
409
+ }
410
+ const transactionReceipts = await Promise.all(Array.from(requiredBlocks).map((block) => {
411
+ const blockTransactionHashes = new Set(block.transactions
412
+ .filter((t) => transactionHashes.has(t.hash))
413
+ .map((t) => t.hash));
414
+ return syncTransactionReceipts(block.hash, blockTransactionHashes);
415
+ })).then((receipts) => receipts.flat());
416
+ await args.syncStore.insertTransactionReceipts({
417
+ transactionReceipts,
418
+ chainId: args.network.chainId,
419
+ });
420
+ };
421
+ const syncTraceOrTransferFilter = async (filter, interval) => {
422
+ const fromChildAddresses = isAddressFactory(filter.fromAddress)
423
+ ? await syncAddressFactory(filter.fromAddress, interval)
424
+ : undefined;
425
+ const toChildAddresses = isAddressFactory(filter.toAddress)
426
+ ? await syncAddressFactory(filter.toAddress, interval)
427
+ : undefined;
428
+ const requiredBlocks = new Set();
429
+ const traces = await Promise.all(intervalRange(interval).map(async (number) => {
430
+ let traces = await syncTrace(number);
431
+ // remove unmatched traces
432
+ traces = traces.filter((trace) => filter.type === "trace"
433
+ ? isTraceFilterMatched({
434
+ filter,
435
+ block: { number: toHex(number) },
436
+ trace: trace.trace,
437
+ fromChildAddresses: fromChildAddresses
438
+ ? new Set(fromChildAddresses)
439
+ : undefined,
440
+ toChildAddresses: toChildAddresses
441
+ ? new Set(toChildAddresses)
442
+ : undefined,
443
+ })
444
+ : isTransferFilterMatched({
445
+ filter,
446
+ block: { number: toHex(number) },
447
+ trace: trace.trace,
448
+ fromChildAddresses: fromChildAddresses
449
+ ? new Set(fromChildAddresses)
450
+ : undefined,
451
+ toChildAddresses: toChildAddresses
452
+ ? new Set(toChildAddresses)
453
+ : undefined,
454
+ }));
455
+ if (traces.length === 0)
456
+ return [];
457
+ const block = await syncBlock(number);
458
+ requiredBlocks.add(block.hash);
459
+ return traces.map((trace) => {
460
+ const transaction = block.transactions.find((t) => t.hash === trace.transactionHash);
461
+ if (transaction === undefined) {
462
+ throw new Error(`Detected inconsistent RPC responses. 'trace.transactionHash' ${trace.transactionHash} not found in 'block.transactions' ${block.hash}`);
463
+ }
464
+ transactionsCache.add(transaction.hash);
465
+ return { trace, transaction, block };
466
+ });
467
+ })).then((traces) => traces.flat());
468
+ await args.syncStore.insertTraces({
469
+ traces,
470
+ chainId: args.network.chainId,
471
+ });
472
+ if (shouldGetTransactionReceipt(filter)) {
473
+ const transactionReceipts = await Promise.all(Array.from(requiredBlocks).map((blockHash) => {
474
+ const blockTransactionHashes = new Set(traces
475
+ .filter((t) => t.block.hash === blockHash)
476
+ .map((t) => t.transaction.hash));
477
+ return syncTransactionReceipts(blockHash, blockTransactionHashes);
478
+ })).then((receipts) => receipts.flat());
479
+ await args.syncStore.insertTransactionReceipts({
480
+ transactionReceipts,
481
+ chainId: args.network.chainId,
482
+ });
483
+ }
484
+ };
485
+ return {
486
+ intervalsCache,
487
+ async sync(_interval) {
488
+ const intervalsToSync = [];
489
+ // Determine the requests that need to be made, and which intervals need to be inserted.
490
+ // Fragments are used to create a minimal filter, to avoid refetching data even if a filter
491
+ // is only partially synced.
492
+ for (const { filter } of args.sources) {
493
+ if ((filter.fromBlock !== undefined && filter.fromBlock > _interval[1]) ||
494
+ (filter.toBlock !== undefined && filter.toBlock < _interval[0])) {
495
+ continue;
496
+ }
497
+ const interval = [
498
+ Math.max(filter.fromBlock ?? 0, _interval[0]),
499
+ Math.min(filter.toBlock ?? Number.POSITIVE_INFINITY, _interval[1]),
500
+ ];
501
+ const completedIntervals = intervalsCache.get(filter);
502
+ const requiredIntervals = [];
503
+ for (const { fragment, intervals: fragmentIntervals, } of completedIntervals) {
504
+ const requiredFragmentIntervals = intervalDifference([interval], fragmentIntervals);
505
+ if (requiredFragmentIntervals.length > 0) {
506
+ requiredIntervals.push({
507
+ fragment,
508
+ intervals: requiredFragmentIntervals,
509
+ });
510
+ }
511
+ }
512
+ if (requiredIntervals.length > 0) {
513
+ const requiredInterval = intervalBounds(requiredIntervals.flatMap(({ intervals }) => intervals));
514
+ const requiredFilter = recoverFilter(filter, requiredIntervals.map(({ fragment }) => fragment));
515
+ intervalsToSync.push({
516
+ filter: requiredFilter,
517
+ interval: requiredInterval,
518
+ });
519
+ }
520
+ }
521
+ await Promise.all(intervalsToSync.map(async ({ filter, interval }) => {
522
+ // Request last block of interval
523
+ const blockPromise = syncBlock(interval[1]);
524
+ try {
525
+ switch (filter.type) {
526
+ case "log": {
527
+ await syncLogFilter(filter, interval);
528
+ break;
529
+ }
530
+ case "block": {
531
+ await syncBlockFilter(filter, interval);
532
+ break;
533
+ }
534
+ case "transaction": {
535
+ await syncTransactionFilter(filter, interval);
536
+ break;
537
+ }
538
+ case "trace":
539
+ case "transfer": {
540
+ await syncTraceOrTransferFilter(filter, interval);
541
+ break;
542
+ }
543
+ }
544
+ }
545
+ catch (_error) {
546
+ const error = _error;
547
+ if (args.common.shutdown.isKilled) {
548
+ throw new ShutdownError();
549
+ }
550
+ args.common.logger.error({
551
+ service: "sync",
552
+ msg: `Fatal error: Unable to sync '${args.network.name}' from ${interval[0]} to ${interval[1]}.`,
553
+ error,
554
+ });
555
+ args.onFatalError(error);
556
+ return;
557
+ }
558
+ await blockPromise;
559
+ }));
560
+ const blocks = await Promise.all(blockCache.values());
561
+ await Promise.all([
562
+ args.syncStore.insertBlocks({ blocks, chainId: args.network.chainId }),
563
+ args.syncStore.insertTransactions({
564
+ transactions: blocks.flatMap((block) => block.transactions
565
+ .filter(({ hash }) => transactionsCache.has(hash))
566
+ .map((transaction) => ({
567
+ transaction,
568
+ block,
569
+ }))),
570
+ chainId: args.network.chainId,
571
+ }),
572
+ ]);
573
+ // Add corresponding intervals to the sync-store
574
+ // Note: this should happen after so the database doesn't become corrupted
575
+ if (args.network.disableCache === false) {
576
+ await args.syncStore.insertIntervals({
577
+ intervals: intervalsToSync,
578
+ chainId: args.network.chainId,
579
+ });
580
+ }
581
+ blockCache.clear();
582
+ traceCache.clear();
583
+ transactionsCache.clear();
584
+ blockReceiptsCache.clear();
585
+ transactionReceiptsCache.clear();
586
+ return latestBlock;
587
+ },
588
+ };
589
+ };
590
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sync-historical/index.ts"],"names":[],"mappings":"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"}