ponder 0.9.5-debug.1 → 0.9.5

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 (462) hide show
  1. package/dist/{types/bin → bin}/ponder.d.ts +6 -5
  2. package/dist/bin/ponder.js +12933 -0
  3. package/dist/bin/ponder.js.map +1 -0
  4. package/dist/chunk-K2TLRLX3.js +163 -0
  5. package/dist/chunk-K2TLRLX3.js.map +1 -0
  6. package/dist/chunk-LHCA5XFV.js +257 -0
  7. package/dist/chunk-LHCA5XFV.js.map +1 -0
  8. package/dist/{types/drizzle → drizzle}/onchain.d.ts +96 -49
  9. package/dist/drizzle/onchain.js +19 -0
  10. package/dist/drizzle/onchain.js.map +1 -0
  11. package/dist/index.d.ts +819 -0
  12. package/dist/index.js +2217 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/utils-ceNucOJb.d.ts +14 -0
  15. package/package.json +17 -17
  16. package/src/bin/commands/dev.ts +1 -1
  17. package/src/bin/ponder.ts +1 -1
  18. package/src/build/configAndIndexingFunctions.ts +1 -1
  19. package/src/build/factory.ts +1 -1
  20. package/src/client/index.ts +1 -1
  21. package/src/indexing-store/historical.ts +1 -1
  22. package/src/indexing-store/realtime.ts +1 -1
  23. package/src/internal/telemetry.ts +1 -1
  24. package/src/sync/fragments.ts +1 -1
  25. package/src/sync-realtime/index.ts +1 -1
  26. package/src/utils/generators.ts +1 -1
  27. package/src/utils/mutex.ts +1 -1
  28. package/src/utils/requestQueue.ts +1 -1
  29. package/CHANGELOG.md +0 -2201
  30. package/dist/esm/bin/commands/codegen.js +0 -37
  31. package/dist/esm/bin/commands/codegen.js.map +0 -1
  32. package/dist/esm/bin/commands/dev.js +0 -242
  33. package/dist/esm/bin/commands/dev.js.map +0 -1
  34. package/dist/esm/bin/commands/list.js +0 -103
  35. package/dist/esm/bin/commands/list.js.map +0 -1
  36. package/dist/esm/bin/commands/serve.js +0 -123
  37. package/dist/esm/bin/commands/serve.js.map +0 -1
  38. package/dist/esm/bin/commands/start.js +0 -136
  39. package/dist/esm/bin/commands/start.js.map +0 -1
  40. package/dist/esm/bin/ponder.js +0 -118
  41. package/dist/esm/bin/ponder.js.map +0 -1
  42. package/dist/esm/bin/utils/codegen.js +0 -26
  43. package/dist/esm/bin/utils/codegen.js.map +0 -1
  44. package/dist/esm/bin/utils/exit.js +0 -69
  45. package/dist/esm/bin/utils/exit.js.map +0 -1
  46. package/dist/esm/bin/utils/run.js +0 -247
  47. package/dist/esm/bin/utils/run.js.map +0 -1
  48. package/dist/esm/bin/utils/runServer.js +0 -8
  49. package/dist/esm/bin/utils/runServer.js.map +0 -1
  50. package/dist/esm/build/configAndIndexingFunctions.js +0 -654
  51. package/dist/esm/build/configAndIndexingFunctions.js.map +0 -1
  52. package/dist/esm/build/factory.js +0 -43
  53. package/dist/esm/build/factory.js.map +0 -1
  54. package/dist/esm/build/index.js +0 -431
  55. package/dist/esm/build/index.js.map +0 -1
  56. package/dist/esm/build/plugin.js +0 -43
  57. package/dist/esm/build/plugin.js.map +0 -1
  58. package/dist/esm/build/pre.js +0 -112
  59. package/dist/esm/build/pre.js.map +0 -1
  60. package/dist/esm/build/schema.js +0 -89
  61. package/dist/esm/build/schema.js.map +0 -1
  62. package/dist/esm/build/stacktrace.js +0 -137
  63. package/dist/esm/build/stacktrace.js.map +0 -1
  64. package/dist/esm/client/index.js +0 -124
  65. package/dist/esm/client/index.js.map +0 -1
  66. package/dist/esm/client/validate.js +0 -1151
  67. package/dist/esm/client/validate.js.map +0 -1
  68. package/dist/esm/config/address.js +0 -2
  69. package/dist/esm/config/address.js.map +0 -1
  70. package/dist/esm/config/eventFilter.js +0 -2
  71. package/dist/esm/config/eventFilter.js.map +0 -1
  72. package/dist/esm/config/index.js +0 -2
  73. package/dist/esm/config/index.js.map +0 -1
  74. package/dist/esm/config/networks.js +0 -120
  75. package/dist/esm/config/networks.js.map +0 -1
  76. package/dist/esm/config/utilityTypes.js +0 -2
  77. package/dist/esm/config/utilityTypes.js.map +0 -1
  78. package/dist/esm/database/index.js +0 -914
  79. package/dist/esm/database/index.js.map +0 -1
  80. package/dist/esm/drizzle/bigint.js +0 -36
  81. package/dist/esm/drizzle/bigint.js.map +0 -1
  82. package/dist/esm/drizzle/hex.js +0 -38
  83. package/dist/esm/drizzle/hex.js.map +0 -1
  84. package/dist/esm/drizzle/index.js +0 -43
  85. package/dist/esm/drizzle/index.js.map +0 -1
  86. package/dist/esm/drizzle/kit/index.js +0 -658
  87. package/dist/esm/drizzle/kit/index.js.map +0 -1
  88. package/dist/esm/drizzle/onchain.js +0 -102
  89. package/dist/esm/drizzle/onchain.js.map +0 -1
  90. package/dist/esm/graphql/index.js +0 -704
  91. package/dist/esm/graphql/index.js.map +0 -1
  92. package/dist/esm/graphql/json.js +0 -42
  93. package/dist/esm/graphql/json.js.map +0 -1
  94. package/dist/esm/graphql/middleware.js +0 -80
  95. package/dist/esm/graphql/middleware.js.map +0 -1
  96. package/dist/esm/index.js +0 -9
  97. package/dist/esm/index.js.map +0 -1
  98. package/dist/esm/indexing/addStackTrace.js +0 -54
  99. package/dist/esm/indexing/addStackTrace.js.map +0 -1
  100. package/dist/esm/indexing/index.js +0 -10
  101. package/dist/esm/indexing/index.js.map +0 -1
  102. package/dist/esm/indexing/ponderActions.js +0 -60
  103. package/dist/esm/indexing/ponderActions.js.map +0 -1
  104. package/dist/esm/indexing/service.js +0 -312
  105. package/dist/esm/indexing/service.js.map +0 -1
  106. package/dist/esm/indexing-store/historical.js +0 -591
  107. package/dist/esm/indexing-store/historical.js.map +0 -1
  108. package/dist/esm/indexing-store/index.js +0 -19
  109. package/dist/esm/indexing-store/index.js.map +0 -1
  110. package/dist/esm/indexing-store/metadata.js +0 -46
  111. package/dist/esm/indexing-store/metadata.js.map +0 -1
  112. package/dist/esm/indexing-store/realtime.js +0 -295
  113. package/dist/esm/indexing-store/realtime.js.map +0 -1
  114. package/dist/esm/internal/common.js +0 -2
  115. package/dist/esm/internal/common.js.map +0 -1
  116. package/dist/esm/internal/errors.js +0 -175
  117. package/dist/esm/internal/errors.js.map +0 -1
  118. package/dist/esm/internal/logger.js +0 -96
  119. package/dist/esm/internal/logger.js.map +0 -1
  120. package/dist/esm/internal/metrics.js +0 -569
  121. package/dist/esm/internal/metrics.js.map +0 -1
  122. package/dist/esm/internal/options.js +0 -69
  123. package/dist/esm/internal/options.js.map +0 -1
  124. package/dist/esm/internal/shutdown.js +0 -18
  125. package/dist/esm/internal/shutdown.js.map +0 -1
  126. package/dist/esm/internal/telemetry.js +0 -199
  127. package/dist/esm/internal/telemetry.js.map +0 -1
  128. package/dist/esm/internal/types.js +0 -2
  129. package/dist/esm/internal/types.js.map +0 -1
  130. package/dist/esm/server/error.js +0 -55
  131. package/dist/esm/server/error.js.map +0 -1
  132. package/dist/esm/server/index.js +0 -107
  133. package/dist/esm/server/index.js.map +0 -1
  134. package/dist/esm/sync/abi.js +0 -67
  135. package/dist/esm/sync/abi.js.map +0 -1
  136. package/dist/esm/sync/events.js +0 -607
  137. package/dist/esm/sync/events.js.map +0 -1
  138. package/dist/esm/sync/filter.js +0 -356
  139. package/dist/esm/sync/filter.js.map +0 -1
  140. package/dist/esm/sync/fragments.js +0 -300
  141. package/dist/esm/sync/fragments.js.map +0 -1
  142. package/dist/esm/sync/index.js +0 -1001
  143. package/dist/esm/sync/index.js.map +0 -1
  144. package/dist/esm/sync/transport.js +0 -94
  145. package/dist/esm/sync/transport.js.map +0 -1
  146. package/dist/esm/sync-historical/index.js +0 -590
  147. package/dist/esm/sync-historical/index.js.map +0 -1
  148. package/dist/esm/sync-realtime/bloom.js +0 -75
  149. package/dist/esm/sync-realtime/bloom.js.map +0 -1
  150. package/dist/esm/sync-realtime/index.js +0 -794
  151. package/dist/esm/sync-realtime/index.js.map +0 -1
  152. package/dist/esm/sync-store/encoding.js +0 -157
  153. package/dist/esm/sync-store/encoding.js.map +0 -1
  154. package/dist/esm/sync-store/index.js +0 -727
  155. package/dist/esm/sync-store/index.js.map +0 -1
  156. package/dist/esm/sync-store/migrations.js +0 -1186
  157. package/dist/esm/sync-store/migrations.js.map +0 -1
  158. package/dist/esm/types/db.js +0 -2
  159. package/dist/esm/types/db.js.map +0 -1
  160. package/dist/esm/types/eth.js +0 -2
  161. package/dist/esm/types/eth.js.map +0 -1
  162. package/dist/esm/types/sync.js +0 -2
  163. package/dist/esm/types/sync.js.map +0 -1
  164. package/dist/esm/types/utils.js +0 -2
  165. package/dist/esm/types/utils.js.map +0 -1
  166. package/dist/esm/types/virtual.js +0 -2
  167. package/dist/esm/types/virtual.js.map +0 -1
  168. package/dist/esm/ui/ProgressBar.js +0 -11
  169. package/dist/esm/ui/ProgressBar.js.map +0 -1
  170. package/dist/esm/ui/Table.js +0 -50
  171. package/dist/esm/ui/Table.js.map +0 -1
  172. package/dist/esm/ui/app.js +0 -113
  173. package/dist/esm/ui/app.js.map +0 -1
  174. package/dist/esm/ui/graphiql.html.js +0 -59
  175. package/dist/esm/ui/graphiql.html.js.map +0 -1
  176. package/dist/esm/ui/index.js +0 -21
  177. package/dist/esm/ui/index.js.map +0 -1
  178. package/dist/esm/utils/bigint.js +0 -37
  179. package/dist/esm/utils/bigint.js.map +0 -1
  180. package/dist/esm/utils/chains.js +0 -3
  181. package/dist/esm/utils/chains.js.map +0 -1
  182. package/dist/esm/utils/checkpoint.js +0 -114
  183. package/dist/esm/utils/checkpoint.js.map +0 -1
  184. package/dist/esm/utils/chunk.js +0 -8
  185. package/dist/esm/utils/chunk.js.map +0 -1
  186. package/dist/esm/utils/date.js +0 -27
  187. package/dist/esm/utils/date.js.map +0 -1
  188. package/dist/esm/utils/debug.js +0 -2
  189. package/dist/esm/utils/debug.js.map +0 -1
  190. package/dist/esm/utils/dedupe.js +0 -33
  191. package/dist/esm/utils/dedupe.js.map +0 -1
  192. package/dist/esm/utils/duplicates.js +0 -19
  193. package/dist/esm/utils/duplicates.js.map +0 -1
  194. package/dist/esm/utils/estimate.js +0 -6
  195. package/dist/esm/utils/estimate.js.map +0 -1
  196. package/dist/esm/utils/extend.js +0 -28
  197. package/dist/esm/utils/extend.js.map +0 -1
  198. package/dist/esm/utils/format.js +0 -20
  199. package/dist/esm/utils/format.js.map +0 -1
  200. package/dist/esm/utils/generators.js +0 -77
  201. package/dist/esm/utils/generators.js.map +0 -1
  202. package/dist/esm/utils/hash.js +0 -11
  203. package/dist/esm/utils/hash.js.map +0 -1
  204. package/dist/esm/utils/interval.js +0 -171
  205. package/dist/esm/utils/interval.js.map +0 -1
  206. package/dist/esm/utils/lowercase.js +0 -7
  207. package/dist/esm/utils/lowercase.js.map +0 -1
  208. package/dist/esm/utils/mutex.js +0 -25
  209. package/dist/esm/utils/mutex.js.map +0 -1
  210. package/dist/esm/utils/never.js +0 -4
  211. package/dist/esm/utils/never.js.map +0 -1
  212. package/dist/esm/utils/offset.js +0 -73
  213. package/dist/esm/utils/offset.js.map +0 -1
  214. package/dist/esm/utils/order.js +0 -18
  215. package/dist/esm/utils/order.js.map +0 -1
  216. package/dist/esm/utils/partition.js +0 -37
  217. package/dist/esm/utils/partition.js.map +0 -1
  218. package/dist/esm/utils/pg.js +0 -126
  219. package/dist/esm/utils/pg.js.map +0 -1
  220. package/dist/esm/utils/pglite.js +0 -80
  221. package/dist/esm/utils/pglite.js.map +0 -1
  222. package/dist/esm/utils/port.js +0 -30
  223. package/dist/esm/utils/port.js.map +0 -1
  224. package/dist/esm/utils/print.js +0 -23
  225. package/dist/esm/utils/print.js.map +0 -1
  226. package/dist/esm/utils/promiseWithResolvers.js +0 -13
  227. package/dist/esm/utils/promiseWithResolvers.js.map +0 -1
  228. package/dist/esm/utils/queue.js +0 -145
  229. package/dist/esm/utils/queue.js.map +0 -1
  230. package/dist/esm/utils/range.js +0 -8
  231. package/dist/esm/utils/range.js.map +0 -1
  232. package/dist/esm/utils/requestQueue.js +0 -127
  233. package/dist/esm/utils/requestQueue.js.map +0 -1
  234. package/dist/esm/utils/result.js +0 -10
  235. package/dist/esm/utils/result.js.map +0 -1
  236. package/dist/esm/utils/rpc.js +0 -202
  237. package/dist/esm/utils/rpc.js.map +0 -1
  238. package/dist/esm/utils/serialize.js +0 -23
  239. package/dist/esm/utils/serialize.js.map +0 -1
  240. package/dist/esm/utils/timer.js +0 -17
  241. package/dist/esm/utils/timer.js.map +0 -1
  242. package/dist/esm/utils/wait.js +0 -8
  243. package/dist/esm/utils/wait.js.map +0 -1
  244. package/dist/esm/utils/zipper.js +0 -67
  245. package/dist/esm/utils/zipper.js.map +0 -1
  246. package/dist/types/bin/commands/codegen.d.ts +0 -5
  247. package/dist/types/bin/commands/codegen.d.ts.map +0 -1
  248. package/dist/types/bin/commands/dev.d.ts +0 -5
  249. package/dist/types/bin/commands/dev.d.ts.map +0 -1
  250. package/dist/types/bin/commands/list.d.ts +0 -5
  251. package/dist/types/bin/commands/list.d.ts.map +0 -1
  252. package/dist/types/bin/commands/serve.d.ts +0 -5
  253. package/dist/types/bin/commands/serve.d.ts.map +0 -1
  254. package/dist/types/bin/commands/start.d.ts +0 -5
  255. package/dist/types/bin/commands/start.d.ts.map +0 -1
  256. package/dist/types/bin/ponder.d.ts.map +0 -1
  257. package/dist/types/bin/utils/codegen.d.ts +0 -6
  258. package/dist/types/bin/utils/codegen.d.ts.map +0 -1
  259. package/dist/types/bin/utils/exit.d.ts +0 -9
  260. package/dist/types/bin/utils/exit.d.ts.map +0 -1
  261. package/dist/types/bin/utils/run.d.ts +0 -14
  262. package/dist/types/bin/utils/run.d.ts.map +0 -1
  263. package/dist/types/bin/utils/runServer.d.ts +0 -12
  264. package/dist/types/bin/utils/runServer.d.ts.map +0 -1
  265. package/dist/types/build/configAndIndexingFunctions.d.ts +0 -37
  266. package/dist/types/build/configAndIndexingFunctions.d.ts.map +0 -1
  267. package/dist/types/build/factory.d.ts +0 -10
  268. package/dist/types/build/factory.d.ts.map +0 -1
  269. package/dist/types/build/index.d.ts +0 -70
  270. package/dist/types/build/index.d.ts.map +0 -1
  271. package/dist/types/build/plugin.d.ts +0 -4
  272. package/dist/types/build/plugin.d.ts.map +0 -1
  273. package/dist/types/build/pre.d.ts +0 -35
  274. package/dist/types/build/pre.d.ts.map +0 -1
  275. package/dist/types/build/schema.d.ts +0 -18
  276. package/dist/types/build/schema.d.ts.map +0 -1
  277. package/dist/types/build/stacktrace.d.ts +0 -13
  278. package/dist/types/build/stacktrace.d.ts.map +0 -1
  279. package/dist/types/client/index.d.ts +0 -27
  280. package/dist/types/client/index.d.ts.map +0 -1
  281. package/dist/types/client/validate.d.ts +0 -2
  282. package/dist/types/client/validate.d.ts.map +0 -1
  283. package/dist/types/config/address.d.ts +0 -14
  284. package/dist/types/config/address.d.ts.map +0 -1
  285. package/dist/types/config/eventFilter.d.ts +0 -18
  286. package/dist/types/config/eventFilter.d.ts.map +0 -1
  287. package/dist/types/config/index.d.ts +0 -143
  288. package/dist/types/config/index.d.ts.map +0 -1
  289. package/dist/types/config/networks.d.ts +0 -30
  290. package/dist/types/config/networks.d.ts.map +0 -1
  291. package/dist/types/config/utilityTypes.d.ts +0 -43
  292. package/dist/types/config/utilityTypes.d.ts.map +0 -1
  293. package/dist/types/database/index.d.ts +0 -91
  294. package/dist/types/database/index.d.ts.map +0 -1
  295. package/dist/types/drizzle/bigint.d.ts +0 -25
  296. package/dist/types/drizzle/bigint.d.ts.map +0 -1
  297. package/dist/types/drizzle/hex.d.ts +0 -25
  298. package/dist/types/drizzle/hex.d.ts.map +0 -1
  299. package/dist/types/drizzle/index.d.ts +0 -14
  300. package/dist/types/drizzle/index.d.ts.map +0 -1
  301. package/dist/types/drizzle/kit/index.d.ts +0 -49
  302. package/dist/types/drizzle/kit/index.d.ts.map +0 -1
  303. package/dist/types/drizzle/onchain.d.ts.map +0 -1
  304. package/dist/types/graphql/index.d.ts +0 -14
  305. package/dist/types/graphql/index.d.ts.map +0 -1
  306. package/dist/types/graphql/json.d.ts +0 -3
  307. package/dist/types/graphql/json.d.ts.map +0 -1
  308. package/dist/types/graphql/middleware.d.ts +0 -29
  309. package/dist/types/graphql/middleware.d.ts.map +0 -1
  310. package/dist/types/index.d.ts +0 -18
  311. package/dist/types/index.d.ts.map +0 -1
  312. package/dist/types/indexing/addStackTrace.d.ts +0 -3
  313. package/dist/types/indexing/addStackTrace.d.ts.map +0 -1
  314. package/dist/types/indexing/index.d.ts +0 -575
  315. package/dist/types/indexing/index.d.ts.map +0 -1
  316. package/dist/types/indexing/ponderActions.d.ts +0 -47
  317. package/dist/types/indexing/ponderActions.d.ts.map +0 -1
  318. package/dist/types/indexing/service.d.ts +0 -73
  319. package/dist/types/indexing/service.d.ts.map +0 -1
  320. package/dist/types/indexing-store/historical.d.ts +0 -19
  321. package/dist/types/indexing-store/historical.d.ts.map +0 -1
  322. package/dist/types/indexing-store/index.d.ts +0 -10
  323. package/dist/types/indexing-store/index.d.ts.map +0 -1
  324. package/dist/types/indexing-store/metadata.d.ts +0 -10
  325. package/dist/types/indexing-store/metadata.d.ts.map +0 -1
  326. package/dist/types/indexing-store/realtime.d.ts +0 -10
  327. package/dist/types/indexing-store/realtime.d.ts.map +0 -1
  328. package/dist/types/internal/common.d.ts +0 -13
  329. package/dist/types/internal/common.d.ts.map +0 -1
  330. package/dist/types/internal/errors.d.ts +0 -55
  331. package/dist/types/internal/errors.d.ts.map +0 -1
  332. package/dist/types/internal/logger.d.ts +0 -26
  333. package/dist/types/internal/logger.d.ts.map +0 -1
  334. package/dist/types/internal/metrics.d.ts +0 -77
  335. package/dist/types/internal/metrics.d.ts.map +0 -1
  336. package/dist/types/internal/options.d.ts +0 -59
  337. package/dist/types/internal/options.d.ts.map +0 -1
  338. package/dist/types/internal/shutdown.d.ts +0 -8
  339. package/dist/types/internal/shutdown.d.ts.map +0 -1
  340. package/dist/types/internal/telemetry.d.ts +0 -43
  341. package/dist/types/internal/telemetry.d.ts.map +0 -1
  342. package/dist/types/internal/types.d.ts +0 -328
  343. package/dist/types/internal/types.d.ts.map +0 -1
  344. package/dist/types/server/error.d.ts +0 -5
  345. package/dist/types/server/error.d.ts.map +0 -1
  346. package/dist/types/server/index.d.ts +0 -13
  347. package/dist/types/server/index.d.ts.map +0 -1
  348. package/dist/types/sync/abi.d.ts +0 -54
  349. package/dist/types/sync/abi.d.ts.map +0 -1
  350. package/dist/types/sync/events.d.ts +0 -24
  351. package/dist/types/sync/events.d.ts.map +0 -1
  352. package/dist/types/sync/filter.d.ts +0 -71
  353. package/dist/types/sync/filter.d.ts.map +0 -1
  354. package/dist/types/sync/fragments.d.ts +0 -21
  355. package/dist/types/sync/fragments.d.ts.map +0 -1
  356. package/dist/types/sync/index.d.ts +0 -112
  357. package/dist/types/sync/index.d.ts.map +0 -1
  358. package/dist/types/sync/transport.d.ts +0 -8
  359. package/dist/types/sync/transport.d.ts.map +0 -1
  360. package/dist/types/sync-historical/index.d.ts +0 -28
  361. package/dist/types/sync-historical/index.d.ts.map +0 -1
  362. package/dist/types/sync-realtime/bloom.d.ts +0 -19
  363. package/dist/types/sync-realtime/bloom.d.ts.map +0 -1
  364. package/dist/types/sync-realtime/index.d.ts +0 -48
  365. package/dist/types/sync-realtime/index.d.ts.map +0 -1
  366. package/dist/types/sync-store/encoding.d.ts +0 -151
  367. package/dist/types/sync-store/encoding.d.ts.map +0 -1
  368. package/dist/types/sync-store/index.d.ts +0 -104
  369. package/dist/types/sync-store/index.d.ts.map +0 -1
  370. package/dist/types/sync-store/migrations.d.ts +0 -13
  371. package/dist/types/sync-store/migrations.d.ts.map +0 -1
  372. package/dist/types/types/db.d.ts +0 -213
  373. package/dist/types/types/db.d.ts.map +0 -1
  374. package/dist/types/types/eth.d.ts +0 -196
  375. package/dist/types/types/eth.d.ts.map +0 -1
  376. package/dist/types/types/sync.d.ts +0 -15
  377. package/dist/types/types/sync.d.ts.map +0 -1
  378. package/dist/types/types/utils.d.ts +0 -22
  379. package/dist/types/types/utils.d.ts.map +0 -1
  380. package/dist/types/types/virtual.d.ts +0 -95
  381. package/dist/types/types/virtual.d.ts.map +0 -1
  382. package/dist/types/ui/ProgressBar.d.ts +0 -7
  383. package/dist/types/ui/ProgressBar.d.ts.map +0 -1
  384. package/dist/types/ui/Table.d.ts +0 -24
  385. package/dist/types/ui/Table.d.ts.map +0 -1
  386. package/dist/types/ui/app.d.ts +0 -14
  387. package/dist/types/ui/app.d.ts.map +0 -1
  388. package/dist/types/ui/graphiql.html.d.ts +0 -2
  389. package/dist/types/ui/graphiql.html.d.ts.map +0 -1
  390. package/dist/types/ui/index.d.ts +0 -5
  391. package/dist/types/ui/index.d.ts.map +0 -1
  392. package/dist/types/utils/bigint.d.ts +0 -15
  393. package/dist/types/utils/bigint.d.ts.map +0 -1
  394. package/dist/types/utils/chains.d.ts +0 -3
  395. package/dist/types/utils/chains.d.ts.map +0 -1
  396. package/dist/types/utils/checkpoint.d.ts +0 -40
  397. package/dist/types/utils/checkpoint.d.ts.map +0 -1
  398. package/dist/types/utils/chunk.d.ts +0 -2
  399. package/dist/types/utils/chunk.d.ts.map +0 -1
  400. package/dist/types/utils/date.d.ts +0 -7
  401. package/dist/types/utils/date.d.ts.map +0 -1
  402. package/dist/types/utils/debug.d.ts +0 -105
  403. package/dist/types/utils/debug.d.ts.map +0 -1
  404. package/dist/types/utils/dedupe.d.ts +0 -20
  405. package/dist/types/utils/dedupe.d.ts.map +0 -1
  406. package/dist/types/utils/duplicates.d.ts +0 -7
  407. package/dist/types/utils/duplicates.d.ts.map +0 -1
  408. package/dist/types/utils/estimate.d.ts +0 -11
  409. package/dist/types/utils/estimate.d.ts.map +0 -1
  410. package/dist/types/utils/extend.d.ts +0 -13
  411. package/dist/types/utils/extend.d.ts.map +0 -1
  412. package/dist/types/utils/format.d.ts +0 -3
  413. package/dist/types/utils/format.d.ts.map +0 -1
  414. package/dist/types/utils/generators.d.ts +0 -23
  415. package/dist/types/utils/generators.d.ts.map +0 -1
  416. package/dist/types/utils/hash.d.ts +0 -11
  417. package/dist/types/utils/hash.d.ts.map +0 -1
  418. package/dist/types/utils/interval.d.ts +0 -53
  419. package/dist/types/utils/interval.d.ts.map +0 -1
  420. package/dist/types/utils/lowercase.d.ts +0 -5
  421. package/dist/types/utils/lowercase.d.ts.map +0 -1
  422. package/dist/types/utils/mutex.d.ts +0 -8
  423. package/dist/types/utils/mutex.d.ts.map +0 -1
  424. package/dist/types/utils/never.d.ts +0 -2
  425. package/dist/types/utils/never.d.ts.map +0 -1
  426. package/dist/types/utils/offset.d.ts +0 -3
  427. package/dist/types/utils/offset.d.ts.map +0 -1
  428. package/dist/types/utils/order.d.ts +0 -2
  429. package/dist/types/utils/order.d.ts.map +0 -1
  430. package/dist/types/utils/partition.d.ts +0 -22
  431. package/dist/types/utils/partition.d.ts.map +0 -1
  432. package/dist/types/utils/pg.d.ts +0 -5
  433. package/dist/types/utils/pg.d.ts.map +0 -1
  434. package/dist/types/utils/pglite.d.ts +0 -25
  435. package/dist/types/utils/pglite.d.ts.map +0 -1
  436. package/dist/types/utils/port.d.ts +0 -5
  437. package/dist/types/utils/port.d.ts.map +0 -1
  438. package/dist/types/utils/print.d.ts +0 -2
  439. package/dist/types/utils/print.d.ts.map +0 -1
  440. package/dist/types/utils/promiseWithResolvers.d.ts +0 -10
  441. package/dist/types/utils/promiseWithResolvers.d.ts.map +0 -1
  442. package/dist/types/utils/queue.d.ts +0 -33
  443. package/dist/types/utils/queue.d.ts.map +0 -1
  444. package/dist/types/utils/range.d.ts +0 -8
  445. package/dist/types/utils/range.d.ts.map +0 -1
  446. package/dist/types/utils/requestQueue.d.ts +0 -21
  447. package/dist/types/utils/requestQueue.d.ts.map +0 -1
  448. package/dist/types/utils/result.d.ts +0 -17
  449. package/dist/types/utils/result.d.ts.map +0 -1
  450. package/dist/types/utils/rpc.d.ts +0 -57
  451. package/dist/types/utils/rpc.d.ts.map +0 -1
  452. package/dist/types/utils/serialize.d.ts +0 -19
  453. package/dist/types/utils/serialize.d.ts.map +0 -1
  454. package/dist/types/utils/timer.d.ts +0 -11
  455. package/dist/types/utils/timer.d.ts.map +0 -1
  456. package/dist/types/utils/wait.d.ts +0 -6
  457. package/dist/types/utils/wait.d.ts.map +0 -1
  458. package/dist/types/utils/zipper.d.ts +0 -36
  459. package/dist/types/utils/zipper.d.ts.map +0 -1
  460. package/src/utils/dedupe.ts +0 -40
  461. package/src/utils/promiseWithResolvers.ts +0 -20
  462. package/src/utils/queue.ts +0 -250
@@ -1,590 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sync-historical/index.ts"],"names":[],"mappings":"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"}