envio 3.0.0-alpha.21 → 3.0.0-alpha.22

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 (219) hide show
  1. package/bin.mjs +2 -48
  2. package/evm.schema.json +67 -0
  3. package/fuel.schema.json +67 -0
  4. package/index.d.ts +822 -38
  5. package/index.js +5 -3
  6. package/package.json +10 -8
  7. package/rescript.json +5 -9
  8. package/src/Address.res +4 -5
  9. package/src/Address.res.mjs +9 -12
  10. package/src/Api.res +15 -0
  11. package/src/Api.res.mjs +20 -0
  12. package/src/Batch.res +32 -34
  13. package/src/Batch.res.mjs +172 -187
  14. package/src/Bin.res +89 -0
  15. package/src/Bin.res.mjs +97 -0
  16. package/src/ChainFetcher.res +33 -57
  17. package/src/ChainFetcher.res.mjs +197 -227
  18. package/src/ChainManager.res +6 -14
  19. package/src/ChainManager.res.mjs +74 -85
  20. package/src/ChainMap.res +14 -16
  21. package/src/ChainMap.res.mjs +38 -38
  22. package/src/Config.res +193 -135
  23. package/src/Config.res.mjs +566 -592
  24. package/src/Core.res +182 -0
  25. package/src/Core.res.mjs +207 -0
  26. package/src/Ecosystem.res +25 -4
  27. package/src/Ecosystem.res.mjs +12 -13
  28. package/src/Env.res +20 -13
  29. package/src/Env.res.mjs +124 -113
  30. package/src/EnvSafe.res +269 -0
  31. package/src/EnvSafe.res.mjs +296 -0
  32. package/src/EnvSafe.resi +18 -0
  33. package/src/Envio.res +37 -26
  34. package/src/Envio.res.mjs +59 -60
  35. package/src/ErrorHandling.res +2 -2
  36. package/src/ErrorHandling.res.mjs +15 -15
  37. package/src/EventConfigBuilder.res +219 -81
  38. package/src/EventConfigBuilder.res.mjs +259 -202
  39. package/src/EventProcessing.res +27 -38
  40. package/src/EventProcessing.res.mjs +165 -183
  41. package/src/EventUtils.res +11 -11
  42. package/src/EventUtils.res.mjs +21 -22
  43. package/src/EvmTypes.res +0 -1
  44. package/src/EvmTypes.res.mjs +5 -5
  45. package/src/FetchState.res +360 -256
  46. package/src/FetchState.res.mjs +958 -914
  47. package/src/GlobalState.res +365 -351
  48. package/src/GlobalState.res.mjs +958 -992
  49. package/src/GlobalStateManager.res +1 -2
  50. package/src/GlobalStateManager.res.mjs +36 -44
  51. package/src/HandlerLoader.res +107 -23
  52. package/src/HandlerLoader.res.mjs +128 -38
  53. package/src/HandlerRegister.res +127 -103
  54. package/src/HandlerRegister.res.mjs +164 -164
  55. package/src/HandlerRegister.resi +12 -4
  56. package/src/Hasura.res +35 -22
  57. package/src/Hasura.res.mjs +158 -167
  58. package/src/InMemoryStore.res +20 -27
  59. package/src/InMemoryStore.res.mjs +64 -80
  60. package/src/InMemoryTable.res +34 -39
  61. package/src/InMemoryTable.res.mjs +165 -170
  62. package/src/Internal.res +52 -33
  63. package/src/Internal.res.mjs +84 -81
  64. package/src/LazyLoader.res.mjs +55 -61
  65. package/src/LoadLayer.res +77 -78
  66. package/src/LoadLayer.res.mjs +160 -189
  67. package/src/LoadManager.res +16 -21
  68. package/src/LoadManager.res.mjs +79 -84
  69. package/src/LogSelection.res +236 -68
  70. package/src/LogSelection.res.mjs +211 -141
  71. package/src/Logging.res +13 -9
  72. package/src/Logging.res.mjs +130 -143
  73. package/src/Main.res +428 -51
  74. package/src/Main.res.mjs +528 -271
  75. package/src/Persistence.res +77 -84
  76. package/src/Persistence.res.mjs +131 -132
  77. package/src/PgStorage.res +291 -167
  78. package/src/PgStorage.res.mjs +797 -817
  79. package/src/Prometheus.res +50 -58
  80. package/src/Prometheus.res.mjs +345 -373
  81. package/src/ReorgDetection.res +22 -24
  82. package/src/ReorgDetection.res.mjs +100 -106
  83. package/src/SafeCheckpointTracking.res +7 -7
  84. package/src/SafeCheckpointTracking.res.mjs +40 -43
  85. package/src/SimulateItems.res +41 -49
  86. package/src/SimulateItems.res.mjs +257 -272
  87. package/src/Sink.res +2 -2
  88. package/src/Sink.res.mjs +22 -26
  89. package/src/TableIndices.res +1 -2
  90. package/src/TableIndices.res.mjs +42 -48
  91. package/src/TestIndexer.res +196 -189
  92. package/src/TestIndexer.res.mjs +536 -536
  93. package/src/TestIndexerProxyStorage.res +15 -16
  94. package/src/TestIndexerProxyStorage.res.mjs +98 -122
  95. package/src/TestIndexerWorker.res +4 -0
  96. package/src/TestIndexerWorker.res.mjs +7 -0
  97. package/src/Throttler.res +3 -3
  98. package/src/Throttler.res.mjs +23 -24
  99. package/src/Time.res +1 -1
  100. package/src/Time.res.mjs +18 -21
  101. package/src/TopicFilter.res +3 -3
  102. package/src/TopicFilter.res.mjs +29 -30
  103. package/src/UserContext.res +93 -54
  104. package/src/UserContext.res.mjs +197 -182
  105. package/src/Utils.res +141 -86
  106. package/src/Utils.res.mjs +334 -295
  107. package/src/bindings/BigDecimal.res +0 -2
  108. package/src/bindings/BigDecimal.res.mjs +19 -23
  109. package/src/bindings/ClickHouse.res +28 -27
  110. package/src/bindings/ClickHouse.res.mjs +243 -240
  111. package/src/bindings/DateFns.res +11 -11
  112. package/src/bindings/DateFns.res.mjs +7 -7
  113. package/src/bindings/EventSource.res.mjs +2 -2
  114. package/src/bindings/Express.res +2 -5
  115. package/src/bindings/Hrtime.res +2 -2
  116. package/src/bindings/Hrtime.res.mjs +30 -32
  117. package/src/bindings/Lodash.res.mjs +1 -1
  118. package/src/bindings/NodeJs.res +14 -9
  119. package/src/bindings/NodeJs.res.mjs +20 -20
  120. package/src/bindings/Pino.res +8 -10
  121. package/src/bindings/Pino.res.mjs +40 -43
  122. package/src/bindings/Postgres.res +2 -5
  123. package/src/bindings/Postgres.res.mjs +9 -9
  124. package/src/bindings/PromClient.res +17 -2
  125. package/src/bindings/PromClient.res.mjs +30 -7
  126. package/src/bindings/SDSL.res.mjs +2 -2
  127. package/src/bindings/Viem.res +4 -4
  128. package/src/bindings/Viem.res.mjs +20 -22
  129. package/src/bindings/Vitest.res +1 -1
  130. package/src/bindings/Vitest.res.mjs +2 -2
  131. package/src/bindings/WebSocket.res +1 -1
  132. package/src/db/EntityHistory.res +9 -3
  133. package/src/db/EntityHistory.res.mjs +84 -59
  134. package/src/db/InternalTable.res +62 -60
  135. package/src/db/InternalTable.res.mjs +271 -203
  136. package/src/db/Schema.res +1 -2
  137. package/src/db/Schema.res.mjs +28 -32
  138. package/src/db/Table.res +28 -27
  139. package/src/db/Table.res.mjs +276 -292
  140. package/src/sources/EventRouter.res +21 -16
  141. package/src/sources/EventRouter.res.mjs +55 -57
  142. package/src/sources/Evm.res +17 -1
  143. package/src/sources/Evm.res.mjs +16 -8
  144. package/src/sources/EvmChain.res +15 -17
  145. package/src/sources/EvmChain.res.mjs +40 -42
  146. package/src/sources/Fuel.res +14 -1
  147. package/src/sources/Fuel.res.mjs +16 -8
  148. package/src/sources/FuelSDK.res +1 -1
  149. package/src/sources/FuelSDK.res.mjs +6 -8
  150. package/src/sources/HyperFuel.res +8 -10
  151. package/src/sources/HyperFuel.res.mjs +113 -123
  152. package/src/sources/HyperFuelClient.res.mjs +6 -7
  153. package/src/sources/HyperFuelSource.res +19 -20
  154. package/src/sources/HyperFuelSource.res.mjs +339 -356
  155. package/src/sources/HyperSync.res +11 -13
  156. package/src/sources/HyperSync.res.mjs +206 -220
  157. package/src/sources/HyperSyncClient.res +5 -7
  158. package/src/sources/HyperSyncClient.res.mjs +70 -75
  159. package/src/sources/HyperSyncHeightStream.res +8 -9
  160. package/src/sources/HyperSyncHeightStream.res.mjs +78 -86
  161. package/src/sources/HyperSyncJsonApi.res +18 -15
  162. package/src/sources/HyperSyncJsonApi.res.mjs +201 -231
  163. package/src/sources/HyperSyncSource.res +17 -21
  164. package/src/sources/HyperSyncSource.res.mjs +268 -290
  165. package/src/sources/Rpc.res +5 -5
  166. package/src/sources/Rpc.res.mjs +168 -192
  167. package/src/sources/RpcSource.res +166 -167
  168. package/src/sources/RpcSource.res.mjs +972 -1046
  169. package/src/sources/RpcWebSocketHeightStream.res +10 -11
  170. package/src/sources/RpcWebSocketHeightStream.res.mjs +131 -145
  171. package/src/sources/SimulateSource.res +1 -1
  172. package/src/sources/SimulateSource.res.mjs +35 -38
  173. package/src/sources/Source.res +1 -1
  174. package/src/sources/Source.res.mjs +3 -3
  175. package/src/sources/SourceManager.res +39 -20
  176. package/src/sources/SourceManager.res.mjs +340 -371
  177. package/src/sources/SourceManager.resi +2 -1
  178. package/src/sources/Svm.res +12 -5
  179. package/src/sources/Svm.res.mjs +44 -41
  180. package/src/tui/Tui.res +23 -12
  181. package/src/tui/Tui.res.mjs +292 -290
  182. package/src/tui/bindings/Ink.res +2 -4
  183. package/src/tui/bindings/Ink.res.mjs +35 -41
  184. package/src/tui/components/BufferedProgressBar.res +7 -7
  185. package/src/tui/components/BufferedProgressBar.res.mjs +46 -46
  186. package/src/tui/components/CustomHooks.res +1 -2
  187. package/src/tui/components/CustomHooks.res.mjs +102 -122
  188. package/src/tui/components/Messages.res +1 -2
  189. package/src/tui/components/Messages.res.mjs +38 -42
  190. package/src/tui/components/SyncETA.res +10 -11
  191. package/src/tui/components/SyncETA.res.mjs +178 -196
  192. package/src/tui/components/TuiData.res +1 -1
  193. package/src/tui/components/TuiData.res.mjs +7 -6
  194. package/src/vendored/Rest.res +52 -66
  195. package/src/vendored/Rest.res.mjs +324 -364
  196. package/svm.schema.json +67 -0
  197. package/src/Address.gen.ts +0 -8
  198. package/src/Config.gen.ts +0 -19
  199. package/src/Envio.gen.ts +0 -55
  200. package/src/EvmTypes.gen.ts +0 -6
  201. package/src/InMemoryStore.gen.ts +0 -6
  202. package/src/Internal.gen.ts +0 -64
  203. package/src/PgStorage.gen.ts +0 -10
  204. package/src/PgStorage.res.d.mts +0 -5
  205. package/src/Types.ts +0 -56
  206. package/src/bindings/BigDecimal.gen.ts +0 -14
  207. package/src/bindings/BigDecimal.res.d.mts +0 -5
  208. package/src/bindings/BigInt.gen.ts +0 -10
  209. package/src/bindings/BigInt.res +0 -70
  210. package/src/bindings/BigInt.res.d.mts +0 -5
  211. package/src/bindings/BigInt.res.mjs +0 -154
  212. package/src/bindings/Ethers.res.d.mts +0 -5
  213. package/src/bindings/Pino.gen.ts +0 -17
  214. package/src/bindings/Postgres.gen.ts +0 -8
  215. package/src/bindings/Postgres.res.d.mts +0 -5
  216. package/src/bindings/Promise.res +0 -67
  217. package/src/bindings/Promise.res.mjs +0 -26
  218. package/src/db/InternalTable.gen.ts +0 -36
  219. package/src/sources/HyperSyncClient.gen.ts +0 -19
