envio 3.0.0-alpha.21 → 3.0.0-alpha.23

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 (220) hide show
  1. package/README.md +3 -3
  2. package/bin.mjs +2 -48
  3. package/evm.schema.json +67 -0
  4. package/fuel.schema.json +67 -0
  5. package/index.d.ts +822 -38
  6. package/index.js +5 -3
  7. package/package.json +10 -8
  8. package/rescript.json +5 -9
  9. package/src/Address.res +4 -5
  10. package/src/Address.res.mjs +9 -12
  11. package/src/Api.res +15 -0
  12. package/src/Api.res.mjs +20 -0
  13. package/src/Batch.res +32 -34
  14. package/src/Batch.res.mjs +172 -187
  15. package/src/Bin.res +89 -0
  16. package/src/Bin.res.mjs +97 -0
  17. package/src/ChainFetcher.res +33 -57
  18. package/src/ChainFetcher.res.mjs +197 -227
  19. package/src/ChainManager.res +6 -14
  20. package/src/ChainManager.res.mjs +74 -85
  21. package/src/ChainMap.res +14 -16
  22. package/src/ChainMap.res.mjs +38 -38
  23. package/src/Config.res +193 -135
  24. package/src/Config.res.mjs +566 -592
  25. package/src/Core.res +182 -0
  26. package/src/Core.res.mjs +207 -0
  27. package/src/Ecosystem.res +25 -4
  28. package/src/Ecosystem.res.mjs +12 -13
  29. package/src/Env.res +20 -13
  30. package/src/Env.res.mjs +124 -113
  31. package/src/EnvSafe.res +269 -0
  32. package/src/EnvSafe.res.mjs +296 -0
  33. package/src/EnvSafe.resi +18 -0
  34. package/src/Envio.res +37 -26
  35. package/src/Envio.res.mjs +59 -60
  36. package/src/ErrorHandling.res +2 -2
  37. package/src/ErrorHandling.res.mjs +15 -15
  38. package/src/EventConfigBuilder.res +219 -81
  39. package/src/EventConfigBuilder.res.mjs +259 -202
  40. package/src/EventProcessing.res +27 -38
  41. package/src/EventProcessing.res.mjs +165 -183
  42. package/src/EventUtils.res +11 -11
  43. package/src/EventUtils.res.mjs +21 -22
  44. package/src/EvmTypes.res +0 -1
  45. package/src/EvmTypes.res.mjs +5 -5
  46. package/src/FetchState.res +360 -256
  47. package/src/FetchState.res.mjs +958 -914
  48. package/src/GlobalState.res +365 -351
  49. package/src/GlobalState.res.mjs +958 -992
  50. package/src/GlobalStateManager.res +1 -2
  51. package/src/GlobalStateManager.res.mjs +36 -44
  52. package/src/HandlerLoader.res +107 -23
  53. package/src/HandlerLoader.res.mjs +128 -38
  54. package/src/HandlerRegister.res +127 -103
  55. package/src/HandlerRegister.res.mjs +164 -164
  56. package/src/HandlerRegister.resi +12 -4
  57. package/src/Hasura.res +35 -22
  58. package/src/Hasura.res.mjs +158 -167
  59. package/src/InMemoryStore.res +20 -27
  60. package/src/InMemoryStore.res.mjs +64 -80
  61. package/src/InMemoryTable.res +34 -39
  62. package/src/InMemoryTable.res.mjs +165 -170
  63. package/src/Internal.res +52 -33
  64. package/src/Internal.res.mjs +84 -81
  65. package/src/LazyLoader.res.mjs +55 -61
  66. package/src/LoadLayer.res +77 -78
  67. package/src/LoadLayer.res.mjs +160 -189
  68. package/src/LoadManager.res +16 -21
  69. package/src/LoadManager.res.mjs +79 -84
  70. package/src/LogSelection.res +236 -68
  71. package/src/LogSelection.res.mjs +211 -141
  72. package/src/Logging.res +13 -9
  73. package/src/Logging.res.mjs +130 -143
  74. package/src/Main.res +430 -51
  75. package/src/Main.res.mjs +530 -271
  76. package/src/Persistence.res +80 -84
  77. package/src/Persistence.res.mjs +131 -132
  78. package/src/PgStorage.res +294 -167
  79. package/src/PgStorage.res.mjs +799 -817
  80. package/src/Prometheus.res +50 -58
  81. package/src/Prometheus.res.mjs +345 -373
  82. package/src/ReorgDetection.res +22 -24
  83. package/src/ReorgDetection.res.mjs +100 -106
  84. package/src/SafeCheckpointTracking.res +7 -7
  85. package/src/SafeCheckpointTracking.res.mjs +40 -43
  86. package/src/SimulateItems.res +41 -49
  87. package/src/SimulateItems.res.mjs +257 -272
  88. package/src/Sink.res +2 -2
  89. package/src/Sink.res.mjs +22 -26
  90. package/src/TableIndices.res +1 -2
  91. package/src/TableIndices.res.mjs +42 -48
  92. package/src/TestIndexer.res +196 -189
  93. package/src/TestIndexer.res.mjs +536 -536
  94. package/src/TestIndexerProxyStorage.res +16 -16
  95. package/src/TestIndexerProxyStorage.res.mjs +99 -122
  96. package/src/TestIndexerWorker.res +4 -0
  97. package/src/TestIndexerWorker.res.mjs +7 -0
  98. package/src/Throttler.res +3 -3
  99. package/src/Throttler.res.mjs +23 -24
  100. package/src/Time.res +1 -1
  101. package/src/Time.res.mjs +18 -21
  102. package/src/TopicFilter.res +3 -3
  103. package/src/TopicFilter.res.mjs +29 -30
  104. package/src/UserContext.res +93 -54
  105. package/src/UserContext.res.mjs +197 -182
  106. package/src/Utils.res +141 -86
  107. package/src/Utils.res.mjs +334 -295
  108. package/src/bindings/BigDecimal.res +0 -2
  109. package/src/bindings/BigDecimal.res.mjs +19 -23
  110. package/src/bindings/ClickHouse.res +28 -27
  111. package/src/bindings/ClickHouse.res.mjs +243 -240
  112. package/src/bindings/DateFns.res +11 -11
  113. package/src/bindings/DateFns.res.mjs +7 -7
  114. package/src/bindings/EventSource.res.mjs +2 -2
  115. package/src/bindings/Express.res +2 -5
  116. package/src/bindings/Hrtime.res +2 -2
  117. package/src/bindings/Hrtime.res.mjs +30 -32
  118. package/src/bindings/Lodash.res.mjs +1 -1
  119. package/src/bindings/NodeJs.res +14 -9
  120. package/src/bindings/NodeJs.res.mjs +20 -20
  121. package/src/bindings/Pino.res +8 -10
  122. package/src/bindings/Pino.res.mjs +40 -43
  123. package/src/bindings/Postgres.res +7 -5
  124. package/src/bindings/Postgres.res.mjs +9 -9
  125. package/src/bindings/PromClient.res +17 -2
  126. package/src/bindings/PromClient.res.mjs +30 -7
  127. package/src/bindings/SDSL.res.mjs +2 -2
  128. package/src/bindings/Viem.res +4 -4
  129. package/src/bindings/Viem.res.mjs +20 -22
  130. package/src/bindings/Vitest.res +1 -1
  131. package/src/bindings/Vitest.res.mjs +2 -2
  132. package/src/bindings/WebSocket.res +1 -1
  133. package/src/db/EntityHistory.res +9 -3
  134. package/src/db/EntityHistory.res.mjs +84 -59
  135. package/src/db/InternalTable.res +62 -60
  136. package/src/db/InternalTable.res.mjs +271 -203
  137. package/src/db/Schema.res +1 -2
  138. package/src/db/Schema.res.mjs +28 -32
  139. package/src/db/Table.res +28 -27
  140. package/src/db/Table.res.mjs +276 -292
  141. package/src/sources/EventRouter.res +21 -16
  142. package/src/sources/EventRouter.res.mjs +55 -57
  143. package/src/sources/Evm.res +17 -1
  144. package/src/sources/Evm.res.mjs +16 -8
  145. package/src/sources/EvmChain.res +15 -17
  146. package/src/sources/EvmChain.res.mjs +40 -42
  147. package/src/sources/Fuel.res +14 -1
  148. package/src/sources/Fuel.res.mjs +16 -8
  149. package/src/sources/FuelSDK.res +1 -1
  150. package/src/sources/FuelSDK.res.mjs +6 -8
  151. package/src/sources/HyperFuel.res +8 -10
  152. package/src/sources/HyperFuel.res.mjs +113 -123
  153. package/src/sources/HyperFuelClient.res.mjs +6 -7
  154. package/src/sources/HyperFuelSource.res +19 -20
  155. package/src/sources/HyperFuelSource.res.mjs +339 -356
  156. package/src/sources/HyperSync.res +11 -13
  157. package/src/sources/HyperSync.res.mjs +206 -220
  158. package/src/sources/HyperSyncClient.res +5 -7
  159. package/src/sources/HyperSyncClient.res.mjs +70 -75
  160. package/src/sources/HyperSyncHeightStream.res +8 -9
  161. package/src/sources/HyperSyncHeightStream.res.mjs +78 -86
  162. package/src/sources/HyperSyncJsonApi.res +18 -15
  163. package/src/sources/HyperSyncJsonApi.res.mjs +201 -231
  164. package/src/sources/HyperSyncSource.res +17 -21
  165. package/src/sources/HyperSyncSource.res.mjs +268 -290
  166. package/src/sources/Rpc.res +5 -5
  167. package/src/sources/Rpc.res.mjs +168 -192
  168. package/src/sources/RpcSource.res +166 -167
  169. package/src/sources/RpcSource.res.mjs +972 -1046
  170. package/src/sources/RpcWebSocketHeightStream.res +10 -11
  171. package/src/sources/RpcWebSocketHeightStream.res.mjs +131 -145
  172. package/src/sources/SimulateSource.res +1 -1
  173. package/src/sources/SimulateSource.res.mjs +35 -38
  174. package/src/sources/Source.res +1 -1
  175. package/src/sources/Source.res.mjs +3 -3
  176. package/src/sources/SourceManager.res +39 -20
  177. package/src/sources/SourceManager.res.mjs +340 -371
  178. package/src/sources/SourceManager.resi +2 -1
  179. package/src/sources/Svm.res +12 -5
  180. package/src/sources/Svm.res.mjs +44 -41
  181. package/src/tui/Tui.res +23 -12
  182. package/src/tui/Tui.res.mjs +292 -290
  183. package/src/tui/bindings/Ink.res +2 -4
  184. package/src/tui/bindings/Ink.res.mjs +35 -41
  185. package/src/tui/components/BufferedProgressBar.res +7 -7
  186. package/src/tui/components/BufferedProgressBar.res.mjs +46 -46
  187. package/src/tui/components/CustomHooks.res +1 -2
  188. package/src/tui/components/CustomHooks.res.mjs +102 -122
  189. package/src/tui/components/Messages.res +1 -2
  190. package/src/tui/components/Messages.res.mjs +38 -42
  191. package/src/tui/components/SyncETA.res +10 -11
  192. package/src/tui/components/SyncETA.res.mjs +178 -196
  193. package/src/tui/components/TuiData.res +1 -1
  194. package/src/tui/components/TuiData.res.mjs +7 -6
  195. package/src/vendored/Rest.res +52 -66
  196. package/src/vendored/Rest.res.mjs +324 -364
  197. package/svm.schema.json +67 -0
  198. package/src/Address.gen.ts +0 -8
  199. package/src/Config.gen.ts +0 -19
  200. package/src/Envio.gen.ts +0 -55
  201. package/src/EvmTypes.gen.ts +0 -6
  202. package/src/InMemoryStore.gen.ts +0 -6
  203. package/src/Internal.gen.ts +0 -64
  204. package/src/PgStorage.gen.ts +0 -10
  205. package/src/PgStorage.res.d.mts +0 -5
  206. package/src/Types.ts +0 -56
  207. package/src/bindings/BigDecimal.gen.ts +0 -14
  208. package/src/bindings/BigDecimal.res.d.mts +0 -5
  209. package/src/bindings/BigInt.gen.ts +0 -10
  210. package/src/bindings/BigInt.res +0 -70
  211. package/src/bindings/BigInt.res.d.mts +0 -5
  212. package/src/bindings/BigInt.res.mjs +0 -154
  213. package/src/bindings/Ethers.res.d.mts +0 -5
  214. package/src/bindings/Pino.gen.ts +0 -17
  215. package/src/bindings/Postgres.gen.ts +0 -8
  216. package/src/bindings/Postgres.res.d.mts +0 -5
  217. package/src/bindings/Promise.res +0 -67
  218. package/src/bindings/Promise.res.mjs +0 -26
  219. package/src/db/InternalTable.gen.ts +0 -36
  220. package/src/sources/HyperSyncClient.gen.ts +0 -19
@@ -1,40 +1,40 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as Caml from "rescript/lib/es6/caml.js";
4
3
  import * as Utils from "./Utils.res.mjs";
5
- import * as Js_exn from "rescript/lib/es6/js_exn.js";
6
- import * as Js_dict from "rescript/lib/es6/js_dict.js";
7
- import * as Js_math from "rescript/lib/es6/js_math.js";
4
+ import * as Js_math from "@rescript/runtime/lib/es6/Js_math.js";
8
5
  import * as Logging from "./Logging.res.mjs";
9
- import * as Belt_Int from "rescript/lib/es6/belt_Int.js";
10
- import * as Belt_Array from "rescript/lib/es6/belt_Array.js";
11
- import * as Caml_int32 from "rescript/lib/es6/caml_int32.js";
6
+ import * as Belt_Array from "@rescript/runtime/lib/es6/Belt_Array.js";
12
7
  import * as Prometheus from "./Prometheus.res.mjs";
13
- import * as Belt_Option from "rescript/lib/es6/belt_Option.js";
14
- import * as Caml_option from "rescript/lib/es6/caml_option.js";
8
+ import * as Stdlib_Int from "@rescript/runtime/lib/es6/Stdlib_Int.js";
9
+ import * as Primitive_int from "@rescript/runtime/lib/es6/Primitive_int.js";
10
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
11
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
12
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
13
+
14
+ function deriveEffectiveStartBlock(registrationBlock, contractStartBlock) {
15
+ return Primitive_int.max(Primitive_int.max(registrationBlock, 0), Stdlib_Option.getOr(contractStartBlock, 0));
16
+ }
15
17
 
16
18
  function getMinHistoryRange(p) {
17
- var match = p.prevQueryRange;
18
- var match$1 = p.prevPrevQueryRange;
19
+ let match = p.prevQueryRange;
20
+ let match$1 = p.prevPrevQueryRange;
19
21
  if (match !== 0 && match$1 !== 0) {
20
22
  return match < match$1 ? match : match$1;
21
23
  }
22
-
23
24
  }
24
25
 
25
26
  function getMinQueryRange(partitions) {
26
- var min = 0;
27
- for(var i = 0 ,i_finish = partitions.length; i < i_finish; ++i){
28
- var p = partitions[i];
29
- var a = p.prevQueryRange;
30
- var b = p.prevPrevQueryRange;
27
+ let min = 0;
28
+ for (let i = 0, i_finish = partitions.length; i < i_finish; ++i) {
29
+ let p = partitions[i];
30
+ let a = p.prevQueryRange;
31
+ let b = p.prevPrevQueryRange;
31
32
  if (a > 0 && (min === 0 || a < min)) {
32
33
  min = a;
33
34
  }
34
35
  if (b > 0 && (min === 0 || b < min)) {
35
36
  min = b;
36
37
  }
37
-
38
38
  }
39
39
  return min;
40
40
  }
@@ -44,52 +44,52 @@ function count(optimizedPartitions) {
44
44
  }
45
45
 
46
46
  function getOrThrow(optimizedPartitions, partitionId) {
47
- var p = Js_dict.get(optimizedPartitions.entities, partitionId);
47
+ let p = optimizedPartitions.entities[partitionId];
48
48
  if (p !== undefined) {
49
49
  return p;
50
50
  } else {
51
- return Js_exn.raiseError("Unexpected case: Couldn't find partition " + partitionId);
51
+ return Stdlib_JsError.throwWithMessage(`Unexpected case: Couldn't find partition ` + partitionId);
52
52
  }
53
53
  }
54
54
 
55
55
  function mergePartitionsAtBlock(p1, p2, potentialMergeBlock, contractName, maxAddrInPartition, nextPartitionIndexRef) {
56
- var combinedAddresses = p1.addressesByContractName[contractName].concat(p2.addressesByContractName[contractName]);
57
- var p1Below = p1.latestFetchedBlock.blockNumber < potentialMergeBlock;
58
- var p2Below = p2.latestFetchedBlock.blockNumber < potentialMergeBlock;
59
- var completed = [];
60
- var continuingBase;
56
+ let combinedAddresses = p1.addressesByContractName[contractName].concat(p2.addressesByContractName[contractName]);
57
+ let p1Below = p1.latestFetchedBlock.blockNumber < potentialMergeBlock;
58
+ let p2Below = p2.latestFetchedBlock.blockNumber < potentialMergeBlock;
59
+ let completed = [];
60
+ let continuingBase;
61
61
  if (p1Below) {
62
- completed.push({
63
- id: p1.id,
64
- latestFetchedBlock: p1.latestFetchedBlock,
65
- selection: p1.selection,
66
- addressesByContractName: p1.addressesByContractName,
67
- mergeBlock: potentialMergeBlock,
68
- dynamicContract: p1.dynamicContract,
69
- mutPendingQueries: p1.mutPendingQueries,
70
- prevQueryRange: p1.prevQueryRange,
71
- prevPrevQueryRange: p1.prevPrevQueryRange,
72
- latestBlockRangeUpdateBlock: p1.latestBlockRangeUpdateBlock
73
- });
74
62
  if (p2Below) {
75
63
  completed.push({
76
- id: p2.id,
77
- latestFetchedBlock: p2.latestFetchedBlock,
78
- selection: p2.selection,
79
- addressesByContractName: p2.addressesByContractName,
80
- mergeBlock: potentialMergeBlock,
81
- dynamicContract: p2.dynamicContract,
82
- mutPendingQueries: p2.mutPendingQueries,
83
- prevQueryRange: p2.prevQueryRange,
84
- prevPrevQueryRange: p2.prevPrevQueryRange,
85
- latestBlockRangeUpdateBlock: p2.latestBlockRangeUpdateBlock
86
- });
87
- var newId = nextPartitionIndexRef.contents.toString();
64
+ id: p1.id,
65
+ latestFetchedBlock: p1.latestFetchedBlock,
66
+ selection: p1.selection,
67
+ addressesByContractName: p1.addressesByContractName,
68
+ mergeBlock: potentialMergeBlock,
69
+ dynamicContract: p1.dynamicContract,
70
+ mutPendingQueries: p1.mutPendingQueries,
71
+ prevQueryRange: p1.prevQueryRange,
72
+ prevPrevQueryRange: p1.prevPrevQueryRange,
73
+ latestBlockRangeUpdateBlock: p1.latestBlockRangeUpdateBlock
74
+ });
75
+ completed.push({
76
+ id: p2.id,
77
+ latestFetchedBlock: p2.latestFetchedBlock,
78
+ selection: p2.selection,
79
+ addressesByContractName: p2.addressesByContractName,
80
+ mergeBlock: potentialMergeBlock,
81
+ dynamicContract: p2.dynamicContract,
82
+ mutPendingQueries: p2.mutPendingQueries,
83
+ prevQueryRange: p2.prevQueryRange,
84
+ prevPrevQueryRange: p2.prevPrevQueryRange,
85
+ latestBlockRangeUpdateBlock: p2.latestBlockRangeUpdateBlock
86
+ });
87
+ let newId = nextPartitionIndexRef.contents.toString();
88
88
  nextPartitionIndexRef.contents = nextPartitionIndexRef.contents + 1 | 0;
89
- var minRange = getMinQueryRange([
90
- p1,
91
- p2
92
- ]);
89
+ let minRange = getMinQueryRange([
90
+ p1,
91
+ p2
92
+ ]);
93
93
  continuingBase = {
94
94
  id: newId,
95
95
  latestFetchedBlock: {
@@ -106,106 +106,119 @@ function mergePartitionsAtBlock(p1, p2, potentialMergeBlock, contractName, maxAd
106
106
  latestBlockRangeUpdateBlock: 0
107
107
  };
108
108
  } else {
109
+ completed.push({
110
+ id: p1.id,
111
+ latestFetchedBlock: p1.latestFetchedBlock,
112
+ selection: p1.selection,
113
+ addressesByContractName: p1.addressesByContractName,
114
+ mergeBlock: potentialMergeBlock,
115
+ dynamicContract: p1.dynamicContract,
116
+ mutPendingQueries: p1.mutPendingQueries,
117
+ prevQueryRange: p1.prevQueryRange,
118
+ prevPrevQueryRange: p1.prevPrevQueryRange,
119
+ latestBlockRangeUpdateBlock: p1.latestBlockRangeUpdateBlock
120
+ });
109
121
  continuingBase = p2;
110
122
  }
111
123
  } else if (p2Below) {
112
124
  completed.push({
113
- id: p2.id,
114
- latestFetchedBlock: p2.latestFetchedBlock,
115
- selection: p2.selection,
116
- addressesByContractName: p2.addressesByContractName,
117
- mergeBlock: potentialMergeBlock,
118
- dynamicContract: p2.dynamicContract,
119
- mutPendingQueries: p2.mutPendingQueries,
120
- prevQueryRange: p2.prevQueryRange,
121
- prevPrevQueryRange: p2.prevPrevQueryRange,
122
- latestBlockRangeUpdateBlock: p2.latestBlockRangeUpdateBlock
123
- });
125
+ id: p2.id,
126
+ latestFetchedBlock: p2.latestFetchedBlock,
127
+ selection: p2.selection,
128
+ addressesByContractName: p2.addressesByContractName,
129
+ mergeBlock: potentialMergeBlock,
130
+ dynamicContract: p2.dynamicContract,
131
+ mutPendingQueries: p2.mutPendingQueries,
132
+ prevQueryRange: p2.prevQueryRange,
133
+ prevPrevQueryRange: p2.prevPrevQueryRange,
134
+ latestBlockRangeUpdateBlock: p2.latestBlockRangeUpdateBlock
135
+ });
124
136
  continuingBase = p1;
125
137
  } else {
126
138
  continuingBase = p1;
127
139
  }
