@mikeatlast/ponder 0.16.1-fork.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 (619) hide show
  1. package/CHANGELOG.md +3415 -0
  2. package/README.md +186 -0
  3. package/dist/esm/bin/commands/codegen.js +46 -0
  4. package/dist/esm/bin/commands/codegen.js.map +1 -0
  5. package/dist/esm/bin/commands/createViews.js +196 -0
  6. package/dist/esm/bin/commands/createViews.js.map +1 -0
  7. package/dist/esm/bin/commands/dev.js +430 -0
  8. package/dist/esm/bin/commands/dev.js.map +1 -0
  9. package/dist/esm/bin/commands/list.js +148 -0
  10. package/dist/esm/bin/commands/list.js.map +1 -0
  11. package/dist/esm/bin/commands/prune.js +223 -0
  12. package/dist/esm/bin/commands/prune.js.map +1 -0
  13. package/dist/esm/bin/commands/serve.js +198 -0
  14. package/dist/esm/bin/commands/serve.js.map +1 -0
  15. package/dist/esm/bin/commands/start.js +253 -0
  16. package/dist/esm/bin/commands/start.js.map +1 -0
  17. package/dist/esm/bin/isolatedController.js +200 -0
  18. package/dist/esm/bin/isolatedController.js.map +1 -0
  19. package/dist/esm/bin/isolatedWorker.js +146 -0
  20. package/dist/esm/bin/isolatedWorker.js.map +1 -0
  21. package/dist/esm/bin/ponder.js +137 -0
  22. package/dist/esm/bin/ponder.js.map +1 -0
  23. package/dist/esm/bin/utils/codegen.js +25 -0
  24. package/dist/esm/bin/utils/codegen.js.map +1 -0
  25. package/dist/esm/bin/utils/exit.js +100 -0
  26. package/dist/esm/bin/utils/exit.js.map +1 -0
  27. package/dist/esm/build/config.js +745 -0
  28. package/dist/esm/build/config.js.map +1 -0
  29. package/dist/esm/build/factory.js +82 -0
  30. package/dist/esm/build/factory.js.map +1 -0
  31. package/dist/esm/build/index.js +567 -0
  32. package/dist/esm/build/index.js.map +1 -0
  33. package/dist/esm/build/plugin.js +53 -0
  34. package/dist/esm/build/plugin.js.map +1 -0
  35. package/dist/esm/build/pre.js +83 -0
  36. package/dist/esm/build/pre.js.map +1 -0
  37. package/dist/esm/build/schema.js +202 -0
  38. package/dist/esm/build/schema.js.map +1 -0
  39. package/dist/esm/build/stacktrace.js +137 -0
  40. package/dist/esm/build/stacktrace.js.map +1 -0
  41. package/dist/esm/client/index.js +441 -0
  42. package/dist/esm/client/index.js.map +1 -0
  43. package/dist/esm/config/address.js +2 -0
  44. package/dist/esm/config/address.js.map +1 -0
  45. package/dist/esm/config/eventFilter.js +2 -0
  46. package/dist/esm/config/eventFilter.js.map +1 -0
  47. package/dist/esm/config/index.js +2 -0
  48. package/dist/esm/config/index.js.map +1 -0
  49. package/dist/esm/config/utilityTypes.js +2 -0
  50. package/dist/esm/config/utilityTypes.js.map +1 -0
  51. package/dist/esm/database/actions.js +445 -0
  52. package/dist/esm/database/actions.js.map +1 -0
  53. package/dist/esm/database/index.js +604 -0
  54. package/dist/esm/database/index.js.map +1 -0
  55. package/dist/esm/database/queryBuilder.js +314 -0
  56. package/dist/esm/database/queryBuilder.js.map +1 -0
  57. package/dist/esm/drizzle/bigint.js +38 -0
  58. package/dist/esm/drizzle/bigint.js.map +1 -0
  59. package/dist/esm/drizzle/bytes.js +47 -0
  60. package/dist/esm/drizzle/bytes.js.map +1 -0
  61. package/dist/esm/drizzle/hex.js +40 -0
  62. package/dist/esm/drizzle/hex.js.map +1 -0
  63. package/dist/esm/drizzle/index.js +28 -0
  64. package/dist/esm/drizzle/index.js.map +1 -0
  65. package/dist/esm/drizzle/json.js +123 -0
  66. package/dist/esm/drizzle/json.js.map +1 -0
  67. package/dist/esm/drizzle/kit/index.js +927 -0
  68. package/dist/esm/drizzle/kit/index.js.map +1 -0
  69. package/dist/esm/drizzle/onchain.js +184 -0
  70. package/dist/esm/drizzle/onchain.js.map +1 -0
  71. package/dist/esm/drizzle/text.js +61 -0
  72. package/dist/esm/drizzle/text.js.map +1 -0
  73. package/dist/esm/graphql/graphiql.html.js +59 -0
  74. package/dist/esm/graphql/graphiql.html.js.map +1 -0
  75. package/dist/esm/graphql/index.js +934 -0
  76. package/dist/esm/graphql/index.js.map +1 -0
  77. package/dist/esm/graphql/json.js +42 -0
  78. package/dist/esm/graphql/json.js.map +1 -0
  79. package/dist/esm/graphql/middleware.js +83 -0
  80. package/dist/esm/graphql/middleware.js.map +1 -0
  81. package/dist/esm/index.js +9 -0
  82. package/dist/esm/index.js.map +1 -0
  83. package/dist/esm/indexing/addStackTrace.js +54 -0
  84. package/dist/esm/indexing/addStackTrace.js.map +1 -0
  85. package/dist/esm/indexing/client.js +675 -0
  86. package/dist/esm/indexing/client.js.map +1 -0
  87. package/dist/esm/indexing/index.js +663 -0
  88. package/dist/esm/indexing/index.js.map +1 -0
  89. package/dist/esm/indexing/profile.js +584 -0
  90. package/dist/esm/indexing/profile.js.map +1 -0
  91. package/dist/esm/indexing-store/cache.js +666 -0
  92. package/dist/esm/indexing-store/cache.js.map +1 -0
  93. package/dist/esm/indexing-store/index.js +461 -0
  94. package/dist/esm/indexing-store/index.js.map +1 -0
  95. package/dist/esm/indexing-store/profile.js +428 -0
  96. package/dist/esm/indexing-store/profile.js.map +1 -0
  97. package/dist/esm/indexing-store/utils.js +111 -0
  98. package/dist/esm/indexing-store/utils.js.map +1 -0
  99. package/dist/esm/internal/common.js +2 -0
  100. package/dist/esm/internal/common.js.map +1 -0
  101. package/dist/esm/internal/errors.js +300 -0
  102. package/dist/esm/internal/errors.js.map +1 -0
  103. package/dist/esm/internal/logger.js +178 -0
  104. package/dist/esm/internal/logger.js.map +1 -0
  105. package/dist/esm/internal/metrics.js +1049 -0
  106. package/dist/esm/internal/metrics.js.map +1 -0
  107. package/dist/esm/internal/options.js +73 -0
  108. package/dist/esm/internal/options.js.map +1 -0
  109. package/dist/esm/internal/shutdown.js +24 -0
  110. package/dist/esm/internal/shutdown.js.map +1 -0
  111. package/dist/esm/internal/telemetry.js +200 -0
  112. package/dist/esm/internal/telemetry.js.map +1 -0
  113. package/dist/esm/internal/types.js +2 -0
  114. package/dist/esm/internal/types.js.map +1 -0
  115. package/dist/esm/rpc/actions.js +988 -0
  116. package/dist/esm/rpc/actions.js.map +1 -0
  117. package/dist/esm/rpc/http.js +130 -0
  118. package/dist/esm/rpc/http.js.map +1 -0
  119. package/dist/esm/rpc/index.js +749 -0
  120. package/dist/esm/rpc/index.js.map +1 -0
  121. package/dist/esm/runtime/events.js +664 -0
  122. package/dist/esm/runtime/events.js.map +1 -0
  123. package/dist/esm/runtime/filter.js +476 -0
  124. package/dist/esm/runtime/filter.js.map +1 -0
  125. package/dist/esm/runtime/fragments.js +478 -0
  126. package/dist/esm/runtime/fragments.js.map +1 -0
  127. package/dist/esm/runtime/historical.js +954 -0
  128. package/dist/esm/runtime/historical.js.map +1 -0
  129. package/dist/esm/runtime/index.js +316 -0
  130. package/dist/esm/runtime/index.js.map +1 -0
  131. package/dist/esm/runtime/init.js +12 -0
  132. package/dist/esm/runtime/init.js.map +1 -0
  133. package/dist/esm/runtime/isolated.js +464 -0
  134. package/dist/esm/runtime/isolated.js.map +1 -0
  135. package/dist/esm/runtime/multichain.js +511 -0
  136. package/dist/esm/runtime/multichain.js.map +1 -0
  137. package/dist/esm/runtime/omnichain.js +546 -0
  138. package/dist/esm/runtime/omnichain.js.map +1 -0
  139. package/dist/esm/runtime/realtime.js +722 -0
  140. package/dist/esm/runtime/realtime.js.map +1 -0
  141. package/dist/esm/server/error.js +56 -0
  142. package/dist/esm/server/error.js.map +1 -0
  143. package/dist/esm/server/index.js +121 -0
  144. package/dist/esm/server/index.js.map +1 -0
  145. package/dist/esm/sync-historical/index.js +703 -0
  146. package/dist/esm/sync-historical/index.js.map +1 -0
  147. package/dist/esm/sync-realtime/bloom.js +76 -0
  148. package/dist/esm/sync-realtime/bloom.js.map +1 -0
  149. package/dist/esm/sync-realtime/index.js +918 -0
  150. package/dist/esm/sync-realtime/index.js.map +1 -0
  151. package/dist/esm/sync-store/encode.js +105 -0
  152. package/dist/esm/sync-store/encode.js.map +1 -0
  153. package/dist/esm/sync-store/index.js +885 -0
  154. package/dist/esm/sync-store/index.js.map +1 -0
  155. package/dist/esm/sync-store/migrations.js +1595 -0
  156. package/dist/esm/sync-store/migrations.js.map +1 -0
  157. package/dist/esm/sync-store/schema.js +181 -0
  158. package/dist/esm/sync-store/schema.js.map +1 -0
  159. package/dist/esm/types/db.js +2 -0
  160. package/dist/esm/types/db.js.map +1 -0
  161. package/dist/esm/types/eth.js +2 -0
  162. package/dist/esm/types/eth.js.map +1 -0
  163. package/dist/esm/types/utils.js +2 -0
  164. package/dist/esm/types/utils.js.map +1 -0
  165. package/dist/esm/types/virtual.js +2 -0
  166. package/dist/esm/types/virtual.js.map +1 -0
  167. package/dist/esm/ui/app.js +157 -0
  168. package/dist/esm/ui/app.js.map +1 -0
  169. package/dist/esm/ui/index.js +29 -0
  170. package/dist/esm/ui/index.js.map +1 -0
  171. package/dist/esm/ui/patch.js +140 -0
  172. package/dist/esm/ui/patch.js.map +1 -0
  173. package/dist/esm/utils/abi.js +55 -0
  174. package/dist/esm/utils/abi.js.map +1 -0
  175. package/dist/esm/utils/bigint.js +37 -0
  176. package/dist/esm/utils/bigint.js.map +1 -0
  177. package/dist/esm/utils/chains.js +21 -0
  178. package/dist/esm/utils/chains.js.map +1 -0
  179. package/dist/esm/utils/checkpoint.js +139 -0
  180. package/dist/esm/utils/checkpoint.js.map +1 -0
  181. package/dist/esm/utils/chunk.js +8 -0
  182. package/dist/esm/utils/chunk.js.map +1 -0
  183. package/dist/esm/utils/copy.js +129 -0
  184. package/dist/esm/utils/copy.js.map +1 -0
  185. package/dist/esm/utils/date.js +27 -0
  186. package/dist/esm/utils/date.js.map +1 -0
  187. package/dist/esm/utils/debug.js +2 -0
  188. package/dist/esm/utils/debug.js.map +1 -0
  189. package/dist/esm/utils/decodeAbiParameters.js +290 -0
  190. package/dist/esm/utils/decodeAbiParameters.js.map +1 -0
  191. package/dist/esm/utils/decodeEventLog.js +75 -0
  192. package/dist/esm/utils/decodeEventLog.js.map +1 -0
  193. package/dist/esm/utils/dedupe.js +29 -0
  194. package/dist/esm/utils/dedupe.js.map +1 -0
  195. package/dist/esm/utils/duplicates.js +19 -0
  196. package/dist/esm/utils/duplicates.js.map +1 -0
  197. package/dist/esm/utils/estimate.js +6 -0
  198. package/dist/esm/utils/estimate.js.map +1 -0
  199. package/dist/esm/utils/finality.js +38 -0
  200. package/dist/esm/utils/finality.js.map +1 -0
  201. package/dist/esm/utils/format.js +20 -0
  202. package/dist/esm/utils/format.js.map +1 -0
  203. package/dist/esm/utils/generators.js +121 -0
  204. package/dist/esm/utils/generators.js.map +1 -0
  205. package/dist/esm/utils/hash.js +11 -0
  206. package/dist/esm/utils/hash.js.map +1 -0
  207. package/dist/esm/utils/interval.js +171 -0
  208. package/dist/esm/utils/interval.js.map +1 -0
  209. package/dist/esm/utils/lowercase.js +7 -0
  210. package/dist/esm/utils/lowercase.js.map +1 -0
  211. package/dist/esm/utils/mutex.js +26 -0
  212. package/dist/esm/utils/mutex.js.map +1 -0
  213. package/dist/esm/utils/never.js +4 -0
  214. package/dist/esm/utils/never.js.map +1 -0
  215. package/dist/esm/utils/offset.js +101 -0
  216. package/dist/esm/utils/offset.js.map +1 -0
  217. package/dist/esm/utils/order.js +18 -0
  218. package/dist/esm/utils/order.js.map +1 -0
  219. package/dist/esm/utils/partition.js +46 -0
  220. package/dist/esm/utils/partition.js.map +1 -0
  221. package/dist/esm/utils/pg.js +175 -0
  222. package/dist/esm/utils/pg.js.map +1 -0
  223. package/dist/esm/utils/pglite.js +80 -0
  224. package/dist/esm/utils/pglite.js.map +1 -0
  225. package/dist/esm/utils/port.js +30 -0
  226. package/dist/esm/utils/port.js.map +1 -0
  227. package/dist/esm/utils/print.js +23 -0
  228. package/dist/esm/utils/print.js.map +1 -0
  229. package/dist/esm/utils/promiseAllSettledWithThrow.js +19 -0
  230. package/dist/esm/utils/promiseAllSettledWithThrow.js.map +1 -0
  231. package/dist/esm/utils/promiseWithResolvers.js +13 -0
  232. package/dist/esm/utils/promiseWithResolvers.js.map +1 -0
  233. package/dist/esm/utils/queue.js +150 -0
  234. package/dist/esm/utils/queue.js.map +1 -0
  235. package/dist/esm/utils/range.js +8 -0
  236. package/dist/esm/utils/range.js.map +1 -0
  237. package/dist/esm/utils/result.js +10 -0
  238. package/dist/esm/utils/result.js.map +1 -0
  239. package/dist/esm/utils/sql-parse.js +1326 -0
  240. package/dist/esm/utils/sql-parse.js.map +1 -0
  241. package/dist/esm/utils/timer.js +9 -0
  242. package/dist/esm/utils/timer.js.map +1 -0
  243. package/dist/esm/utils/truncate.js +15 -0
  244. package/dist/esm/utils/truncate.js.map +1 -0
  245. package/dist/esm/utils/wait.js +10 -0
  246. package/dist/esm/utils/wait.js.map +1 -0
  247. package/dist/esm/utils/zipper.js +67 -0
  248. package/dist/esm/utils/zipper.js.map +1 -0
  249. package/dist/types/bin/commands/codegen.d.ts +5 -0
  250. package/dist/types/bin/commands/codegen.d.ts.map +1 -0
  251. package/dist/types/bin/commands/createViews.d.ts +8 -0
  252. package/dist/types/bin/commands/createViews.d.ts.map +1 -0
  253. package/dist/types/bin/commands/dev.d.ts +5 -0
  254. package/dist/types/bin/commands/dev.d.ts.map +1 -0
  255. package/dist/types/bin/commands/list.d.ts +5 -0
  256. package/dist/types/bin/commands/list.d.ts.map +1 -0
  257. package/dist/types/bin/commands/prune.d.ts +5 -0
  258. package/dist/types/bin/commands/prune.d.ts.map +1 -0
  259. package/dist/types/bin/commands/serve.d.ts +5 -0
  260. package/dist/types/bin/commands/serve.d.ts.map +1 -0
  261. package/dist/types/bin/commands/start.d.ts +19 -0
  262. package/dist/types/bin/commands/start.d.ts.map +1 -0
  263. package/dist/types/bin/isolatedController.d.ts +13 -0
  264. package/dist/types/bin/isolatedController.d.ts.map +1 -0
  265. package/dist/types/bin/isolatedWorker.d.ts +9 -0
  266. package/dist/types/bin/isolatedWorker.d.ts.map +1 -0
  267. package/dist/types/bin/ponder.d.ts +37 -0
  268. package/dist/types/bin/ponder.d.ts.map +1 -0
  269. package/dist/types/bin/utils/codegen.d.ts +6 -0
  270. package/dist/types/bin/utils/codegen.d.ts.map +1 -0
  271. package/dist/types/bin/utils/exit.d.ts +10 -0
  272. package/dist/types/bin/utils/exit.d.ts.map +1 -0
  273. package/dist/types/build/config.d.ts +97 -0
  274. package/dist/types/build/config.d.ts.map +1 -0
  275. package/dist/types/build/factory.d.ts +15 -0
  276. package/dist/types/build/factory.d.ts.map +1 -0
  277. package/dist/types/build/index.d.ts +84 -0
  278. package/dist/types/build/index.d.ts.map +1 -0
  279. package/dist/types/build/plugin.d.ts +4 -0
  280. package/dist/types/build/plugin.d.ts.map +1 -0
  281. package/dist/types/build/pre.d.ts +29 -0
  282. package/dist/types/build/pre.d.ts.map +1 -0
  283. package/dist/types/build/schema.d.ts +20 -0
  284. package/dist/types/build/schema.d.ts.map +1 -0
  285. package/dist/types/build/stacktrace.d.ts +13 -0
  286. package/dist/types/build/stacktrace.d.ts.map +1 -0
  287. package/dist/types/client/index.d.ts +27 -0
  288. package/dist/types/client/index.d.ts.map +1 -0
  289. package/dist/types/config/address.d.ts +34 -0
  290. package/dist/types/config/address.d.ts.map +1 -0
  291. package/dist/types/config/eventFilter.d.ts +18 -0
  292. package/dist/types/config/eventFilter.d.ts.map +1 -0
  293. package/dist/types/config/index.d.ts +144 -0
  294. package/dist/types/config/index.d.ts.map +1 -0
  295. package/dist/types/config/utilityTypes.d.ts +43 -0
  296. package/dist/types/config/utilityTypes.d.ts.map +1 -0
  297. package/dist/types/database/actions.d.ts +99 -0
  298. package/dist/types/database/actions.d.ts.map +1 -0
  299. package/dist/types/database/index.d.ts +493 -0
  300. package/dist/types/database/index.d.ts.map +1 -0
  301. package/dist/types/database/queryBuilder.d.ts +65 -0
  302. package/dist/types/database/queryBuilder.d.ts.map +1 -0
  303. package/dist/types/drizzle/bigint.d.ts +25 -0
  304. package/dist/types/drizzle/bigint.d.ts.map +1 -0
  305. package/dist/types/drizzle/bytes.d.ts +31 -0
  306. package/dist/types/drizzle/bytes.d.ts.map +1 -0
  307. package/dist/types/drizzle/hex.d.ts +25 -0
  308. package/dist/types/drizzle/hex.d.ts.map +1 -0
  309. package/dist/types/drizzle/index.d.ts +6 -0
  310. package/dist/types/drizzle/index.d.ts.map +1 -0
  311. package/dist/types/drizzle/json.d.ts +51 -0
  312. package/dist/types/drizzle/json.d.ts.map +1 -0
  313. package/dist/types/drizzle/kit/index.d.ts +187 -0
  314. package/dist/types/drizzle/kit/index.d.ts.map +1 -0
  315. package/dist/types/drizzle/onchain.d.ts +298 -0
  316. package/dist/types/drizzle/onchain.d.ts.map +1 -0
  317. package/dist/types/drizzle/text.d.ts +29 -0
  318. package/dist/types/drizzle/text.d.ts.map +1 -0
  319. package/dist/types/graphql/graphiql.html.d.ts +2 -0
  320. package/dist/types/graphql/graphiql.html.d.ts.map +1 -0
  321. package/dist/types/graphql/index.d.ts +12 -0
  322. package/dist/types/graphql/index.d.ts.map +1 -0
  323. package/dist/types/graphql/json.d.ts +3 -0
  324. package/dist/types/graphql/json.d.ts.map +1 -0
  325. package/dist/types/graphql/middleware.d.ts +29 -0
  326. package/dist/types/graphql/middleware.d.ts.map +1 -0
  327. package/dist/types/index.d.ts +23 -0
  328. package/dist/types/index.d.ts.map +1 -0
  329. package/dist/types/indexing/addStackTrace.d.ts +3 -0
  330. package/dist/types/indexing/addStackTrace.d.ts.map +1 -0
  331. package/dist/types/indexing/client.d.ts +154 -0
  332. package/dist/types/indexing/client.d.ts.map +1 -0
  333. package/dist/types/indexing/index.d.ts +72 -0
  334. package/dist/types/indexing/index.d.ts.map +1 -0
  335. package/dist/types/indexing/profile.d.ts +16 -0
  336. package/dist/types/indexing/profile.d.ts.map +1 -0
  337. package/dist/types/indexing-store/cache.d.ts +115 -0
  338. package/dist/types/indexing-store/cache.d.ts.map +1 -0
  339. package/dist/types/indexing-store/index.d.ts +24 -0
  340. package/dist/types/indexing-store/index.d.ts.map +1 -0
  341. package/dist/types/indexing-store/profile.d.ts +7 -0
  342. package/dist/types/indexing-store/profile.d.ts.map +1 -0
  343. package/dist/types/indexing-store/utils.d.ts +19 -0
  344. package/dist/types/indexing-store/utils.d.ts.map +1 -0
  345. package/dist/types/internal/common.d.ts +15 -0
  346. package/dist/types/internal/common.d.ts.map +1 -0
  347. package/dist/types/internal/errors.d.ts +101 -0
  348. package/dist/types/internal/errors.d.ts.map +1 -0
  349. package/dist/types/internal/logger.d.ts +37 -0
  350. package/dist/types/internal/logger.d.ts.map +1 -0
  351. package/dist/types/internal/metrics.d.ts +120 -0
  352. package/dist/types/internal/metrics.d.ts.map +1 -0
  353. package/dist/types/internal/options.d.ts +62 -0
  354. package/dist/types/internal/options.d.ts.map +1 -0
  355. package/dist/types/internal/shutdown.d.ts +8 -0
  356. package/dist/types/internal/shutdown.d.ts.map +1 -0
  357. package/dist/types/internal/telemetry.d.ts +43 -0
  358. package/dist/types/internal/telemetry.d.ts.map +1 -0
  359. package/dist/types/internal/types.d.ts +443 -0
  360. package/dist/types/internal/types.d.ts.map +1 -0
  361. package/dist/types/rpc/actions.d.ts +360 -0
  362. package/dist/types/rpc/actions.d.ts.map +1 -0
  363. package/dist/types/rpc/http.d.ts +17 -0
  364. package/dist/types/rpc/http.d.ts.map +1 -0
  365. package/dist/types/rpc/index.d.ts +43 -0
  366. package/dist/types/rpc/index.d.ts.map +1 -0
  367. package/dist/types/runtime/events.d.ts +40 -0
  368. package/dist/types/runtime/events.d.ts.map +1 -0
  369. package/dist/types/runtime/filter.d.ts +96 -0
  370. package/dist/types/runtime/filter.d.ts.map +1 -0
  371. package/dist/types/runtime/fragments.d.ts +30 -0
  372. package/dist/types/runtime/fragments.d.ts.map +1 -0
  373. package/dist/types/runtime/historical.d.ts +123 -0
  374. package/dist/types/runtime/historical.d.ts.map +1 -0
  375. package/dist/types/runtime/index.d.ts +89 -0
  376. package/dist/types/runtime/index.d.ts.map +1 -0
  377. package/dist/types/runtime/init.d.ts +28 -0
  378. package/dist/types/runtime/init.d.ts.map +1 -0
  379. package/dist/types/runtime/isolated.d.ts +14 -0
  380. package/dist/types/runtime/isolated.d.ts.map +1 -0
  381. package/dist/types/runtime/multichain.d.ts +13 -0
  382. package/dist/types/runtime/multichain.d.ts.map +1 -0
  383. package/dist/types/runtime/omnichain.d.ts +23 -0
  384. package/dist/types/runtime/omnichain.d.ts.map +1 -0
  385. package/dist/types/runtime/realtime.d.ts +93 -0
  386. package/dist/types/runtime/realtime.d.ts.map +1 -0
  387. package/dist/types/server/error.d.ts +5 -0
  388. package/dist/types/server/error.d.ts.map +1 -0
  389. package/dist/types/server/index.d.ts +13 -0
  390. package/dist/types/server/index.d.ts.map +1 -0
  391. package/dist/types/sync-historical/index.d.ts +36 -0
  392. package/dist/types/sync-historical/index.d.ts.map +1 -0
  393. package/dist/types/sync-realtime/bloom.d.ts +18 -0
  394. package/dist/types/sync-realtime/bloom.d.ts.map +1 -0
  395. package/dist/types/sync-realtime/index.d.ts +48 -0
  396. package/dist/types/sync-realtime/index.d.ts.map +1 -0
  397. package/dist/types/sync-store/encode.d.ts +25 -0
  398. package/dist/types/sync-store/encode.d.ts.map +1 -0
  399. package/dist/types/sync-store/index.d.ts +135 -0
  400. package/dist/types/sync-store/index.d.ts.map +1 -0
  401. package/dist/types/sync-store/migrations.d.ts +8 -0
  402. package/dist/types/sync-store/migrations.d.ts.map +1 -0
  403. package/dist/types/sync-store/schema.d.ts +1828 -0
  404. package/dist/types/sync-store/schema.d.ts.map +1 -0
  405. package/dist/types/types/db.d.ts +213 -0
  406. package/dist/types/types/db.d.ts.map +1 -0
  407. package/dist/types/types/eth.d.ts +196 -0
  408. package/dist/types/types/eth.d.ts.map +1 -0
  409. package/dist/types/types/utils.d.ts +38 -0
  410. package/dist/types/types/utils.d.ts.map +1 -0
  411. package/dist/types/types/virtual.d.ts +99 -0
  412. package/dist/types/types/virtual.d.ts.map +1 -0
  413. package/dist/types/ui/app.d.ts +22 -0
  414. package/dist/types/ui/app.d.ts.map +1 -0
  415. package/dist/types/ui/index.d.ts +5 -0
  416. package/dist/types/ui/index.d.ts.map +1 -0
  417. package/dist/types/ui/patch.d.ts +7 -0
  418. package/dist/types/ui/patch.d.ts.map +1 -0
  419. package/dist/types/utils/abi.d.ts +23 -0
  420. package/dist/types/utils/abi.d.ts.map +1 -0
  421. package/dist/types/utils/bigint.d.ts +15 -0
  422. package/dist/types/utils/bigint.d.ts.map +1 -0
  423. package/dist/types/utils/chains.d.ts +42 -0
  424. package/dist/types/utils/chains.d.ts.map +1 -0
  425. package/dist/types/utils/checkpoint.d.ts +52 -0
  426. package/dist/types/utils/checkpoint.d.ts.map +1 -0
  427. package/dist/types/utils/chunk.d.ts +2 -0
  428. package/dist/types/utils/chunk.d.ts.map +1 -0
  429. package/dist/types/utils/copy.d.ts +16 -0
  430. package/dist/types/utils/copy.d.ts.map +1 -0
  431. package/dist/types/utils/date.d.ts +7 -0
  432. package/dist/types/utils/date.d.ts.map +1 -0
  433. package/dist/types/utils/debug.d.ts +105 -0
  434. package/dist/types/utils/debug.d.ts.map +1 -0
  435. package/dist/types/utils/decodeAbiParameters.d.ts +28 -0
  436. package/dist/types/utils/decodeAbiParameters.d.ts.map +1 -0
  437. package/dist/types/utils/decodeEventLog.d.ts +12 -0
  438. package/dist/types/utils/decodeEventLog.d.ts.map +1 -0
  439. package/dist/types/utils/dedupe.d.ts +20 -0
  440. package/dist/types/utils/dedupe.d.ts.map +1 -0
  441. package/dist/types/utils/duplicates.d.ts +7 -0
  442. package/dist/types/utils/duplicates.d.ts.map +1 -0
  443. package/dist/types/utils/estimate.d.ts +11 -0
  444. package/dist/types/utils/estimate.d.ts.map +1 -0
  445. package/dist/types/utils/finality.d.ts +12 -0
  446. package/dist/types/utils/finality.d.ts.map +1 -0
  447. package/dist/types/utils/format.d.ts +3 -0
  448. package/dist/types/utils/format.d.ts.map +1 -0
  449. package/dist/types/utils/generators.d.ts +42 -0
  450. package/dist/types/utils/generators.d.ts.map +1 -0
  451. package/dist/types/utils/hash.d.ts +11 -0
  452. package/dist/types/utils/hash.d.ts.map +1 -0
  453. package/dist/types/utils/interval.d.ts +53 -0
  454. package/dist/types/utils/interval.d.ts.map +1 -0
  455. package/dist/types/utils/lowercase.d.ts +5 -0
  456. package/dist/types/utils/lowercase.d.ts.map +1 -0
  457. package/dist/types/utils/mutex.d.ts +5 -0
  458. package/dist/types/utils/mutex.d.ts.map +1 -0
  459. package/dist/types/utils/never.d.ts +2 -0
  460. package/dist/types/utils/never.d.ts.map +1 -0
  461. package/dist/types/utils/offset.d.ts +8 -0
  462. package/dist/types/utils/offset.d.ts.map +1 -0
  463. package/dist/types/utils/order.d.ts +2 -0
  464. package/dist/types/utils/order.d.ts.map +1 -0
  465. package/dist/types/utils/partition.d.ts +22 -0
  466. package/dist/types/utils/partition.d.ts.map +1 -0
  467. package/dist/types/utils/pg.d.ts +8 -0
  468. package/dist/types/utils/pg.d.ts.map +1 -0
  469. package/dist/types/utils/pglite.d.ts +25 -0
  470. package/dist/types/utils/pglite.d.ts.map +1 -0
  471. package/dist/types/utils/port.d.ts +5 -0
  472. package/dist/types/utils/port.d.ts.map +1 -0
  473. package/dist/types/utils/print.d.ts +2 -0
  474. package/dist/types/utils/print.d.ts.map +1 -0
  475. package/dist/types/utils/promiseAllSettledWithThrow.d.ts +8 -0
  476. package/dist/types/utils/promiseAllSettledWithThrow.d.ts.map +1 -0
  477. package/dist/types/utils/promiseWithResolvers.d.ts +10 -0
  478. package/dist/types/utils/promiseWithResolvers.d.ts.map +1 -0
  479. package/dist/types/utils/queue.d.ts +33 -0
  480. package/dist/types/utils/queue.d.ts.map +1 -0
  481. package/dist/types/utils/range.d.ts +8 -0
  482. package/dist/types/utils/range.d.ts.map +1 -0
  483. package/dist/types/utils/result.d.ts +17 -0
  484. package/dist/types/utils/result.d.ts.map +1 -0
  485. package/dist/types/utils/sql-parse.d.ts +21 -0
  486. package/dist/types/utils/sql-parse.d.ts.map +1 -0
  487. package/dist/types/utils/timer.d.ts +6 -0
  488. package/dist/types/utils/timer.d.ts.map +1 -0
  489. package/dist/types/utils/truncate.d.ts +9 -0
  490. package/dist/types/utils/truncate.d.ts.map +1 -0
  491. package/dist/types/utils/wait.d.ts +6 -0
  492. package/dist/types/utils/wait.d.ts.map +1 -0
  493. package/dist/types/utils/zipper.d.ts +36 -0
  494. package/dist/types/utils/zipper.d.ts.map +1 -0
  495. package/package.json +114 -0
  496. package/src/bin/commands/codegen.ts +56 -0
  497. package/src/bin/commands/createViews.ts +318 -0
  498. package/src/bin/commands/dev.ts +490 -0
  499. package/src/bin/commands/list.ts +208 -0
  500. package/src/bin/commands/prune.ts +322 -0
  501. package/src/bin/commands/serve.ts +236 -0
  502. package/src/bin/commands/start.ts +319 -0
  503. package/src/bin/isolatedController.ts +300 -0
  504. package/src/bin/isolatedWorker.ts +192 -0
  505. package/src/bin/ponder.ts +208 -0
  506. package/src/bin/utils/codegen.ts +32 -0
  507. package/src/bin/utils/exit.ts +112 -0
  508. package/src/build/config.ts +1141 -0
  509. package/src/build/factory.ts +147 -0
  510. package/src/build/index.ts +790 -0
  511. package/src/build/plugin.ts +58 -0
  512. package/src/build/pre.ts +114 -0
  513. package/src/build/schema.ts +358 -0
  514. package/src/build/stacktrace.ts +137 -0
  515. package/src/client/index.ts +551 -0
  516. package/src/config/address.ts +45 -0
  517. package/src/config/eventFilter.ts +33 -0
  518. package/src/config/index.ts +240 -0
  519. package/src/config/utilityTypes.ts +152 -0
  520. package/src/database/actions.ts +873 -0
  521. package/src/database/index.ts +1029 -0
  522. package/src/database/queryBuilder.ts +537 -0
  523. package/src/drizzle/bigint.ts +57 -0
  524. package/src/drizzle/bytes.ts +68 -0
  525. package/src/drizzle/hex.ts +58 -0
  526. package/src/drizzle/index.ts +40 -0
  527. package/src/drizzle/json.ts +159 -0
  528. package/src/drizzle/kit/index.ts +1348 -0
  529. package/src/drizzle/onchain.ts +476 -0
  530. package/src/drizzle/text.ts +77 -0
  531. package/src/graphql/graphiql.html.ts +59 -0
  532. package/src/graphql/index.ts +1351 -0
  533. package/src/graphql/json.ts +62 -0
  534. package/src/graphql/middleware.ts +115 -0
  535. package/src/index.ts +139 -0
  536. package/src/indexing/addStackTrace.ts +69 -0
  537. package/src/indexing/client.ts +1184 -0
  538. package/src/indexing/index.ts +976 -0
  539. package/src/indexing/profile.ts +771 -0
  540. package/src/indexing-store/cache.ts +1057 -0
  541. package/src/indexing-store/index.ts +628 -0
  542. package/src/indexing-store/profile.ts +557 -0
  543. package/src/indexing-store/utils.ts +162 -0
  544. package/src/internal/common.ts +15 -0
  545. package/src/internal/errors.ts +228 -0
  546. package/src/internal/logger.ts +252 -0
  547. package/src/internal/metrics.ts +1030 -0
  548. package/src/internal/options.ts +130 -0
  549. package/src/internal/shutdown.ts +32 -0
  550. package/src/internal/telemetry.ts +303 -0
  551. package/src/internal/types.ts +611 -0
  552. package/src/rpc/actions.ts +1344 -0
  553. package/src/rpc/http.ts +164 -0
  554. package/src/rpc/index.ts +959 -0
  555. package/src/runtime/events.ts +875 -0
  556. package/src/runtime/filter.ts +705 -0
  557. package/src/runtime/fragments.ts +674 -0
  558. package/src/runtime/historical.ts +1522 -0
  559. package/src/runtime/index.ts +569 -0
  560. package/src/runtime/init.ts +49 -0
  561. package/src/runtime/isolated.ts +775 -0
  562. package/src/runtime/multichain.ts +860 -0
  563. package/src/runtime/omnichain.ts +920 -0
  564. package/src/runtime/realtime.ts +1164 -0
  565. package/src/server/error.ts +68 -0
  566. package/src/server/index.ts +173 -0
  567. package/src/sync-historical/index.ts +1065 -0
  568. package/src/sync-realtime/bloom.ts +102 -0
  569. package/src/sync-realtime/index.ts +1304 -0
  570. package/src/sync-store/encode.ts +153 -0
  571. package/src/sync-store/index.ts +1633 -0
  572. package/src/sync-store/migrations.ts +1801 -0
  573. package/src/sync-store/schema.ts +248 -0
  574. package/src/types/db.ts +292 -0
  575. package/src/types/eth.ts +216 -0
  576. package/src/types/utils.ts +47 -0
  577. package/src/types/virtual.ts +244 -0
  578. package/src/types.d.ts +38 -0
  579. package/src/ui/app.ts +207 -0
  580. package/src/ui/index.ts +37 -0
  581. package/src/ui/patch.ts +204 -0
  582. package/src/utils/abi.ts +103 -0
  583. package/src/utils/bigint.ts +41 -0
  584. package/src/utils/chains.ts +22 -0
  585. package/src/utils/checkpoint.ts +203 -0
  586. package/src/utils/chunk.ts +7 -0
  587. package/src/utils/copy.ts +151 -0
  588. package/src/utils/date.ts +26 -0
  589. package/src/utils/debug.ts +110 -0
  590. package/src/utils/decodeAbiParameters.ts +428 -0
  591. package/src/utils/decodeEventLog.ts +100 -0
  592. package/src/utils/dedupe.ts +32 -0
  593. package/src/utils/duplicates.ts +19 -0
  594. package/src/utils/estimate.ts +27 -0
  595. package/src/utils/finality.ts +40 -0
  596. package/src/utils/format.ts +22 -0
  597. package/src/utils/generators.ts +157 -0
  598. package/src/utils/hash.ts +22 -0
  599. package/src/utils/interval.ts +212 -0
  600. package/src/utils/lowercase.ts +6 -0
  601. package/src/utils/mutex.ts +33 -0
  602. package/src/utils/never.ts +3 -0
  603. package/src/utils/offset.ts +133 -0
  604. package/src/utils/order.ts +16 -0
  605. package/src/utils/partition.ts +53 -0
  606. package/src/utils/pg.ts +230 -0
  607. package/src/utils/pglite.ts +97 -0
  608. package/src/utils/port.ts +34 -0
  609. package/src/utils/print.ts +31 -0
  610. package/src/utils/promiseAllSettledWithThrow.ts +27 -0
  611. package/src/utils/promiseWithResolvers.ts +20 -0
  612. package/src/utils/queue.ts +258 -0
  613. package/src/utils/range.ts +8 -0
  614. package/src/utils/result.ts +26 -0
  615. package/src/utils/sql-parse.ts +1477 -0
  616. package/src/utils/timer.ts +8 -0
  617. package/src/utils/truncate.ts +15 -0
  618. package/src/utils/wait.ts +8 -0
  619. package/src/utils/zipper.ts +80 -0