@@ -2,207 +2,184 @@
2
2
 
3
3
  import * as Env from "./Env.res.mjs";
4
4
  import * as Svm from "./sources/Svm.res.mjs";
5
- import * as Caml from "rescript/lib/es6/caml.js";
6
5
  import * as Utils from "./Utils.res.mjs";
7
- import * as Js_exn from "rescript/lib/es6/js_exn.js";
8
6
  import * as Logging from "./Logging.res.mjs";
9
- import * as $$Promise from "./bindings/Promise.res.mjs";
10
7
  import * as ChainMap from "./ChainMap.res.mjs";
11
8
  import * as EvmChain from "./sources/EvmChain.res.mjs";
12
- import * as Belt_Array from "rescript/lib/es6/belt_Array.js";
13
9
  import * as FetchState from "./FetchState.res.mjs";
14
10
  import * as Prometheus from "./Prometheus.res.mjs";
15
- import * as Belt_Option from "rescript/lib/es6/belt_Option.js";
16
- import * as Caml_option from "rescript/lib/es6/caml_option.js";
17
11
  import * as EventRouter from "./sources/EventRouter.res.mjs";
18
12
  import * as UserContext from "./UserContext.res.mjs";
13
+ import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
19
14
  import * as ErrorHandling from "./ErrorHandling.res.mjs";