128
140
  if (combinedAddresses.length > maxAddrInPartition) {
129
- var addressesFull = combinedAddresses.slice(0, maxAddrInPartition);
130
- var addressesRest = combinedAddresses.slice(maxAddrInPartition);
131
- var abcFull = {};
141
+ let addressesFull = combinedAddresses.slice(0, maxAddrInPartition);
142
+ let addressesRest = combinedAddresses.slice(maxAddrInPartition);
143
+ let abcFull = {};
132
144
  abcFull[contractName] = addressesFull;
133
- var abcRest = {};
145
+ let abcRest = {};
134
146
  abcRest[contractName] = addressesRest;
135
147
  completed.push({
136
- id: continuingBase.id,
137
- latestFetchedBlock: continuingBase.latestFetchedBlock,
138
- selection: continuingBase.selection,
139
- addressesByContractName: abcFull,
140
- mergeBlock: continuingBase.mergeBlock,
141
- dynamicContract: continuingBase.dynamicContract,
142
- mutPendingQueries: continuingBase.mutPendingQueries,
143
- prevQueryRange: continuingBase.prevQueryRange,
144
- prevPrevQueryRange: continuingBase.prevPrevQueryRange,
145
- latestBlockRangeUpdateBlock: continuingBase.latestBlockRangeUpdateBlock
146
- });
147
- var restId = nextPartitionIndexRef.contents.toString();
148
+ id: continuingBase.id,
149
+ latestFetchedBlock: continuingBase.latestFetchedBlock,
150
+ selection: continuingBase.selection,
151
+ addressesByContractName: abcFull,
152
+ mergeBlock: continuingBase.mergeBlock,
153
+ dynamicContract: continuingBase.dynamicContract,
154
+ mutPendingQueries: continuingBase.mutPendingQueries,
155
+ prevQueryRange: continuingBase.prevQueryRange,
156
+ prevPrevQueryRange: continuingBase.prevPrevQueryRange,
157
+ latestBlockRangeUpdateBlock: continuingBase.latestBlockRangeUpdateBlock
158
+ });
159
+ let restId = nextPartitionIndexRef.contents.toString();
148
160
  nextPartitionIndexRef.contents = nextPartitionIndexRef.contents + 1 | 0;
149
161
  completed.push({
150
- id: restId,
151
- latestFetchedBlock: continuingBase.latestFetchedBlock,
152
- selection: continuingBase.selection,
153
- addressesByContractName: abcRest,
154
- mergeBlock: continuingBase.mergeBlock,
155
- dynamicContract: continuingBase.dynamicContract,
156
- mutPendingQueries: [],
157
- prevQueryRange: continuingBase.prevQueryRange,
158
- prevPrevQueryRange: continuingBase.prevPrevQueryRange,
159
- latestBlockRangeUpdateBlock: continuingBase.latestBlockRangeUpdateBlock
160
- });
162
+ id: restId,
163
+ latestFetchedBlock: continuingBase.latestFetchedBlock,
164
+ selection: continuingBase.selection,
165
+ addressesByContractName: abcRest,
166
+ mergeBlock: continuingBase.mergeBlock,
167
+ dynamicContract: continuingBase.dynamicContract,
168
+ mutPendingQueries: [],
169
+ prevQueryRange: continuingBase.prevQueryRange,
170
+ prevPrevQueryRange: continuingBase.prevPrevQueryRange,
171
+ latestBlockRangeUpdateBlock: continuingBase.latestBlockRangeUpdateBlock
172
+ });
161
173
  return completed;
162
174
  }
163
- var abc = {};
175
+ let abc = {};
164
176
  abc[contractName] = combinedAddresses;
165
177
  completed.push({
166
- id: continuingBase.id,
167
- latestFetchedBlock: continuingBase.latestFetchedBlock,
168
- selection: continuingBase.selection,
169
- addressesByContractName: abc,
170
- mergeBlock: continuingBase.mergeBlock,
171
- dynamicContract: continuingBase.dynamicContract,
172
- mutPendingQueries: continuingBase.mutPendingQueries,
173
- prevQueryRange: continuingBase.prevQueryRange,
174
- prevPrevQueryRange: continuingBase.prevPrevQueryRange,
175
- latestBlockRangeUpdateBlock: continuingBase.latestBlockRangeUpdateBlock
176
- });
178
+ id: continuingBase.id,
179
+ latestFetchedBlock: continuingBase.latestFetchedBlock,
180
+ selection: continuingBase.selection,
181
+ addressesByContractName: abc,
182
+ mergeBlock: continuingBase.mergeBlock,
183
+ dynamicContract: continuingBase.dynamicContract,
184
+ mutPendingQueries: continuingBase.mutPendingQueries,
185
+ prevQueryRange: continuingBase.prevQueryRange,
186
+ prevPrevQueryRange: continuingBase.prevPrevQueryRange,
187
+ latestBlockRangeUpdateBlock: continuingBase.latestBlockRangeUpdateBlock
188
+ });
177
189
  return completed;
178
190
  }
179
191
 
180
192
  function ascSortFn(a, b) {
181
- return a.latestFetchedBlock.blockNumber - b.latestFetchedBlock.blockNumber | 0;
193
+ return Primitive_int.compare(a.latestFetchedBlock.blockNumber, b.latestFetchedBlock.blockNumber);
182
194
  }
183
195
 