@@ -0,0 +1,1595 @@
1
+ import { createNoopLogger } from '../internal/logger.js';
2
+ import { sql } from "kysely";
3
+ import { maxUint256 } from "viem";
4
+ let logger = createNoopLogger();
5
+ class StaticMigrationProvider {
6
+ async getMigrations() {
7
+ return migrations;
8
+ }
9
+ }
10
+ export function buildMigrationProvider(logger_) {
11
+ logger = logger_;
12
+ const migrationProvider = new StaticMigrationProvider();
13
+ return migrationProvider;
14
+ }
15
+ const migrations = {
16
+ "2023_05_15_0_initial": {
17
+ async up(db) {
18
+ await db.schema
19
+ .createTable("blocks")
20
+ .addColumn("baseFeePerGas", sql `bytea`) // BigInt
21
+ .addColumn("chainId", "integer", (col) => col.notNull())
22
+ .addColumn("difficulty", sql `bytea`, (col) => col.notNull()) // BigInt
23
+ .addColumn("extraData", "text", (col) => col.notNull())
24
+ .addColumn("finalized", "integer", (col) => col.notNull()) // Boolean (0 or 1).
25
+ .addColumn("gasLimit", sql `bytea`, (col) => col.notNull()) // BigInt
26
+ .addColumn("gasUsed", sql `bytea`, (col) => col.notNull()) // BigInt
27
+ .addColumn("hash", "text", (col) => col.notNull().primaryKey())
28
+ .addColumn("logsBloom", "text", (col) => col.notNull())
29
+ .addColumn("miner", "text", (col) => col.notNull())
30
+ .addColumn("mixHash", "text", (col) => col.notNull())
31
+ .addColumn("nonce", "text", (col) => col.notNull())
32
+ .addColumn("number", sql `bytea`, (col) => col.notNull()) // BigInt
33
+ .addColumn("parentHash", "text", (col) => col.notNull())
34
+ .addColumn("receiptsRoot", "text", (col) => col.notNull())
35
+ .addColumn("sha3Uncles", "text", (col) => col.notNull())
36
+ .addColumn("size", sql `bytea`, (col) => col.notNull()) // BigInt
37
+ .addColumn("stateRoot", "text", (col) => col.notNull())
38
+ .addColumn("timestamp", sql `bytea`, (col) => col.notNull()) // BigInt
39
+ .addColumn("totalDifficulty", sql `bytea`, (col) => col.notNull()) // BigInt
40
+ .addColumn("transactionsRoot", "text", (col) => col.notNull())
41
+ .execute();
42
+ await db.schema
43
+ .createTable("transactions")
44
+ .addColumn("accessList", "text")
45
+ .addColumn("blockHash", "text", (col) => col.notNull())
46
+ .addColumn("blockNumber", sql `bytea`, (col) => col.notNull()) // BigInt
47
+ .addColumn("chainId", "integer", (col) => col.notNull())
48
+ .addColumn("finalized", "integer", (col) => col.notNull()) // Boolean (0 or 1).
49
+ .addColumn("from", "text", (col) => col.notNull())
50
+ .addColumn("gas", sql `bytea`, (col) => col.notNull()) // BigInt
51
+ .addColumn("gasPrice", sql `bytea`) // BigInt
52
+ .addColumn("hash", "text", (col) => col.notNull().primaryKey())
53
+ .addColumn("input", "text", (col) => col.notNull())
54
+ .addColumn("maxFeePerGas", sql `bytea`) // BigInt
55
+ .addColumn("maxPriorityFeePerGas", sql `bytea`) // BigInt
56
+ .addColumn("nonce", "integer", (col) => col.notNull())
57
+ .addColumn("r", "text", (col) => col.notNull())
58
+ .addColumn("s", "text", (col) => col.notNull())
59
+ .addColumn("to", "text")
60
+ .addColumn("transactionIndex", "integer", (col) => col.notNull())
61
+ .addColumn("type", "text", (col) => col.notNull())
62
+ .addColumn("value", sql `bytea`, (col) => col.notNull()) // BigInt
63
+ .addColumn("v", sql `bytea`, (col) => col.notNull()) // BigInt
64
+ .execute();
65
+ await db.schema
66
+ .createTable("logs")
67
+ .addColumn("address", "text", (col) => col.notNull())
68
+ .addColumn("blockHash", "text", (col) => col.notNull())
69
+ .addColumn("blockNumber", sql `bytea`, (col) => col.notNull()) // BigInt
70
+ .addColumn("chainId", "integer", (col) => col.notNull())
71
+ .addColumn("data", "text", (col) => col.notNull())
72
+ .addColumn("finalized", "integer", (col) => col.notNull()) // Boolean (0 or 1).
73
+ .addColumn("id", "text", (col) => col.notNull().primaryKey())
74
+ .addColumn("logIndex", "integer", (col) => col.notNull())
75
+ .addColumn("topic0", "text")
76
+ .addColumn("topic1", "text")
77
+ .addColumn("topic2", "text")
78
+ .addColumn("topic3", "text")
79
+ .addColumn("transactionHash", "text", (col) => col.notNull())
80
+ .addColumn("transactionIndex", "integer", (col) => col.notNull())
81
+ .execute();
82
+ await db.schema
83
+ .createTable("contractReadResults")
84
+ .addColumn("address", "text", (col) => col.notNull())
85
+ .addColumn("blockNumber", sql `bytea`, (col) => col.notNull()) // BigInt
86
+ .addColumn("chainId", "integer", (col) => col.notNull())
87
+ .addColumn("data", "text", (col) => col.notNull())
88
+ .addColumn("finalized", "integer", (col) => col.notNull()) // Boolean (0 or 1).
89
+ .addColumn("result", "text", (col) => col.notNull())
90
+ .addPrimaryKeyConstraint("contractReadResultPrimaryKey", [
91
+ "chainId",
92
+ "blockNumber",
93
+ "address",
94
+ "data",
95
+ ])
96
+ .execute();
97
+ await db.schema
98
+ .createTable("logFilterCachedRanges")
99
+ .addColumn("endBlock", sql `bytea`, (col) => col.notNull()) // BigInt
100
+ .addColumn("endBlockTimestamp", sql `bytea`, (col) => col.notNull()) // BigInt
101
+ .addColumn("filterKey", "text", (col) => col.notNull())
102
+ // The `id` column should not be included in INSERT statements.
103
+ // This column uses Postgres SERIAL type which autoincrements.
104
+ .addColumn("id", "serial", (col) => col.notNull().primaryKey())
105
+ .addColumn("startBlock", sql `bytea`, (col) => col.notNull()) // BigInt
106
+ .execute();
107
+ },
108
+ },
109
+ "2023_06_20_0_indices": {
110
+ async up(db) {
111
+ await db.schema
112
+ .createIndex("log_events_index")
113
+ .on("logs")
114
+ .columns(["address", "chainId", "blockHash"])
115
+ .execute();
116
+ await db.schema
117
+ .createIndex("blocks_index")
118
+ .on("blocks")
119
+ .columns(["timestamp", "number"])
120
+ .execute();
121
+ await db.schema
122
+ .createIndex("logFilterCachedRanges_index")
123
+ .on("logFilterCachedRanges")
124
+ .columns(["filterKey"])
125
+ .execute();
126
+ },
127
+ },
128
+ "2023_07_18_0_better_indices": {
129
+ async up(db) {
130
+ // Drop old indices.
131
+ await db.schema.dropIndex("log_events_index").execute();
132
+ await db.schema.dropIndex("blocks_index").execute();
133
+ // Block hash is a join key.
134
+ await db.schema
135
+ .createIndex("log_block_hash_index")
136
+ .on("logs")
137
+ .column("blockHash")
138
+ .execute();
139
+ // Chain ID, address and topic0 are all used in WHERE clauses.
140
+ await db.schema
141
+ .createIndex("log_chain_id_index")
142
+ .on("logs")
143
+ .column("chainId")
144
+ .execute();
145
+ await db.schema
146
+ .createIndex("log_address_index")
147
+ .on("logs")
148
+ .column("address")
149
+ .execute();
150
+ await db.schema
151
+ .createIndex("log_topic0_index")
152
+ .on("logs")
153
+ .column("topic0")
154
+ .execute();
155
+ // Block timestamp and number are both used in WHERE and SORT clauses.
156
+ await db.schema
157
+ .createIndex("block_timestamp_index")
158
+ .on("blocks")
159
+ .column("timestamp")
160
+ .execute();
161
+ await db.schema
162
+ .createIndex("block_number_index")
163
+ .on("blocks")
164
+ .column("number")
165
+ .execute();
166
+ },
167
+ },
168
+ "2023_07_24_0_drop_finalized": {
169
+ async up(db) {
170
+ await db.schema.alterTable("blocks").dropColumn("finalized").execute();
171
+ await db.schema
172
+ .alterTable("transactions")
173
+ .dropColumn("finalized")
174
+ .execute();
175
+ await db.schema.alterTable("logs").dropColumn("finalized").execute();
176
+ await db.schema
177
+ .alterTable("contractReadResults")
178
+ .dropColumn("finalized")
179
+ .execute();
180
+ },
181
+ },
182
+ "2023_09_19_0_new_sync_design": {
183
+ async up(db) {
184
+ /** This table is no longer being used. */
185
+ await db.schema.dropTable("logFilterCachedRanges").execute();
186
+ /** Drop and re-create all tables to fix bigint encoding. */
187
+ await db.schema.dropTable("blocks").execute();
188
+ await db.schema
189
+ .createTable("blocks")
190
+ .addColumn("baseFeePerGas", "numeric(78, 0)")
191
+ .addColumn("chainId", "integer", (col) => col.notNull())
192
+ .addColumn("difficulty", "numeric(78, 0)", (col) => col.notNull())
193
+ .addColumn("extraData", "text", (col) => col.notNull())
194
+ .addColumn("gasLimit", "numeric(78, 0)", (col) => col.notNull())
195
+ .addColumn("gasUsed", "numeric(78, 0)", (col) => col.notNull())
196
+ .addColumn("hash", "varchar(66)", (col) => col.notNull().primaryKey())
197
+ .addColumn("logsBloom", "varchar(514)", (col) => col.notNull())
198
+ .addColumn("miner", "varchar(42)", (col) => col.notNull())
199
+ .addColumn("mixHash", "varchar(66)", (col) => col.notNull())
200
+ .addColumn("nonce", "varchar(18)", (col) => col.notNull())
201
+ .addColumn("number", "numeric(78, 0)", (col) => col.notNull())
202
+ .addColumn("parentHash", "varchar(66)", (col) => col.notNull())
203
+ .addColumn("receiptsRoot", "varchar(66)", (col) => col.notNull())
204
+ .addColumn("sha3Uncles", "varchar(66)", (col) => col.notNull())
205
+ .addColumn("size", "numeric(78, 0)", (col) => col.notNull())
206
+ .addColumn("stateRoot", "varchar(66)", (col) => col.notNull())
207
+ .addColumn("timestamp", "numeric(78, 0)", (col) => col.notNull())
208
+ .addColumn("totalDifficulty", "numeric(78, 0)", (col) => col.notNull())
209
+ .addColumn("transactionsRoot", "varchar(66)", (col) => col.notNull())
210
+ .execute();
211
+ await db.schema
212
+ .createIndex("blockTimestampIndex")
213
+ .on("blocks")
214
+ .column("timestamp")
215
+ .execute();
216
+ await db.schema
217
+ .createIndex("blockNumberIndex")
218
+ .on("blocks")
219
+ .column("number")
220
+ .execute();
221
+ await db.schema.dropTable("transactions").execute();
222
+ await db.schema
223
+ .createTable("transactions")
224
+ .addColumn("accessList", "text")
225
+ .addColumn("blockHash", "varchar(66)", (col) => col.notNull())
226
+ .addColumn("blockNumber", "numeric(78, 0)", (col) => col.notNull())
227
+ .addColumn("chainId", "integer", (col) => col.notNull())
228
+ .addColumn("from", "varchar(42)", (col) => col.notNull())
229
+ .addColumn("gas", "numeric(78, 0)", (col) => col.notNull())
230
+ .addColumn("gasPrice", "numeric(78, 0)")
231
+ .addColumn("hash", "varchar(66)", (col) => col.notNull().primaryKey())
232
+ .addColumn("input", "text", (col) => col.notNull())
233
+ .addColumn("maxFeePerGas", "numeric(78, 0)")
234
+ .addColumn("maxPriorityFeePerGas", "numeric(78, 0)")
235
+ .addColumn("nonce", "integer", (col) => col.notNull())
236
+ .addColumn("r", "varchar(66)", (col) => col.notNull())
237
+ .addColumn("s", "varchar(66)", (col) => col.notNull())
238
+ .addColumn("to", "varchar(42)")
239
+ .addColumn("transactionIndex", "integer", (col) => col.notNull())
240
+ .addColumn("type", "text", (col) => col.notNull())
241
+ .addColumn("value", "numeric(78, 0)", (col) => col.notNull())
242
+ .addColumn("v", "numeric(78, 0)", (col) => col.notNull())
243
+ .execute();
244
+ await db.schema.dropTable("logs").execute();
245
+ await db.schema
246
+ .createTable("logs")
247
+ .addColumn("address", "varchar(42)", (col) => col.notNull())
248
+ .addColumn("blockHash", "varchar(66)", (col) => col.notNull())
249
+ .addColumn("blockNumber", "numeric(78, 0)", (col) => col.notNull())
250
+ .addColumn("chainId", "integer", (col) => col.notNull())
251
+ .addColumn("data", "text", (col) => col.notNull())
252
+ .addColumn("id", "text", (col) => col.notNull().primaryKey())
253
+ .addColumn("logIndex", "integer", (col) => col.notNull())
254
+ .addColumn("topic0", "varchar(66)")
255
+ .addColumn("topic1", "varchar(66)")
256
+ .addColumn("topic2", "varchar(66)")
257
+ .addColumn("topic3", "varchar(66)")
258
+ .addColumn("transactionHash", "varchar(66)", (col) => col.notNull())
259
+ .addColumn("transactionIndex", "integer", (col) => col.notNull())
260
+ .execute();
261
+ await db.schema
262
+ .createIndex("logBlockHashIndex")
263
+ .on("logs")
264
+ .column("blockHash")
265
+ .execute();
266
+ await db.schema
267
+ .createIndex("logChainIdIndex")
268
+ .on("logs")
269
+ .column("chainId")
270
+ .execute();
271
+ await db.schema
272
+ .createIndex("logAddressIndex")
273
+ .on("logs")
274
+ .column("address")
275
+ .execute();
276
+ await db.schema
277
+ .createIndex("logTopic0Index")
278
+ .on("logs")
279
+ .column("topic0")
280
+ .execute();
281
+ await db.schema.dropTable("contractReadResults").execute();
282
+ await db.schema
283
+ .createTable("contractReadResults")
284
+ .addColumn("address", "varchar(42)", (col) => col.notNull())
285
+ .addColumn("blockNumber", "numeric(78, 0)", (col) => col.notNull())
286
+ .addColumn("chainId", "integer", (col) => col.notNull())
287
+ .addColumn("data", "text", (col) => col.notNull())
288
+ .addColumn("result", "text", (col) => col.notNull())
289
+ .addPrimaryKeyConstraint("contractReadResultPrimaryKey", [
290
+ "chainId",
291
+ "blockNumber",
292
+ "address",
293
+ "data",
294
+ ])
295
+ .execute();
296
+ /** Add new log filter and factory contract interval tables. */
297
+ await db.schema
298
+ .createTable("logFilters")
299
+ .addColumn("id", "text", (col) => col.notNull().primaryKey()) // `${chainId}_${address}_${topic0}_${topic1}_${topic2}_${topic3}`
300
+ .addColumn("chainId", "integer", (col) => col.notNull())
301
+ .addColumn("address", "varchar(66)")
302
+ .addColumn("topic0", "varchar(66)")
303
+ .addColumn("topic1", "varchar(66)")
304
+ .addColumn("topic2", "varchar(66)")
305
+ .addColumn("topic3", "varchar(66)")
306
+ .execute();
307
+ await db.schema
308
+ .createTable("logFilterIntervals")
309
+ .addColumn("id", "serial", (col) => col.notNull().primaryKey()) // Auto-increment
310
+ .addColumn("logFilterId", "text", (col) => col.notNull().references("logFilters.id"))
311
+ .addColumn("startBlock", "numeric(78, 0)", (col) => col.notNull())
312
+ .addColumn("endBlock", "numeric(78, 0)", (col) => col.notNull())
313
+ .execute();
314
+ await db.schema
315
+ .createIndex("logFilterIntervalsLogFilterId")
316
+ .on("logFilterIntervals")
317
+ .column("logFilterId")
318
+ .execute();
319
+ await db.schema
320
+ .createTable("factories")
321
+ .addColumn("id", "text", (col) => col.notNull().primaryKey()) // `${chainId}_${address}_${eventSelector}_${childAddressLocation}`
322
+ .addColumn("chainId", "integer", (col) => col.notNull())
323
+ .addColumn("address", "varchar(42)", (col) => col.notNull())
324
+ .addColumn("eventSelector", "varchar(66)", (col) => col.notNull())
325
+ .addColumn("childAddressLocation", "text", (col) => col.notNull()) // `topic${number}` or `offset${number}`
326
+ .addColumn("topic0", "varchar(66)")
327
+ .addColumn("topic1", "varchar(66)")
328
+ .addColumn("topic2", "varchar(66)")
329
+ .addColumn("topic3", "varchar(66)")
330
+ .execute();
331
+ await db.schema
332
+ .createTable("factoryLogFilterIntervals")
333
+ .addColumn("id", "serial", (col) => col.notNull().primaryKey()) // Auto-increment
334
+ .addColumn("factoryId", "text", (col) => col.notNull().references("factories.id"))
335
+ .addColumn("startBlock", "numeric(78, 0)", (col) => col.notNull())
336
+ .addColumn("endBlock", "numeric(78, 0)", (col) => col.notNull())
337
+ .execute();
338
+ await db.schema
339
+ .createIndex("factoryLogFilterIntervalsFactoryId")
340
+ .on("factoryLogFilterIntervals")
341
+ .column("factoryId")
342
+ .execute();
343
+ },
344
+ },
345
+ "2023_11_06_0_new_rpc_cache_design": {
346
+ async up(db) {
347
+ await db.schema.dropTable("contractReadResults").execute();
348
+ /**
349
+ * Formatting for "request" field values:
350
+ *
351
+ * eth_call: eth_call_{to}_{data}
352
+ * eth_getBalance: eth_getBalance_{address}
353
+ * eth_getCode: eth_getCode_{address}
354
+ * eth_getStorageAt: eth_getStorageAt_{address}_{slot}
355
+ */
356
+ await db.schema
357
+ .createTable("rpcRequestResults")
358
+ .addColumn("request", "text", (col) => col.notNull())
359
+ .addColumn("blockNumber", "numeric(78, 0)", (col) => col.notNull())
360
+ .addColumn("chainId", "integer", (col) => col.notNull())
361
+ .addColumn("result", "text", (col) => col.notNull())
362
+ .addPrimaryKeyConstraint("rpcRequestResultPrimaryKey", [
363
+ "request",
364
+ "chainId",
365
+ "blockNumber",
366
+ ])
367
+ .execute();
368
+ },
369
+ },
370
+ "2024_01_30_0_change_chain_id_type": {
371
+ async up(db) {
372
+ await db.schema
373
+ .alterTable("blocks")
374
+ .alterColumn("chainId", (col) => col.setDataType("int8"))
375
+ .execute();
376
+ await db.schema
377
+ .alterTable("transactions")
378
+ .alterColumn("chainId", (col) => col.setDataType("int8"))
379
+ .execute();
380
+ await db.schema
381
+ .alterTable("logs")
382
+ .alterColumn("chainId", (col) => col.setDataType("int8"))
383
+ .execute();
384
+ await db.schema
385
+ .alterTable("logFilters")
386
+ .alterColumn("chainId", (col) => col.setDataType("int8"))
387
+ .execute();
388
+ await db.schema
389
+ .alterTable("factories")
390
+ .alterColumn("chainId", (col) => col.setDataType("int8"))
391
+ .execute();
392
+ await db.schema
393
+ .alterTable("rpcRequestResults")
394
+ .alterColumn("chainId", (col) => col.setDataType("int8"))
395
+ .execute();
396
+ },
397
+ },
398
+ "2024_02_1_0_nullable_block_columns": {
399
+ async up(db) {
400
+ await db.schema
401
+ .alterTable("blocks")
402
+ .alterColumn("mixHash", (col) => col.dropNotNull())
403
+ .execute();
404
+ await db.schema
405
+ .alterTable("blocks")
406
+ .alterColumn("nonce", (col) => col.dropNotNull())
407
+ .execute();
408
+ },
409
+ },
410
+ "2024_03_00_0_log_transaction_hash_index": {
411
+ async up(db) {
412
+ await db.schema
413
+ .createIndex("log_transaction_hash_index")
414
+ .on("logs")
415
+ .column("transactionHash")
416
+ .execute();
417
+ },
418
+ },
419
+ "2024_03_13_0_nullable_block_columns_sha3uncles": {
420
+ async up(db) {
421
+ await db.schema
422
+ .alterTable("blocks")
423
+ .alterColumn("sha3Uncles", (col) => col.dropNotNull())
424
+ .execute();
425
+ },
426
+ },
427
+ "2024_03_14_0_nullable_transaction_rsv": {
428
+ async up(db) {
429
+ await db.schema
430
+ .alterTable("transactions")
431
+ .alterColumn("r", (col) => col.dropNotNull())
432
+ .execute();
433
+ await db.schema
434
+ .alterTable("transactions")
435
+ .alterColumn("s", (col) => col.dropNotNull())
436
+ .execute();
437
+ await db.schema
438
+ .alterTable("transactions")
439
+ .alterColumn("v", (col) => col.dropNotNull())
440
+ .execute();
441
+ },
442
+ },
443
+ "2024_03_20_0_checkpoint_in_logs_table": {
444
+ async up(_db) {
445
+ // no-op migration to avoid crashing databases that successfully ran this migration
446
+ return;
447
+ },
448
+ },
449
+ "2024_04_04_0_log_events_indexes": {
450
+ async up(db) {
451
+ await db.schema.dropIndex("blockNumberIndex").ifExists().execute();
452
+ await db.schema.dropIndex("blockTimestampIndex").ifExists().execute();
453
+ await db.schema
454
+ .createIndex("logBlockNumberIndex")
455
+ .on("logs")
456
+ .column("blockNumber")
457
+ .execute();
458
+ },
459
+ },
460
+ "2024_04_14_0_nullable_block_total_difficulty": {
461
+ async up(db) {
462
+ await db.schema
463
+ .alterTable("blocks")
464
+ .alterColumn("totalDifficulty", (col) => col.dropNotNull())
465
+ .execute();
466
+ },
467
+ },
468
+ "2024_04_14_1_add_checkpoint_column_to_logs_table": {
469
+ async up(db) {
470
+ await db.executeQuery(sql `
471
+ ALTER TABLE ponder_sync.logs
472
+ ADD COLUMN IF NOT EXISTS
473
+ checkpoint varchar(75)`.compile(db));
474
+ },
475
+ },
476
+ "2024_04_14_2_set_checkpoint_in_logs_table": {
477
+ async up(db) {
478
+ await db.executeQuery(sql `SET statement_timeout = 3600000;`.compile(db));
479
+ await db.executeQuery(sql `
480
+ CREATE TEMP TABLE cp_vals AS
481
+ SELECT
482
+ logs.id,
483
+ (lpad(blocks.timestamp::text, 10, '0') ||
484
+ lpad(blocks."chainId"::text, 16, '0') ||
485
+ lpad(blocks.number::text, 16, '0') ||
486
+ lpad(logs."transactionIndex"::text, 16, '0') ||
487
+ '5' ||
488
+ lpad(logs."logIndex"::text, 16, '0')) AS checkpoint
489
+ FROM ponder_sync.logs logs
490
+ JOIN ponder_sync.blocks blocks ON logs."blockHash" = blocks.hash;
491
+ `.compile(db));
492
+ await db.executeQuery(sql `
493
+ CREATE INDEX ON cp_vals(id)
494
+ `.compile(db));
495
+ await db.executeQuery(sql `
496
+ UPDATE ponder_sync.logs
497
+ SET checkpoint=cp_vals.checkpoint
498
+ FROM cp_vals
499
+ WHERE ponder_sync.logs.id = cp_vals.id
500
+ `.compile(db));
501
+ await db.executeQuery(sql `DROP TABLE IF EXISTS cp_vals CASCADE;`.compile(db));
502
+ },
503
+ },
504
+ "2024_04_14_3_index_on_logs_checkpoint": {
505
+ async up(db) {
506
+ await db.schema
507
+ .createIndex("logs_checkpoint_index")
508
+ .ifNotExists()
509
+ .on("logs")
510
+ .column("checkpoint")
511
+ .execute();
512
+ },
513
+ },
514
+ "2024_04_22_0_transaction_receipts": {
515
+ async up(db) {
516
+ // Update the log filter ID keys to include the integer includeTransactionReceipts value.
517
+ // Note that we have to remove the FK constraint, which is fine given our app logic.
518
+ await db.schema
519
+ .alterTable("logFilterIntervals")
520
+ .dropConstraint("logFilterIntervals_logFilterId_fkey")
521
+ .execute();
522
+ await db
523
+ .updateTable("logFilters")
524
+ .set({ id: sql `"id" || '_0'` })
525
+ .execute();
526
+ await db
527
+ .updateTable("logFilterIntervals")
528
+ .set({ logFilterId: sql `"logFilterId" || '_0'` })
529
+ .execute();
530
+ // Add the includeTransactionReceipts column. By setting a default in the ADD COLUMN statement,
531
+ // Postgres will automatically populate all existing rows with the default value. But, we don't
532
+ // actually want a default (want to require a value on insertion), so immediately drop the default.
533
+ await db.schema
534
+ .alterTable("logFilters")
535
+ .addColumn("includeTransactionReceipts", "integer", (col) => col.notNull().defaultTo(0))
536
+ .execute();
537
+ await db.schema
538
+ .alterTable("logFilters")
539
+ .alterColumn("includeTransactionReceipts", (col) => col.dropDefault())
540
+ .execute();
541
+ // Repeat the same 2 steps for the factory tables.
542
+ await db.schema
543
+ .alterTable("factoryLogFilterIntervals")
544
+ .dropConstraint("factoryLogFilterIntervals_factoryId_fkey")
545
+ .execute();
546
+ await db
547
+ .updateTable("factories")
548
+ .set({ id: sql `"id" || '_0'` })
549
+ .execute();
550
+ await db
551
+ .updateTable("factoryLogFilterIntervals")
552
+ .set({ factoryId: sql `"factoryId" || '_0'` })
553
+ .execute();
554
+ await db.schema
555
+ .alterTable("factories")
556
+ .addColumn("includeTransactionReceipts", "integer", (col) => col.notNull().defaultTo(0))
557
+ .execute();
558
+ await db.schema
559
+ .alterTable("factories")
560
+ .alterColumn("includeTransactionReceipts", (col) => col.dropDefault())
561
+ .execute();
562
+ await db.schema
563
+ .createTable("transactionReceipts")
564
+ .addColumn("blockHash", "varchar(66)", (col) => col.notNull())
565
+ .addColumn("blockNumber", "numeric(78, 0)", (col) => col.notNull())
566
+ .addColumn("chainId", "integer", (col) => col.notNull())
567
+ .addColumn("contractAddress", "varchar(66)")
568
+ .addColumn("cumulativeGasUsed", "numeric(78, 0)", (col) => col.notNull())
569
+ .addColumn("effectiveGasPrice", "numeric(78, 0)", (col) => col.notNull())
570
+ .addColumn("from", "varchar(42)", (col) => col.notNull())
571
+ .addColumn("gasUsed", "numeric(78, 0)", (col) => col.notNull())
572
+ .addColumn("logs", "text", (col) => col.notNull())
573
+ .addColumn("logsBloom", "varchar(514)", (col) => col.notNull())
574
+ .addColumn("status", "text", (col) => col.notNull())
575
+ .addColumn("to", "varchar(42)")
576
+ .addColumn("transactionHash", "varchar(66)", (col) => col.notNull().primaryKey())
577
+ .addColumn("transactionIndex", "integer", (col) => col.notNull())
578
+ .addColumn("type", "text", (col) => col.notNull())
579
+ .execute();
580
+ },
581
+ },
582
+ "2024_04_23_0_block_filters": {
583
+ async up(db) {
584
+ await db.schema
585
+ .createTable("blockFilters")
586
+ .addColumn("id", "text", (col) => col.notNull().primaryKey()) // `${chainId}_${interval}_${offset}`
587
+ .addColumn("chainId", "integer", (col) => col.notNull())
588
+ .addColumn("interval", "integer", (col) => col.notNull())
589
+ .addColumn("offset", "integer", (col) => col.notNull())
590
+ .execute();
591
+ await db.schema
592
+ .createTable("blockFilterIntervals")
593
+ .addColumn("id", "serial", (col) => col.notNull().primaryKey()) // Auto-increment
594
+ .addColumn("blockFilterId", "text", (col) => col.notNull().references("blockFilters.id"))
595
+ .addColumn("startBlock", "numeric(78, 0)", (col) => col.notNull())
596
+ .addColumn("endBlock", "numeric(78, 0)", (col) => col.notNull())
597
+ .execute();
598
+ await db.schema
599
+ .createIndex("blockFilterIntervalsBlockFilterId")
600
+ .on("blockFilterIntervals")
601
+ .column("blockFilterId")
602
+ .execute();
603
+ await db.schema
604
+ .alterTable("blocks")
605
+ .addColumn("checkpoint", "varchar(75)")
606
+ .execute();
607
+ await db.executeQuery(sql `
608
+ CREATE TEMP TABLE bcp_vals AS
609
+ SELECT
610
+ blocks.hash,
611
+ (lpad(blocks.timestamp::text, 10, '0') ||
612
+ lpad(blocks."chainId"::text, 16, '0') ||
613
+ lpad(blocks.number::text, 16, '0') ||
614
+ '9999999999999999' ||
615
+ '5' ||
616
+ '0000000000000000') AS checkpoint
617
+ FROM ponder_sync.blocks
618
+ `.compile(db));
619
+ await db.executeQuery(sql `
620
+ UPDATE ponder_sync.blocks
621
+ SET checkpoint=bcp_vals.checkpoint
622
+ FROM bcp_vals
623
+ WHERE ponder_sync.blocks.hash = bcp_vals.hash
624
+ `.compile(db));
625
+ await db.executeQuery(sql `DROP TABLE IF EXISTS bcp_vals CASCADE;`.compile(db));
626
+ await db.schema
627
+ .alterTable("blocks")
628
+ .alterColumn("checkpoint", (col) => col.setNotNull())
629
+ .execute();
630
+ // The blocks.number index supports getEvents and deleteRealtimeData
631
+ await db.schema
632
+ .createIndex("blockNumberIndex")
633
+ .on("blocks")
634
+ .column("number")
635
+ .execute();
636
+ // The blocks.chainId index supports getEvents and deleteRealtimeData
637
+ await db.schema
638
+ .createIndex("blockChainIdIndex")
639
+ .on("blocks")
640
+ .column("chainId")
641
+ .execute();
642
+ // The blocks.checkpoint index supports getEvents
643
+ await db.schema
644
+ .createIndex("blockCheckpointIndex")
645
+ .on("blocks")
646
+ .column("checkpoint")
647
+ .execute();
648
+ },
649
+ },
650
+ "2024_05_07_0_trace_filters": {
651
+ async up(db) {
652
+ // TODO(kyle) drop foreign key constraint on "blockFilterIntervals.blockFilterId".
653
+ await db.schema
654
+ .createTable("traceFilters")
655
+ .addColumn("id", "text", (col) => col.notNull().primaryKey()) // `${chainId}_${fromAddress}_${toAddress}`
656
+ .addColumn("chainId", "integer", (col) => col.notNull())
657
+ .addColumn("fromAddress", "varchar(42)")
658
+ .addColumn("toAddress", "varchar(42)")
659
+ .execute();
660
+ await db.schema
661
+ .createTable("traceFilterIntervals")
662
+ .addColumn("id", "serial", (col) => col.notNull().primaryKey()) // Auto-increment
663
+ .addColumn("traceFilterId", "text", (col) => col.notNull())
664
+ .addColumn("startBlock", "numeric(78, 0)", (col) => col.notNull())
665
+ .addColumn("endBlock", "numeric(78, 0)", (col) => col.notNull())
666
+ .execute();
667
+ await db.schema
668
+ .createIndex("traceFilterIntervalsTraceFilterId")
669
+ .on("traceFilterIntervals")
670
+ .column("traceFilterId")
671
+ .execute();
672
+ await db.schema
673
+ .createTable("callTraces")
674
+ .addColumn("id", "text", (col) => col.notNull().primaryKey())
675
+ .addColumn("callType", "text", (col) => col.notNull())
676
+ .addColumn("from", "varchar(42)", (col) => col.notNull())
677
+ .addColumn("gas", "numeric(78, 0)", (col) => col.notNull())
678
+ .addColumn("input", "text", (col) => col.notNull())
679
+ .addColumn("to", "varchar(42)", (col) => col.notNull())
680
+ .addColumn("value", "numeric(78, 0)", (col) => col.notNull())
681
+ .addColumn("blockHash", "varchar(66)", (col) => col.notNull())
682
+ .addColumn("blockNumber", "numeric(78, 0)", (col) => col.notNull())
683
+ .addColumn("error", "text")
684
+ .addColumn("gasUsed", "numeric(78, 0)")
685
+ .addColumn("output", "text")
686
+ .addColumn("subtraces", "integer", (col) => col.notNull())
687
+ .addColumn("traceAddress", "text", (col) => col.notNull())
688
+ .addColumn("transactionHash", "varchar(66)", (col) => col.notNull())
689
+ .addColumn("transactionPosition", "integer", (col) => col.notNull())
690
+ .addColumn("functionSelector", "varchar(10)", (col) => col.notNull())
691
+ .addColumn("chainId", "integer", (col) => col.notNull())
692
+ .addColumn("checkpoint", "varchar(75)", (col) => col.notNull())
693
+ .execute();
694
+ // The callTraces.blockNumber index supports getEvents and deleteRealtimeData
695
+ await db.schema
696
+ .createIndex("callTracesBlockNumberIndex")
697
+ .on("callTraces")
698
+ .column("blockNumber")
699
+ .execute();
700
+ // The callTraces.functionSelector index supports getEvents
701
+ await db.schema
702
+ .createIndex("callTracesFunctionSelectorIndex")
703
+ .on("callTraces")
704
+ .column("functionSelector")
705
+ .execute();
706
+ // The callTraces.error index supports getEvents
707
+ await db.schema
708
+ .createIndex("callTracesErrorIndex")
709
+ .on("callTraces")
710
+ .column("error")
711
+ .execute();
712
+ // The callTraces.blockHash index supports getEvents
713
+ await db.schema
714
+ .createIndex("callTracesBlockHashIndex")
715
+ .on("callTraces")
716
+ .column("blockHash")
717
+ .execute();
718
+ // The callTraces.transactionHash index supports getEvents
719
+ await db.schema
720
+ .createIndex("callTracesTransactionHashIndex")
721
+ .on("callTraces")
722
+ .column("transactionHash")
723
+ .execute();
724
+ // The callTraces.checkpoint index supports getEvents
725
+ await db.schema
726
+ .createIndex("callTracesCheckpointIndex")
727
+ .on("callTraces")
728
+ .column("checkpoint")
729
+ .execute();
730
+ // The callTraces.chainId index supports getEvents
731
+ await db.schema
732
+ .createIndex("callTracesChainIdIndex")
733
+ .on("callTraces")
734
+ .column("chainId")
735
+ .execute();
736
+ // The callTraces.from index supports getEvents
737
+ await db.schema
738
+ .createIndex("callTracesFromIndex")
739
+ .on("callTraces")
740
+ .column("from")
741
+ .execute();
742
+ // The callTraces.to index supports getEvents
743
+ await db.schema
744
+ .createIndex("callTracesToIndex")
745
+ .on("callTraces")
746
+ .column("to")
747
+ .execute();
748
+ await db.schema
749
+ .alterTable("factories")
750
+ .renameTo("factoryLogFilters")
751
+ .execute();
752
+ await db.schema
753
+ .createTable("factoryTraceFilters")
754
+ .addColumn("id", "text", (col) => col.notNull().primaryKey()) // `${chainId}_${address}_${eventSelector}_${childAddressLocation}_${fromAddress}`
755
+ .addColumn("chainId", "integer", (col) => col.notNull())
756
+ .addColumn("address", "varchar(42)", (col) => col.notNull())
757
+ .addColumn("eventSelector", "varchar(66)", (col) => col.notNull())
758
+ .addColumn("childAddressLocation", "text", (col) => col.notNull()) // `topic${number}` or `offset${number}`
759
+ .addColumn("fromAddress", "varchar(42)")
760
+ .execute();
761
+ await db.schema
762
+ .createTable("factoryTraceFilterIntervals")
763
+ .addColumn("id", "serial", (col) => col.notNull().primaryKey()) // Auto-increment
764
+ .addColumn("factoryId", "text")
765
+ .addColumn("startBlock", "numeric(78, 0)", (col) => col.notNull())
766
+ .addColumn("endBlock", "numeric(78, 0)", (col) => col.notNull())
767
+ .execute();
768
+ await db.schema
769
+ .createIndex("factoryTraceFilterIntervalsFactoryId")
770
+ .on("factoryTraceFilterIntervals")
771
+ .column("factoryId")
772
+ .execute();
773
+ },
774
+ },
775
+ "2024_11_04_0_request_cache": {
776
+ async up(db) {
777
+ await db.schema
778
+ .createTable("rpc_request_results")
779
+ .addColumn("request", "text", (col) => col.notNull())
780
+ .addColumn("block_number", "numeric(78, 0)")
781
+ .addColumn("chain_id", "integer", (col) => col.notNull())
782
+ .addColumn("result", "text", (col) => col.notNull())
783
+ .addPrimaryKeyConstraint("rpc_request_result_primary_key", [
784
+ "request",
785
+ "chain_id",
786
+ ])
787
+ .execute();
788
+ await db.executeQuery(sql `
789
+ INSERT INTO ponder_sync.rpc_request_results (request, block_number, chain_id, result)
790
+ SELECT
791
+ CONCAT (
792
+ '{"method":"eth_getbalance","params":["',
793
+ LOWER(SUBSTRING(request, 16)),
794
+ '","0x',
795
+ to_hex("blockNumber"::bigint),
796
+ '"]}'
797
+ ) as request,
798
+ "blockNumber" as block_number,
799
+ "chainId" as chain_id,
800
+ result
801
+ FROM ponder_sync."rpcRequestResults"
802
+ WHERE ponder_sync."rpcRequestResults".request LIKE 'eth_getBalance_%'
803
+ AND ponder_sync."rpcRequestResults"."blockNumber" <= 9223372036854775807;
804
+ `.compile(db));
805
+ await db.executeQuery(sql `
806
+ INSERT INTO ponder_sync.rpc_request_results (request, block_number, chain_id, result)
807
+ SELECT
808
+ CONCAT (
809
+ '{"method":"eth_call","params":[{"data":"',
810
+ LOWER(SUBSTRING(request, 53)),
811
+ '","to":"',
812
+ LOWER(SUBSTRING(request, 10, 42)),
813
+ '"},"0x',
814
+ to_hex("blockNumber"::bigint),
815
+ '"]}'
816
+ ) as request,
817
+ "blockNumber" as block_number,
818
+ "chainId" as chain_id,
819
+ result
820
+ FROM ponder_sync."rpcRequestResults"
821
+ WHERE ponder_sync."rpcRequestResults".request LIKE 'eth_call_%'
822
+ AND ponder_sync."rpcRequestResults"."blockNumber" <= 9223372036854775807;
823
+ `.compile(db));
824
+ await db.schema
825
+ .dropTable("rpcRequestResults")
826
+ .ifExists()
827
+ .cascade()
828
+ .execute();
829
+ },
830
+ },
831
+ "2024_11_09_0_adjacent_interval": {
832
+ async up(db) {
833
+ await db.schema
834
+ .createTable("intervals")
835
+ .addColumn("fragment_id", "text", (col) => col.notNull().primaryKey())
836
+ .addColumn("chain_id", "integer", (col) => col.notNull())
837
+ .addColumn("blocks", sql `nummultirange`, (col) => col.notNull())
838
+ .execute();
839
+ await db
840
+ .with("range(fragment_id, chain_id, blocks)", (db) => db
841
+ .selectFrom("logFilters as lf")
842
+ .innerJoin("logFilterIntervals as lfi", "lf.id", "lfi.logFilterId")
843
+ .select([
844
+ sql `concat('log', '_', lf.id)`.as("fragment_id"),
845
+ "lf.chainId as chain_id",
846
+ sql `numrange(lfi."startBlock", lfi."endBlock" + 1, '[]')`.as("blocks"),
847
+ ]))
848
+ .insertInto("intervals")
849
+ .columns(["fragment_id", "chain_id", "blocks"])
850
+ .expression(sql.raw(`
851
+ SELECT
852
+ fragment_id,
853
+ chain_id,
854
+ range_agg(range.blocks) as blocks
855
+ FROM range
856
+ GROUP BY fragment_id, chain_id
857
+ `))
858
+ .execute();
859
+ await db.schema.dropTable("logFilters").ifExists().cascade().execute();
860
+ await db.schema
861
+ .dropTable("logFilterIntervals")
862
+ .ifExists()
863
+ .cascade()
864
+ .execute();
865
+ await db
866
+ .with("range(fragment_id, chain_id, blocks)", (db) => db
867
+ .selectFrom("factoryLogFilters as flf")
868
+ .innerJoin("factoryLogFilterIntervals as flfi", "flf.id", "flfi.factoryId")
869
+ .select([
870
+ sql `concat('log', '_', flf.id)`.as("fragment_id"),
871
+ "flf.chainId as chain_id",
872
+ sql `numrange(flfi."startBlock", flfi."endBlock" + 1, '[]')`.as("blocks"),
873
+ ]))
874
+ .insertInto("intervals")
875
+ .columns(["fragment_id", "chain_id", "blocks"])
876
+ .expression(sql.raw(`
877
+ SELECT
878
+ fragment_id,
879
+ chain_id,
880
+ range_agg(range.blocks) as blocks
881
+ FROM range
882
+ GROUP BY fragment_id, chain_id
883
+ `))
884
+ .onConflict((oc) => oc.column("fragment_id").doUpdateSet({
885
+ blocks: sql `intervals.blocks + excluded.blocks`,
886
+ }))
887
+ .execute();
888
+ await db.schema
889
+ .dropTable("factoryLogFilters")
890
+ .ifExists()
891
+ .cascade()
892
+ .execute();
893
+ await db.schema
894
+ .dropTable("factoryLogFilterIntervals")
895
+ .ifExists()
896
+ .cascade()
897
+ .execute();
898
+ await db
899
+ .with("range(fragment_id, chain_id, blocks)", (db) => db
900
+ .selectFrom("traceFilters as tf")
901
+ .innerJoin("traceFilterIntervals as tfi", "tf.id", "tfi.traceFilterId")
902
+ .select([
903
+ sql `concat('trace', '_', tf.id)`.as("fragment_id"),
904
+ "tf.chainId as chain_id",
905
+ sql `numrange(tfi."startBlock", tfi."endBlock" + 1, '[]')`.as("blocks"),
906
+ ]))
907
+ .insertInto("intervals")
908
+ .columns(["fragment_id", "chain_id", "blocks"])
909
+ .expression(sql.raw(`
910
+ SELECT
911
+ fragment_id,
912
+ chain_id,
913
+ range_agg(range.blocks) as blocks
914
+ FROM range
915
+ GROUP BY fragment_id, chain_id
916
+ `))
917
+ .onConflict((oc) => oc.column("fragment_id").doUpdateSet({
918
+ blocks: sql `intervals.blocks + excluded.blocks`,
919
+ }))
920
+ .execute();
921
+ await db.schema.dropTable("traceFilters").ifExists().cascade().execute();
922
+ await db.schema
923
+ .dropTable("traceFilterIntervals")
924
+ .ifExists()
925
+ .cascade()
926
+ .execute();
927
+ await db
928
+ .with("range(fragment_id, chain_id, blocks)", (db) => db
929
+ .selectFrom("factoryTraceFilters as ftf")
930
+ .innerJoin("factoryTraceFilterIntervals as ftfi", "ftf.id", "ftfi.factoryId")
931
+ .select([
932
+ sql `concat('trace', '_', ftf.id)`.as("fragment_id"),
933
+ "ftf.chainId as chain_id",
934
+ sql `numrange(ftfi."startBlock", ftfi."endBlock" + 1, '[]')`.as("blocks"),
935
+ ]))
936
+ .insertInto("intervals")
937
+ .columns(["fragment_id", "chain_id", "blocks"])
938
+ .expression(sql.raw(`
939
+ SELECT
940
+ fragment_id,
941
+ chain_id,
942
+ range_agg(range.blocks) as blocks
943
+ FROM range
944
+ GROUP BY fragment_id, chain_id
945
+ `))
946
+ .onConflict((oc) => oc.column("fragment_id").doUpdateSet({
947
+ blocks: sql `intervals.blocks + excluded.blocks`,
948
+ }))
949
+ .execute();
950
+ await db.schema
951
+ .dropTable("factoryTraceFilters")
952
+ .ifExists()
953
+ .cascade()
954
+ .execute();
955
+ await db.schema
956
+ .dropTable("factoryTraceFilterIntervals")
957
+ .ifExists()
958
+ .cascade()
959
+ .execute();
960
+ await db
961
+ .with("range(fragment_id, chain_id, blocks)", (db) => db
962
+ .selectFrom("blockFilters as bf")
963
+ .innerJoin("blockFilterIntervals as bfi", "bf.id", "bfi.blockFilterId")
964
+ .select([
965
+ sql `concat('block', '_', bf.id)`.as("fragment_id"),
966
+ "bf.chainId as chain_id",
967
+ sql `numrange(bfi."startBlock", bfi."endBlock" + 1, '[]')`.as("blocks"),
968
+ ]))
969
+ .insertInto("intervals")
970
+ .columns(["fragment_id", "chain_id", "blocks"])
971
+ .expression(sql.raw(`
972
+ SELECT
973
+ fragment_id,
974
+ chain_id,
975
+ range_agg(range.blocks) as blocks
976
+ FROM range
977
+ GROUP BY fragment_id, chain_id
978
+ `))
979
+ .onConflict((oc) => oc.column("fragment_id").doUpdateSet({
980
+ blocks: sql `intervals.blocks + excluded.blocks`,
981
+ }))
982
+ .execute();
983
+ await db.schema.dropTable("blockFilters").ifExists().cascade().execute();
984
+ await db.schema
985
+ .dropTable("blockFilterIntervals")
986
+ .ifExists()
987
+ .cascade()
988
+ .execute();
989
+ },
990
+ },
991
+ "2024_11_12_0_debug": {
992
+ async up(db) {
993
+ await db.schema.dropTable("callTraces").ifExists().cascade().execute();
994
+ await db
995
+ .deleteFrom("intervals")
996
+ .where("fragment_id", "like", "trace_%")
997
+ .execute();
998
+ await db.schema
999
+ .createTable("traces")
1000
+ .addColumn("id", "text", (col) => col.notNull().primaryKey())
1001
+ .addColumn("chainId", "integer", (col) => col.notNull())
1002
+ .addColumn("checkpoint", "varchar(75)", (col) => col.notNull())
1003
+ .addColumn("type", "text", (col) => col.notNull())
1004
+ .addColumn("transactionHash", "varchar(66)", (col) => col.notNull())
1005
+ .addColumn("blockNumber", "numeric(78, 0)", (col) => col.notNull())
1006
+ .addColumn("blockHash", "varchar(66)", (col) => col.notNull())
1007
+ .addColumn("from", "varchar(42)", (col) => col.notNull())
1008
+ .addColumn("to", "varchar(42)")
1009
+ .addColumn("gas", "numeric(78, 0)", (col) => col.notNull())
1010
+ .addColumn("gasUsed", "numeric(78, 0)", (col) => col.notNull())
1011
+ .addColumn("input", "text", (col) => col.notNull())
1012
+ .addColumn("functionSelector", "text", (col) => col.notNull())
1013
+ .addColumn("output", "text")
1014
+ .addColumn("error", "text")
1015
+ .addColumn("revertReason", "text")
1016
+ .addColumn("value", "numeric(78, 0)")
1017
+ .addColumn("index", "integer", (col) => col.notNull())
1018
+ .addColumn("subcalls", "integer", (col) => col.notNull())
1019
+ .addColumn("isReverted", "integer", (col) => col.notNull())
1020
+ .execute();
1021
+ // `getEvents` benefits from an index on
1022
+ // "blockNumber", "functionSelector", "blockHash"
1023
+ // "transactionHash", "checkpoint", "chainId", "from", "to",
1024
+ // "value", "type", and "isReverted"
1025
+ await db.schema
1026
+ .createIndex("trace_block_number_index")
1027
+ .on("traces")
1028
+ .column("blockNumber")
1029
+ .execute();
1030
+ await db.schema
1031
+ .createIndex("trace_function_selector_index")
1032
+ .on("traces")
1033
+ .column("functionSelector")
1034
+ .execute();
1035
+ await db.schema
1036
+ .createIndex("trace_is_reverted_index")
1037
+ .on("traces")
1038
+ .column("isReverted")
1039
+ .execute();
1040
+ await db.schema
1041
+ .createIndex("trace_block_hash_index")
1042
+ .on("traces")
1043
+ .column("blockHash")
1044
+ .execute();
1045
+ await db.schema
1046
+ .createIndex("trace_transaction_hash_index")
1047
+ .on("traces")
1048
+ .column("transactionHash")
1049
+ .execute();
1050
+ await db.schema
1051
+ .createIndex("trace_checkpoint_index")
1052
+ .on("traces")
1053
+ .column("checkpoint")
1054
+ .execute();
1055
+ await db.schema
1056
+ .createIndex("trace_chain_id_index")
1057
+ .on("traces")
1058
+ .column("chainId")
1059
+ .execute();
1060
+ await db.schema
1061
+ .createIndex("trace_value_index")
1062
+ .on("traces")
1063
+ .column("value")
1064
+ .execute();
1065
+ await db.schema
1066
+ .createIndex("trace_from_index")
1067
+ .on("traces")
1068
+ .column("from")
1069
+ .execute();
1070
+ await db.schema
1071
+ .createIndex("trace_to_index")
1072
+ .on("traces")
1073
+ .column("to")
1074
+ .execute();
1075
+ await db.schema
1076
+ .createIndex("trace_type_index")
1077
+ .on("traces")
1078
+ .column("type")
1079
+ .execute();
1080
+ // add `checkpoint` to `transactions`
1081
+ await db.schema
1082
+ .alterTable("transactions")
1083
+ .addColumn("checkpoint", "varchar(75)")
1084
+ .execute();
1085
+ await db.schema
1086
+ .createIndex("transactions_checkpoint_index")
1087
+ .on("transactions")
1088
+ .column("checkpoint")
1089
+ .execute();
1090
+ await db.schema
1091
+ .alterTable("transactionReceipts")
1092
+ .dropColumn("logs")
1093
+ .execute();
1094
+ },
1095
+ },
1096
+ "2024_12_02_0_request_cache": {
1097
+ async up(db) {
1098
+ await db.schema
1099
+ .alterTable("rpc_request_results")
1100
+ .addColumn("request_hash", "text", (col) => col.generatedAlwaysAs(sql `MD5(request)`).stored().notNull())
1101
+ .execute();
1102
+ // Drop previous primary key constraint, on columns "request" and "chain_id"
1103
+ await db.schema
1104
+ .alterTable("rpc_request_results")
1105
+ .dropConstraint("rpc_request_result_primary_key")
1106
+ .execute();
1107
+ await db.schema
1108
+ .alterTable("rpc_request_results")
1109
+ .addPrimaryKeyConstraint("rpc_request_result_primary_key", [
1110
+ "request_hash",
1111
+ "chain_id",
1112
+ ])
1113
+ .execute();
1114
+ },
1115
+ },
1116
+ "2025_02_19_0_primary_key": {
1117
+ async up(db) {
1118
+ // 1. drop unused indexes
1119
+ // 2. update column types
1120
+ // 3. drop primary key
1121
+ // 4. drop unused columns
1122
+ // 5. rename tables and columns
1123
+ // 6. create new primary key
1124
+ // 7. reset metadata
1125
+ logger.debug({
1126
+ msg: `${new Date().toISOString()} [ponder_sync migration] started 2025_02_19_0_primary_key`,
1127
+ });
1128
+ await db.executeQuery(sql `SET statement_timeout = 3600000;`.compile(db));
1129
+ await db.schema.dropIndex("logAddressIndex").ifExists().execute();
1130
+ await db.schema.dropIndex("logBlockHashIndex").ifExists().execute();
1131
+ await db.schema.dropIndex("logBlockNumberIndex").ifExists().execute();
1132
+ await db.schema.dropIndex("logChainIdIndex").ifExists().execute();
1133
+ await db.schema.dropIndex("logTopic0Index").ifExists().execute();
1134
+ await db.schema
1135
+ .dropIndex("log_transaction_hash_index")
1136
+ .ifExists()
1137
+ .execute();
1138
+ await db.schema.dropIndex("logs_checkpoint_index").ifExists().execute();
1139
+ await db.schema.dropIndex("blockChainIdIndex").execute();
1140
+ await db.schema.dropIndex("blockCheckpointIndex").execute();
1141
+ await db.schema.dropIndex("blockNumberIndex").execute();
1142
+ await db.schema.dropIndex("transactions_checkpoint_index").execute();
1143
+ await db.schema.dropIndex("trace_block_hash_index").ifExists().execute();
1144
+ await db.schema
1145
+ .dropIndex("trace_block_number_index")
1146
+ .ifExists()
1147
+ .execute();
1148
+ await db.schema.dropIndex("trace_chain_id_index").ifExists().execute();
1149
+ await db.schema.dropIndex("trace_checkpoint_index").ifExists().execute();
1150
+ await db.schema.dropIndex("trace_from_index").ifExists().execute();
1151
+ await db.schema
1152
+ .dropIndex("trace_function_selector_index")
1153
+ .ifExists()
1154
+ .execute();
1155
+ await db.schema.dropIndex("trace_is_reverted_index").ifExists().execute();
1156
+ await db.schema.dropIndex("trace_to_index").ifExists().execute();
1157
+ await db.schema
1158
+ .dropIndex("trace_transaction_hash_index")
1159
+ .ifExists()
1160
+ .execute();
1161
+ await db.schema.dropIndex("trace_type_index").ifExists().execute();
1162
+ await db.schema.dropIndex("trace_value_index").ifExists().execute();
1163
+ logger.debug({
1164
+ msg: `${new Date().toISOString()} [ponder_sync migration] dropped indexes`,
1165
+ });
1166
+ await db.schema
1167
+ .alterTable("logs")
1168
+ .alterColumn("blockNumber", (qb) => qb.setDataType("bigint"))
1169
+ .execute();
1170
+ await db.schema
1171
+ .alterTable("blocks")
1172
+ .alterColumn("number", (qb) => qb.setDataType("bigint"))
1173
+ .execute();
1174
+ await db.schema
1175
+ .alterTable("blocks")
1176
+ .alterColumn("timestamp", (qb) => qb.setDataType("bigint"))
1177
+ .execute();
1178
+ await db.schema
1179
+ .alterTable("transactions")
1180
+ .alterColumn("blockNumber", (qb) => qb.setDataType("bigint"))
1181
+ .execute();
1182
+ await db.schema
1183
+ .alterTable("transactionReceipts")
1184
+ .alterColumn("blockNumber", (qb) => qb.setDataType("bigint"))
1185
+ .execute();
1186
+ await db.schema
1187
+ .alterTable("transactionReceipts")
1188
+ .alterColumn("chainId", (qb) => qb.setDataType("bigint"))
1189
+ .execute();
1190
+ await db.schema
1191
+ .alterTable("traces")
1192
+ .alterColumn("blockNumber", (qb) => qb.setDataType("bigint"))
1193
+ .execute();
1194
+ await db.schema
1195
+ .alterTable("traces")
1196
+ .alterColumn("chainId", (qb) => qb.setDataType("bigint"))
1197
+ .execute();
1198
+ await db.schema
1199
+ .alterTable("traces")
1200
+ .addColumn("transaction_index", "integer")
1201
+ .execute();
1202
+ await db
1203
+ .updateTable("traces")
1204
+ .set({ transaction_index: sql `SUBSTRING(checkpoint, 43, 16)::bigint` })
1205
+ .execute();
1206
+ await db.schema
1207
+ .alterTable("traces")
1208
+ .alterColumn("transaction_index", (col) => col.setNotNull())
1209
+ .execute();
1210
+ await db.schema
1211
+ .alterTable("intervals")
1212
+ .alterColumn("chain_id", (qb) => qb.setDataType("bigint"))
1213
+ .execute();
1214
+ await db.deleteFrom("logs").where("checkpoint", "=", null).execute();
1215
+ logger.debug({
1216
+ msg: `${new Date().toISOString()} [ponder_sync migration] updated column types`,
1217
+ });
1218
+ await db.schema.alterTable("logs").dropConstraint("logs_pkey").execute();
1219
+ await db.schema
1220
+ .alterTable("blocks")
1221
+ .dropConstraint("blocks_pkey")
1222
+ .execute();
1223
+ await db.schema
1224
+ .alterTable("transactions")
1225
+ .dropConstraint("transactions_pkey")
1226
+ .execute();
1227
+ await db.schema
1228
+ .alterTable("transactionReceipts")
1229
+ .dropConstraint("transactionReceipts_pkey")
1230
+ .execute();
1231
+ await db.schema
1232
+ .alterTable("traces")
1233
+ .dropConstraint("traces_pkey")
1234
+ .execute();
1235
+ await db.schema.alterTable("logs").dropColumn("checkpoint").execute();
1236
+ await db.schema.alterTable("logs").dropColumn("id").execute();
1237
+ await db.schema.alterTable("blocks").dropColumn("checkpoint").execute();
1238
+ await db.schema
1239
+ .alterTable("transactions")
1240
+ .dropColumn("checkpoint")
1241
+ .execute();
1242
+ await db.schema.alterTable("traces").dropColumn("id").execute();
1243
+ await db.schema.alterTable("traces").dropColumn("checkpoint").execute();
1244
+ await db.schema
1245
+ .alterTable("traces")
1246
+ .dropColumn("transactionHash")
1247
+ .execute();
1248
+ await db.schema.alterTable("traces").dropColumn("blockHash").execute();
1249
+ await db.schema
1250
+ .alterTable("traces")
1251
+ .dropColumn("functionSelector")
1252
+ .execute();
1253
+ await db.schema.alterTable("traces").dropColumn("isReverted").execute();
1254
+ logger.debug({
1255
+ msg: `${new Date().toISOString()} [ponder_sync migration] dropped columns`,
1256
+ });
1257
+ await db.schema
1258
+ .alterTable("logs")
1259
+ .renameColumn("chainId", "chain_id")
1260
+ .execute();
1261
+ await db.schema
1262
+ .alterTable("logs")
1263
+ .renameColumn("blockNumber", "block_number")
1264
+ .execute();
1265
+ await db.schema
1266
+ .alterTable("logs")
1267
+ .renameColumn("logIndex", "log_index")
1268
+ .execute();
1269
+ await db.schema
1270
+ .alterTable("logs")
1271
+ .renameColumn("transactionIndex", "transaction_index")
1272
+ .execute();
1273
+ await db.schema
1274
+ .alterTable("logs")
1275
+ .renameColumn("blockHash", "block_hash")
1276
+ .execute();
1277
+ await db.schema
1278
+ .alterTable("logs")
1279
+ .renameColumn("transactionHash", "transaction_hash")
1280
+ .execute();
1281
+ await db.schema
1282
+ .alterTable("blocks")
1283
+ .renameColumn("chainId", "chain_id")
1284
+ .execute();
1285
+ await db.schema
1286
+ .alterTable("blocks")
1287
+ .renameColumn("parentHash", "parent_hash")
1288
+ .execute();
1289
+ await db.schema
1290
+ .alterTable("blocks")
1291
+ .renameColumn("logsBloom", "logs_bloom")
1292
+ .execute();
1293
+ await db.schema
1294
+ .alterTable("blocks")
1295
+ .renameColumn("gasUsed", "gas_used")
1296
+ .execute();
1297
+ await db.schema
1298
+ .alterTable("blocks")
1299
+ .renameColumn("gasLimit", "gas_limit")
1300
+ .execute();
1301
+ await db.schema
1302
+ .alterTable("blocks")
1303
+ .renameColumn("baseFeePerGas", "base_fee_per_gas")
1304
+ .execute();
1305
+ await db.schema
1306
+ .alterTable("blocks")
1307
+ .renameColumn("mixHash", "mix_hash")
1308
+ .execute();
1309
+ await db.schema
1310
+ .alterTable("blocks")
1311
+ .renameColumn("stateRoot", "state_root")
1312
+ .execute();
1313
+ await db.schema
1314
+ .alterTable("blocks")
1315
+ .renameColumn("receiptsRoot", "receipts_root")
1316
+ .execute();
1317
+ await db.schema
1318
+ .alterTable("blocks")
1319
+ .renameColumn("transactionsRoot", "transactions_root")
1320
+ .execute();
1321
+ await db.schema
1322
+ .alterTable("blocks")
1323
+ .renameColumn("sha3Uncles", "sha3_uncles")
1324
+ .execute();
1325
+ await db.schema
1326
+ .alterTable("blocks")
1327
+ .renameColumn("totalDifficulty", "total_difficulty")
1328
+ .execute();
1329
+ await db.schema
1330
+ .alterTable("blocks")
1331
+ .renameColumn("extraData", "extra_data")
1332
+ .execute();
1333
+ await db.schema
1334
+ .alterTable("transactions")
1335
+ .renameColumn("chainId", "chain_id")
1336
+ .execute();
1337
+ await db.schema
1338
+ .alterTable("transactions")
1339
+ .renameColumn("blockNumber", "block_number")
1340
+ .execute();
1341
+ await db.schema
1342
+ .alterTable("transactions")
1343
+ .renameColumn("transactionIndex", "transaction_index")
1344
+ .execute();
1345
+ await db.schema
1346
+ .alterTable("transactions")
1347
+ .renameColumn("blockHash", "block_hash")
1348
+ .execute();
1349
+ await db.schema
1350
+ .alterTable("transactions")
1351
+ .renameColumn("gasPrice", "gas_price")
1352
+ .execute();
1353
+ await db.schema
1354
+ .alterTable("transactions")
1355
+ .renameColumn("maxFeePerGas", "max_fee_per_gas")
1356
+ .execute();
1357
+ await db.schema
1358
+ .alterTable("transactions")
1359
+ .renameColumn("maxPriorityFeePerGas", "max_priority_fee_per_gas")
1360
+ .execute();
1361
+ await db.schema
1362
+ .alterTable("transactions")
1363
+ .renameColumn("accessList", "access_list")
1364
+ .execute();
1365
+ await db.schema
1366
+ .alterTable("transactionReceipts")
1367
+ .renameTo("transaction_receipts")
1368
+ .execute();
1369
+ await db.schema
1370
+ .alterTable("transaction_receipts")
1371
+ .renameColumn("chainId", "chain_id")
1372
+ .execute();
1373
+ await db.schema
1374
+ .alterTable("transaction_receipts")
1375
+ .renameColumn("blockNumber", "block_number")
1376
+ .execute();
1377
+ await db.schema
1378
+ .alterTable("transaction_receipts")
1379
+ .renameColumn("transactionIndex", "transaction_index")
1380
+ .execute();
1381
+ await db.schema
1382
+ .alterTable("transaction_receipts")
1383
+ .renameColumn("blockHash", "block_hash")
1384
+ .execute();
1385
+ await db.schema
1386
+ .alterTable("transaction_receipts")
1387
+ .renameColumn("transactionHash", "transaction_hash")
1388
+ .execute();
1389
+ await db.schema
1390
+ .alterTable("transaction_receipts")
1391
+ .renameColumn("contractAddress", "contract_address")
1392
+ .execute();
1393
+ await db.schema
1394
+ .alterTable("transaction_receipts")
1395
+ .renameColumn("logsBloom", "logs_bloom")
1396
+ .execute();
1397
+ await db.schema
1398
+ .alterTable("transaction_receipts")
1399
+ .renameColumn("gasUsed", "gas_used")
1400
+ .execute();
1401
+ await db.schema
1402
+ .alterTable("transaction_receipts")
1403
+ .renameColumn("cumulativeGasUsed", "cumulative_gas_used")
1404
+ .execute();
1405
+ await db.schema
1406
+ .alterTable("transaction_receipts")
1407
+ .renameColumn("effectiveGasPrice", "effective_gas_price")
1408
+ .execute();
1409
+ await db.schema
1410
+ .alterTable("traces")
1411
+ .renameColumn("chainId", "chain_id")
1412
+ .execute();
1413
+ await db.schema
1414
+ .alterTable("traces")
1415
+ .renameColumn("blockNumber", "block_number")
1416
+ .execute();
1417
+ await db.schema
1418
+ .alterTable("traces")
1419
+ .renameColumn("index", "trace_index")
1420
+ .execute();
1421
+ await db.schema
1422
+ .alterTable("traces")
1423
+ .renameColumn("gasUsed", "gas_used")
1424
+ .execute();
1425
+ await db.schema
1426
+ .alterTable("traces")
1427
+ .renameColumn("revertReason", "revert_reason")
1428
+ .execute();
1429
+ logger.debug({
1430
+ msg: `${new Date().toISOString()} [ponder_sync migration] renamed columns`,
1431
+ });
1432
+ await db.schema
1433
+ .alterTable("logs")
1434
+ .addPrimaryKeyConstraint("logs_pkey", [
1435
+ "chain_id",
1436
+ "block_number",
1437
+ "log_index",
1438
+ ])
1439
+ .execute();
1440
+ await db.schema
1441
+ .alterTable("blocks")
1442
+ .addPrimaryKeyConstraint("blocks_pkey", ["chain_id", "number"])
1443
+ .execute();
1444
+ await db.schema
1445
+ .alterTable("transactions")
1446
+ .addPrimaryKeyConstraint("transactions_pkey", [
1447
+ "chain_id",
1448
+ "block_number",
1449
+ "transaction_index",
1450
+ ])
1451
+ .execute();
1452
+ await db.schema
1453
+ .alterTable("transaction_receipts")
1454
+ .addPrimaryKeyConstraint("transaction_receipts_pkey", [
1455
+ "chain_id",
1456
+ "block_number",
1457
+ "transaction_index",
1458
+ ])
1459
+ .execute();
1460
+ await db.schema
1461
+ .alterTable("traces")
1462
+ .addPrimaryKeyConstraint("traces_pkey", [
1463
+ "chain_id",
1464
+ "block_number",
1465
+ "transaction_index",
1466
+ "trace_index",
1467
+ ])
1468
+ .execute();
1469
+ logger.debug({
1470
+ msg: `${new Date().toISOString()} [ponder_sync migration] added primary keys`,
1471
+ });
1472
+ await sql `ANALYZE ponder_sync.logs`.execute(db);
1473
+ await sql `ANALYZE ponder_sync.blocks`.execute(db);
1474
+ await sql `ANALYZE ponder_sync.transactions`.execute(db);
1475
+ await sql `ANALYZE ponder_sync.transaction_receipts`.execute(db);
1476
+ await sql `ANALYZE ponder_sync.traces`.execute(db);
1477
+ await sql `REINDEX TABLE ponder_sync.logs`.execute(db);
1478
+ await sql `REINDEX TABLE ponder_sync.blocks`.execute(db);
1479
+ await sql `REINDEX TABLE ponder_sync.transactions`.execute(db);
1480
+ await sql `REINDEX TABLE ponder_sync.transaction_receipts`.execute(db);
1481
+ await sql `REINDEX TABLE ponder_sync.traces`.execute(db);
1482
+ logger.debug({
1483
+ msg: `${new Date().toISOString()} [ponder_sync migration] finished 2025_02_19_0_primary_key`,
1484
+ });
1485
+ },
1486
+ },
1487
+ "2025_02_26_0_factories": {
1488
+ async up(db) {
1489
+ logger.debug({
1490
+ msg: `${new Date().toISOString()} [ponder_sync migration] started 2025_02_26_0_factories`,
1491
+ });
1492
+ await db.executeQuery(sql `SET statement_timeout = 3600000;`.compile(db));
1493
+ // drop any intervals that contain a factory address
1494
+ await db
1495
+ .deleteFrom("intervals")
1496
+ .where((qb) => qb.or([
1497
+ qb("fragment_id", "like", "%offset%"),
1498
+ qb("fragment_id", "like", "%topic%"),
1499
+ ]))
1500
+ .execute();
1501
+ await db.schema
1502
+ .createTable("factories")
1503
+ .addColumn("id", "integer", (col) => col.generatedAlwaysAsIdentity().primaryKey())
1504
+ .addColumn("factory", "jsonb", (col) => col.notNull().unique())
1505
+ .execute();
1506
+ await db.schema
1507
+ .createTable("factory_addresses")
1508
+ .addColumn("id", "integer", (col) => col.generatedAlwaysAsIdentity().primaryKey())
1509
+ .addColumn("factory_id", "integer", (col) => col.notNull())
1510
+ .addColumn("chain_id", "bigint", (col) => col.notNull())
1511
+ .addColumn("block_number", "bigint", (col) => col.notNull())
1512
+ .addColumn("address", "text", (col) => col.notNull())
1513
+ .execute();
1514
+ await db.schema
1515
+ .createIndex("factories_factory_index")
1516
+ .on("factories")
1517
+ .column("factory")
1518
+ .execute();
1519
+ await db.schema
1520
+ .createIndex("factory_addresses_factory_id_index")
1521
+ .on("factory_addresses")
1522
+ .column("factory_id")
1523
+ .execute();
1524
+ logger.debug({
1525
+ msg: `${new Date().toISOString()} [ponder_sync migration] finished 2025_02_26_0_factories`,
1526
+ });
1527
+ },
1528
+ },
1529
+ "2025_02_26_1_rpc_request_results": {
1530
+ async up(db) {
1531
+ logger.debug({
1532
+ msg: `${new Date().toISOString()} [ponder_sync migration] started 2025_02_26_1_rpc_request_results`,
1533
+ });
1534
+ await db.executeQuery(sql `SET statement_timeout = 3600000;`.compile(db));
1535
+ await db.schema
1536
+ .alterTable("rpc_request_results")
1537
+ .addColumn("request_hash_temp", "text")
1538
+ .execute();
1539
+ await db
1540
+ .updateTable("rpc_request_results")
1541
+ .set({ request_hash_temp: sql `request_hash` })
1542
+ .execute();
1543
+ await db.schema
1544
+ .alterTable("rpc_request_results")
1545
+ .dropConstraint("rpc_request_result_primary_key")
1546
+ .execute();
1547
+ await db.schema
1548
+ .alterTable("rpc_request_results")
1549
+ .dropColumn("request_hash")
1550
+ .execute();
1551
+ await db.schema
1552
+ .alterTable("rpc_request_results")
1553
+ .renameColumn("request_hash_temp", "request_hash")
1554
+ .execute();
1555
+ await db.schema
1556
+ .alterTable("rpc_request_results")
1557
+ .addPrimaryKeyConstraint("rpc_request_results_pkey", [
1558
+ "chain_id",
1559
+ "request_hash",
1560
+ ])
1561
+ .execute();
1562
+ await db.schema
1563
+ .alterTable("rpc_request_results")
1564
+ .dropColumn("request")
1565
+ .execute();
1566
+ await db
1567
+ .updateTable("rpc_request_results")
1568
+ .set({ block_number: 0 })
1569
+ .where("block_number", "=", maxUint256)
1570
+ .execute();
1571
+ await db.schema
1572
+ .alterTable("rpc_request_results")
1573
+ .alterColumn("block_number", (col) => col.setDataType("bigint"))
1574
+ .execute();
1575
+ await db.schema
1576
+ .alterTable("rpc_request_results")
1577
+ .alterColumn("chain_id", (col) => col.setDataType("bigint"))
1578
+ .execute();
1579
+ await db.schema
1580
+ .createIndex("rpc_request_results_chain_id_block_number_index")
1581
+ .on("rpc_request_results")
1582
+ .columns(["chain_id", "block_number"])
1583
+ .execute();
1584
+ await db
1585
+ .deleteFrom("rpc_request_results")
1586
+ .where("result", "=", "0x")
1587
+ .execute();
1588
+ await sql `ANALYZE ponder_sync.rpc_request_results`.execute(db);
1589
+ logger.debug({
1590
+ msg: `${new Date().toISOString()} [ponder_sync migration] finished 2025_02_26_1_rpc_request_results`,
1591
+ });
1592
+ },
1593
+ },
1594
+ };
1595
+ //# sourceMappingURL=migrations.js.map