15
+ import * as Primitive_int from "@rescript/runtime/lib/es6/Primitive_int.js";
20
16
  import * as SourceManager from "./sources/SourceManager.res.mjs";
17
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
21
18
  import * as ReorgDetection from "./ReorgDetection.res.mjs";
19
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
20
+ import * as Stdlib_Promise from "@rescript/runtime/lib/es6/Stdlib_Promise.js";
22
21
  import * as HyperFuelSource from "./sources/HyperFuelSource.res.mjs";
23
- import * as Caml_js_exceptions from "rescript/lib/es6/caml_js_exceptions.js";
22
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
23
+ import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
24
24
  import * as SafeCheckpointTracking from "./SafeCheckpointTracking.res.mjs";
25
25
 
26
- function make(chainConfig, dynamicContracts, startBlock, endBlock, firstEventBlockOpt, progressBlockNumber, config, registrations, targetBufferSize, logger, timestampCaughtUpToHeadOrEndblock, numEventsProcessed, isInReorgThreshold, reorgCheckpoints, maxReorgDepth, knownHeightOpt) {
27
- var firstEventBlock = firstEventBlockOpt !== undefined ? Caml_option.valFromOption(firstEventBlockOpt) : undefined;
28
- var knownHeight = knownHeightOpt !== undefined ? knownHeightOpt : 0;
29
- var eventRouter = EventRouter.empty();
30
- var contracts = [];
31
- var eventConfigs = [];
32
- var notRegisteredEvents = [];
33
- Belt_Array.forEach(chainConfig.contracts, (function (contract) {
34
- var contractName = contract.name;
35
- Belt_Array.forEach(contract.events, (function (eventConfig) {
36
- var hasContractRegister = Belt_Option.isSome(eventConfig.contractRegister);
37
- EventRouter.addOrThrow(eventRouter, eventConfig.id, undefined, contractName, eventConfig.isWildcard, eventConfig.name, ChainMap.Chain.makeUnsafe(chainConfig.id));
38
- var shouldBeIncluded;
39
- if (config.enableRawEvents) {
40
- shouldBeIncluded = true;
41
- } else {
42
- var isRegistered = hasContractRegister || Belt_Option.isSome(eventConfig.handler);
43
- if (!isRegistered) {
44
- notRegisteredEvents.push(eventConfig);
45
- }
46
- shouldBeIncluded = isRegistered;
47
- }
48
- var shouldSkip;
49
- try {
50
- var getEventFiltersOrThrow = eventConfig.getEventFiltersOrThrow;
51
- if (getEventFiltersOrThrow) {
52
- var match = getEventFiltersOrThrow(ChainMap.Chain.makeUnsafe(chainConfig.id));
53
- shouldSkip = match.TAG === "Static" ? match._0.length === 0 : false;
54
- } else {
55
- shouldSkip = false;
56
- }
57
- }
58
- catch (exn){
59
- shouldSkip = false;
60
- }
61
- if (shouldBeIncluded && !shouldSkip) {
62
- eventConfigs.push(eventConfig);
63
- return ;
64
- }
65
-
66
- }));
67
- var startBlock = contract.startBlock;
68
- if (startBlock !== undefined && startBlock < chainConfig.startBlock) {
69
- Js_exn.raiseError("The start block for contract \"" + contractName + "\" is less than the chain start block. This is not supported yet.");
70
- }
71
- Belt_Array.forEach(contract.addresses, (function (address) {
72
- var startBlock = contract.startBlock;
73
- contracts.push({
74
- address: address,
75
- contractName: contract.name,
76
- startBlock: startBlock !== undefined ? startBlock : chainConfig.startBlock,
77
- registrationBlock: undefined
78
- });
79
- }));
80
- }));
81
- Belt_Array.forEach(dynamicContracts, (function (dc) {
82
- contracts.push(dc);
83
- }));
26
+ function configAddresses(chainConfig) {
27
+ let addresses = [];
28
+ chainConfig.contracts.forEach(contract => {
29
+ contract.addresses.forEach(address => {
30
+ addresses.push({
31
+ address: address,
32
+ contractName: contract.name,
33
+ registrationBlock: -1
34
+ });
35
+ });
36
+ });
37
+ return addresses;
38
+ }
39
+
40
+ function make(chainConfig, indexingAddresses, startBlock, endBlock, firstEventBlockOpt, progressBlockNumber, config, registrations, targetBufferSize, logger, timestampCaughtUpToHeadOrEndblock, numEventsProcessed, isInReorgThreshold, reorgCheckpoints, maxReorgDepth, knownHeightOpt) {
41
+ let firstEventBlock = firstEventBlockOpt !== undefined ? Primitive_option.valFromOption(firstEventBlockOpt) : undefined;
42
+ let knownHeight = knownHeightOpt !== undefined ? knownHeightOpt : 0;
43
+ let eventRouter = EventRouter.empty();
44
+ let eventConfigs = [];
45
+ let notRegisteredEvents = [];
46
+ chainConfig.contracts.forEach(contract => {
47
+ let contractName = contract.name;
48
+ contract.events.forEach(eventConfig => {
49
+ let hasContractRegister = Stdlib_Option.isSome(eventConfig.contractRegister);
50
+ EventRouter.addOrThrow(eventRouter, eventConfig.id, undefined, contractName, eventConfig.isWildcard, eventConfig.name, ChainMap.Chain.makeUnsafe(chainConfig.id));
51
+ let shouldBeIncluded;
52
+ if (config.enableRawEvents) {
53
+ shouldBeIncluded = true;
54
+ } else {
55
+ let isRegistered = hasContractRegister || Stdlib_Option.isSome(eventConfig.handler);
56
+ if (!isRegistered) {
57
+ notRegisteredEvents.push(eventConfig);
58
+ }
59
+ shouldBeIncluded = isRegistered;
60
+ }
61
+ let shouldSkip;
62
+ try {
63
+ let getEventFiltersOrThrow = eventConfig.getEventFiltersOrThrow;
64
+ if (getEventFiltersOrThrow) {
65
+ let match = getEventFiltersOrThrow(ChainMap.Chain.makeUnsafe(chainConfig.id));
66
+ shouldSkip = match.TAG === "Static" ? match._0.length === 0 : false;
67
+ } else {
68
+ shouldSkip = false;
69
+ }
70
+ } catch (exn) {
71
+ shouldSkip = false;
72
+ }
73
+ if (shouldBeIncluded && !shouldSkip) {
74
+ eventConfigs.push(eventConfig);
75
+ return;
76
+ }
77
+ });
78
+ let startBlock = contract.startBlock;
79
+ if (startBlock !== undefined && startBlock < chainConfig.startBlock) {
80
+ return Stdlib_JsError.throwWithMessage(`The start block for contract "` + contractName + `" is less than the chain start block. This is not supported yet.`);
81
+ }
82
+ });
84
83
  if (Utils.$$Array.notEmpty(notRegisteredEvents)) {
85
- Logging.childInfo(logger, "The event" + (
86
- notRegisteredEvents.length > 1 ? "s" : ""
87
- ) + " " + Belt_Array.map(notRegisteredEvents, (function (eventConfig) {
88
- return eventConfig.contractName + "." + eventConfig.name;
89
- })).join(", ") + " don't have an event handler and skipped for indexing.");
84
+ Logging.childInfo(logger, `The event` + (
85
+ notRegisteredEvents.length > 1 ? "s" : ""
86
+ ) + ` ` + notRegisteredEvents.map(eventConfig => eventConfig.contractName + `.` + eventConfig.name).join(", ") + ` don't have an event handler and skipped for indexing.`);
90
87
  }
91
- var onBlockConfigs = registrations.onBlockByChainId[String(chainConfig.id)];
88
+ let onBlockConfigs = registrations.onBlockByChainId[chainConfig.id.toString()];
92
89
  if (onBlockConfigs !== undefined) {
93
- Belt_Array.forEach(onBlockConfigs, (function (onBlockConfig) {
94
- if (Belt_Option.getWithDefault(onBlockConfig.startBlock, startBlock) < startBlock) {
95
- Js_exn.raiseError("The start block for onBlock handler \"" + onBlockConfig.name + "\" is less than the chain start block (" + String(startBlock) + "). This is not supported yet.");
96
- }
97
- if (endBlock !== undefined && Belt_Option.getWithDefault(onBlockConfig.endBlock, endBlock) > endBlock) {
98
- return Js_exn.raiseError("The end block for onBlock handler \"" + onBlockConfig.name + "\" is greater than the chain end block (" + String(endBlock) + "). This is not supported yet.");
99
- }
100
-
101
- }));
90
+ onBlockConfigs.forEach(onBlockConfig => {
91
+ if (Stdlib_Option.getOr(onBlockConfig.startBlock, startBlock) < startBlock) {
92
+ Stdlib_JsError.throwWithMessage(`The start block for onBlock handler "` + onBlockConfig.name + `" is less than the chain start block (` + String(startBlock) + `). This is not supported yet.`);
93
+ }
94
+ if (endBlock !== undefined && Stdlib_Option.getOr(onBlockConfig.endBlock, endBlock) > endBlock) {
95
+ return Stdlib_JsError.throwWithMessage(`The end block for onBlock handler "` + onBlockConfig.name + `" is greater than the chain end block (` + String(endBlock) + `). This is not supported yet.`);
96
+ }
97
+ });
102
98
  }
103
- var fetchState = FetchState.make(startBlock, endBlock, eventConfigs, contracts, config.maxAddrInPartition, chainConfig.id, targetBufferSize, knownHeight, progressBlockNumber, onBlockConfigs, Caml.int_max(!config.shouldRollbackOnReorg || isInReorgThreshold ? 0 : chainConfig.maxReorgDepth, chainConfig.blockLag), Caml_option.some(firstEventBlock));
104
- var chainReorgCheckpoints = Belt_Array.keepMapU(reorgCheckpoints, (function (reorgCheckpoint) {
105
- if (reorgCheckpoint.chain_id === chainConfig.id) {
106
- return reorgCheckpoint;
107
- }
108
-
109
- }));
110
- var chain = ChainMap.Chain.makeUnsafe(chainConfig.id);
111
- var lowercaseAddresses = config.lowercaseAddresses;
112
- var sources = chainConfig.sourceConfig;
113
- var sources$1;
99
+ let fetchState = FetchState.make(startBlock, endBlock, eventConfigs, indexingAddresses, config.maxAddrInPartition, chainConfig.id, targetBufferSize, knownHeight, progressBlockNumber, onBlockConfigs, Primitive_int.max(!config.shouldRollbackOnReorg || isInReorgThreshold ? 0 : chainConfig.maxReorgDepth, chainConfig.blockLag), Primitive_option.some(firstEventBlock));
100
+ let chainReorgCheckpoints = Stdlib_Array.filterMap(reorgCheckpoints, reorgCheckpoint => {
101
+ if (reorgCheckpoint.chain_id === chainConfig.id) {
102
+ return reorgCheckpoint;
103
+ }
104
+ });
105
+ let chain = ChainMap.Chain.makeUnsafe(chainConfig.id);
106
+ let lowercaseAddresses = config.lowercaseAddresses;
107
+ let sources = chainConfig.sourceConfig;
108
+ let sources$1;
114
109
  switch (sources.TAG) {
115
110
  case "EvmSourceConfig" :
116
- var evmContracts = Belt_Array.map(chainConfig.contracts, (function (contract) {
117
- return {
118
- name: contract.name,
119
- abi: contract.abi,
120
- events: contract.events
121
- };
122
- }));
123
- var allEventSignatures = Belt_Array.flatMap(chainConfig.contracts, (function (contract) {
124
- return contract.eventSignatures;
125
- }));
126
- var evmRpcs = Belt_Array.map(sources.rpcs, (function (rpc) {
127
- var syncConfig = rpc.syncConfig;
128
- var ws = rpc.ws;
129
- return {
130
- url: rpc.url,
131
- sourceFor: rpc.sourceFor,
132
- syncConfig: syncConfig,
133
- ws: ws
134
- };
135
- }));
136
- sources$1 = EvmChain.makeSources(chain, evmContracts, sources.hypersync, allEventSignatures, evmRpcs, lowercaseAddresses);
137
- break;
111
+ let evmContracts = chainConfig.contracts.map(contract => ({
112
+ name: contract.name,
113
+ abi: contract.abi,
114
+ events: contract.events
115
+ }));
116
+ let allEventSignatures = chainConfig.contracts.flatMap(contract => contract.eventSignatures);
117
+ let evmRpcs = sources.rpcs.map(rpc => {
118
+ let syncConfig = rpc.syncConfig;
119
+ let ws = rpc.ws;
120
+ return {
121
+ url: rpc.url,
122
+ sourceFor: rpc.sourceFor,
123
+ syncConfig: syncConfig,
124
+ ws: ws
125
+ };
126
+ });
127
+ sources$1 = EvmChain.makeSources(chain, evmContracts, sources.hypersync, allEventSignatures, evmRpcs, lowercaseAddresses);
128
+ break;
138
129
  case "FuelSourceConfig" :
139
- sources$1 = [HyperFuelSource.make({
140
- chain: chain,
141
- endpointUrl: sources.hypersync
142
- })];
143
- break;
130
+ sources$1 = [HyperFuelSource.make({
131
+ chain: chain,
132
+ endpointUrl: sources.hypersync
133
+ })];
134
+ break;
144
135
  case "SvmSourceConfig" :
145
- sources$1 = [Svm.makeRPCSource(chain, sources.rpc)];
146
- break;
136
+ sources$1 = [Svm.makeRPCSource(chain, sources.rpc)];
137
+ break;
147
138
  case "CustomSources" :
148
- sources$1 = sources._0;
149
- break;
150
-
139
+ sources$1 = sources._0;
140
+ break;
151
141
  }
152
142
  return {
153
- logger: logger,
154
- fetchState: fetchState,
155
- sourceManager: SourceManager.make(sources$1, Env.maxPartitionConcurrency, Belt_Option.isSome(timestampCaughtUpToHeadOrEndblock), undefined, undefined, undefined, undefined, undefined),
156
- chainConfig: chainConfig,
157
- isProgressAtHead: false,
158
- timestampCaughtUpToHeadOrEndblock: timestampCaughtUpToHeadOrEndblock,
159
- committedProgressBlockNumber: progressBlockNumber,
160
- numEventsProcessed: numEventsProcessed,
161
- reorgDetection: ReorgDetection.make(chainReorgCheckpoints, maxReorgDepth, config.shouldRollbackOnReorg),
162
- safeCheckpointTracking: SafeCheckpointTracking.make(maxReorgDepth, config.shouldRollbackOnReorg, chainReorgCheckpoints)
163
- };
143
+ logger: logger,
144
+ fetchState: fetchState,
145
+ sourceManager: SourceManager.make(sources$1, Env.maxPartitionConcurrency, Stdlib_Option.isSome(timestampCaughtUpToHeadOrEndblock), undefined, undefined, undefined, undefined, undefined, undefined),
146
+ chainConfig: chainConfig,
147
+ isProgressAtHead: false,
148
+ timestampCaughtUpToHeadOrEndblock: timestampCaughtUpToHeadOrEndblock,
149
+ committedProgressBlockNumber: progressBlockNumber,
150
+ numEventsProcessed: numEventsProcessed,
151
+ reorgDetection: ReorgDetection.make(chainReorgCheckpoints, maxReorgDepth, config.shouldRollbackOnReorg),
152
+ safeCheckpointTracking: SafeCheckpointTracking.make(maxReorgDepth, config.shouldRollbackOnReorg, chainReorgCheckpoints)
153
+ };
164
154
  }