184
196
  function make(partitions, maxAddrInPartition, nextPartitionIndex, dynamicContracts) {
185
- var newPartitions = [];
186
- var mergingPartitions = {};
187
- var nextPartitionIndexRef = {
197
+ let newPartitions = [];
198
+ let mergingPartitions = {};
199
+ let nextPartitionIndexRef = {
188
200
  contents: nextPartitionIndex
189
201
  };
190
- for(var idx = 0 ,idx_finish = partitions.length; idx < idx_finish; ++idx){
191
- var p = partitions[idx];
192
- if (p.dynamicContract !== undefined && !(p.mergeBlock !== undefined || !p.selection.dependsOnAddresses)) {
193
- var contractName = p.dynamicContract;
194
- var pAddressesCount = p.addressesByContractName[contractName].length;
195
- var match = Utils.$$Array.last(p.mutPendingQueries);
196
- var potentialMergeBlock;
202
+ for (let idx = 0, idx_finish = partitions.length; idx < idx_finish; ++idx) {
203
+ let p = partitions[idx];
204
+ let exit = 0;
205
+ if (p.dynamicContract !== undefined && p.mergeBlock === undefined && p.selection.dependsOnAddresses) {
206
+ let contractName = p.dynamicContract;
207
+ let pAddressesCount = p.addressesByContractName[contractName].length;
208
+ let match = Utils.$$Array.last(p.mutPendingQueries);
209
+ let potentialMergeBlock;
197
210
  if (match !== undefined) {
198
- var toBlock = match.toBlock;
211
+ let toBlock = match.toBlock;
199
212
  potentialMergeBlock = toBlock !== undefined && match.isChunk ? toBlock : undefined;
200
213
  } else {
201
214
  potentialMergeBlock = p.latestFetchedBlock.blockNumber;
202
215
  }
203
216
  if (potentialMergeBlock !== undefined && pAddressesCount < maxAddrInPartition) {
204
- var partitionsByMergeBlock = Utils.Dict.getOrInsertEmptyDict(mergingPartitions, contractName);
205
- var existingPartition = partitionsByMergeBlock[potentialMergeBlock];
217
+ let partitionsByMergeBlock = Utils.Dict.getOrInsertEmptyDict(mergingPartitions, contractName);
218
+ let existingPartition = partitionsByMergeBlock[potentialMergeBlock];
206
219
  if (existingPartition !== undefined) {
207
- var result = mergePartitionsAtBlock(existingPartition, p, potentialMergeBlock, contractName, maxAddrInPartition, nextPartitionIndexRef);
208
- for(var i = 0 ,i_finish = result.length - 2 | 0; i <= i_finish; ++i){
220
+ let result = mergePartitionsAtBlock(existingPartition, p, potentialMergeBlock, contractName, maxAddrInPartition, nextPartitionIndexRef);
221
+ for (let i = 0, i_finish = result.length - 2 | 0; i <= i_finish; ++i) {
209
222
  newPartitions.push(result[i]);
210
223
  }
211
224
  partitionsByMergeBlock[potentialMergeBlock] = Utils.$$Array.lastUnsafe(result);
@@ -216,34 +229,37 @@ function make(partitions, maxAddrInPartition, nextPartitionIndex, dynamicContrac
216
229
  newPartitions.push(p);
217
230
  }
218
231
  } else {
232
+ exit = 1;
233
+ }
234
+ if (exit === 1) {
219
235
  newPartitions.push(p);
220
236
  }
221
237
  }
222
- var merginDynamicContracts = Object.keys(mergingPartitions);
223
- for(var idx$1 = 0 ,idx_finish$1 = merginDynamicContracts.length; idx$1 < idx_finish$1; ++idx$1){
224
- var contractName$1 = merginDynamicContracts[idx$1];
225
- var partitionsByMergeBlock$1 = mergingPartitions[contractName$1];
226
- var ascPartitionKeys = Object.keys(partitionsByMergeBlock$1);
238
+ let merginDynamicContracts = Object.keys(mergingPartitions);
239
+ for (let idx$1 = 0, idx_finish$1 = merginDynamicContracts.length; idx$1 < idx_finish$1; ++idx$1) {
240
+ let contractName$1 = merginDynamicContracts[idx$1];
241
+ let partitionsByMergeBlock$1 = mergingPartitions[contractName$1];
242
+ let ascPartitionKeys = Object.keys(partitionsByMergeBlock$1);
227
243
  if (ascPartitionKeys[ascPartitionKeys.length - 1 | 0] === "-1") {
228
- ascPartitionKeys.unshift(Caml_option.undefined_to_opt(ascPartitionKeys.pop()));
244
+ ascPartitionKeys.unshift(ascPartitionKeys.pop());
229
245
  }
230
- var currentPRef = partitionsByMergeBlock$1[Utils.$$Array.firstUnsafe(ascPartitionKeys)];
231
- var currentPMergeBlockRef = Belt_Int.fromString(Utils.$$Array.firstUnsafe(ascPartitionKeys));
232
- var nextJdx = 1;
233
- while(nextJdx < ascPartitionKeys.length) {
234
- var nextKey = ascPartitionKeys[nextJdx];
235
- var currentP = currentPRef;
236
- var nextP = partitionsByMergeBlock$1[nextKey];
237
- var nextPMergeBlock = Belt_Int.fromString(nextKey);
238
- var currentPMergeBlock = currentPMergeBlockRef;
239
- var isTooFar = (currentPMergeBlock + 20000 | 0) < nextPMergeBlock;
246
+ let currentPRef = partitionsByMergeBlock$1[Utils.$$Array.firstUnsafe(ascPartitionKeys)];
247
+ let currentPMergeBlockRef = Stdlib_Int.fromString(Utils.$$Array.firstUnsafe(ascPartitionKeys), undefined);
248
+ let nextJdx = 1;
249
+ while (nextJdx < ascPartitionKeys.length) {
250
+ let nextKey = ascPartitionKeys[nextJdx];
251
+ let currentP = currentPRef;
252
+ let nextP = partitionsByMergeBlock$1[nextKey];
253
+ let nextPMergeBlock = Stdlib_Int.fromString(nextKey, undefined);
254
+ let currentPMergeBlock = currentPMergeBlockRef;
255
+ let isTooFar = (currentPMergeBlock + 20000 | 0) < nextPMergeBlock;
240
256
  if (isTooFar) {
241
257
  newPartitions.push(currentP);
242
258
  currentPRef = nextP;
243
259
  currentPMergeBlockRef = nextPMergeBlock;
244
260
  } else {
245
- var result$1 = mergePartitionsAtBlock(nextP, currentP, nextPMergeBlock, contractName$1, maxAddrInPartition, nextPartitionIndexRef);
246
- for(var i$1 = 0 ,i_finish$1 = result$1.length - 2 | 0; i$1 <= i_finish$1; ++i$1){
261
+ let result$1 = mergePartitionsAtBlock(nextP, currentP, nextPMergeBlock, contractName$1, maxAddrInPartition, nextPartitionIndexRef);
262
+ for (let i$1 = 0, i_finish$1 = result$1.length - 2 | 0; i$1 <= i_finish$1; ++i$1) {
247
263
  newPartitions.push(result$1[i$1]);
248
264
  }
249
265
  currentPRef = Utils.$$Array.lastUnsafe(result$1);
@@ -254,74 +270,72 @@ function make(partitions, maxAddrInPartition, nextPartitionIndex, dynamicContrac
254
270
  newPartitions.push(currentPRef);
255
271
  }
256
272
  newPartitions.sort(ascSortFn);
257
- var partitionsCount = newPartitions.length;
258
- var idsInAscOrder = new Array(partitionsCount);
259
- var entities = {};
260
- for(var idx$2 = 0; idx$2 < partitionsCount; ++idx$2){
261
- var p$1 = newPartitions[idx$2];
273
+ let partitionsCount = newPartitions.length;
274
+ let idsInAscOrder = new Array(partitionsCount);
275
+ let entities = {};
276
+ for (let idx$2 = 0; idx$2 < partitionsCount; ++idx$2) {
277
+ let p$1 = newPartitions[idx$2];
262
278
  idsInAscOrder[idx$2] = p$1.id;
263
279
  entities[p$1.id] = p$1;
264
280
  }
265
281
  return {
266
- idsInAscOrder: idsInAscOrder,
267
- entities: entities,
268
- maxAddrInPartition: maxAddrInPartition,
269
- nextPartitionIndex: nextPartitionIndexRef.contents,
270
- dynamicContracts: dynamicContracts
271
- };
282
+ idsInAscOrder: idsInAscOrder,
283
+ entities: entities,
284
+ maxAddrInPartition: maxAddrInPartition,
285
+ nextPartitionIndex: nextPartitionIndexRef.contents,
286
+ dynamicContracts: dynamicContracts
287
+ };
272
288
  }
273
289
 
274
290
  function consumeFetchedQueries(mutPendingQueries, initialLatestFetchedBlock) {
275
- var latestFetchedBlock = initialLatestFetchedBlock;
276
- while((function () {
277
- var tmp = false;
278
- if (mutPendingQueries.length !== 0) {
279
- var pq = Utils.$$Array.firstUnsafe(mutPendingQueries);
280
- tmp = pq.fetchedBlock !== undefined && pq.fromBlock <= (latestFetchedBlock.blockNumber + 1 | 0);
281
- }
282
- return tmp;
283
- })()) {
284
- var removedQuery = mutPendingQueries.shift();
285
- latestFetchedBlock = (
286
- removedQuery === undefined ? undefined : Caml_option.some(removedQuery)
287
- ).fetchedBlock;
291
+ let latestFetchedBlock = initialLatestFetchedBlock;
292
+ while ((() => {
293
+ let tmp = false;
294
+ if (mutPendingQueries.length !== 0) {
295
+ let pq = Utils.$$Array.firstUnsafe(mutPendingQueries);
296
+ tmp = pq.fetchedBlock !== undefined && pq.fromBlock <= (latestFetchedBlock.blockNumber + 1 | 0);
297
+ }
298
+ return tmp;
299
+ })()) {
300
+ let removedQuery = mutPendingQueries.shift();
301
+ latestFetchedBlock = removedQuery.fetchedBlock;
288
302
  };
289
303
  return latestFetchedBlock;
290
304
  }
291
305
 
292
306
  function getPendingQueryOrThrow(p, fromBlock) {
293
- var idxRef = 0;
294
- var pendingQueryRef;
295
- while(idxRef < p.mutPendingQueries.length && pendingQueryRef === undefined) {
296
- var pq = p.mutPendingQueries[idxRef];
307
+ let idxRef = 0;
308
+ let pendingQueryRef;
309
+ while (idxRef < p.mutPendingQueries.length && pendingQueryRef === undefined) {
310
+ let pq = p.mutPendingQueries[idxRef];
297
311
  if (pq.fromBlock === fromBlock) {
298
312
  pendingQueryRef = pq;
299
313
  }
300
314
  idxRef = idxRef + 1 | 0;
301
315
  };
302
- var pq$1 = pendingQueryRef;
316
+ let pq$1 = pendingQueryRef;
303
317
  if (pq$1 !== undefined) {
304
318
  return pq$1;
305
319
  } else {
306
- return Js_exn.raiseError("Pending query not found for partition " + p.id + " fromBlock " + String(fromBlock));
320
+ return Stdlib_JsError.throwWithMessage(`Pending query not found for partition ` + p.id + ` fromBlock ` + fromBlock.toString());
307
321
  }
308
322
  }
309
323
 
310
324
  function handleQueryResponse(optimizedPartitions, query, knownHeight, latestFetchedBlock) {
311
- var partitionId = query.partitionId;
312
- var p = Js_dict.get(optimizedPartitions.entities, partitionId);
313
- var p$1 = p !== undefined ? p : Js_exn.raiseError("Unexpected case: Couldn't find partition " + partitionId);
314
- var mutEntities = Utils.Dict.shallowCopy(optimizedPartitions.entities);
315
- var pendingQuery = getPendingQueryOrThrow(p$1, query.fromBlock);
325
+ let partitionId = query.partitionId;
326
+ let p = optimizedPartitions.entities[partitionId];
327
+ let p$1 = p !== undefined ? p : Stdlib_JsError.throwWithMessage(`Unexpected case: Couldn't find partition ` + partitionId);
328
+ let mutEntities = Utils.Dict.shallowCopy(optimizedPartitions.entities);
329
+ let pendingQuery = getPendingQueryOrThrow(p$1, query.fromBlock);
316
330
  pendingQuery.fetchedBlock = latestFetchedBlock;
317
- var blockRange = (latestFetchedBlock.blockNumber - query.fromBlock | 0) + 1 | 0;
318
- var shouldUpdateBlockRange = false;
331
+ let blockRange = (latestFetchedBlock.blockNumber - query.fromBlock | 0) + 1 | 0;
332
+ let shouldUpdateBlockRange = false;
319
333
  if (latestFetchedBlock.blockNumber > p$1.latestBlockRangeUpdateBlock) {
320
- var queryToBlock = query.toBlock;
321
- var tmp;
334
+ let queryToBlock = query.toBlock;
335
+ let tmp;
322
336
  if (queryToBlock !== undefined) {
323
337
  if (latestFetchedBlock.blockNumber >= queryToBlock) {
324
- var minHistoryRange = getMinHistoryRange(p$1);
338
+ let minHistoryRange = getMinHistoryRange(p$1);
325
339
  tmp = minHistoryRange !== undefined ? ((queryToBlock - query.fromBlock | 0) + 1 | 0) >= minHistoryRange : false;
326
340
  } else {
327
341
  tmp = true;
@@ -331,37 +345,35 @@ function handleQueryResponse(optimizedPartitions, query, knownHeight, latestFetc
331
345
  }
332
346
  shouldUpdateBlockRange = tmp;
333
347
  }
334
- var updatedPrevQueryRange = shouldUpdateBlockRange ? blockRange : p$1.prevQueryRange;
335
- var updatedPrevPrevQueryRange = shouldUpdateBlockRange ? p$1.prevQueryRange : p$1.prevPrevQueryRange;
336
- var mutPendingQueries = p$1.mutPendingQueries;
337
- var latestFetchedBlock$1 = p$1.latestFetchedBlock;
338
- while((function () {
339
- var tmp = false;
340
- if (mutPendingQueries.length !== 0) {
341
- var pq = Utils.$$Array.firstUnsafe(mutPendingQueries);
342
- tmp = pq.fetchedBlock !== undefined && pq.fromBlock <= (latestFetchedBlock$1.blockNumber + 1 | 0);
343
- }
344
- return tmp;
345
- })()) {
346
- var removedQuery = mutPendingQueries.shift();
347
- latestFetchedBlock$1 = (
348
- removedQuery === undefined ? undefined : Caml_option.some(removedQuery)
349
- ).fetchedBlock;
348
+ let updatedPrevQueryRange = shouldUpdateBlockRange ? blockRange : p$1.prevQueryRange;
349
+ let updatedPrevPrevQueryRange = shouldUpdateBlockRange ? p$1.prevQueryRange : p$1.prevPrevQueryRange;
350
+ let mutPendingQueries = p$1.mutPendingQueries;
351
+ let latestFetchedBlock$1 = p$1.latestFetchedBlock;
352
+ while ((() => {
353
+ let tmp = false;
354
+ if (mutPendingQueries.length !== 0) {
355
+ let pq = Utils.$$Array.firstUnsafe(mutPendingQueries);
356
+ tmp = pq.fetchedBlock !== undefined && pq.fromBlock <= (latestFetchedBlock$1.blockNumber + 1 | 0);
357
+ }
358
+ return tmp;
359
+ })()) {
360
+ let removedQuery = mutPendingQueries.shift();
361
+ latestFetchedBlock$1 = removedQuery.fetchedBlock;
350
362
  };
351
- var updatedLatestFetchedBlock = latestFetchedBlock$1;
352
- var mergeBlock = p$1.mergeBlock;
353
- var partitionReachedMergeBlock = mergeBlock !== undefined ? updatedLatestFetchedBlock.blockNumber >= mergeBlock : false;
363
+ let updatedLatestFetchedBlock = latestFetchedBlock$1;
364
+ let mergeBlock = p$1.mergeBlock;
365
+ let partitionReachedMergeBlock = mergeBlock !== undefined ? updatedLatestFetchedBlock.blockNumber >= mergeBlock : false;
354
366
  if (partitionReachedMergeBlock) {
355
367
  Utils.Dict.deleteInPlace(mutEntities, p$1.id);
356
368
  } else {
357
- var updatedMainPartition_id = p$1.id;
358
- var updatedMainPartition_selection = p$1.selection;
359
- var updatedMainPartition_addressesByContractName = p$1.addressesByContractName;
360
- var updatedMainPartition_mergeBlock = p$1.mergeBlock;
361
- var updatedMainPartition_dynamicContract = p$1.dynamicContract;
362
- var updatedMainPartition_mutPendingQueries = p$1.mutPendingQueries;
363
- var updatedMainPartition_latestBlockRangeUpdateBlock = shouldUpdateBlockRange ? latestFetchedBlock.blockNumber : p$1.latestBlockRangeUpdateBlock;
364
- var updatedMainPartition = {
369
+ let updatedMainPartition_id = p$1.id;
370
+ let updatedMainPartition_selection = p$1.selection;
371
+ let updatedMainPartition_addressesByContractName = p$1.addressesByContractName;
372
+ let updatedMainPartition_mergeBlock = p$1.mergeBlock;
373
+ let updatedMainPartition_dynamicContract = p$1.dynamicContract;
374
+ let updatedMainPartition_mutPendingQueries = p$1.mutPendingQueries;
375
+ let updatedMainPartition_latestBlockRangeUpdateBlock = shouldUpdateBlockRange ? latestFetchedBlock.blockNumber : p$1.latestBlockRangeUpdateBlock;
376
+ let updatedMainPartition = {
365
377
  id: updatedMainPartition_id,
366
378
  latestFetchedBlock: updatedLatestFetchedBlock,
367
379
  selection: updatedMainPartition_selection,
@@ -375,18 +387,17 @@ function handleQueryResponse(optimizedPartitions, query, knownHeight, latestFetc
375
387
  };
376
388
  mutEntities[p$1.id] = updatedMainPartition;
377
389
  }
378
- return make(Js_dict.values(mutEntities), optimizedPartitions.maxAddrInPartition, optimizedPartitions.nextPartitionIndex, optimizedPartitions.dynamicContracts);
390
+ return make(Object.values(mutEntities), optimizedPartitions.maxAddrInPartition, optimizedPartitions.nextPartitionIndex, optimizedPartitions.dynamicContracts);
379
391
  }
380
392
 
381
393
  function getLatestFullyFetchedBlock(optimizedPartitions) {
382
- var id = Belt_Array.get(optimizedPartitions.idsInAscOrder, 0);
394
+ let id = optimizedPartitions.idsInAscOrder[0];
383
395
  if (id !== undefined) {
384
396
  return optimizedPartitions.entities[id].latestFetchedBlock;
385
397
  }
386
-
387
398
  }
388
399
 
389
- var OptimizedPartitions = {
400
+ let OptimizedPartitions = {
390
401
  count: count,
391
402
  getOrThrow: getOrThrow,
392
403
  mergePartitionsAtBlock: mergePartitionsAtBlock,
@@ -400,10 +411,10 @@ var OptimizedPartitions = {
400
411
  };
401
412
 
402
413
  function bufferBlockNumber(param) {
403
- var latestOnBlockBlockNumber = param.latestOnBlockBlockNumber;
404
- var optimizedPartitions = param.optimizedPartitions;
405
- var id = Belt_Array.get(optimizedPartitions.idsInAscOrder, 0);
406
- var latestFullyFetchedBlock = id !== undefined ? optimizedPartitions.entities[id].latestFetchedBlock : undefined;
414
+ let latestOnBlockBlockNumber = param.latestOnBlockBlockNumber;
415
+ let optimizedPartitions = param.optimizedPartitions;
416
+ let id = optimizedPartitions.idsInAscOrder[0];
417
+ let latestFullyFetchedBlock = id !== undefined ? optimizedPartitions.entities[id].latestFetchedBlock : undefined;
407
418
  if (latestFullyFetchedBlock !== undefined && latestOnBlockBlockNumber >= latestFullyFetchedBlock.blockNumber) {
408
419
  return latestFullyFetchedBlock.blockNumber;
409
420
  } else {
@@ -412,101 +423,100 @@ function bufferBlockNumber(param) {
412
423
  }
413
424
 
414
425
  function bufferBlock(param) {
415
- var latestOnBlockBlockNumber = param.latestOnBlockBlockNumber;
416
- var optimizedPartitions = param.optimizedPartitions;
417
- var id = Belt_Array.get(optimizedPartitions.idsInAscOrder, 0);
418
- var latestFullyFetchedBlock = id !== undefined ? optimizedPartitions.entities[id].latestFetchedBlock : undefined;
426
+ let latestOnBlockBlockNumber = param.latestOnBlockBlockNumber;
427
+ let optimizedPartitions = param.optimizedPartitions;
428
+ let id = optimizedPartitions.idsInAscOrder[0];
429
+ let latestFullyFetchedBlock = id !== undefined ? optimizedPartitions.entities[id].latestFetchedBlock : undefined;
419
430
  if (latestFullyFetchedBlock !== undefined && latestOnBlockBlockNumber >= latestFullyFetchedBlock.blockNumber) {
420
431
  return latestFullyFetchedBlock;
421
432
  } else {
422
433
  return {
423
- blockNumber: latestOnBlockBlockNumber,
424
- blockTimestamp: 0
425
- };
434
+ blockNumber: latestOnBlockBlockNumber,
435
+ blockTimestamp: 0
436
+ };
426
437
  }
427
438
  }
428
439
 
429
440
  function compareBufferItem(a, b) {
430
- var blockDiff = a.blockNumber - b.blockNumber | 0;
431
- if (blockDiff === 0) {
432
- return a.logIndex - b.logIndex | 0;
441
+ let blockOrdering = Primitive_int.compare(a.blockNumber, b.blockNumber);
442
+ if (blockOrdering === 0) {
443
+ return Primitive_int.compare(a.logIndex, b.logIndex);
433
444
  } else {
434
- return blockDiff;
445
+ return blockOrdering;
435
446
  }
436
447
  }
437
448
 
438
449
  function numAddresses(fetchState) {
439
- return Object.keys(fetchState.indexingContracts).length;
450
+ return Utils.Dict.size(fetchState.indexingAddresses);
440
451
  }
441
452
 
442
- function updateInternal(fetchState, optimizedPartitionsOpt, indexingContractsOpt, mutItems, blockLagOpt, knownHeightOpt) {
443
- var optimizedPartitions = optimizedPartitionsOpt !== undefined ? optimizedPartitionsOpt : fetchState.optimizedPartitions;
444
- var indexingContracts = indexingContractsOpt !== undefined ? indexingContractsOpt : fetchState.indexingContracts;
445
- var blockLag = blockLagOpt !== undefined ? blockLagOpt : fetchState.blockLag;
446
- var knownHeight = knownHeightOpt !== undefined ? knownHeightOpt : fetchState.knownHeight;
447
- var mutItemsRef = mutItems;
448
- var onBlockConfigs = fetchState.onBlockConfigs;
449
- var latestOnBlockBlockNumber;
453
+ function updateInternal(fetchState, optimizedPartitionsOpt, indexingAddressesOpt, mutItems, blockLagOpt, knownHeightOpt) {
454
+ let optimizedPartitions = optimizedPartitionsOpt !== undefined ? optimizedPartitionsOpt : fetchState.optimizedPartitions;
455
+ let indexingAddresses = indexingAddressesOpt !== undefined ? indexingAddressesOpt : fetchState.indexingAddresses;
456
+ let blockLag = blockLagOpt !== undefined ? blockLagOpt : fetchState.blockLag;
457
+ let knownHeight = knownHeightOpt !== undefined ? knownHeightOpt : fetchState.knownHeight;
458
+ let mutItemsRef = mutItems;
459
+ let onBlockConfigs = fetchState.onBlockConfigs;
460
+ let latestOnBlockBlockNumber;
450
461
  if (onBlockConfigs.length !== 0) {
451
- var mutItems$1 = mutItemsRef;
452
- var item = Belt_Array.get(mutItems$1 !== undefined ? mutItems$1 : fetchState.buffer, fetchState.targetBufferSize - 1 | 0);
453
- var maxBlockNumber;
462
+ let mutItems$1 = mutItemsRef;
463
+ let item = Belt_Array.get(mutItems$1 !== undefined ? mutItems$1 : fetchState.buffer, fetchState.targetBufferSize - 1 | 0);
464
+ let maxBlockNumber;
454
465
  if (item !== undefined) {
455
466
  maxBlockNumber = item.blockNumber;
456
467
  } else {
457
- var id = Belt_Array.get(optimizedPartitions.idsInAscOrder, 0);
458
- var latestFullyFetchedBlock = id !== undefined ? optimizedPartitions.entities[id].latestFetchedBlock : undefined;
468
+ let id = optimizedPartitions.idsInAscOrder[0];
469
+ let latestFullyFetchedBlock = id !== undefined ? optimizedPartitions.entities[id].latestFetchedBlock : undefined;
459
470
  maxBlockNumber = latestFullyFetchedBlock !== undefined ? latestFullyFetchedBlock.blockNumber : knownHeight;
460
471
  }
461
- var mutItems$2 = mutItemsRef;
462
- var mutItems$3 = mutItems$2 !== undefined ? mutItems$2 : fetchState.buffer.slice(0);
472
+ let mutItems$2 = mutItemsRef;
473
+ let mutItems$3 = mutItems$2 !== undefined ? mutItems$2 : fetchState.buffer.slice();
463
474
  mutItemsRef = mutItems$3;
464
- var newItemsCounter = 0;
465
- var latestOnBlockBlockNumber$1 = fetchState.latestOnBlockBlockNumber;
466
- while(latestOnBlockBlockNumber$1 < maxBlockNumber && newItemsCounter <= fetchState.targetBufferSize) {
467
- var blockNumber = latestOnBlockBlockNumber$1 + 1 | 0;
475
+ let newItemsCounter = 0;
476
+ let latestOnBlockBlockNumber$1 = fetchState.latestOnBlockBlockNumber;
477
+ while (latestOnBlockBlockNumber$1 < maxBlockNumber && newItemsCounter <= fetchState.targetBufferSize) {
478
+ let blockNumber = latestOnBlockBlockNumber$1 + 1 | 0;
468
479
  latestOnBlockBlockNumber$1 = blockNumber;
469
- for(var configIdx = 0 ,configIdx_finish = onBlockConfigs.length; configIdx < configIdx_finish; ++configIdx){
470
- var onBlockConfig = onBlockConfigs[configIdx];
471
- var startBlock = onBlockConfig.startBlock;
472
- var handlerStartBlock = startBlock !== undefined ? startBlock : fetchState.startBlock;
473
- var tmp = false;
480
+ for (let configIdx = 0, configIdx_finish = onBlockConfigs.length; configIdx < configIdx_finish; ++configIdx) {
481
+ let onBlockConfig = onBlockConfigs[configIdx];
482
+ let startBlock = onBlockConfig.startBlock;
483
+ let handlerStartBlock = startBlock !== undefined ? startBlock : fetchState.startBlock;
484
+ let tmp = false;
474
485
  if (blockNumber >= handlerStartBlock) {
475
- var endBlock = onBlockConfig.endBlock;
486
+ let endBlock = onBlockConfig.endBlock;
476
487
  tmp = endBlock !== undefined ? blockNumber <= endBlock : true;
477
488
  }
478
- if (tmp && Caml_int32.mod_(blockNumber - handlerStartBlock | 0, onBlockConfig.interval) === 0) {
489
+ if (tmp && Primitive_int.mod_(blockNumber - handlerStartBlock | 0, onBlockConfig.interval) === 0) {
479
490
  mutItems$3.push({
480
- kind: 1,
481
- onBlockConfig: onBlockConfig,
482
- blockNumber: blockNumber,
483
- logIndex: 16777216 + onBlockConfig.index | 0
484
- });
491
+ kind: 1,
492
+ onBlockConfig: onBlockConfig,
493
+ blockNumber: blockNumber,
494
+ logIndex: 16777216 + onBlockConfig.index | 0
495
+ });
485
496
  newItemsCounter = newItemsCounter + 1 | 0;
486
497
  }
487
-
488
498
  }
489
499
  };
490
500
  latestOnBlockBlockNumber = latestOnBlockBlockNumber$1;
491
501
  } else {
492
502
  latestOnBlockBlockNumber = knownHeight;
493
503
  }
494
- var mutItems$4 = mutItemsRef;
495
- var updatedFetchState_startBlock = fetchState.startBlock;
496
- var updatedFetchState_endBlock = fetchState.endBlock;
497
- var updatedFetchState_normalSelection = fetchState.normalSelection;
498
- var updatedFetchState_contractConfigs = fetchState.contractConfigs;
499
- var updatedFetchState_chainId = fetchState.chainId;
500
- var updatedFetchState_buffer = mutItems$4 !== undefined ? mutItems$4.sort(compareBufferItem) : fetchState.buffer;
501
- var updatedFetchState_targetBufferSize = fetchState.targetBufferSize;
502
- var updatedFetchState_onBlockConfigs = fetchState.onBlockConfigs;
503
- var updatedFetchState_firstEventBlock = fetchState.firstEventBlock;
504
- var updatedFetchState = {
504
+ let mutItems$4 = mutItemsRef;
505
+ let updatedFetchState_startBlock = fetchState.startBlock;
506
+ let updatedFetchState_endBlock = fetchState.endBlock;
507
+ let updatedFetchState_normalSelection = fetchState.normalSelection;
508
+ let updatedFetchState_contractConfigs = fetchState.contractConfigs;
509
+ let updatedFetchState_chainId = fetchState.chainId;
510
+ let updatedFetchState_buffer = mutItems$4 !== undefined ? (mutItems$4.sort(compareBufferItem), mutItems$4) : fetchState.buffer;
511
+ let updatedFetchState_targetBufferSize = fetchState.targetBufferSize;
512
+ let updatedFetchState_onBlockConfigs = fetchState.onBlockConfigs;
513
+ let updatedFetchState_firstEventBlock = fetchState.firstEventBlock;
514
+ let updatedFetchState = {
505
515
  optimizedPartitions: optimizedPartitions,
506
516
  startBlock: updatedFetchState_startBlock,
507
517
  endBlock: updatedFetchState_endBlock,
508
518
  normalSelection: updatedFetchState_normalSelection,
509
- indexingContracts: indexingContracts,
519
+ indexingAddresses: indexingAddresses,
510
520
  contractConfigs: updatedFetchState_contractConfigs,
511
521
  chainId: updatedFetchState_chainId,
512
522
  latestOnBlockBlockNumber: latestOnBlockBlockNumber,
@@ -520,156 +530,154 @@ function updateInternal(fetchState, optimizedPartitionsOpt, indexingContractsOpt
520
530
  Prometheus.IndexingPartitions.set(optimizedPartitions.idsInAscOrder.length, fetchState.chainId);
521
531
  Prometheus.IndexingBufferSize.set(updatedFetchState_buffer.length, fetchState.chainId);
522
532
  Prometheus.IndexingBufferBlockNumber.set(bufferBlockNumber(updatedFetchState), fetchState.chainId);
523
- if (indexingContracts !== fetchState.indexingContracts) {
524
- Prometheus.IndexingAddresses.set(Object.keys(indexingContracts).length, fetchState.chainId);
533
+ if (indexingAddresses !== fetchState.indexingAddresses) {
534
+ Prometheus.IndexingAddresses.set(Utils.Dict.size(indexingAddresses), fetchState.chainId);
525
535
  }
526
536
  return updatedFetchState;
527
537
  }
528
538
 
529
539
  function warnDifferentContractType(fetchState, existingContract, dc) {
530
- var logger = Logging.createChild({
531
- chainId: fetchState.chainId,
532
- contractAddress: dc.address,
533
- existingContractType: existingContract.contractName,
534
- newContractType: dc.contractName
535
- });
536
- Logging.childWarn(logger, "Skipping contract registration: Contract address is already registered for one contract and cannot be registered for another contract.");
540
+ let logger = Logging.createChild({
541
+ chainId: fetchState.chainId,
542
+ contractAddress: dc.address,
543
+ existingContractType: existingContract.contractName,
544
+ newContractType: dc.contractName
545
+ });
546
+ Logging.childWarn(logger, `Skipping contract registration: Contract address is already registered for one contract and cannot be registered for another contract.`);
537
547
  }
538
548
 
539
549
  function addressesByContractNameCount(addressesByContractName) {
540
- var numAddresses = 0;
541
- var contractNames = Object.keys(addressesByContractName);
542
- for(var idx = 0 ,idx_finish = contractNames.length; idx < idx_finish; ++idx){
543
- var contractName = contractNames[idx];
544
- numAddresses = numAddresses + addressesByContractName[contractName].length | 0;
545
- }
546
- return numAddresses;
550
+ let numAddresses = {
551
+ contents: 0
552
+ };
553
+ Utils.Dict.forEach(addressesByContractName, addresses => {
554
+ numAddresses.contents = numAddresses.contents + addresses.length | 0;
555
+ });
556
+ return numAddresses.contents;
547
557
  }
548
558
 
549
559
  function addressesByContractNameGetAll(addressesByContractName) {
550
- var all = [];
551
- var contractNames = Object.keys(addressesByContractName);
552
- for(var idx = 0 ,idx_finish = contractNames.length; idx < idx_finish; ++idx){
553
- var contractName = contractNames[idx];
554
- all = Belt_Array.concat(all, addressesByContractName[contractName]);
555
- }
560
+ let all = [];
561
+ Utils.Dict.forEach(addressesByContractName, addresses => {
562
+ for (let idx = 0, idx_finish = addresses.length; idx < idx_finish; ++idx) {
563
+ all.push(addresses[idx]);
564
+ }
565
+ });
556
566
  return all;
557
567
  }
558
568
 
559
569
  function createPartitionsFromIndexingAddresses(registeringContractsByContract, contractConfigs, dynamicContracts, normalSelection, maxAddrInPartition, nextPartitionIndex, existingPartitions, progressBlockNumber) {
560
- var nextPartitionIndexRef = nextPartitionIndex;
561
- var dynamicPartitions = [];
562
- var nonDynamicPartitions = [];
563
- var contractNames = Object.keys(registeringContractsByContract);
564
- for(var cIdx = 0 ,cIdx_finish = contractNames.length; cIdx < cIdx_finish; ++cIdx){
565
- var contractName = contractNames[cIdx];
566
- var registeringContracts = registeringContractsByContract[contractName];
567
- var addresses = Object.keys(registeringContracts);
568
- var contractConfig = contractConfigs[contractName];
569
- var isDynamic = dynamicContracts.has(contractName);
570
- var partitions = isDynamic ? dynamicPartitions : nonDynamicPartitions;
571
- var byStartBlock = {};
572
- for(var jdx = 0 ,jdx_finish = addresses.length; jdx < jdx_finish; ++jdx){
573
- var address = addresses[jdx];
574
- var indexingContract = registeringContracts[address];
575
- Utils.Dict.push(byStartBlock, String(indexingContract.startBlock), address);
570
+ let nextPartitionIndexRef = nextPartitionIndex;
571
+ let dynamicPartitions = [];
572
+ let nonDynamicPartitions = [];
573
+ let contractNames = Object.keys(registeringContractsByContract);
574
+ for (let cIdx = 0, cIdx_finish = contractNames.length; cIdx < cIdx_finish; ++cIdx) {
575
+ let contractName = contractNames[cIdx];
576
+ let registeringContracts = registeringContractsByContract[contractName];
577
+ let addresses = Object.keys(registeringContracts);
578
+ let contractConfig = contractConfigs[contractName];
579
+ let isDynamic = dynamicContracts.has(contractName);
580
+ let partitions = isDynamic ? dynamicPartitions : nonDynamicPartitions;
581
+ let byStartBlock = {};
582
+ for (let jdx = 0, jdx_finish = addresses.length; jdx < jdx_finish; ++jdx) {
583
+ let address = addresses[jdx];
584
+ let indexingContract = registeringContracts[address];
585
+ Utils.Dict.push(byStartBlock, indexingContract.effectiveStartBlock.toString(), address);
576
586
  }
577
- var ascKeys = Object.keys(byStartBlock);
578
- var initialKey = Utils.$$Array.firstUnsafe(ascKeys);
579
- var startBlockRef = Belt_Int.fromString(initialKey);
580
- var addressesRef = byStartBlock[initialKey];
581
- for(var idx = 0 ,idx_finish = ascKeys.length; idx < idx_finish; ++idx){
582
- var maybeNextStartBlockKey = ascKeys[idx + 1 | 0];
583
- var shouldAllocateNewPartition;
587
+ let ascKeys = Object.keys(byStartBlock);
588
+ let initialKey = Utils.$$Array.firstUnsafe(ascKeys);
589
+ let startBlockRef = Stdlib_Int.fromString(initialKey, undefined);
590
+ let addressesRef = byStartBlock[initialKey];
591
+ for (let idx = 0, idx_finish = ascKeys.length; idx < idx_finish; ++idx) {
592
+ let maybeNextStartBlockKey = ascKeys[idx + 1 | 0];
593
+ let shouldAllocateNewPartition;
584
594
  if (contractConfig.filterByAddresses || maybeNextStartBlockKey === undefined) {
585
595
  shouldAllocateNewPartition = true;
586
596
  } else {
587
- var nextStartBlock = Belt_Int.fromString(maybeNextStartBlockKey);
588
- var shouldJoinCurrentStartBlock = (nextStartBlock - startBlockRef | 0) < 20000;
597
+ let nextStartBlock = Stdlib_Int.fromString(maybeNextStartBlockKey, undefined);
598
+ let shouldJoinCurrentStartBlock = (nextStartBlock - startBlockRef | 0) < 20000;
589
599
  if (shouldJoinCurrentStartBlock) {
590
- addressesRef = Belt_Array.concat(addressesRef, byStartBlock[maybeNextStartBlockKey]);
600
+ addressesRef = addressesRef.concat(byStartBlock[maybeNextStartBlockKey]);
591
601
  shouldAllocateNewPartition = false;
592
602
  } else {
593
603
  shouldAllocateNewPartition = true;
594
604
  }
595
605
  }
596
606
  if (shouldAllocateNewPartition) {
597
- var latestFetchedBlock_blockNumber = Caml.int_max(startBlockRef - 1 | 0, progressBlockNumber);
598
- var latestFetchedBlock = {
607
+ let latestFetchedBlock_blockNumber = Primitive_int.max(startBlockRef - 1 | 0, progressBlockNumber);
608
+ let latestFetchedBlock = {
599
609
  blockNumber: latestFetchedBlock_blockNumber,
600
610
  blockTimestamp: 0
601
611
  };
602
- while(addressesRef.length !== 0) {
603
- var pAddresses = addressesRef.slice(0, maxAddrInPartition);
612
+ while (addressesRef.length !== 0) {
613
+ let pAddresses = addressesRef.slice(0, maxAddrInPartition);
604
614
  addressesRef = addressesRef.slice(maxAddrInPartition);
605
- var addressesByContractName = {};
615
+ let addressesByContractName = {};
606
616
  addressesByContractName[contractName] = pAddresses;
607
617
  partitions.push({
608
- id: String(nextPartitionIndexRef),
609
- latestFetchedBlock: latestFetchedBlock,
610
- selection: normalSelection,
611
- addressesByContractName: addressesByContractName,
612
- mergeBlock: undefined,
613
- dynamicContract: isDynamic ? contractName : undefined,
614
- mutPendingQueries: [],
615
- prevQueryRange: 0,
616
- prevPrevQueryRange: 0,
617
- latestBlockRangeUpdateBlock: 0
618
- });
618
+ id: nextPartitionIndexRef.toString(),
619
+ latestFetchedBlock: latestFetchedBlock,
620
+ selection: normalSelection,
621
+ addressesByContractName: addressesByContractName,
622
+ mergeBlock: undefined,
623
+ dynamicContract: isDynamic ? contractName : undefined,
624
+ mutPendingQueries: [],
625
+ prevQueryRange: 0,
626
+ prevPrevQueryRange: 0,
627
+ latestBlockRangeUpdateBlock: 0
628
+ });
619
629
  nextPartitionIndexRef = nextPartitionIndexRef + 1 | 0;
620
630
  };
621
631
  if (maybeNextStartBlockKey !== undefined) {
622
- startBlockRef = Belt_Int.fromString(maybeNextStartBlockKey);
632
+ startBlockRef = Stdlib_Int.fromString(maybeNextStartBlockKey, undefined);
623
633
  addressesRef = byStartBlock[maybeNextStartBlockKey];
624
634
  }
625
-
626
635
  }
627
-
628
636
  }
629
637
  }
630
- var mergedNonDynamic = [];
638
+ let mergedNonDynamic = [];
631
639
  if (nonDynamicPartitions.length !== 0) {
632
640
  nonDynamicPartitions.sort(ascSortFn);
633
- var currentPRef = nonDynamicPartitions[0];
634
- var nextIdx = 1;
635
- while(nextIdx < nonDynamicPartitions.length) {
636
- var nextP = nonDynamicPartitions[nextIdx];
637
- var currentP = currentPRef;
638
- var currentPBlock = currentP.latestFetchedBlock.blockNumber;
639
- var nextPBlock = nextP.latestFetchedBlock.blockNumber;
640
- var totalCount = addressesByContractNameCount(currentP.addressesByContractName) + addressesByContractNameCount(nextP.addressesByContractName) | 0;
641
+ let currentPRef = nonDynamicPartitions[0];
642
+ let nextIdx = 1;
643
+ while (nextIdx < nonDynamicPartitions.length) {
644
+ let nextP = nonDynamicPartitions[nextIdx];
645
+ let currentP = currentPRef;
646
+ let currentPBlock = currentP.latestFetchedBlock.blockNumber;
647
+ let nextPBlock = nextP.latestFetchedBlock.blockNumber;
648
+ let totalCount = addressesByContractNameCount(currentP.addressesByContractName) + addressesByContractNameCount(nextP.addressesByContractName) | 0;
641
649
  if (totalCount > maxAddrInPartition) {
642
650
  mergedNonDynamic.push(currentP);
643
651
  currentPRef = nextP;
644
652
  } else {
645
- var mergedAddresses = Utils.Dict.shallowCopy(nextP.addressesByContractName);
646
- var currentContractNames = Object.keys(currentP.addressesByContractName);
647
- for(var jdx$1 = 0 ,jdx_finish$1 = currentContractNames.length; jdx$1 < jdx_finish$1; ++jdx$1){
648
- var cn = currentContractNames[jdx$1];
649
- var currentAddrs = currentP.addressesByContractName[cn];
650
- var existingAddrs = mergedAddresses[cn];
653
+ let mergedAddresses = Utils.Dict.shallowCopy(nextP.addressesByContractName);
654
+ let currentContractNames = Object.keys(currentP.addressesByContractName);
655
+ for (let jdx$1 = 0, jdx_finish$1 = currentContractNames.length; jdx$1 < jdx_finish$1; ++jdx$1) {
656
+ let cn = currentContractNames[jdx$1];
657
+ let currentAddrs = currentP.addressesByContractName[cn];
658
+ let existingAddrs = mergedAddresses[cn];
651
659
  if (existingAddrs !== undefined) {
652
- mergedAddresses[cn] = Belt_Array.concat(existingAddrs, currentAddrs);
660
+ mergedAddresses[cn] = existingAddrs.concat(currentAddrs);
653
661
  } else {
654
662
  mergedAddresses[cn] = currentAddrs;
655
663
  }
656
664
  }
657
- var nextContractName = Utils.$$Array.firstUnsafe(Object.keys(nextP.addressesByContractName));
658
- var hasFilterByAddresses = contractConfigs[nextContractName].filterByAddresses;
659
- var isTooFar = (currentPBlock + 20000 | 0) < nextPBlock;
665
+ let nextContractName = Utils.$$Array.firstUnsafe(Object.keys(nextP.addressesByContractName));
666
+ let hasFilterByAddresses = contractConfigs[nextContractName].filterByAddresses;
667
+ let isTooFar = (currentPBlock + 20000 | 0) < nextPBlock;
660
668
  if (isTooFar || hasFilterByAddresses) {
661
669
  mergedNonDynamic.push({
662
- id: currentP.id,
663
- latestFetchedBlock: currentP.latestFetchedBlock,
664
- selection: currentP.selection,
665
- addressesByContractName: currentP.addressesByContractName,
666
- mergeBlock: currentPBlock < nextPBlock ? nextPBlock : undefined,
667
- dynamicContract: currentP.dynamicContract,
668
- mutPendingQueries: currentP.mutPendingQueries,
669
- prevQueryRange: currentP.prevQueryRange,
670
- prevPrevQueryRange: currentP.prevPrevQueryRange,
671
- latestBlockRangeUpdateBlock: currentP.latestBlockRangeUpdateBlock
672
- });
670
+ id: currentP.id,
671
+ latestFetchedBlock: currentP.latestFetchedBlock,
672
+ selection: currentP.selection,
673
+ addressesByContractName: currentP.addressesByContractName,
674
+ mergeBlock: currentPBlock < nextPBlock ? nextPBlock : undefined,
675
+ dynamicContract: currentP.dynamicContract,
676
+ mutPendingQueries: currentP.mutPendingQueries,
677
+ prevQueryRange: currentP.prevQueryRange,
678
+ prevPrevQueryRange: currentP.prevPrevQueryRange,
679
+ latestBlockRangeUpdateBlock: currentP.latestBlockRangeUpdateBlock
680
+ });
673
681
  currentPRef = {
674
682
  id: nextP.id,
675
683
  latestFetchedBlock: nextP.latestFetchedBlock,
@@ -701,49 +709,60 @@ function createPartitionsFromIndexingAddresses(registeringContractsByContract, c
701
709
  };
702
710
  mergedNonDynamic.push(currentPRef);
703
711
  }
704
- var mergedPartitions = mergedNonDynamic.concat(dynamicPartitions);
712
+ let mergedPartitions = mergedNonDynamic.concat(dynamicPartitions);
705
713
  return make(existingPartitions.concat(mergedPartitions), maxAddrInPartition, nextPartitionIndexRef, dynamicContracts);
706
714
  }
707
715
 
708
716
  function registerDynamicContracts(fetchState, items) {
709
717
  if (Utils.$$Array.isEmpty(fetchState.normalSelection.eventConfigs)) {
710
- Js_exn.raiseError("Invalid configuration. No events to fetch for the dynamic contract registration.");
718
+ Stdlib_JsError.throwWithMessage("Invalid configuration. No events to fetch for the dynamic contract registration.");
711
719
  }
712
- var indexingContracts = fetchState.indexingContracts;
713
- var registeringContractsByContract = {};
714
- var earliestRegisteringEventBlockNumber = Infinity;
715
- var hasDCWithFilterByAddresses = false;
716
- for(var itemIdx = 0 ,itemIdx_finish = items.length; itemIdx < itemIdx_finish; ++itemIdx){
717
- var item = items[itemIdx];
718
- var dcs = item.dcs;
720
+ let indexingAddresses = fetchState.indexingAddresses;
721
+ let registeringContractsByContract = {};
722
+ let earliestRegisteringEventBlockNumber = Infinity;
723
+ let hasDCWithFilterByAddresses = false;
724
+ let noEventsAddresses = {};
725
+ for (let itemIdx = 0, itemIdx_finish = items.length; itemIdx < itemIdx_finish; ++itemIdx) {
726
+ let item = items[itemIdx];
727
+ let dcs = item.dcs;
719
728
  if (dcs !== undefined) {
720
- var idx = 0;
721
- while(idx < dcs.length) {
722
- var dc = dcs[idx];
723
- var shouldRemove = false;
724
- var match = fetchState.contractConfigs[dc.contractName];
729
+ let idx = 0;
730
+ while (idx < dcs.length) {
731
+ let dc = dcs[idx];
732
+ let shouldRemove = false;
733
+ let match = fetchState.contractConfigs[dc.contractName];
725
734
  if (match !== undefined) {
726
- var existingContract = indexingContracts[dc.address];
735
+ let dcWithStartBlock_address = dc.address;
736
+ let dcWithStartBlock_contractName = dc.contractName;
737
+ let dcWithStartBlock_registrationBlock = dc.registrationBlock;
738
+ let dcWithStartBlock_effectiveStartBlock = deriveEffectiveStartBlock(dc.registrationBlock, match.startBlock);
739
+ let dcWithStartBlock = {
740
+ address: dcWithStartBlock_address,
741
+ contractName: dcWithStartBlock_contractName,
742
+ registrationBlock: dcWithStartBlock_registrationBlock,
743
+ effectiveStartBlock: dcWithStartBlock_effectiveStartBlock
744
+ };
745
+ let existingContract = indexingAddresses[dc.address];
727
746
  if (existingContract !== undefined) {
728
747
  if (existingContract.contractName !== dc.contractName) {
729
- warnDifferentContractType(fetchState, existingContract, dc);
730
- } else if (existingContract.startBlock > dc.startBlock) {
731
- var logger = Logging.createChild({
732
- chainId: fetchState.chainId,
733
- contractAddress: dc.address,
734
- existingBlockNumber: existingContract.startBlock,
735
- newBlockNumber: dc.startBlock
736
- });
737
- Logging.childWarn(logger, "Skipping contract registration: Contract address is already registered at a later block number. Currently registration of the same contract address is not supported by Envio. Reach out to us if it's a problem for you.");
748
+ warnDifferentContractType(fetchState, existingContract, dcWithStartBlock);
749
+ } else if (existingContract.effectiveStartBlock > dcWithStartBlock_effectiveStartBlock) {
750
+ let logger = Logging.createChild({
751
+ chainId: fetchState.chainId,
752
+ contractAddress: dc.address,
753
+ existingBlockNumber: existingContract.effectiveStartBlock,
754
+ newBlockNumber: dcWithStartBlock_effectiveStartBlock
755
+ });
756
+ Logging.childWarn(logger, `Skipping contract registration: Contract address is already registered at a later block number. Currently registration of the same contract address is not supported by Envio. Reach out to us if it's a problem for you.`);
738
757
  }
739
758
  shouldRemove = true;
740
759
  } else {
741
- var registeringContracts = Utils.Dict.getOrInsertEmptyDict(registeringContractsByContract, dc.contractName);
742
- var registeringContract = registeringContracts[dc.address];
743
- var shouldUpdate;
760
+ let registeringContracts = Utils.Dict.getOrInsertEmptyDict(registeringContractsByContract, dc.contractName);
761
+ let registeringContract = registeringContracts[dc.address];
762
+ let shouldUpdate;
744
763
  if (registeringContract !== undefined) {
745
764
  if (registeringContract.contractName !== dc.contractName) {
746
- warnDifferentContractType(fetchState, registeringContract, dc);
765
+ warnDifferentContractType(fetchState, registeringContract, dcWithStartBlock);
747
766
  shouldUpdate = false;
748
767
  } else {
749
768
  shouldUpdate = false;
@@ -753,20 +772,43 @@ function registerDynamicContracts(fetchState, items) {
753
772
  shouldUpdate = true;
754
773
  }
755
774
  if (shouldUpdate) {
756
- earliestRegisteringEventBlockNumber = earliestRegisteringEventBlockNumber < dc.startBlock ? earliestRegisteringEventBlockNumber : dc.startBlock;
757
- registeringContracts[dc.address] = dc;
775
+ earliestRegisteringEventBlockNumber = Primitive_int.min(earliestRegisteringEventBlockNumber, dcWithStartBlock_effectiveStartBlock);
776
+ registeringContracts[dc.address] = dcWithStartBlock;
758
777
  } else {
759
778
  shouldRemove = true;
760
779
  }
761
780
  }
762
781
  } else {
763
- var logger$1 = Logging.createChild({
782
+ let dcAsIndexingAddress_address = dc.address;
783
+ let dcAsIndexingAddress_contractName = dc.contractName;
784
+ let dcAsIndexingAddress_registrationBlock = dc.registrationBlock;
785
+ let dcAsIndexingAddress_effectiveStartBlock = deriveEffectiveStartBlock(dc.registrationBlock, undefined);
786
+ let dcAsIndexingAddress = {
787
+ address: dcAsIndexingAddress_address,
788
+ contractName: dcAsIndexingAddress_contractName,
789
+ registrationBlock: dcAsIndexingAddress_registrationBlock,
790
+ effectiveStartBlock: dcAsIndexingAddress_effectiveStartBlock
791
+ };
792
+ let existingContract$1 = indexingAddresses[dc.address];
793
+ if (existingContract$1 !== undefined) {
794
+ if (existingContract$1.contractName !== dc.contractName) {
795
+ warnDifferentContractType(fetchState, existingContract$1, dcAsIndexingAddress);
796
+ }
797
+ shouldRemove = true;
798
+ } else {
799
+ let match$1 = noEventsAddresses[dc.address];
800
+ if (match$1 !== undefined) {
801
+ shouldRemove = true;
802
+ } else {
803
+ let logger$1 = Logging.createChild({
764
804
  chainId: fetchState.chainId,
765
805
  contractAddress: dc.address,
766
806
  contractName: dc.contractName
767
807
  });
768
- Logging.childWarn(logger$1, "Skipping contract registration: Contract doesn't have any events to fetch.");
769
- shouldRemove = true;
808
+ Logging.childWarn(logger$1, `Persisting contract registration without fetching: Contract doesn't have any events to fetch. It'll be picked up on restart if you add events for the contract.`);
809
+ noEventsAddresses[dc.address] = dcAsIndexingAddress;
810
+ }
811
+ }
770
812
  }
771
813
  if (shouldRemove) {
772
814
  dcs.splice(idx, 1);
@@ -775,104 +817,108 @@ function registerDynamicContracts(fetchState, items) {
775
817
  }
776
818
  };
777
819
  }
778
-
779
- }
780
- var dcContractNamesToStore = Object.keys(registeringContractsByContract);
781
- if (dcContractNamesToStore.length === 0) {
782
- return fetchState;
783
820
  }
784
- var newPartitions = [];
785
- var newIndexingContracts = Utils.Dict.shallowCopy(indexingContracts);
786
- var dynamicContractsRef = fetchState.optimizedPartitions.dynamicContracts;
787
- var mutExistingPartitions = Js_dict.values(fetchState.optimizedPartitions.entities);
788
- for(var idx$1 = 0 ,idx_finish = dcContractNamesToStore.length; idx$1 < idx_finish; ++idx$1){
789
- var contractName = dcContractNamesToStore[idx$1];
790
- if (!dynamicContractsRef.has(contractName)) {
791
- dynamicContractsRef = Utils.$$Set.immutableAdd(dynamicContractsRef, contractName);
792
- for(var idx$2 = 0 ,idx_finish$1 = mutExistingPartitions.length; idx$2 < idx_finish$1; ++idx$2){
793
- var p = mutExistingPartitions[idx$2];
794
- var addresses = p.addressesByContractName[contractName];
795
- if (addresses !== undefined && p.selection.dependsOnAddresses && p.mergeBlock === undefined) {
796
- var allPartitionContractNames = Object.keys(p.addressesByContractName);
797
- if (allPartitionContractNames.length !== 1) {
798
- var isFetching = p.mutPendingQueries.length !== 0;
799
- if (!isFetching) {
800
- var newPartitionId = String(fetchState.optimizedPartitions.nextPartitionIndex + newPartitions.length | 0);
801
- var restAddressesByContractName = Utils.Dict.shallowCopy(p.addressesByContractName);
802
- Utils.Dict.deleteInPlace(restAddressesByContractName, contractName);
821
+ let dcContractNamesToStore = Object.keys(registeringContractsByContract);
822
+ let hasNoEventsUpdates = !Utils.Dict.isEmpty(noEventsAddresses);
823
+ if (dcContractNamesToStore.length !== 0) {
824
+ let newPartitions = [];
825
+ let newIndexingAddresses = Utils.Dict.shallowCopy(indexingAddresses);
826
+ let dynamicContractsRef = fetchState.optimizedPartitions.dynamicContracts;
827
+ let mutExistingPartitions = Object.values(fetchState.optimizedPartitions.entities);
828
+ for (let idx$1 = 0, idx_finish = dcContractNamesToStore.length; idx$1 < idx_finish; ++idx$1) {
829
+ let contractName = dcContractNamesToStore[idx$1];
830
+ if (!dynamicContractsRef.has(contractName)) {
831
+ dynamicContractsRef = Utils.$$Set.immutableAdd(dynamicContractsRef, contractName);
832
+ for (let idx$2 = 0, idx_finish$1 = mutExistingPartitions.length; idx$2 < idx_finish$1; ++idx$2) {
833
+ let p = mutExistingPartitions[idx$2];
834
+ let addresses = p.addressesByContractName[contractName];
835
+ if (addresses !== undefined && p.selection.dependsOnAddresses && p.mergeBlock === undefined) {
836
+ let allPartitionContractNames = Object.keys(p.addressesByContractName);
837
+ if (allPartitionContractNames.length !== 1) {
838
+ let isFetching = p.mutPendingQueries.length !== 0;
839
+ if (!isFetching) {
840
+ let newPartitionId = (fetchState.optimizedPartitions.nextPartitionIndex + newPartitions.length | 0).toString();
841
+ let restAddressesByContractName = Utils.Dict.shallowCopy(p.addressesByContractName);
842
+ Utils.Dict.deleteInPlace(restAddressesByContractName, contractName);
843
+ mutExistingPartitions[idx$2] = {
844
+ id: p.id,
845
+ latestFetchedBlock: p.latestFetchedBlock,
846
+ selection: p.selection,
847
+ addressesByContractName: restAddressesByContractName,
848
+ mergeBlock: p.mergeBlock,
849
+ dynamicContract: p.dynamicContract,
850
+ mutPendingQueries: p.mutPendingQueries,
851
+ prevQueryRange: p.prevQueryRange,
852
+ prevPrevQueryRange: p.prevPrevQueryRange,
853
+ latestBlockRangeUpdateBlock: p.latestBlockRangeUpdateBlock
854
+ };
855
+ let addressesByContractName = {};
856
+ addressesByContractName[contractName] = addresses;
857
+ newPartitions.push({
858
+ id: newPartitionId,
859
+ latestFetchedBlock: p.latestFetchedBlock,
860
+ selection: fetchState.normalSelection,
861
+ addressesByContractName: addressesByContractName,
862
+ mergeBlock: undefined,
863
+ dynamicContract: contractName,
864
+ mutPendingQueries: p.mutPendingQueries,
865
+ prevQueryRange: p.prevQueryRange,
866
+ prevPrevQueryRange: p.prevPrevQueryRange,
867
+ latestBlockRangeUpdateBlock: p.latestBlockRangeUpdateBlock
868
+ });
869
+ }
870
+ } else {
803
871
  mutExistingPartitions[idx$2] = {
804
872
  id: p.id,
805
873
  latestFetchedBlock: p.latestFetchedBlock,
806
874
  selection: p.selection,
807
- addressesByContractName: restAddressesByContractName,
875
+ addressesByContractName: p.addressesByContractName,
808
876
  mergeBlock: p.mergeBlock,
809
- dynamicContract: p.dynamicContract,
877
+ dynamicContract: contractName,
810
878
  mutPendingQueries: p.mutPendingQueries,
811
879
  prevQueryRange: p.prevQueryRange,
812
880
  prevPrevQueryRange: p.prevPrevQueryRange,
813
881
  latestBlockRangeUpdateBlock: p.latestBlockRangeUpdateBlock
814
882
  };
815
- var addressesByContractName = {};
816
- addressesByContractName[contractName] = addresses;
817
- newPartitions.push({
818
- id: newPartitionId,
819
- latestFetchedBlock: p.latestFetchedBlock,
820
- selection: fetchState.normalSelection,
821
- addressesByContractName: addressesByContractName,
822
- mergeBlock: undefined,
823
- dynamicContract: contractName,
824
- mutPendingQueries: p.mutPendingQueries,
825
- prevQueryRange: p.prevQueryRange,
826
- prevPrevQueryRange: p.prevPrevQueryRange,
827
- latestBlockRangeUpdateBlock: p.latestBlockRangeUpdateBlock
828
- });
829
883
  }
830
-
831
- } else {
832
- mutExistingPartitions[idx$2] = {
833
- id: p.id,
834
- latestFetchedBlock: p.latestFetchedBlock,
835
- selection: p.selection,
836
- addressesByContractName: p.addressesByContractName,
837
- mergeBlock: p.mergeBlock,
838
- dynamicContract: contractName,
839
- mutPendingQueries: p.mutPendingQueries,
840
- prevQueryRange: p.prevQueryRange,
841
- prevPrevQueryRange: p.prevPrevQueryRange,
842
- latestBlockRangeUpdateBlock: p.latestBlockRangeUpdateBlock
843
- };
844
884
  }
845
885
  }
846
-
847
886
  }
887
+ let registeringContracts$1 = registeringContractsByContract[contractName];
888
+ Object.assign(newIndexingAddresses, registeringContracts$1);
848
889
  }
849
- var registeringContracts$1 = registeringContractsByContract[contractName];
850
- Object.assign(newIndexingContracts, registeringContracts$1);
890
+ Object.assign(newIndexingAddresses, noEventsAddresses);
891
+ let optimizedPartitions = createPartitionsFromIndexingAddresses(registeringContractsByContract, fetchState.contractConfigs, dynamicContractsRef, fetchState.normalSelection, fetchState.optimizedPartitions.maxAddrInPartition, fetchState.optimizedPartitions.nextPartitionIndex + newPartitions.length | 0, mutExistingPartitions.concat(newPartitions), 0);
892
+ return updateInternal(fetchState, optimizedPartitions, newIndexingAddresses, undefined, undefined, undefined);
893
+ }
894
+ if (!hasNoEventsUpdates) {
895
+ return fetchState;
851
896
  }
852
- var optimizedPartitions = createPartitionsFromIndexingAddresses(registeringContractsByContract, fetchState.contractConfigs, dynamicContractsRef, fetchState.normalSelection, fetchState.optimizedPartitions.maxAddrInPartition, fetchState.optimizedPartitions.nextPartitionIndex + newPartitions.length | 0, mutExistingPartitions.concat(newPartitions), 0);
853
- return updateInternal(fetchState, optimizedPartitions, newIndexingContracts, undefined, undefined, undefined);
897
+ let newIndexingContracts = Utils.Dict.shallowCopy(indexingAddresses);
898
+ Object.assign(newIndexingContracts, noEventsAddresses);
899
+ return updateInternal(fetchState, undefined, newIndexingContracts, undefined, undefined, undefined);
854
900
  }
855
901
 
856
902
  function handleQueryResult(fetchState, query, latestFetchedBlock, newItems) {
857
- return updateInternal(fetchState, handleQueryResponse(fetchState.optimizedPartitions, query, fetchState.knownHeight, latestFetchedBlock), undefined, newItems.length !== 0 ? Belt_Array.concat(fetchState.buffer, newItems) : undefined, undefined, undefined);
903
+ return updateInternal(fetchState, handleQueryResponse(fetchState.optimizedPartitions, query, fetchState.knownHeight, latestFetchedBlock), undefined, newItems.length !== 0 ? fetchState.buffer.concat(newItems) : undefined, undefined, undefined);
858
904
  }
859
905
 
860
906
  function startFetchingQueries(param, queries) {
861
- var optimizedPartitions = param.optimizedPartitions;
862
- for(var qIdx = 0 ,qIdx_finish = queries.length; qIdx < qIdx_finish; ++qIdx){
863
- var q = queries[qIdx];
864
- var partitionId = q.partitionId;
865
- var p = Js_dict.get(optimizedPartitions.entities, partitionId);
866
- var p$1 = p !== undefined ? p : Js_exn.raiseError("Unexpected case: Couldn't find partition " + partitionId);
867
- var pq = {
907
+ let optimizedPartitions = param.optimizedPartitions;
908
+ for (let qIdx = 0, qIdx_finish = queries.length; qIdx < qIdx_finish; ++qIdx) {
909
+ let q = queries[qIdx];
910
+ let partitionId = q.partitionId;
911
+ let p = optimizedPartitions.entities[partitionId];
912
+ let p$1 = p !== undefined ? p : Stdlib_JsError.throwWithMessage(`Unexpected case: Couldn't find partition ` + partitionId);
913
+ let pq = {
868
914
  fromBlock: q.fromBlock,
869
915
  toBlock: q.toBlock,
870
916
  isChunk: q.isChunk,
871
917
  fetchedBlock: undefined
872
918
  };
873
- var inserted = false;
874
- var i = 0;
875
- while(i < p$1.mutPendingQueries.length && !inserted) {
919
+ let inserted = false;
920
+ let i = 0;
921
+ while (i < p$1.mutPendingQueries.length && !inserted) {
876
922
  if (p$1.mutPendingQueries[i].fromBlock > q.fromBlock) {
877
923
  p$1.mutPendingQueries.splice(i, 0, pq);
878
924
  inserted = true;
@@ -882,175 +928,170 @@ function startFetchingQueries(param, queries) {
882
928
  if (!inserted) {
883
929
  p$1.mutPendingQueries.push(pq);
884
930
  }
885
-
886
931
  }
887
932
  }
888
933
 
889
- function pushQueriesForRange(queries, partitionId, rangeFromBlock, rangeEndBlock, maxQueryBlockNumber, maybeChunkRange, selection, addressesByContractName, indexingContracts) {
934
+ function pushQueriesForRange(queries, partitionId, rangeFromBlock, rangeEndBlock, maxQueryBlockNumber, maybeChunkRange, selection, addressesByContractName, indexingAddresses) {
890
935
  if (rangeFromBlock > maxQueryBlockNumber) {
891
- return ;
936
+ return;
892
937
  }
893
938
  if (rangeEndBlock !== undefined && rangeFromBlock > rangeEndBlock) {
894
- return ;
939
+ return;
895
940
  }
896
941
  if (maybeChunkRange !== undefined) {
897
- var maxBlock = rangeEndBlock !== undefined ? rangeEndBlock : maxQueryBlockNumber;
898
- var chunkSize = Js_math.ceil_int(maybeChunkRange * 1.8);
942
+ let maxBlock = rangeEndBlock !== undefined ? rangeEndBlock : maxQueryBlockNumber;
943
+ let chunkSize = Js_math.ceil_int(maybeChunkRange * 1.8);
899
944
  if (((rangeFromBlock + (chunkSize << 1) | 0) - 1 | 0) <= maxBlock) {
900
945
  queries.push({
901
- partitionId: partitionId,
902
- fromBlock: rangeFromBlock,
903
- toBlock: (rangeFromBlock + chunkSize | 0) - 1 | 0,
904
- isChunk: true,
905
- selection: selection,
906
- addressesByContractName: addressesByContractName,
907
- indexingContracts: indexingContracts
908
- });
946
+ partitionId: partitionId,
947
+ fromBlock: rangeFromBlock,
948
+ toBlock: (rangeFromBlock + chunkSize | 0) - 1 | 0,
949
+ isChunk: true,
950
+ selection: selection,
951
+ addressesByContractName: addressesByContractName,
952
+ indexingAddresses: indexingAddresses
953
+ });
909
954
  queries.push({
910
- partitionId: partitionId,
911
- fromBlock: rangeFromBlock + chunkSize | 0,
912
- toBlock: (rangeFromBlock + (chunkSize << 1) | 0) - 1 | 0,
913
- isChunk: true,
914
- selection: selection,
915
- addressesByContractName: addressesByContractName,
916
- indexingContracts: indexingContracts
917
- });
955
+ partitionId: partitionId,
956
+ fromBlock: rangeFromBlock + chunkSize | 0,
957
+ toBlock: (rangeFromBlock + (chunkSize << 1) | 0) - 1 | 0,
958
+ isChunk: true,
959
+ selection: selection,
960
+ addressesByContractName: addressesByContractName,
961
+ indexingAddresses: indexingAddresses
962
+ });
918
963
  } else {
919
964
  queries.push({
920
- partitionId: partitionId,
921
- fromBlock: rangeFromBlock,
922
- toBlock: rangeEndBlock,
923
- isChunk: rangeEndBlock !== undefined,
924
- selection: selection,
925
- addressesByContractName: addressesByContractName,
926
- indexingContracts: indexingContracts
927
- });
928
- }
929
- return ;
930
- }
931
- queries.push({
932
965
  partitionId: partitionId,
933
966
  fromBlock: rangeFromBlock,
934
967
  toBlock: rangeEndBlock,
935
- isChunk: false,
968
+ isChunk: rangeEndBlock !== undefined,
936
969
  selection: selection,
937
970
  addressesByContractName: addressesByContractName,
938
- indexingContracts: indexingContracts
971
+ indexingAddresses: indexingAddresses
939
972
  });
973
+ }
974
+ return;
975
+ }
976
+ queries.push({
977
+ partitionId: partitionId,
978
+ fromBlock: rangeFromBlock,
979
+ toBlock: rangeEndBlock,
980
+ isChunk: false,
981
+ selection: selection,
982
+ addressesByContractName: addressesByContractName,
983
+ indexingAddresses: indexingAddresses
984
+ });
940
985
  }
941
986
 
942
987
  function getNextQuery(fetchState, concurrencyLimit) {
943
- var knownHeight = fetchState.knownHeight;
944
- var blockLag = fetchState.blockLag;
945
- var indexingContracts = fetchState.indexingContracts;
946
- var optimizedPartitions = fetchState.optimizedPartitions;
947
- var headBlockNumber = knownHeight - blockLag | 0;
988
+ let knownHeight = fetchState.knownHeight;
989
+ let blockLag = fetchState.blockLag;
990
+ let indexingAddresses = fetchState.indexingAddresses;
991
+ let optimizedPartitions = fetchState.optimizedPartitions;
992
+ let headBlockNumber = knownHeight - blockLag | 0;
948
993
  if (headBlockNumber <= 0) {
949
994
  return "WaitingForNewBlock";
950
995
  }
951
996
  if (concurrencyLimit === 0) {
952
997
  return "ReachedMaxConcurrency";
953
998
  }
954
- var isOnBlockBehindTheHead = fetchState.latestOnBlockBlockNumber < headBlockNumber;
955
- var endBlock = fetchState.endBlock;
956
- var shouldWaitForNewBlock = (
999
+ let isOnBlockBehindTheHead = fetchState.latestOnBlockBlockNumber < headBlockNumber;
1000
+ let endBlock = fetchState.endBlock;
1001
+ let shouldWaitForNewBlock = (
957
1002
  endBlock !== undefined ? headBlockNumber < endBlock : true
958
1003
  ) && !isOnBlockBehindTheHead;
959
- var item = Belt_Array.get(fetchState.buffer, fetchState.targetBufferSize - 1 | 0);
960
- var maxQueryBlockNumber = item !== undefined && item.blockNumber < knownHeight ? item.blockNumber : knownHeight;
961
- var queries = [];
962
- var partitionsCount = optimizedPartitions.idsInAscOrder.length;
963
- var idxRef = 0;
964
- while(idxRef < partitionsCount) {
965
- var idx = idxRef;
966
- var partitionId = optimizedPartitions.idsInAscOrder[idx];
967
- var p = optimizedPartitions.entities[partitionId];
968
- var isBehindTheHead = p.latestFetchedBlock.blockNumber < headBlockNumber;
969
- var hasPendingQueries = Utils.$$Array.notEmpty(p.mutPendingQueries);
1004
+ let item = fetchState.buffer[fetchState.targetBufferSize - 1 | 0];
1005
+ let maxQueryBlockNumber = item !== undefined ? Primitive_int.min(item.blockNumber, knownHeight) : knownHeight;
1006
+ let queries = [];
1007
+ let partitionsCount = optimizedPartitions.idsInAscOrder.length;
1008
+ let idxRef = 0;
1009
+ while (idxRef < partitionsCount) {
1010
+ let idx = idxRef;
1011
+ let partitionId = optimizedPartitions.idsInAscOrder[idx];
1012
+ let p = optimizedPartitions.entities[partitionId];
1013
+ let isBehindTheHead = p.latestFetchedBlock.blockNumber < headBlockNumber;
1014
+ let hasPendingQueries = Utils.$$Array.notEmpty(p.mutPendingQueries);
970
1015
  if (hasPendingQueries || isBehindTheHead) {
971
1016
  shouldWaitForNewBlock = false;
972
1017
  }
973
- var queryEndBlock = Utils.$$Math.minOptInt(fetchState.endBlock, p.mergeBlock);
974
- var queryEndBlock$1 = blockLag !== 0 ? Utils.$$Math.minOptInt(headBlockNumber, queryEndBlock) : queryEndBlock;
975
- var match = maxQueryBlockNumber < knownHeight;
976
- var queryEndBlock$2 = queryEndBlock$1 !== undefined ? (
977
- match ? (
978
- maxQueryBlockNumber < queryEndBlock$1 ? maxQueryBlockNumber : queryEndBlock$1
979
- ) : queryEndBlock$1
1018
+ let queryEndBlock = Utils.$$Math.minOptInt(fetchState.endBlock, p.mergeBlock);
1019
+ let queryEndBlock$1 = blockLag !== 0 ? Utils.$$Math.minOptInt(headBlockNumber, queryEndBlock) : queryEndBlock;
1020
+ let match = maxQueryBlockNumber < knownHeight;
1021
+ let queryEndBlock$2 = queryEndBlock$1 !== undefined ? (
1022
+ match ? Primitive_int.min(maxQueryBlockNumber, queryEndBlock$1) : queryEndBlock$1
980
1023
  ) : (
981
1024
  match ? maxQueryBlockNumber : queryEndBlock$1
982
1025
  );
983
- var maybeChunkRange = getMinHistoryRange(p);
984
- var cursor = p.latestFetchedBlock.blockNumber + 1 | 0;
985
- var canContinue = true;
986
- var pqIdx = 0;
987
- while(pqIdx < p.mutPendingQueries.length && canContinue) {
988
- var pq = p.mutPendingQueries[pqIdx];
1026
+ let maybeChunkRange = getMinHistoryRange(p);
1027
+ let cursor = p.latestFetchedBlock.blockNumber + 1 | 0;
1028
+ let canContinue = true;
1029
+ let pqIdx = 0;
1030
+ while (pqIdx < p.mutPendingQueries.length && canContinue) {
1031
+ let pq = p.mutPendingQueries[pqIdx];
989
1032
  if (pq.fromBlock > cursor) {
990
- var addressesByContractName = p.addressesByContractName;
991
- var selection = p.selection;
992
- var rangeEndBlock = Utils.$$Math.minOptInt(pq.fromBlock - 1 | 0, queryEndBlock$2);
993
- var rangeFromBlock = cursor;
1033
+ let addressesByContractName = p.addressesByContractName;
1034
+ let selection = p.selection;
1035
+ let rangeEndBlock = Utils.$$Math.minOptInt(pq.fromBlock - 1 | 0, queryEndBlock$2);
1036
+ let rangeFromBlock = cursor;
994
1037
  if (rangeFromBlock <= maxQueryBlockNumber) {
995
- var exit = 0;
1038
+ let exit = 0;
996
1039
  if (!(rangeEndBlock !== undefined && rangeFromBlock > rangeEndBlock)) {
997
1040
  exit = 1;
998
1041
  }
999
1042
  if (exit === 1) {
1000
1043
  if (maybeChunkRange !== undefined) {
1001
- var maxBlock = rangeEndBlock !== undefined ? rangeEndBlock : maxQueryBlockNumber;
1002
- var chunkSize = Js_math.ceil_int(maybeChunkRange * 1.8);
1044
+ let maxBlock = rangeEndBlock !== undefined ? rangeEndBlock : maxQueryBlockNumber;
1045
+ let chunkSize = Js_math.ceil_int(maybeChunkRange * 1.8);
1003
1046
  if (((rangeFromBlock + (chunkSize << 1) | 0) - 1 | 0) <= maxBlock) {
1004
1047
  queries.push({
1005
- partitionId: partitionId,
1006
- fromBlock: rangeFromBlock,
1007
- toBlock: (rangeFromBlock + chunkSize | 0) - 1 | 0,
1008
- isChunk: true,
1009
- selection: selection,
1010
- addressesByContractName: addressesByContractName,
1011
- indexingContracts: indexingContracts
1012
- });
1048
+ partitionId: partitionId,
1049
+ fromBlock: rangeFromBlock,
1050
+ toBlock: (rangeFromBlock + chunkSize | 0) - 1 | 0,
1051
+ isChunk: true,
1052
+ selection: selection,
1053
+ addressesByContractName: addressesByContractName,
1054
+ indexingAddresses: indexingAddresses
1055
+ });
1013
1056
  queries.push({
1014
- partitionId: partitionId,
1015
- fromBlock: rangeFromBlock + chunkSize | 0,
1016
- toBlock: (rangeFromBlock + (chunkSize << 1) | 0) - 1 | 0,
1017
- isChunk: true,
1018
- selection: selection,
1019
- addressesByContractName: addressesByContractName,
1020
- indexingContracts: indexingContracts
1021
- });
1057
+ partitionId: partitionId,
1058
+ fromBlock: rangeFromBlock + chunkSize | 0,
1059
+ toBlock: (rangeFromBlock + (chunkSize << 1) | 0) - 1 | 0,
1060
+ isChunk: true,
1061
+ selection: selection,
1062
+ addressesByContractName: addressesByContractName,
1063
+ indexingAddresses: indexingAddresses
1064
+ });
1022
1065
  } else {
1023
1066
  queries.push({
1024
- partitionId: partitionId,
1025
- fromBlock: rangeFromBlock,
1026
- toBlock: rangeEndBlock,
1027
- isChunk: rangeEndBlock !== undefined,
1028
- selection: selection,
1029
- addressesByContractName: addressesByContractName,
1030
- indexingContracts: indexingContracts
1031
- });
1067
+ partitionId: partitionId,
1068
+ fromBlock: rangeFromBlock,
1069
+ toBlock: rangeEndBlock,
1070
+ isChunk: rangeEndBlock !== undefined,
1071
+ selection: selection,
1072
+ addressesByContractName: addressesByContractName,
1073
+ indexingAddresses: indexingAddresses
1074
+ });
1032
1075
  }
1033
1076
  } else {
1034
1077
  queries.push({
1035
- partitionId: partitionId,
1036
- fromBlock: rangeFromBlock,
1037
- toBlock: rangeEndBlock,
1038
- isChunk: false,
1039
- selection: selection,
1040
- addressesByContractName: addressesByContractName,
1041
- indexingContracts: indexingContracts
1042
- });
1078
+ partitionId: partitionId,
1079
+ fromBlock: rangeFromBlock,
1080
+ toBlock: rangeEndBlock,
1081
+ isChunk: false,
1082
+ selection: selection,
1083
+ addressesByContractName: addressesByContractName,
1084
+ indexingAddresses: indexingAddresses
1085
+ });
1043
1086
  }
1044
1087
  }
1045
-
1046
1088
  }
1047
-
1048
1089
  }
1049
- var toBlock = pq.toBlock;
1090
+ let toBlock = pq.toBlock;
1050
1091
  if (toBlock !== undefined && pq.isChunk) {
1051
- var match$1 = pq.fetchedBlock;
1092
+ let match$1 = pq.fetchedBlock;
1052
1093
  if (match$1 !== undefined) {
1053
- var blockNumber = match$1.blockNumber;
1094
+ let blockNumber = match$1.blockNumber;
1054
1095
  cursor = blockNumber < toBlock ? blockNumber + 1 | 0 : toBlock + 1 | 0;
1055
1096
  } else {
1056
1097
  cursor = toBlock + 1 | 0;
@@ -1061,63 +1102,61 @@ function getNextQuery(fetchState, concurrencyLimit) {
1061
1102
  pqIdx = pqIdx + 1 | 0;
1062
1103
  };
1063
1104
  if (canContinue) {
1064
- var addressesByContractName$1 = p.addressesByContractName;
1065
- var selection$1 = p.selection;
1066
- var rangeFromBlock$1 = cursor;
1105
+ let addressesByContractName$1 = p.addressesByContractName;
1106
+ let selection$1 = p.selection;
1107
+ let rangeFromBlock$1 = cursor;
1067
1108
  if (rangeFromBlock$1 <= maxQueryBlockNumber) {
1068
- var exit$1 = 0;
1109
+ let exit$1 = 0;
1069
1110
  if (!(queryEndBlock$2 !== undefined && rangeFromBlock$1 > queryEndBlock$2)) {
1070
1111
  exit$1 = 1;
1071
1112
  }
1072
1113
  if (exit$1 === 1) {
1073
1114
  if (maybeChunkRange !== undefined) {
1074
- var maxBlock$1 = queryEndBlock$2 !== undefined ? queryEndBlock$2 : maxQueryBlockNumber;
1075
- var chunkSize$1 = Js_math.ceil_int(maybeChunkRange * 1.8);
1115
+ let maxBlock$1 = queryEndBlock$2 !== undefined ? queryEndBlock$2 : maxQueryBlockNumber;
1116
+ let chunkSize$1 = Js_math.ceil_int(maybeChunkRange * 1.8);
1076
1117
  if (((rangeFromBlock$1 + (chunkSize$1 << 1) | 0) - 1 | 0) <= maxBlock$1) {
1077
1118
  queries.push({
1078
- partitionId: partitionId,
1079
- fromBlock: rangeFromBlock$1,
1080
- toBlock: (rangeFromBlock$1 + chunkSize$1 | 0) - 1 | 0,
1081
- isChunk: true,
1082
- selection: selection$1,
1083
- addressesByContractName: addressesByContractName$1,
1084
- indexingContracts: indexingContracts
1085
- });
1119
+ partitionId: partitionId,
1120
+ fromBlock: rangeFromBlock$1,
1121
+ toBlock: (rangeFromBlock$1 + chunkSize$1 | 0) - 1 | 0,
1122
+ isChunk: true,
1123
+ selection: selection$1,
1124
+ addressesByContractName: addressesByContractName$1,
1125
+ indexingAddresses: indexingAddresses
1126
+ });
1086
1127
  queries.push({
1087
- partitionId: partitionId,
1088
- fromBlock: rangeFromBlock$1 + chunkSize$1 | 0,
1089
- toBlock: (rangeFromBlock$1 + (chunkSize$1 << 1) | 0) - 1 | 0,
1090
- isChunk: true,
1091
- selection: selection$1,
1092
- addressesByContractName: addressesByContractName$1,
1093
- indexingContracts: indexingContracts
1094
- });
1128
+ partitionId: partitionId,
1129
+ fromBlock: rangeFromBlock$1 + chunkSize$1 | 0,
1130
+ toBlock: (rangeFromBlock$1 + (chunkSize$1 << 1) | 0) - 1 | 0,
1131
+ isChunk: true,
1132
+ selection: selection$1,
1133
+ addressesByContractName: addressesByContractName$1,
1134
+ indexingAddresses: indexingAddresses
1135
+ });
1095
1136
  } else {
1096
1137
  queries.push({
1097
- partitionId: partitionId,
1098
- fromBlock: rangeFromBlock$1,
1099
- toBlock: queryEndBlock$2,
1100
- isChunk: queryEndBlock$2 !== undefined,
1101
- selection: selection$1,
1102
- addressesByContractName: addressesByContractName$1,
1103
- indexingContracts: indexingContracts
1104
- });
1138
+ partitionId: partitionId,
1139
+ fromBlock: rangeFromBlock$1,
1140
+ toBlock: queryEndBlock$2,
1141
+ isChunk: queryEndBlock$2 !== undefined,
1142
+ selection: selection$1,
1143
+ addressesByContractName: addressesByContractName$1,
1144
+ indexingAddresses: indexingAddresses
1145
+ });
1105
1146
  }
1106
1147
  } else {
1107
1148
  queries.push({
1108
- partitionId: partitionId,
1109
- fromBlock: rangeFromBlock$1,
1110
- toBlock: queryEndBlock$2,
1111
- isChunk: false,
1112
- selection: selection$1,
1113
- addressesByContractName: addressesByContractName$1,
1114
- indexingContracts: indexingContracts
1115
- });
1149
+ partitionId: partitionId,
1150
+ fromBlock: rangeFromBlock$1,
1151
+ toBlock: queryEndBlock$2,
1152
+ isChunk: false,
1153
+ selection: selection$1,
1154
+ addressesByContractName: addressesByContractName$1,
1155
+ indexingAddresses: indexingAddresses
1156
+ });
1116
1157
  }
1117
1158
  }
1118
-
1119
1159
  }
1120
-
1121
1160
  }
1122
1161
  idxRef = idxRef + 1 | 0;
1123
1162
  };
@@ -1128,22 +1167,20 @@ function getNextQuery(fetchState, concurrencyLimit) {
1128
1167
  return "NothingToQuery";
1129
1168
  }
1130
1169
  }
1131
- var queries$1 = queries.length > concurrencyLimit ? (queries.sort(function (a, b) {
1132
- return a.fromBlock - b.fromBlock | 0;
1133
- }), queries.slice(0, concurrencyLimit)) : queries;
1170
+ let queries$1 = queries.length > concurrencyLimit ? (queries.sort((a, b) => Primitive_int.compare(a.fromBlock, b.fromBlock)), queries.slice(0, concurrencyLimit)) : queries;
1134
1171
  return {
1135
- TAG: "Ready",
1136
- _0: queries$1
1137
- };
1172
+ TAG: "Ready",
1173
+ _0: queries$1
1174
+ };
1138
1175
  }
1139
1176
 
1140
1177
  function getTimestampAt(fetchState, index) {
1141
- var match = Belt_Array.get(fetchState.buffer, index);
1178
+ let match = Belt_Array.get(fetchState.buffer, index);
1142
1179
  if (match !== undefined) {
1143
1180
  if (match.kind === 0) {
1144
1181
  return match.timestamp;
1145
1182
  } else {
1146
- return Js_exn.raiseError("Block handlers are not supported for ordered multichain mode.");
1183
+ return Stdlib_JsError.throwWithMessage("Block handlers are not supported for ordered multichain mode.");
1147
1184
  }
1148
1185
  } else {
1149
1186
  return bufferBlock(fetchState).blockTimestamp;
@@ -1151,7 +1188,7 @@ function getTimestampAt(fetchState, index) {
1151
1188
  }
1152
1189
 
1153
1190
  function hasReadyItem(fetchState) {
1154
- var item = Belt_Array.get(fetchState.buffer, 0);
1191
+ let item = Belt_Array.get(fetchState.buffer, 0);
1155
1192
  if (item !== undefined) {
1156
1193
  return item.blockNumber <= bufferBlockNumber(fetchState);
1157
1194
  } else {
@@ -1160,19 +1197,18 @@ function hasReadyItem(fetchState) {
1160
1197
  }
1161
1198
 
1162
1199
  function getReadyItemsCount(fetchState, targetSize, fromItem) {
1163
- var readyBlockNumber = bufferBlockNumber(fetchState);
1164
- var acc = 0;
1165
- var isFinished = false;
1166
- while(!isFinished) {
1167
- var item = Belt_Array.get(fetchState.buffer, fromItem + acc | 0);
1200
+ let readyBlockNumber = bufferBlockNumber(fetchState);
1201
+ let acc = 0;
1202
+ let isFinished = false;
1203
+ while (!isFinished) {
1204
+ let item = Belt_Array.get(fetchState.buffer, fromItem + acc | 0);
1168
1205
  if (item !== undefined) {
1169
- var itemBlockNumber = item.blockNumber;
1206
+ let itemBlockNumber = item.blockNumber;
1170
1207
  if (itemBlockNumber <= readyBlockNumber) {
1171
1208
  acc = acc + 1 | 0;
1172
1209
  if (acc === targetSize) {
1173
1210
  readyBlockNumber = itemBlockNumber;
1174
1211
  }
1175
-
1176
1212
  } else {
1177
1213
  isFinished = true;
1178
1214
  }
@@ -1183,83 +1219,100 @@ function getReadyItemsCount(fetchState, targetSize, fromItem) {
1183
1219
  return acc;
1184
1220
  }
1185
1221
 
1186
- function make$1(startBlock, endBlock, eventConfigs, contracts, maxAddrInPartition, chainId, targetBufferSize, knownHeight, progressBlockNumberOpt, onBlockConfigsOpt, blockLagOpt, firstEventBlockOpt) {
1187
- var progressBlockNumber = progressBlockNumberOpt !== undefined ? progressBlockNumberOpt : startBlock - 1 | 0;
1188
- var onBlockConfigs = onBlockConfigsOpt !== undefined ? onBlockConfigsOpt : [];
1189
- var blockLag = blockLagOpt !== undefined ? blockLagOpt : 0;
1190
- var firstEventBlock = firstEventBlockOpt !== undefined ? Caml_option.valFromOption(firstEventBlockOpt) : undefined;
1191
- var latestFetchedBlock = {
1222
+ function make$1(startBlock, endBlock, eventConfigs, addresses, maxAddrInPartition, chainId, targetBufferSize, knownHeight, progressBlockNumberOpt, onBlockConfigsOpt, blockLagOpt, firstEventBlockOpt) {
1223
+ let progressBlockNumber = progressBlockNumberOpt !== undefined ? progressBlockNumberOpt : startBlock - 1 | 0;
1224
+ let onBlockConfigs = onBlockConfigsOpt !== undefined ? onBlockConfigsOpt : [];
1225
+ let blockLag = blockLagOpt !== undefined ? blockLagOpt : 0;
1226
+ let firstEventBlock = firstEventBlockOpt !== undefined ? Primitive_option.valFromOption(firstEventBlockOpt) : undefined;
1227
+ let latestFetchedBlock = {
1192
1228
  blockNumber: progressBlockNumber,
1193
1229
  blockTimestamp: 0
1194
1230
  };
1195
- var notDependingOnAddresses = [];
1196
- var normalEventConfigs = [];
1197
- var contractNamesWithNormalEvents = new Set();
1198
- var indexingContracts = {};
1199
- var contractConfigs = {};
1200
- Belt_Array.forEach(eventConfigs, (function (ec) {
1201
- var match = contractConfigs[ec.contractName];
1202
- if (match !== undefined) {
1203
- contractConfigs[ec.contractName] = {
1204
- filterByAddresses: match.filterByAddresses || ec.filterByAddresses
1205
- };
1206
- } else {
1207
- contractConfigs[ec.contractName] = {
1208
- filterByAddresses: ec.filterByAddresses
1209
- };
1210
- }
1211
- if (ec.dependsOnAddresses) {
1212
- normalEventConfigs.push(ec);
1213
- contractNamesWithNormalEvents.add(ec.contractName);
1214
- } else {
1215
- notDependingOnAddresses.push(ec);
1216
- }
1217
- }));
1218
- var partitions = [];
1231
+ let notDependingOnAddresses = [];
1232
+ let normalEventConfigs = [];
1233
+ let contractNamesWithNormalEvents = new Set();
1234
+ let indexingAddresses = {};
1235
+ let contractConfigs = {};
1236
+ eventConfigs.forEach(ec => {
1237
+ let match = contractConfigs[ec.contractName];
1238
+ if (match !== undefined) {
1239
+ let startBlock = match.startBlock;
1240
+ let match$1 = ec.startBlock;
1241
+ contractConfigs[ec.contractName] = {
1242
+ filterByAddresses: match.filterByAddresses || ec.filterByAddresses,
1243
+ startBlock: startBlock !== undefined ? (
1244
+ match$1 !== undefined ? Primitive_int.min(startBlock, match$1) : startBlock
1245
+ ) : (
1246
+ match$1 !== undefined ? match$1 : undefined
1247
+ )
1248
+ };
1249
+ } else {
1250
+ contractConfigs[ec.contractName] = {
1251
+ filterByAddresses: ec.filterByAddresses,
1252
+ startBlock: ec.startBlock
1253
+ };
1254
+ }
1255
+ if (ec.dependsOnAddresses) {
1256
+ normalEventConfigs.push(ec);
1257
+ contractNamesWithNormalEvents.add(ec.contractName);
1258
+ } else {
1259
+ notDependingOnAddresses.push(ec);
1260
+ }
1261
+ });
1262
+ let partitions = [];
1219
1263
  if (notDependingOnAddresses.length !== 0) {
1220
1264
  partitions.push({
1221
- id: String(partitions.length),
1222
- latestFetchedBlock: latestFetchedBlock,
1223
- selection: {
1224
- eventConfigs: notDependingOnAddresses,
1225
- dependsOnAddresses: false
1226
- },
1227
- addressesByContractName: {},
1228
- mergeBlock: undefined,
1229
- dynamicContract: undefined,
1230
- mutPendingQueries: [],
1231
- prevQueryRange: 0,
1232
- prevPrevQueryRange: 0,
1233
- latestBlockRangeUpdateBlock: 0
1234
- });
1265
+ id: partitions.length.toString(),
1266
+ latestFetchedBlock: latestFetchedBlock,
1267
+ selection: {
1268
+ eventConfigs: notDependingOnAddresses,
1269
+ dependsOnAddresses: false
1270
+ },
1271
+ addressesByContractName: {},
1272
+ mergeBlock: undefined,
1273
+ dynamicContract: undefined,
1274
+ mutPendingQueries: [],
1275
+ prevQueryRange: 0,
1276
+ prevPrevQueryRange: 0,
1277
+ latestBlockRangeUpdateBlock: 0
1278
+ });
1235
1279
  }
1236
- var normalSelection = {
1280
+ let normalSelection = {
1237
1281
  eventConfigs: normalEventConfigs,
1238
1282
  dependsOnAddresses: true
1239
1283
  };
1240
- var registeringContractsByContract = {};
1241
- var dynamicContracts = new Set();
1242
- if (normalEventConfigs.length !== 0) {
1243
- Belt_Array.forEach(contracts, (function (contract) {
1244
- var contractName = contract.contractName;
1245
- if (!contractNamesWithNormalEvents.has(contractName)) {
1246
- return ;
1247
- }
1248
- var registeringContracts = Utils.Dict.getOrInsertEmptyDict(registeringContractsByContract, contractName);
1249
- registeringContracts[contract.address] = contract;
1250
- indexingContracts[contract.address] = contract;
1251
- if (contract.registrationBlock !== undefined) {
1252
- dynamicContracts.add(contractName);
1253
- return ;
1254
- }
1255
-
1256
- }));
1257
- }
1258
- var optimizedPartitions = createPartitionsFromIndexingAddresses(registeringContractsByContract, contractConfigs, dynamicContracts, normalSelection, maxAddrInPartition, partitions.length, partitions, progressBlockNumber);
1284
+ let registeringContractsByContract = {};
1285
+ let dynamicContracts = new Set();
1286
+ addresses.forEach(contract => {
1287
+ let contractName = contract.contractName;
1288
+ let match = contractConfigs[contractName];
1289
+ let contractStartBlock = match !== undefined ? match.startBlock : undefined;
1290
+ let ia_address = contract.address;
1291
+ let ia_contractName = contract.contractName;
1292
+ let ia_registrationBlock = contract.registrationBlock;
1293
+ let ia_effectiveStartBlock = deriveEffectiveStartBlock(contract.registrationBlock, contractStartBlock);
1294
+ let ia = {
1295
+ address: ia_address,
1296
+ contractName: ia_contractName,
1297
+ registrationBlock: ia_registrationBlock,
1298
+ effectiveStartBlock: ia_effectiveStartBlock
1299
+ };
1300
+ indexingAddresses[contract.address] = ia;
1301
+ if (!contractNamesWithNormalEvents.has(contractName)) {
1302
+ return;
1303
+ }
1304
+ let registeringContracts = Utils.Dict.getOrInsertEmptyDict(registeringContractsByContract, contractName);
1305
+ registeringContracts[contract.address] = ia;
1306
+ if (contract.registrationBlock !== -1) {
1307
+ dynamicContracts.add(contractName);
1308
+ return;
1309
+ }
1310
+ });
1311
+ let optimizedPartitions = createPartitionsFromIndexingAddresses(registeringContractsByContract, contractConfigs, dynamicContracts, normalSelection, maxAddrInPartition, partitions.length, partitions, progressBlockNumber);
1259
1312
  if (optimizedPartitions.idsInAscOrder.length === 0 && Utils.$$Array.isEmpty(onBlockConfigs)) {
1260
- Js_exn.raiseError("Invalid configuration: Nothing to fetch. Make sure that you provided at least one contract address to index, or have events with Wildcard mode enabled, or have onBlock handlers.");
1313
+ Stdlib_JsError.throwWithMessage(`Invalid configuration: Nothing to fetch on chain ` + chainId.toString() + `. ` + (`addresses=` + addresses.length.toString() + `, `) + (`eventConfigs=` + eventConfigs.length.toString() + `, `) + (`normalEventConfigs=` + normalEventConfigs.length.toString() + `. `) + `Make sure that you provided at least one contract address to index, or have events with Wildcard mode enabled, or have onBlock handlers.`);
1261
1314
  }
1262
- var numAddresses = Object.keys(indexingContracts).length;
1315
+ let numAddresses = Utils.Dict.size(indexingAddresses);
1263
1316
  Prometheus.IndexingAddresses.set(numAddresses, chainId);
1264
1317
  Prometheus.IndexingPartitions.set(optimizedPartitions.idsInAscOrder.length, chainId);
1265
1318
  Prometheus.IndexingBufferSize.set(0, chainId);
@@ -1268,21 +1321,21 @@ function make$1(startBlock, endBlock, eventConfigs, contracts, maxAddrInPartitio
1268
1321
  Prometheus.IndexingEndBlock.set(endBlock, chainId);
1269
1322
  }
1270
1323
  return {
1271
- optimizedPartitions: optimizedPartitions,
1272
- startBlock: startBlock,
1273
- endBlock: endBlock,
1274
- normalSelection: normalSelection,
1275
- indexingContracts: indexingContracts,
1276
- contractConfigs: contractConfigs,
1277
- chainId: chainId,
1278
- latestOnBlockBlockNumber: progressBlockNumber,
1279
- blockLag: blockLag,
1280
- buffer: [],
1281
- targetBufferSize: targetBufferSize,
1282
- onBlockConfigs: onBlockConfigs,
1283
- knownHeight: knownHeight,
1284
- firstEventBlock: firstEventBlock
1285
- };
1324
+ optimizedPartitions: optimizedPartitions,
1325
+ startBlock: startBlock,
1326
+ endBlock: endBlock,
1327
+ normalSelection: normalSelection,
1328
+ indexingAddresses: indexingAddresses,
1329
+ contractConfigs: contractConfigs,
1330
+ chainId: chainId,
1331
+ latestOnBlockBlockNumber: progressBlockNumber,
1332
+ blockLag: blockLag,
1333
+ buffer: [],
1334
+ targetBufferSize: targetBufferSize,
1335
+ onBlockConfigs: onBlockConfigs,
1336
+ knownHeight: knownHeight,
1337
+ firstEventBlock: firstEventBlock
1338
+ };
1286
1339
  }
1287
1340
 
1288
1341
  function bufferSize(param) {
@@ -1290,149 +1343,139 @@ function bufferSize(param) {
1290
1343
  }
1291
1344
 
1292
1345
  function rollbackPendingQueries(mutPendingQueries, targetBlockNumber) {
1293
- var adjusted = [];
1294
- for(var qIdx = 0 ,qIdx_finish = mutPendingQueries.length; qIdx < qIdx_finish; ++qIdx){
1295
- var pq = mutPendingQueries[qIdx];
1346
+ let adjusted = [];
1347
+ for (let qIdx = 0, qIdx_finish = mutPendingQueries.length; qIdx < qIdx_finish; ++qIdx) {
1348
+ let pq = mutPendingQueries[qIdx];
1296
1349
  if (pq.fromBlock <= targetBlockNumber) {
1297
- var match = pq.fetchedBlock;
1350
+ let match = pq.fetchedBlock;
1298
1351
  if (match !== undefined) {
1299
1352
  if (match.blockNumber > targetBlockNumber) {
1300
1353
  adjusted.push({
1301
- fromBlock: pq.fromBlock,
1302
- toBlock: pq.toBlock,
1303
- isChunk: pq.isChunk,
1304
- fetchedBlock: {
1305
- blockNumber: targetBlockNumber,
1306
- blockTimestamp: 0
1307
- }
1308
- });
1354
+ fromBlock: pq.fromBlock,
1355
+ toBlock: pq.toBlock,
1356
+ isChunk: pq.isChunk,
1357
+ fetchedBlock: {
1358
+ blockNumber: targetBlockNumber,
1359
+ blockTimestamp: 0
1360
+ }
1361
+ });
1309
1362
  } else {
1310
1363
  adjusted.push(pq);
1311
1364
  }
1312
1365
  } else {
1313
- Js_exn.raiseError("Internal error: Must not have a fetching query during rollback");
1366
+ Stdlib_JsError.throwWithMessage("Internal error: Must not have a fetching query during rollback");
1314
1367
  }
1315
1368
  }
1316
-
1317
1369
  }
1318
1370
  return adjusted;
1319
1371
  }
1320
1372
 
1321
1373
  function rollback(fetchState, targetBlockNumber) {
1322
- var addressesToRemove = new Set();
1323
- var indexingContracts = {};
1324
- Belt_Array.forEach(Object.keys(fetchState.indexingContracts), (function (address) {
1325
- var indexingContract = fetchState.indexingContracts[address];
1326
- var registrationBlock = indexingContract.registrationBlock;
1327
- if (registrationBlock !== undefined && registrationBlock > targetBlockNumber) {
1328
- addressesToRemove.add(address);
1329
- } else {
1330
- indexingContracts[address] = indexingContract;
1331
- }
1332
- }));
1333
- var keptPartitions = [];
1334
- var nextKeptIdRef = 0;
1335
- var registeringContractsByContract = {};
1336
- var partitions = Js_dict.values(fetchState.optimizedPartitions.entities);
1337
- for(var idx = 0 ,idx_finish = partitions.length; idx < idx_finish; ++idx){
1338
- var p = partitions[idx];
1374
+ let addressesToRemove = new Set();
1375
+ let indexingAddresses = {};
1376
+ Object.keys(fetchState.indexingAddresses).forEach(address => {
1377
+ let indexingContract = fetchState.indexingAddresses[address];
1378
+ if (indexingContract.registrationBlock > targetBlockNumber) {
1379
+ addressesToRemove.add(address);
1380
+ } else {
1381
+ indexingAddresses[address] = indexingContract;
1382
+ }
1383
+ });
1384
+ let keptPartitions = [];
1385
+ let nextKeptIdRef = 0;
1386
+ let registeringContractsByContract = {};
1387
+ let partitions = Object.values(fetchState.optimizedPartitions.entities);
1388
+ for (let idx = 0, idx_finish = partitions.length; idx < idx_finish; ++idx) {
1389
+ let p = partitions[idx];
1339
1390
  if (p.selection.dependsOnAddresses) {
1340
1391
  if (p.latestFetchedBlock.blockNumber > targetBlockNumber) {
1341
- Utils.Dict.forEachWithKey(p.addressesByContractName, (function (addresses, contractName) {
1342
- Belt_Array.forEach(addresses, (function (address) {
1343
- if (!(!addressesToRemove.has(address) && Belt_Option.isSome(indexingContracts[address]))) {
1344
- return ;
1345
- }
1346
- var registeringContracts = Utils.Dict.getOrInsertEmptyDict(registeringContractsByContract, contractName);
1347
- registeringContracts[address] = indexingContracts[address];
1348
- }));
1349
- }));
1350
- } else {
1351
- var mergeBlock = p.mergeBlock;
1352
- var mergeBlock$1 = mergeBlock !== undefined && mergeBlock > targetBlockNumber ? targetBlockNumber : mergeBlock;
1353
- var rollbackedAddressesByContractName = {};
1354
- Utils.Dict.forEachWithKey(p.addressesByContractName, (function(rollbackedAddressesByContractName){
1355
- return function (addresses, contractName) {
1356
- var keptAddresses = Belt_Array.keep(addresses, (function (address) {
1357
- return !addressesToRemove.has(address);
1358
- }));
1359
- if (keptAddresses.length !== 0) {
1360
- rollbackedAddressesByContractName[contractName] = keptAddresses;
1361
- return ;
1362
- }
1363
-
1392
+ Utils.Dict.forEachWithKey(p.addressesByContractName, (addresses, contractName) => {
1393
+ addresses.forEach(address => {
1394
+ if (!(!addressesToRemove.has(address) && Stdlib_Option.isSome(indexingAddresses[address]))) {
1395
+ return;
1364
1396
  }
1365
- }(rollbackedAddressesByContractName)));
1366
- if (Object.keys(rollbackedAddressesByContractName).length !== 0) {
1367
- var id = String(nextKeptIdRef);
1397
+ let registeringContracts = Utils.Dict.getOrInsertEmptyDict(registeringContractsByContract, contractName);
1398
+ registeringContracts[address] = indexingAddresses[address];
1399
+ });
1400
+ });
1401
+ } else {
1402
+ let mergeBlock = p.mergeBlock;
1403
+ let mergeBlock$1 = mergeBlock !== undefined && mergeBlock > targetBlockNumber ? targetBlockNumber : mergeBlock;
1404
+ let rollbackedAddressesByContractName = {};
1405
+ Utils.Dict.forEachWithKey(p.addressesByContractName, (addresses, contractName) => {
1406
+ let keptAddresses = addresses.filter(address => !addressesToRemove.has(address));
1407
+ if (keptAddresses.length !== 0) {
1408
+ rollbackedAddressesByContractName[contractName] = keptAddresses;
1409
+ return;
1410
+ }
1411
+ });
1412
+ if (!Utils.Dict.isEmpty(rollbackedAddressesByContractName)) {
1413
+ let id = nextKeptIdRef.toString();
1368
1414
  nextKeptIdRef = nextKeptIdRef + 1 | 0;
1369
1415
  keptPartitions.push({
1370
- id: id,
1371
- latestFetchedBlock: p.latestFetchedBlock,
1372
- selection: p.selection,
1373
- addressesByContractName: rollbackedAddressesByContractName,
1374
- mergeBlock: mergeBlock$1,
1375
- dynamicContract: p.dynamicContract,
1376
- mutPendingQueries: rollbackPendingQueries(p.mutPendingQueries, targetBlockNumber),
1377
- prevQueryRange: p.prevQueryRange,
1378
- prevPrevQueryRange: p.prevPrevQueryRange,
1379
- latestBlockRangeUpdateBlock: p.latestBlockRangeUpdateBlock
1380
- });
1381
- }
1382
-
1383
- }
1384
- } else {
1385
- var id$1 = String(nextKeptIdRef);
1386
- nextKeptIdRef = nextKeptIdRef + 1 | 0;
1387
- keptPartitions.push({
1388
- id: id$1,
1389
- latestFetchedBlock: p.latestFetchedBlock.blockNumber > targetBlockNumber ? ({
1390
- blockNumber: targetBlockNumber,
1391
- blockTimestamp: 0
1392
- }) : p.latestFetchedBlock,
1416
+ id: id,
1417
+ latestFetchedBlock: p.latestFetchedBlock,
1393
1418
  selection: p.selection,
1394
- addressesByContractName: p.addressesByContractName,
1395
- mergeBlock: p.mergeBlock,
1419
+ addressesByContractName: rollbackedAddressesByContractName,
1420
+ mergeBlock: mergeBlock$1,
1396
1421
  dynamicContract: p.dynamicContract,
1397
1422
  mutPendingQueries: rollbackPendingQueries(p.mutPendingQueries, targetBlockNumber),
1398
1423
  prevQueryRange: p.prevQueryRange,
1399
1424
  prevPrevQueryRange: p.prevPrevQueryRange,
1400
1425
  latestBlockRangeUpdateBlock: p.latestBlockRangeUpdateBlock
1401
1426
  });
1427
+ }
1428
+ }
1429
+ } else {
1430
+ let id$1 = nextKeptIdRef.toString();
1431
+ nextKeptIdRef = nextKeptIdRef + 1 | 0;
1432
+ keptPartitions.push({
1433
+ id: id$1,
1434
+ latestFetchedBlock: p.latestFetchedBlock.blockNumber > targetBlockNumber ? ({
1435
+ blockNumber: targetBlockNumber,
1436
+ blockTimestamp: 0
1437
+ }) : p.latestFetchedBlock,
1438
+ selection: p.selection,
1439
+ addressesByContractName: p.addressesByContractName,
1440
+ mergeBlock: p.mergeBlock,
1441
+ dynamicContract: p.dynamicContract,
1442
+ mutPendingQueries: rollbackPendingQueries(p.mutPendingQueries, targetBlockNumber),
1443
+ prevQueryRange: p.prevQueryRange,
1444
+ prevPrevQueryRange: p.prevPrevQueryRange,
1445
+ latestBlockRangeUpdateBlock: p.latestBlockRangeUpdateBlock
1446
+ });
1402
1447
  }
1403
1448
  }
1404
- var optimizedPartitions = createPartitionsFromIndexingAddresses(registeringContractsByContract, fetchState.contractConfigs, fetchState.optimizedPartitions.dynamicContracts, fetchState.normalSelection, fetchState.optimizedPartitions.maxAddrInPartition, nextKeptIdRef, keptPartitions, targetBlockNumber);
1449
+ let optimizedPartitions = createPartitionsFromIndexingAddresses(registeringContractsByContract, fetchState.contractConfigs, fetchState.optimizedPartitions.dynamicContracts, fetchState.normalSelection, fetchState.optimizedPartitions.maxAddrInPartition, nextKeptIdRef, keptPartitions, targetBlockNumber);
1405
1450
  return updateInternal({
1406
- optimizedPartitions: fetchState.optimizedPartitions,
1407
- startBlock: fetchState.startBlock,
1408
- endBlock: fetchState.endBlock,
1409
- normalSelection: fetchState.normalSelection,
1410
- indexingContracts: fetchState.indexingContracts,
1411
- contractConfigs: fetchState.contractConfigs,
1412
- chainId: fetchState.chainId,
1413
- latestOnBlockBlockNumber: fetchState.latestOnBlockBlockNumber < targetBlockNumber ? fetchState.latestOnBlockBlockNumber : targetBlockNumber,
1414
- blockLag: fetchState.blockLag,
1415
- buffer: fetchState.buffer,
1416
- targetBufferSize: fetchState.targetBufferSize,
1417
- onBlockConfigs: fetchState.onBlockConfigs,
1418
- knownHeight: fetchState.knownHeight,
1419
- firstEventBlock: fetchState.firstEventBlock
1420
- }, optimizedPartitions, indexingContracts, Belt_Array.keep(fetchState.buffer, (function (item) {
1421
- var tmp;
1422
- tmp = item.kind === 0 ? item.blockNumber : item.blockNumber;
1423
- return tmp <= targetBlockNumber;
1424
- })), undefined, undefined);
1451
+ optimizedPartitions: fetchState.optimizedPartitions,
1452
+ startBlock: fetchState.startBlock,
1453
+ endBlock: fetchState.endBlock,
1454
+ normalSelection: fetchState.normalSelection,
1455
+ indexingAddresses: fetchState.indexingAddresses,
1456
+ contractConfigs: fetchState.contractConfigs,
1457
+ chainId: fetchState.chainId,
1458
+ latestOnBlockBlockNumber: Primitive_int.min(fetchState.latestOnBlockBlockNumber, targetBlockNumber),
1459
+ blockLag: fetchState.blockLag,
1460
+ buffer: fetchState.buffer,
1461
+ targetBufferSize: fetchState.targetBufferSize,
1462
+ onBlockConfigs: fetchState.onBlockConfigs,
1463
+ knownHeight: fetchState.knownHeight,
1464
+ firstEventBlock: fetchState.firstEventBlock
1465
+ }, optimizedPartitions, indexingAddresses, fetchState.buffer.filter(item => {
1466
+ let tmp;
1467
+ tmp = item.kind === 0 ? item.blockNumber : item.blockNumber;
1468
+ return tmp <= targetBlockNumber;
1469
+ }), undefined, undefined);
1425
1470
  }
1426
1471
 
1427
1472
  function resetPendingQueries(fetchState) {
1428
- var newEntities = Utils.Dict.shallowCopy(fetchState.optimizedPartitions.entities);
1429
- for(var idx = 0 ,idx_finish = fetchState.optimizedPartitions.idsInAscOrder.length; idx < idx_finish; ++idx){
1430
- var partitionId = fetchState.optimizedPartitions.idsInAscOrder[idx];
1431
- var partition = fetchState.optimizedPartitions.entities[partitionId];
1473
+ let newEntities = Utils.Dict.shallowCopy(fetchState.optimizedPartitions.entities);
1474
+ for (let idx = 0, idx_finish = fetchState.optimizedPartitions.idsInAscOrder.length; idx < idx_finish; ++idx) {
1475
+ let partitionId = fetchState.optimizedPartitions.idsInAscOrder[idx];
1476
+ let partition = fetchState.optimizedPartitions.entities[partitionId];
1432
1477
  if (partition.mutPendingQueries.length !== 0) {
1433
- var kept = Belt_Array.keep(partition.mutPendingQueries, (function (pq) {
1434
- return pq.fetchedBlock !== undefined;
1435
- }));
1478
+ let kept = partition.mutPendingQueries.filter(pq => pq.fetchedBlock !== undefined);
1436
1479
  newEntities[partitionId] = {
1437
1480
  id: partition.id,
1438
1481
  latestFetchedBlock: partition.latestFetchedBlock,
@@ -1446,39 +1489,38 @@ function resetPendingQueries(fetchState) {
1446
1489
  latestBlockRangeUpdateBlock: partition.latestBlockRangeUpdateBlock
1447
1490
  };
1448
1491
  }
1449
-
1450
1492
  }
1451
- var init = fetchState.optimizedPartitions;
1493
+ let init = fetchState.optimizedPartitions;
1452
1494
  return {
1453
- optimizedPartitions: {
1454
- idsInAscOrder: init.idsInAscOrder,
1455
- entities: newEntities,
1456
- maxAddrInPartition: init.maxAddrInPartition,
1457
- nextPartitionIndex: init.nextPartitionIndex,
1458
- dynamicContracts: init.dynamicContracts
1459
- },
1460
- startBlock: fetchState.startBlock,
1461
- endBlock: fetchState.endBlock,
1462
- normalSelection: fetchState.normalSelection,
1463
- indexingContracts: fetchState.indexingContracts,
1464
- contractConfigs: fetchState.contractConfigs,
1465
- chainId: fetchState.chainId,
1466
- latestOnBlockBlockNumber: fetchState.latestOnBlockBlockNumber,
1467
- blockLag: fetchState.blockLag,
1468
- buffer: fetchState.buffer,
1469
- targetBufferSize: fetchState.targetBufferSize,
1470
- onBlockConfigs: fetchState.onBlockConfigs,
1471
- knownHeight: fetchState.knownHeight,
1472
- firstEventBlock: fetchState.firstEventBlock
1473
- };
1495
+ optimizedPartitions: {
1496
+ idsInAscOrder: init.idsInAscOrder,
1497
+ entities: newEntities,
1498
+ maxAddrInPartition: init.maxAddrInPartition,
1499
+ nextPartitionIndex: init.nextPartitionIndex,
1500
+ dynamicContracts: init.dynamicContracts
1501
+ },
1502
+ startBlock: fetchState.startBlock,
1503
+ endBlock: fetchState.endBlock,
1504
+ normalSelection: fetchState.normalSelection,
1505
+ indexingAddresses: fetchState.indexingAddresses,
1506
+ contractConfigs: fetchState.contractConfigs,
1507
+ chainId: fetchState.chainId,
1508
+ latestOnBlockBlockNumber: fetchState.latestOnBlockBlockNumber,
1509
+ blockLag: fetchState.blockLag,
1510
+ buffer: fetchState.buffer,
1511
+ targetBufferSize: fetchState.targetBufferSize,
1512
+ onBlockConfigs: fetchState.onBlockConfigs,
1513
+ knownHeight: fetchState.knownHeight,
1514
+ firstEventBlock: fetchState.firstEventBlock
1515
+ };
1474
1516
  }
1475
1517
 
1476
1518
  function isActivelyIndexing(fetchState) {
1477
- var endBlock = fetchState.endBlock;
1519
+ let endBlock = fetchState.endBlock;
1478
1520
  if (endBlock === undefined) {
1479
1521
  return true;
1480
1522
  }
1481
- var isPastEndblock = bufferBlockNumber(fetchState) >= endBlock;
1523
+ let isPastEndblock = bufferBlockNumber(fetchState) >= endBlock;
1482
1524
  if (isPastEndblock) {
1483
1525
  return bufferSize(fetchState) > 0;
1484
1526
  } else {
@@ -1487,10 +1529,10 @@ function isActivelyIndexing(fetchState) {
1487
1529
  }
1488
1530
 
1489
1531
  function isReadyToEnterReorgThreshold(fetchState) {
1490
- var knownHeight = fetchState.knownHeight;
1491
- var blockLag = fetchState.blockLag;
1492
- var endBlock = fetchState.endBlock;
1493
- var bufferBlockNumber$1 = bufferBlockNumber(fetchState);
1532
+ let knownHeight = fetchState.knownHeight;
1533
+ let blockLag = fetchState.blockLag;
1534
+ let endBlock = fetchState.endBlock;
1535
+ let bufferBlockNumber$1 = bufferBlockNumber(fetchState);
1494
1536
  if (knownHeight !== 0 && (
1495
1537
  endBlock !== undefined && bufferBlockNumber$1 >= endBlock ? true : bufferBlockNumber$1 >= (knownHeight - blockLag | 0)
1496
1538
  )) {
@@ -1501,7 +1543,7 @@ function isReadyToEnterReorgThreshold(fetchState) {
1501
1543
  }
1502
1544
 
1503
1545
  function hasFullBatch(fetchState, batchSizeTarget) {
1504
- var item = Belt_Array.get(fetchState.buffer, batchSizeTarget - 1 | 0);
1546
+ let item = Belt_Array.get(fetchState.buffer, batchSizeTarget - 1 | 0);
1505
1547
  if (item !== undefined) {
1506
1548
  return item.blockNumber <= bufferBlockNumber(fetchState);
1507
1549
  } else {
@@ -1510,46 +1552,47 @@ function hasFullBatch(fetchState, batchSizeTarget) {
1510
1552
  }
1511
1553
 
1512
1554
  function getProgressPercentage(fetchState) {
1513
- var firstEventBlock = fetchState.firstEventBlock;
1555
+ let firstEventBlock = fetchState.firstEventBlock;
1514
1556
  if (firstEventBlock === undefined) {
1515
1557
  return 0;
1516
1558
  }
1517
- var totalRange = fetchState.knownHeight - firstEventBlock | 0;
1559
+ let totalRange = fetchState.knownHeight - firstEventBlock | 0;
1518
1560
  if (totalRange <= 0) {
1519
1561
  return 0;
1520
1562
  }
1521
- var item = Belt_Array.get(fetchState.buffer, 0);
1522
- var progress = item !== undefined ? item.blockNumber - firstEventBlock | 0 : bufferBlockNumber(fetchState) - firstEventBlock | 0;
1563
+ let item = Belt_Array.get(fetchState.buffer, 0);
1564
+ let progress = item !== undefined ? item.blockNumber - firstEventBlock | 0 : bufferBlockNumber(fetchState) - firstEventBlock | 0;
1523
1565
  return progress / totalRange;
1524
1566
  }
1525
1567
 
1526
1568
  function sortForUnorderedBatch(fetchStates, batchSizeTarget) {
1527
- return fetchStates.slice(0).sort(function (a, b) {
1528
- var match = hasFullBatch(a, batchSizeTarget);
1529
- var match$1 = hasFullBatch(b, batchSizeTarget);
1530
- if (match) {
1531
- if (!match$1) {
1532
- return -1;
1533
- }
1534
-
1535
- } else if (match$1) {
1536
- return 1;
1537
- }
1538
- var aProgress = getProgressPercentage(a);
1539
- var bProgress = getProgressPercentage(b);
1540
- if (aProgress < bProgress) {
1541
- return -1;
1542
- } else if (aProgress > bProgress) {
1543
- return 1;
1544
- } else {
1545
- return 0;
1546
- }
1547
- });
1569
+ let copied = fetchStates.slice();
1570
+ copied.sort((a, b) => {
1571
+ let match = hasFullBatch(a, batchSizeTarget);
1572
+ let match$1 = hasFullBatch(b, batchSizeTarget);
1573
+ if (match) {
1574
+ if (!match$1) {
1575
+ return -1;
1576
+ }
1577
+ } else if (match$1) {
1578
+ return 1;
1579
+ }
1580
+ let aProgress = getProgressPercentage(a);
1581
+ let bProgress = getProgressPercentage(b);
1582
+ if (aProgress < bProgress) {
1583
+ return -1;
1584
+ } else if (aProgress > bProgress) {
1585
+ return 1;
1586
+ } else {
1587
+ return 0;
1588
+ }
1589
+ });
1590
+ return copied;
1548
1591
  }
1549
1592
 
1550
1593
  function getUnorderedMultichainProgressBlockNumberAt(fetchState, index) {
1551
- var bufferBlockNumber$1 = bufferBlockNumber(fetchState);
1552
- var item = Belt_Array.get(fetchState.buffer, index);
1594
+ let bufferBlockNumber$1 = bufferBlockNumber(fetchState);
1595
+ let item = Belt_Array.get(fetchState.buffer, index);
1553
1596
  if (item !== undefined && bufferBlockNumber$1 >= item.blockNumber) {
1554
1597
  return item.blockNumber - 1 | 0;
1555
1598
  } else {
@@ -1566,39 +1609,40 @@ function updateKnownHeight(fetchState, knownHeight) {
1566
1609
  }
1567
1610
  }
1568
1611
 
1569
- var blockItemLogIndex = 16777216;
1612
+ let blockItemLogIndex = 16777216;
1570
1613
 
1571
1614
  export {
1572
- getMinHistoryRange ,
1573
- getMinQueryRange ,
1574
- OptimizedPartitions ,
1575
- bufferBlockNumber ,
1576
- bufferBlock ,
1577
- compareBufferItem ,
1578
- blockItemLogIndex ,
1579
- numAddresses ,
1580
- updateInternal ,
1581
- warnDifferentContractType ,
1582
- addressesByContractNameCount ,
1583
- addressesByContractNameGetAll ,
1584
- createPartitionsFromIndexingAddresses ,
1585
- registerDynamicContracts ,
1586
- handleQueryResult ,
1587
- startFetchingQueries ,
1588
- pushQueriesForRange ,
1589
- getNextQuery ,
1590
- getTimestampAt ,
1591
- hasReadyItem ,
1592
- getReadyItemsCount ,
1615
+ deriveEffectiveStartBlock,
1616
+ getMinHistoryRange,
1617
+ getMinQueryRange,
1618
+ OptimizedPartitions,
1619
+ bufferBlockNumber,
1620
+ bufferBlock,
1621
+ compareBufferItem,
1622
+ blockItemLogIndex,
1623
+ numAddresses,
1624
+ updateInternal,
1625
+ warnDifferentContractType,
1626
+ addressesByContractNameCount,
1627
+ addressesByContractNameGetAll,
1628
+ createPartitionsFromIndexingAddresses,
1629
+ registerDynamicContracts,
1630
+ handleQueryResult,
1631
+ startFetchingQueries,
1632
+ pushQueriesForRange,
1633
+ getNextQuery,
1634
+ getTimestampAt,
1635
+ hasReadyItem,
1636
+ getReadyItemsCount,
1593
1637
  make$1 as make,
1594
- bufferSize ,
1595
- rollbackPendingQueries ,
1596
- rollback ,
1597
- resetPendingQueries ,
1598
- isActivelyIndexing ,
1599
- isReadyToEnterReorgThreshold ,
1600
- sortForUnorderedBatch ,
1601
- getUnorderedMultichainProgressBlockNumberAt ,
1602
- updateKnownHeight ,
1638
+ bufferSize,
1639
+ rollbackPendingQueries,
1640
+ rollback,
1641
+ resetPendingQueries,
1642
+ isActivelyIndexing,
1643
+ isReadyToEnterReorgThreshold,
1644
+ sortForUnorderedBatch,
1645
+ getUnorderedMultichainProgressBlockNumberAt,
1646
+ updateKnownHeight,
1603
1647
  }
1604
1648
  /* Utils Not a pure module */