165
155
 
166
156
  function makeFromConfig(chainConfig, config, registrations, targetBufferSize, knownHeight) {
167
- var logger = Logging.createChild({
168
- chainId: chainConfig.id
169
- });
170
- return make(chainConfig, [], chainConfig.startBlock, chainConfig.endBlock, undefined, -1, config, registrations, targetBufferSize, logger, undefined, 0, false, [], chainConfig.maxReorgDepth, knownHeight);
157
+ let logger = Logging.createChild({
158
+ chainId: chainConfig.id
159
+ });
160
+ return make(chainConfig, configAddresses(chainConfig), chainConfig.startBlock, chainConfig.endBlock, undefined, -1, config, registrations, targetBufferSize, logger, undefined, 0, false, [], chainConfig.maxReorgDepth, knownHeight);
171
161
  }
172
162
 
173
- async function makeFromDbState(chainConfig, resumedChainState, reorgCheckpoints, isInReorgThreshold, config, registrations, targetBufferSize) {
174
- var chainId = chainConfig.id;
175
- var logger = Logging.createChild({
176
- chainId: chainId
177
- });
163
+ function makeFromDbState(chainConfig, resumedChainState, reorgCheckpoints, isInReorgThreshold, config, registrations, targetBufferSize) {
164
+ let chainId = chainConfig.id;
165
+ let logger = Logging.createChild({
166
+ chainId: chainId
167
+ });
178
168
  Prometheus.ProgressEventsCount.set(resumedChainState.numEventsProcessed, chainId);
179
- var progressBlockNumber = resumedChainState.progressBlockNumber >= 0 ? resumedChainState.progressBlockNumber : resumedChainState.startBlock - 1 | 0;
180
- return make(chainConfig, resumedChainState.dynamicContracts, resumedChainState.startBlock, resumedChainState.endBlock, Caml_option.some(resumedChainState.firstEventBlockNumber), progressBlockNumber, config, registrations, targetBufferSize, logger, Env.updateSyncTimeOnRestart ? undefined : resumedChainState.timestampCaughtUpToHeadOrEndblock, resumedChainState.numEventsProcessed, isInReorgThreshold, reorgCheckpoints, resumedChainState.maxReorgDepth, resumedChainState.sourceBlockNumber);
181
- }
182
-
183
- function getContractStartBlock(config, chain, contractName) {
184
- var chainConfig = ChainMap.get(config.chainMap, chain);
185
- return Belt_Option.flatMap(Caml_option.undefined_to_opt(chainConfig.contracts.find(function (contract) {
186
- return contract.name === contractName;
187
- })), (function (contract) {
188
- return contract.startBlock;
189
- }));
169
+ let progressBlockNumber = resumedChainState.progressBlockNumber >= 0 ? resumedChainState.progressBlockNumber : resumedChainState.startBlock - 1 | 0;
170
+ return make(chainConfig, resumedChainState.indexingAddresses, resumedChainState.startBlock, resumedChainState.endBlock, Primitive_option.some(resumedChainState.firstEventBlockNumber), progressBlockNumber, config, registrations, targetBufferSize, logger, Env.updateSyncTimeOnRestart ? undefined : resumedChainState.timestampCaughtUpToHeadOrEndblock, resumedChainState.numEventsProcessed, isInReorgThreshold, reorgCheckpoints, resumedChainState.maxReorgDepth, resumedChainState.sourceBlockNumber);
190
171
  }
191
172
 
192
- async function runContractRegistersOrThrow(itemsWithContractRegister, chain, config) {
193
- var itemsWithDcs = [];
194
- var onRegister = function (item, contractAddress, contractName) {
195
- var blockNumber = item.blockNumber;
196
- var configuredStartBlock = getContractStartBlock(config, chain, contractName);
197
- var contractStartBlock = configuredStartBlock !== undefined ? configuredStartBlock : blockNumber;
198
- var dc_registrationBlock = blockNumber;
199
- var dc = {
173
+ async function runContractRegistersOrThrow(itemsWithContractRegister, config) {
174
+ let itemsWithDcs = [];
175
+ let onRegister = (item, contractAddress, contractName) => {
176
+ let dc_registrationBlock = item.blockNumber;
177
+ let dc = {
200
178
  address: contractAddress,
201
179
  contractName: contractName,
202
- startBlock: contractStartBlock,
203
180
  registrationBlock: dc_registrationBlock
204
181
  };
205
- var dcs = item.dcs;
182
+ let dcs = item.dcs;
206
183
  if (dcs !== undefined) {
207
184
  dcs.push(dc);
208
185
  } else {
@@ -210,39 +187,34 @@ async function runContractRegistersOrThrow(itemsWithContractRegister, chain, con
210
187
  itemsWithDcs.push(item);
211
188
  }
212
189
  };
213
- var promises = [];
214
- for(var idx = 0 ,idx_finish = itemsWithContractRegister.length; idx < idx_finish; ++idx){
215
- var item = itemsWithContractRegister[idx];
216
- var match = item.eventConfig;
217
- var contractRegister = match.contractRegister;
218
- var contractRegister$1 = contractRegister !== undefined ? contractRegister : Js_exn.raiseError("Contract register is not set for event " + match.name);
219
- var errorMessage = "Event contractRegister failed, please fix the error to keep the indexer running smoothly";
190
+ let promises = [];
191
+ for (let idx = 0, idx_finish = itemsWithContractRegister.length; idx < idx_finish; ++idx) {
192
+ let item = itemsWithContractRegister[idx];
193
+ let match = item.eventConfig;
194
+ let contractRegister = match.contractRegister;
195
+ let contractRegister$1 = contractRegister !== undefined ? contractRegister : Stdlib_JsError.throwWithMessage("Contract register is not set for event " + match.name);
196
+ let errorMessage = "Event contractRegister failed, please fix the error to keep the indexer running smoothly";
220
197
  try {
221
- var params = {
198
+ let params = {
222
199
  item: item,
223
200
  onRegister: onRegister,
224
201
  config: config,
225
202
  isResolved: false
226
203
  };
227
- var result = contractRegister$1(UserContext.getContractRegisterArgs(params));
228
- if ($$Promise.isCatchable(result)) {
229
- promises.push($$Promise.$$catch(result.then((function(params){
230
- return function (r) {
231
- params.isResolved = true;
232
-
233
- }
234
- }(params))), (function(item,params){
235
- return function (exn) {
236
- params.isResolved = true;
237
- return ErrorHandling.mkLogAndRaise(Logging.getItemLogger(item), errorMessage, exn);
238
- }
239
- }(item,params))));
204
+ let result = contractRegister$1(UserContext.getContractRegisterArgs(params));
205
+ if (Utils.$$Promise.isCatchable(result)) {
206
+ promises.push(Stdlib_Promise.$$catch(result.then(r => {
207
+ params.isResolved = true;
208
+
209
+ }), exn => {
210
+ params.isResolved = true;
211
+ return ErrorHandling.mkLogAndRaise(Logging.getItemLogger(item), errorMessage, exn);
212
+ }));
240
213
  } else {
241
214
  params.isResolved = true;
242
215
  }
243
- }
244
- catch (raw_exn){
245
- var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
216
+ } catch (raw_exn) {
217
+ let exn = Primitive_exceptions.internalToException(raw_exn);
246
218
  ErrorHandling.mkLogAndRaise(Logging.getItemLogger(item), errorMessage, exn);
247
219
  }
248
220
  }
@@ -253,23 +225,23 @@ async function runContractRegistersOrThrow(itemsWithContractRegister, chain, con
253
225
  }
254
226
 
255
227
  function handleQueryResult(chainFetcher, query, newItems, newItemsWithDcs, latestFetchedBlock, knownHeight) {
256
- var fs = newItemsWithDcs.length !== 0 ? FetchState.registerDynamicContracts(chainFetcher.fetchState, newItemsWithDcs) : chainFetcher.fetchState;
228
+ let fs = newItemsWithDcs.length !== 0 ? FetchState.registerDynamicContracts(chainFetcher.fetchState, newItemsWithDcs) : chainFetcher.fetchState;
257
229
  return {
258
- logger: chainFetcher.logger,
259
- fetchState: FetchState.updateKnownHeight(FetchState.handleQueryResult(fs, query, latestFetchedBlock, newItems), knownHeight),
260
- sourceManager: chainFetcher.sourceManager,
261
- chainConfig: chainFetcher.chainConfig,
262
- isProgressAtHead: chainFetcher.isProgressAtHead,
263
- timestampCaughtUpToHeadOrEndblock: chainFetcher.timestampCaughtUpToHeadOrEndblock,
264
- committedProgressBlockNumber: chainFetcher.committedProgressBlockNumber,
265
- numEventsProcessed: chainFetcher.numEventsProcessed,
266
- reorgDetection: chainFetcher.reorgDetection,
267
- safeCheckpointTracking: chainFetcher.safeCheckpointTracking
268
- };
230
+ logger: chainFetcher.logger,
231
+ fetchState: FetchState.updateKnownHeight(FetchState.handleQueryResult(fs, query, latestFetchedBlock, newItems), knownHeight),
232
+ sourceManager: chainFetcher.sourceManager,
233
+ chainConfig: chainFetcher.chainConfig,
234
+ isProgressAtHead: chainFetcher.isProgressAtHead,
235
+ timestampCaughtUpToHeadOrEndblock: chainFetcher.timestampCaughtUpToHeadOrEndblock,
236
+ committedProgressBlockNumber: chainFetcher.committedProgressBlockNumber,
237
+ numEventsProcessed: chainFetcher.numEventsProcessed,
238
+ reorgDetection: chainFetcher.reorgDetection,
239
+ safeCheckpointTracking: chainFetcher.safeCheckpointTracking
240
+ };
269
241
  }
270
242
 
271
243
  function hasProcessedToEndblock(self) {
272
- var endBlock = self.fetchState.endBlock;
244
+ let endBlock = self.fetchState.endBlock;
273
245
  if (endBlock !== undefined) {
274
246
  return self.committedProgressBlockNumber >= endBlock;
275
247
  } else {
@@ -282,7 +254,7 @@ function hasNoMoreEventsToProcess(self) {
282
254
  }
283
255
 
284
256
  function getHighestBlockBelowThreshold(cf) {
285
- var highestBlockBelowThreshold = cf.fetchState.knownHeight - cf.chainConfig.maxReorgDepth | 0;
257
+ let highestBlockBelowThreshold = cf.fetchState.knownHeight - cf.chainConfig.maxReorgDepth | 0;
286
258
  if (highestBlockBelowThreshold < 0) {
287
259
  return 0;
288
260
  } else {
@@ -291,22 +263,20 @@ function getHighestBlockBelowThreshold(cf) {
291
263
  }
292
264
 
293
265
  async function getLastKnownValidBlock(chainFetcher, reorgBlockNumber, getBlockHashesOpt) {
294
- var getBlockHashes = getBlockHashesOpt !== undefined ? getBlockHashesOpt : SourceManager.getActiveSource(chainFetcher.sourceManager).getBlockHashes;
295
- var scannedBlockNumbers = ReorgDetection.getThresholdBlockNumbersBelowBlock(chainFetcher.reorgDetection, reorgBlockNumber, chainFetcher.fetchState.knownHeight);
296
- var getBlockHashes$1 = function (blockNumbers) {
297
- return getBlockHashes(blockNumbers, chainFetcher.logger).then(function (res) {
298
- if (res.TAG === "Ok") {
299
- return res._0;
300
- } else {
301
- return ErrorHandling.mkLogAndRaise(undefined, "Failed to fetch blockHashes for given blockNumbers during rollback", res._0);
302
- }
303
- });
304
- };
266
+ let getBlockHashes = getBlockHashesOpt !== undefined ? getBlockHashesOpt : SourceManager.getActiveSource(chainFetcher.sourceManager).getBlockHashes;
267
+ let scannedBlockNumbers = ReorgDetection.getThresholdBlockNumbersBelowBlock(chainFetcher.reorgDetection, reorgBlockNumber, chainFetcher.fetchState.knownHeight);
268
+ let getBlockHashes$1 = blockNumbers => getBlockHashes(blockNumbers, chainFetcher.logger).then(res => {
269
+ if (res.TAG === "Ok") {
270
+ return res._0;
271
+ } else {
272
+ return ErrorHandling.mkLogAndRaise(undefined, "Failed to fetch blockHashes for given blockNumbers during rollback", res._0);
273
+ }
274
+ });
305
275
  if (scannedBlockNumbers.length === 0) {
306
276
  return getHighestBlockBelowThreshold(chainFetcher);
307
277
  }
308
- var blockNumbersAndHashes = await getBlockHashes$1(scannedBlockNumbers);
309
- var blockNumber = ReorgDetection.getLatestValidScannedBlock(chainFetcher.reorgDetection, blockNumbersAndHashes);
278
+ let blockNumbersAndHashes = await getBlockHashes$1(scannedBlockNumbers);
279
+ let blockNumber = ReorgDetection.getLatestValidScannedBlock(chainFetcher.reorgDetection, blockNumbersAndHashes);
310
280
  if (blockNumber !== undefined) {
311
281
  return blockNumber;
312
282
  } else {
@@ -323,17 +293,17 @@ function isReady(chainFetcher) {
323
293
  }
324
294
 
325
295
  export {
326
- make ,
327
- makeFromConfig ,
328
- makeFromDbState ,
329
- getContractStartBlock ,
330
- runContractRegistersOrThrow ,
331
- handleQueryResult ,
332
- hasProcessedToEndblock ,
333
- hasNoMoreEventsToProcess ,
334
- getHighestBlockBelowThreshold ,
335
- getLastKnownValidBlock ,
336
- isActivelyIndexing ,
337
- isReady ,
296
+ configAddresses,
297
+ make,
298
+ makeFromConfig,
299
+ makeFromDbState,
300
+ runContractRegistersOrThrow,
301
+ handleQueryResult,
302
+ hasProcessedToEndblock,
303
+ hasNoMoreEventsToProcess,
304
+ getHighestBlockBelowThreshold,
305
+ getLastKnownValidBlock,
306
+ isActivelyIndexing,
307
+ isReady,
338
308
  }
339
309
  /* Env Not a pure module */
@@ -1,5 +1,3 @@
1
- open Belt
2
-
3
1
  type t = {
4
2
  committedCheckpointId: bigint,
5
3
  chainFetchers: ChainMap.t<ChainFetcher.t>,
@@ -31,7 +29,7 @@ let calculateTargetBufferSize = (~activeChainsCount) => {
31
29
  }
32
30
  }
33
31
 
34
- let makeFromDbState = async (
32
+ let makeFromDbState = (
35
33
  ~initialState: Persistence.initialState,
36
34
  ~config: Config.t,
37
35
  ~registrations,
@@ -60,14 +58,13 @@ let makeFromDbState = async (
60
58
  })
61
59
 
62
60
  let chainFetchersArr =
63
- await initialState.chains
64
- ->Array.map(async (resumedChainState: Persistence.initialChainState) => {
61
+ initialState.chains->Array.map((resumedChainState: Persistence.initialChainState) => {
65
62
  let chain = Config.getChain(config, ~chainId=resumedChainState.id)
66
63
  let chainConfig = config.chainMap->ChainMap.get(chain)
67
64
 
68
65
  (
69
66
  chain,
70
- await chainConfig->ChainFetcher.makeFromDbState(
67
+ chainConfig->ChainFetcher.makeFromDbState(
71
68
  ~resumedChainState,
72
69
  ~reorgCheckpoints=initialState.reorgCheckpoints,
73
70
  ~isInReorgThreshold,
@@ -77,7 +74,6 @@ let makeFromDbState = async (
77
74
  ),
78
75
  )
79
76
  })
80
- ->Promise.all
81
77
 
82
78
  let chainFetchers = ChainMap.fromArrayUnsafe(chainFetchersArr)
83
79
 
@@ -135,7 +131,7 @@ let createBatch = (chainManager: t, ~batchSizeTarget: int, ~isRollback: bool): B
135
131
  // Since for rollback we have a diff checkpoint id.
136
132
  // This is needed to currectly overwrite old state
137
133
  // in an append-only ClickHouse insert.
138
- isRollback ? 1n : 0n
134
+ isRollback ? 1n : 0n,
139
135
  ),
140
136
  ~chainsBeforeBatch=chainManager.chainFetchers->ChainMap.map((cf): Batch.chainBeforeBatch => {
141
137
  fetchState: cf.fetchState,
@@ -151,14 +147,10 @@ let createBatch = (chainManager: t, ~batchSizeTarget: int, ~isRollback: bool): B
151
147
  }
152
148
 
153
149
  let isProgressAtHead = chainManager =>
154
- chainManager.chainFetchers
155
- ->ChainMap.values
156
- ->Js.Array2.every(cf => cf.isProgressAtHead)
150
+ chainManager.chainFetchers->ChainMap.values->Array.every(cf => cf.isProgressAtHead)
157
151
 
158
152
  let isActivelyIndexing = chainManager =>
159
- chainManager.chainFetchers
160
- ->ChainMap.values
161
- ->Js.Array2.every(ChainFetcher.isActivelyIndexing)
153
+ chainManager.chainFetchers->ChainMap.values->Array.every(ChainFetcher.isActivelyIndexing)
162
154
 
163
155
  let getSafeCheckpointId = (chainManager: t) => {
164
156
  let chainFetchers = chainManager.chainFetchers->ChainMap.values