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,5 +1,3 @@
1
- open Belt
2
-
3
1
  type blockDataWithTimestamp = {
4
2
  blockHash: string,
5
3
  blockNumber: int,
@@ -58,7 +56,7 @@ let make = (
58
56
  ~maxReorgDepth,
59
57
  ~shouldRollbackOnReorg,
60
58
  ) => {
61
- let dataByBlockNumber = Js.Dict.empty()
59
+ let dataByBlockNumber = Dict.make()
62
60
 
63
61
  chainReorgCheckpoints->Belt.Array.forEach(block => {
64
62
  dataByBlockNumber->Utils.Dict.setByInt(
@@ -79,17 +77,17 @@ let make = (
79
77
 
80
78
  let getDataByBlockNumberCopyInThreshold = ({dataByBlockNumber, maxReorgDepth}: t, ~knownHeight) => {
81
79
  // Js engine automatically orders numeric object keys
82
- let ascBlockNumberKeys = dataByBlockNumber->Js.Dict.keys
80
+ let ascBlockNumberKeys = dataByBlockNumber->Dict.keysToArray
83
81
  let thresholdBlockNumber = knownHeight - maxReorgDepth
84
82
 
85
- let copy = Js.Dict.empty()
83
+ let copy = Dict.make()
86
84
 
87
85
  for idx in 0 to ascBlockNumberKeys->Array.length - 1 {
88
- let blockNumberKey = ascBlockNumberKeys->Js.Array2.unsafe_get(idx)
89
- let scannedBlock = dataByBlockNumber->Js.Dict.unsafeGet(blockNumberKey)
86
+ let blockNumberKey = ascBlockNumberKeys->Array.getUnsafe(idx)
87
+ let scannedBlock = dataByBlockNumber->Dict.getUnsafe(blockNumberKey)
90
88
  let isInReorgThreshold = scannedBlock.blockNumber >= thresholdBlockNumber
91
89
  if isInReorgThreshold {
92
- copy->Js.Dict.set(blockNumberKey, scannedBlock)
90
+ copy->Dict.set(blockNumberKey, scannedBlock)
93
91
  }
94
92
  }
95
93
 
@@ -143,14 +141,14 @@ let registerReorgGuard = (
143
141
  ReorgDetected(reorgDetected),
144
142
  )
145
143
  | None => {
146
- dataByBlockNumberCopyInThreshold->Js.Dict.set(
144
+ dataByBlockNumberCopyInThreshold->Dict.set(
147
145
  rangeLastBlock.blockNumber->Int.toString,
148
146
  rangeLastBlock,
149
147
  )
150
148
  switch prevRangeLastBlock {
151
149
  | None => ()
152
150
  | Some(prevRangeLastBlock) =>
153
- dataByBlockNumberCopyInThreshold->Js.Dict.set(
151
+ dataByBlockNumberCopyInThreshold->Dict.set(
154
152
  prevRangeLastBlock.blockNumber->Int.toString,
155
153
  prevRangeLastBlock,
156
154
  )
@@ -176,19 +174,19 @@ let getLatestValidScannedBlock = (
176
174
  reorgDetection: t,
177
175
  ~blockNumbersAndHashes: array<blockDataWithTimestamp>,
178
176
  ) => {
179
- let verifiedDataByBlockNumber = Js.Dict.empty()
177
+ let verifiedDataByBlockNumber = Dict.make()
180
178
  for idx in 0 to blockNumbersAndHashes->Array.length - 1 {
181
179
  let blockData = blockNumbersAndHashes->Array.getUnsafe(idx)
182
- verifiedDataByBlockNumber->Js.Dict.set(blockData.blockNumber->Int.toString, blockData)
180
+ verifiedDataByBlockNumber->Dict.set(blockData.blockNumber->Int.toString, blockData)
183
181
  }
184
182
  // Js engine automatically orders numeric object keys
185
- let ascBlockNumberKeys = verifiedDataByBlockNumber->Js.Dict.keys
183
+ let ascBlockNumberKeys = verifiedDataByBlockNumber->Dict.keysToArray
186
184
 
187
185
  let getPrevScannedBlockNumber = idx =>
188
186
  ascBlockNumberKeys
189
187
  ->Belt.Array.get(idx - 1)
190
188
  ->Option.map(key => {
191
- (verifiedDataByBlockNumber->Js.Dict.unsafeGet(key)).blockNumber
189
+ (verifiedDataByBlockNumber->Dict.getUnsafe(key)).blockNumber
192
190
  })
193
191
 
194
192
  let rec loop = idx => {
@@ -196,7 +194,7 @@ let getLatestValidScannedBlock = (
196
194
  | Some(blockNumberKey) =>
197
195
  switch reorgDetection.dataByBlockNumber->Utils.Dict.dangerouslyGetNonOption(blockNumberKey) {
198
196
  | Some(scannedBlock)
199
- if (verifiedDataByBlockNumber->Js.Dict.unsafeGet(blockNumberKey)).blockHash ===
197
+ if (verifiedDataByBlockNumber->Dict.getUnsafe(blockNumberKey)).blockHash ===
200
198
  scannedBlock.blockHash =>
201
199
  loop(idx + 1)
202
200
  | _ => getPrevScannedBlockNumber(idx)
@@ -216,17 +214,17 @@ let rollbackToValidBlockNumber = (
216
214
  ~blockNumber: int,
217
215
  ) => {
218
216
  // Js engine automatically orders numeric object keys
219
- let ascBlockNumberKeys = dataByBlockNumber->Js.Dict.keys
217
+ let ascBlockNumberKeys = dataByBlockNumber->Dict.keysToArray
220
218
 
221
- let newDataByBlockNumber = Js.Dict.empty()
219
+ let newDataByBlockNumber = Dict.make()
222
220
 
223
221
  let rec loop = idx => {
224
222
  switch ascBlockNumberKeys->Belt.Array.get(idx) {
225
223
  | Some(blockNumberKey) => {
226
- let scannedBlock = dataByBlockNumber->Js.Dict.unsafeGet(blockNumberKey)
224
+ let scannedBlock = dataByBlockNumber->Dict.getUnsafe(blockNumberKey)
227
225
  let shouldKeep = scannedBlock.blockNumber <= blockNumber
228
226
  if shouldKeep {
229
- newDataByBlockNumber->Js.Dict.set(blockNumberKey, scannedBlock)
227
+ newDataByBlockNumber->Dict.set(blockNumberKey, scannedBlock)
230
228
  loop(idx + 1)
231
229
  } else {
232
230
  ()
@@ -248,12 +246,12 @@ let getThresholdBlockNumbersBelowBlock = (self: t, ~blockNumber: int, ~knownHeig
248
246
  let arr = []
249
247
 
250
248
  // Js engine automatically orders numeric object keys
251
- let ascBlockNumberKeys = self.dataByBlockNumber->Js.Dict.keys
249
+ let ascBlockNumberKeys = self.dataByBlockNumber->Dict.keysToArray
252
250
  let thresholdBlockNumber = knownHeight - self.maxReorgDepth
253
251
 
254
252
  for idx in 0 to ascBlockNumberKeys->Array.length - 1 {
255
- let blockNumberKey = ascBlockNumberKeys->Js.Array2.unsafe_get(idx)
256
- let scannedBlock = self.dataByBlockNumber->Js.Dict.unsafeGet(blockNumberKey)
253
+ let blockNumberKey = ascBlockNumberKeys->Array.getUnsafe(idx)
254
+ let scannedBlock = self.dataByBlockNumber->Dict.getUnsafe(blockNumberKey)
257
255
  let isInReorgThreshold = scannedBlock.blockNumber >= thresholdBlockNumber
258
256
  if isInReorgThreshold && scannedBlock.blockNumber < blockNumber {
259
257
  arr->Array.push(scannedBlock.blockNumber)
@@ -264,7 +262,7 @@ let getThresholdBlockNumbersBelowBlock = (self: t, ~blockNumber: int, ~knownHeig
264
262
 
265
263
  let getHashByBlockNumber = (reorgDetection: t, ~blockNumber) => {
266
264
  switch reorgDetection.dataByBlockNumber->Utils.Dict.dangerouslyGetByIntNonOption(blockNumber) {
267
- | Some(v) => Js.Null.Value(v.blockHash)
268
- | None => Js.Null.Null
265
+ | Some(v) => Null.Value(v.blockHash)
266
+ | None => Null.Null
269
267
  }
270
268
  }
@@ -1,61 +1,60 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as Belt_Array from "rescript/lib/es6/belt_Array.js";
4
- import * as Belt_Option from "rescript/lib/es6/belt_Option.js";
3
+ import * as Belt_Array from "@rescript/runtime/lib/es6/Belt_Array.js";
4
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
5
5
 
6
6
  function reorgDetectedToLogParams(reorgDetected, shouldRollbackOnReorg) {
7
- var scannedBlock = reorgDetected.scannedBlock;
7
+ let scannedBlock = reorgDetected.scannedBlock;
8
8
  return {
9
- msg: "Blockchain reorg detected. " + (
10
- shouldRollbackOnReorg ? "Initiating indexer rollback" : "NOT initiating indexer rollback due to configuration"
11
- ) + ".",
12
- blockNumber: scannedBlock.blockNumber,
13
- indexedBlockHash: scannedBlock.blockHash,
14
- receivedBlockHash: reorgDetected.receivedBlock.blockHash
15
- };
9
+ msg: `Blockchain reorg detected. ` + (
10
+ shouldRollbackOnReorg ? "Initiating indexer rollback" : "NOT initiating indexer rollback due to configuration"
11
+ ) + `.`,
12
+ blockNumber: scannedBlock.blockNumber,
13
+ indexedBlockHash: scannedBlock.blockHash,
14
+ receivedBlockHash: reorgDetected.receivedBlock.blockHash
15
+ };
16
16
  }
17
17
 
18
18
  function make(chainReorgCheckpoints, maxReorgDepth, shouldRollbackOnReorg) {
19
- var dataByBlockNumber = {};
20
- Belt_Array.forEach(chainReorgCheckpoints, (function (block) {
21
- dataByBlockNumber[block.block_number] = {
22
- blockHash: block.block_hash,
23
- blockNumber: block.block_number
24
- };
25
- }));
19
+ let dataByBlockNumber = {};
20
+ Belt_Array.forEach(chainReorgCheckpoints, block => {
21
+ dataByBlockNumber[block.block_number] = {
22
+ blockHash: block.block_hash,
23
+ blockNumber: block.block_number
24
+ };
25
+ });
26
26
  return {
27
- shouldRollbackOnReorg: shouldRollbackOnReorg,
28
- maxReorgDepth: maxReorgDepth,
29
- dataByBlockNumber: dataByBlockNumber
30
- };
27
+ shouldRollbackOnReorg: shouldRollbackOnReorg,
28
+ maxReorgDepth: maxReorgDepth,
29
+ dataByBlockNumber: dataByBlockNumber
30
+ };
31
31
  }
32
32
 
33
33
  function getDataByBlockNumberCopyInThreshold(param, knownHeight) {
34
- var dataByBlockNumber = param.dataByBlockNumber;
35
- var ascBlockNumberKeys = Object.keys(dataByBlockNumber);
36
- var thresholdBlockNumber = knownHeight - param.maxReorgDepth | 0;
37
- var copy = {};
38
- for(var idx = 0 ,idx_finish = ascBlockNumberKeys.length; idx < idx_finish; ++idx){
39
- var blockNumberKey = ascBlockNumberKeys[idx];
40
- var scannedBlock = dataByBlockNumber[blockNumberKey];
41
- var isInReorgThreshold = scannedBlock.blockNumber >= thresholdBlockNumber;
34
+ let dataByBlockNumber = param.dataByBlockNumber;
35
+ let ascBlockNumberKeys = Object.keys(dataByBlockNumber);
36
+ let thresholdBlockNumber = knownHeight - param.maxReorgDepth | 0;
37
+ let copy = {};
38
+ for (let idx = 0, idx_finish = ascBlockNumberKeys.length; idx < idx_finish; ++idx) {
39
+ let blockNumberKey = ascBlockNumberKeys[idx];
40
+ let scannedBlock = dataByBlockNumber[blockNumberKey];
41
+ let isInReorgThreshold = scannedBlock.blockNumber >= thresholdBlockNumber;
42
42
  if (isInReorgThreshold) {
43
43
  copy[blockNumberKey] = scannedBlock;
44
44
  }
45
-
46
45
  }
47
46
  return copy;
48
47
  }
49
48
 
50
49
  function registerReorgGuard(self, reorgGuard, knownHeight) {
51
- var maxReorgDepth = self.maxReorgDepth;
52
- var shouldRollbackOnReorg = self.shouldRollbackOnReorg;
53
- var dataByBlockNumberCopyInThreshold = getDataByBlockNumberCopyInThreshold(self, knownHeight);
54
- var prevRangeLastBlock = reorgGuard.prevRangeLastBlock;
55
- var rangeLastBlock = reorgGuard.rangeLastBlock;
56
- var scannedBlock = dataByBlockNumberCopyInThreshold[String(rangeLastBlock.blockNumber)];
57
- var maybeReorgDetected;
58
- var exit = 0;
50
+ let maxReorgDepth = self.maxReorgDepth;
51
+ let shouldRollbackOnReorg = self.shouldRollbackOnReorg;
52
+ let dataByBlockNumberCopyInThreshold = getDataByBlockNumberCopyInThreshold(self, knownHeight);
53
+ let prevRangeLastBlock = reorgGuard.prevRangeLastBlock;
54
+ let rangeLastBlock = reorgGuard.rangeLastBlock;
55
+ let scannedBlock = dataByBlockNumberCopyInThreshold[rangeLastBlock.blockNumber.toString()];
56
+ let maybeReorgDetected;
57
+ let exit = 0;
59
58
  if (scannedBlock !== undefined && scannedBlock.blockHash !== rangeLastBlock.blockHash) {
60
59
  maybeReorgDetected = {
61
60
  scannedBlock: scannedBlock,
@@ -66,59 +65,55 @@ function registerReorgGuard(self, reorgGuard, knownHeight) {
66
65
  }
67
66
  if (exit === 1) {
68
67
  if (prevRangeLastBlock !== undefined) {
69
- var scannedBlock$1 = dataByBlockNumberCopyInThreshold[String(prevRangeLastBlock.blockNumber)];
68
+ let scannedBlock$1 = dataByBlockNumberCopyInThreshold[prevRangeLastBlock.blockNumber.toString()];
70
69
  maybeReorgDetected = scannedBlock$1 !== undefined && scannedBlock$1.blockHash !== prevRangeLastBlock.blockHash ? ({
71
- scannedBlock: scannedBlock$1,
72
- receivedBlock: prevRangeLastBlock
73
- }) : undefined;
70
+ scannedBlock: scannedBlock$1,
71
+ receivedBlock: prevRangeLastBlock
72
+ }) : undefined;
74
73
  } else {
75
74
  maybeReorgDetected = undefined;
76
75
  }
77
76
  }
78
77
  if (maybeReorgDetected !== undefined) {
79
78
  return [
80
- shouldRollbackOnReorg ? self : make([], maxReorgDepth, shouldRollbackOnReorg),
81
- {
82
- TAG: "ReorgDetected",
83
- _0: maybeReorgDetected
84
- }
85
- ];
79
+ shouldRollbackOnReorg ? self : make([], maxReorgDepth, shouldRollbackOnReorg),
80
+ {
81
+ TAG: "ReorgDetected",
82
+ _0: maybeReorgDetected
83
+ }
84
+ ];
86
85
  } else {
87
- dataByBlockNumberCopyInThreshold[String(rangeLastBlock.blockNumber)] = rangeLastBlock;
86
+ dataByBlockNumberCopyInThreshold[rangeLastBlock.blockNumber.toString()] = rangeLastBlock;
88
87
  if (prevRangeLastBlock !== undefined) {
89
- dataByBlockNumberCopyInThreshold[String(prevRangeLastBlock.blockNumber)] = prevRangeLastBlock;
88
+ dataByBlockNumberCopyInThreshold[prevRangeLastBlock.blockNumber.toString()] = prevRangeLastBlock;
90
89
  }
91
90
  return [
92
- {
93
- shouldRollbackOnReorg: shouldRollbackOnReorg,
94
- maxReorgDepth: maxReorgDepth,
95
- dataByBlockNumber: dataByBlockNumberCopyInThreshold
96
- },
97
- "NoReorg"
98
- ];
91
+ {
92
+ shouldRollbackOnReorg: shouldRollbackOnReorg,
93
+ maxReorgDepth: maxReorgDepth,
94
+ dataByBlockNumber: dataByBlockNumberCopyInThreshold
95
+ },
96
+ "NoReorg"
97
+ ];
99
98
  }
100
99
  }
101
100
 
102
101
  function getLatestValidScannedBlock(reorgDetection, blockNumbersAndHashes) {
103
- var verifiedDataByBlockNumber = {};
104
- for(var idx = 0 ,idx_finish = blockNumbersAndHashes.length; idx < idx_finish; ++idx){
105
- var blockData = blockNumbersAndHashes[idx];
106
- verifiedDataByBlockNumber[String(blockData.blockNumber)] = blockData;
102
+ let verifiedDataByBlockNumber = {};
103
+ for (let idx = 0, idx_finish = blockNumbersAndHashes.length; idx < idx_finish; ++idx) {
104
+ let blockData = blockNumbersAndHashes[idx];
105
+ verifiedDataByBlockNumber[blockData.blockNumber.toString()] = blockData;
107
106
  }
108
- var ascBlockNumberKeys = Object.keys(verifiedDataByBlockNumber);
109
- var getPrevScannedBlockNumber = function (idx) {
110
- return Belt_Option.map(Belt_Array.get(ascBlockNumberKeys, idx - 1 | 0), (function (key) {
111
- return verifiedDataByBlockNumber[key].blockNumber;
112
- }));
113
- };
114
- var _idx = 0;
115
- while(true) {
116
- var idx$1 = _idx;
117
- var blockNumberKey = Belt_Array.get(ascBlockNumberKeys, idx$1);
107
+ let ascBlockNumberKeys = Object.keys(verifiedDataByBlockNumber);
108
+ let getPrevScannedBlockNumber = idx => Stdlib_Option.map(Belt_Array.get(ascBlockNumberKeys, idx - 1 | 0), key => verifiedDataByBlockNumber[key].blockNumber);
109
+ let _idx = 0;
110
+ while (true) {
111
+ let idx$1 = _idx;
112
+ let blockNumberKey = Belt_Array.get(ascBlockNumberKeys, idx$1);
118
113
  if (blockNumberKey === undefined) {
119
114
  return getPrevScannedBlockNumber(idx$1);
120
115
  }
121
- var scannedBlock = reorgDetection.dataByBlockNumber[blockNumberKey];
116
+ let scannedBlock = reorgDetection.dataByBlockNumber[blockNumberKey];
122
117
  if (scannedBlock === undefined) {
123
118
  return getPrevScannedBlockNumber(idx$1);
124
119
  }
@@ -126,57 +121,56 @@ function getLatestValidScannedBlock(reorgDetection, blockNumbersAndHashes) {
126
121
  return getPrevScannedBlockNumber(idx$1);
127
122
  }
128
123
  _idx = idx$1 + 1 | 0;
129
- continue ;
124
+ continue;
130
125
  };
131
126
  }
132
127
 
133
128
  function rollbackToValidBlockNumber(param, blockNumber) {
134
- var dataByBlockNumber = param.dataByBlockNumber;
135
- var ascBlockNumberKeys = Object.keys(dataByBlockNumber);
136
- var newDataByBlockNumber = {};
137
- var loop = function (_idx) {
138
- while(true) {
139
- var idx = _idx;
140
- var blockNumberKey = Belt_Array.get(ascBlockNumberKeys, idx);
129
+ let dataByBlockNumber = param.dataByBlockNumber;
130
+ let ascBlockNumberKeys = Object.keys(dataByBlockNumber);
131
+ let newDataByBlockNumber = {};
132
+ let loop = _idx => {
133
+ while (true) {
134
+ let idx = _idx;
135
+ let blockNumberKey = Belt_Array.get(ascBlockNumberKeys, idx);
141
136
  if (blockNumberKey === undefined) {
142
- return ;
137
+ return;
143
138
  }
144
- var scannedBlock = dataByBlockNumber[blockNumberKey];
145
- var shouldKeep = scannedBlock.blockNumber <= blockNumber;
139
+ let scannedBlock = dataByBlockNumber[blockNumberKey];
140
+ let shouldKeep = scannedBlock.blockNumber <= blockNumber;
146
141
  if (!shouldKeep) {
147
- return ;
142
+ return;
148
143
  }
149
144
  newDataByBlockNumber[blockNumberKey] = scannedBlock;
150
145
  _idx = idx + 1 | 0;
151
- continue ;
146
+ continue;
152
147
  };
153
148
  };
154
149
  loop(0);
155
150
  return {
156
- shouldRollbackOnReorg: param.shouldRollbackOnReorg,
157
- maxReorgDepth: param.maxReorgDepth,
158
- dataByBlockNumber: newDataByBlockNumber
159
- };
151
+ shouldRollbackOnReorg: param.shouldRollbackOnReorg,
152
+ maxReorgDepth: param.maxReorgDepth,
153
+ dataByBlockNumber: newDataByBlockNumber
154
+ };
160
155
  }
161
156
 
162
157
  function getThresholdBlockNumbersBelowBlock(self, blockNumber, knownHeight) {
163
- var arr = [];
164
- var ascBlockNumberKeys = Object.keys(self.dataByBlockNumber);
165
- var thresholdBlockNumber = knownHeight - self.maxReorgDepth | 0;
166
- for(var idx = 0 ,idx_finish = ascBlockNumberKeys.length; idx < idx_finish; ++idx){
167
- var blockNumberKey = ascBlockNumberKeys[idx];
168
- var scannedBlock = self.dataByBlockNumber[blockNumberKey];
169
- var isInReorgThreshold = scannedBlock.blockNumber >= thresholdBlockNumber;
158
+ let arr = [];
159
+ let ascBlockNumberKeys = Object.keys(self.dataByBlockNumber);
160
+ let thresholdBlockNumber = knownHeight - self.maxReorgDepth | 0;
161
+ for (let idx = 0, idx_finish = ascBlockNumberKeys.length; idx < idx_finish; ++idx) {
162
+ let blockNumberKey = ascBlockNumberKeys[idx];
163
+ let scannedBlock = self.dataByBlockNumber[blockNumberKey];
164
+ let isInReorgThreshold = scannedBlock.blockNumber >= thresholdBlockNumber;
170
165
  if (isInReorgThreshold && scannedBlock.blockNumber < blockNumber) {
171
166
  arr.push(scannedBlock.blockNumber);
172
167
  }
173
-
174
168
  }
175
169
  return arr;
176
170
  }
177
171
 
178
172
  function getHashByBlockNumber(reorgDetection, blockNumber) {
179
- var v = reorgDetection.dataByBlockNumber[blockNumber];
173
+ let v = reorgDetection.dataByBlockNumber[blockNumber];
180
174
  if (v !== undefined) {
181
175
  return v.blockHash;
182
176
  } else {
@@ -185,13 +179,13 @@ function getHashByBlockNumber(reorgDetection, blockNumber) {
185
179
  }
186
180
 
187
181
  export {
188
- reorgDetectedToLogParams ,
189
- make ,
190
- getDataByBlockNumberCopyInThreshold ,
191
- registerReorgGuard ,
192
- getLatestValidScannedBlock ,
193
- rollbackToValidBlockNumber ,
194
- getThresholdBlockNumbersBelowBlock ,
195
- getHashByBlockNumber ,
182
+ reorgDetectedToLogParams,
183
+ make,
184
+ getDataByBlockNumberCopyInThreshold,
185
+ registerReorgGuard,
186
+ getLatestValidScannedBlock,
187
+ rollbackToValidBlockNumber,
188
+ getThresholdBlockNumbersBelowBlock,
189
+ getHashByBlockNumber,
196
190
  }
197
191
  /* No side effect */
@@ -19,7 +19,7 @@ let make = (
19
19
  let checkpointBlockNumbers = Belt.Array.makeUninitializedUnsafe(
20
20
  chainReorgCheckpoints->Array.length,
21
21
  )
22
- chainReorgCheckpoints->Js.Array2.forEachi((checkpoint, idx) => {
22
+ chainReorgCheckpoints->Array.forEachWithIndex((checkpoint, idx) => {
23
23
  checkpointIds->Belt.Array.setUnsafe(idx, checkpoint.checkpointId)
24
24
  checkpointBlockNumbers->Belt.Array.setUnsafe(idx, checkpoint.blockNumber)
25
25
  })
@@ -84,9 +84,9 @@ let updateOnNewBatch = (
84
84
  for idx in 0 to safeCheckpointTracking.checkpointIds->Array.length - 1 {
85
85
  let checkpointId = safeCheckpointTracking.checkpointIds->Belt.Array.getUnsafe(idx)
86
86
  if checkpointId >= safeCheckpointId {
87
- mutCheckpointIds->Js.Array2.push(checkpointId)->ignore
87
+ mutCheckpointIds->Array.push(checkpointId)->ignore
88
88
  mutCheckpointBlockNumbers
89
- ->Js.Array2.push(safeCheckpointTracking.checkpointBlockNumbers->Belt.Array.getUnsafe(idx))
89
+ ->Array.push(safeCheckpointTracking.checkpointBlockNumbers->Belt.Array.getUnsafe(idx))
90
90
  ->ignore
91
91
  }
92
92
  }
@@ -94,9 +94,9 @@ let updateOnNewBatch = (
94
94
  // Append new checkpoints
95
95
  for idx in 0 to batchCheckpointIds->Array.length - 1 {
96
96
  if batchCheckpointChainIds->Belt.Array.getUnsafe(idx) === chainId {
97
- mutCheckpointIds->Js.Array2.push(batchCheckpointIds->Belt.Array.getUnsafe(idx))->ignore
97
+ mutCheckpointIds->Array.push(batchCheckpointIds->Belt.Array.getUnsafe(idx))->ignore
98
98
  mutCheckpointBlockNumbers
99
- ->Js.Array2.push(batchCheckpointBlockNumbers->Belt.Array.getUnsafe(idx))
99
+ ->Array.push(batchCheckpointBlockNumbers->Belt.Array.getUnsafe(idx))
100
100
  ->ignore
101
101
  }
102
102
  }
@@ -116,10 +116,10 @@ let rollback = (safeCheckpointTracking: t, ~targetBlockNumber: int) => {
116
116
  let blockNumber = safeCheckpointTracking.checkpointBlockNumbers->Belt.Array.getUnsafe(idx)
117
117
  if blockNumber <= targetBlockNumber {
118
118
  mutCheckpointIds
119
- ->Js.Array2.push(safeCheckpointTracking.checkpointIds->Belt.Array.getUnsafe(idx))
119
+ ->Array.push(safeCheckpointTracking.checkpointIds->Belt.Array.getUnsafe(idx))
120
120
  ->ignore
121
121
  mutCheckpointBlockNumbers
122
- ->Js.Array2.push(safeCheckpointTracking.checkpointBlockNumbers->Belt.Array.getUnsafe(idx))
122
+ ->Array.push(safeCheckpointTracking.checkpointBlockNumbers->Belt.Array.getUnsafe(idx))
123
123
  ->ignore
124
124
  }
125
125
  }
@@ -3,24 +3,24 @@
3
3
 
4
4
  function make(maxReorgDepth, shouldRollbackOnReorg, chainReorgCheckpoints) {
5
5
  if (!(maxReorgDepth > 0 && shouldRollbackOnReorg)) {
6
- return ;
6
+ return;
7
7
  }
8
- var checkpointIds = new Array(chainReorgCheckpoints.length);
9
- var checkpointBlockNumbers = new Array(chainReorgCheckpoints.length);
10
- chainReorgCheckpoints.forEach(function (checkpoint, idx) {
11
- checkpointIds[idx] = checkpoint.id;
12
- checkpointBlockNumbers[idx] = checkpoint.block_number;
13
- });
8
+ let checkpointIds = new Array(chainReorgCheckpoints.length);
9
+ let checkpointBlockNumbers = new Array(chainReorgCheckpoints.length);
10
+ chainReorgCheckpoints.forEach((checkpoint, idx) => {
11
+ checkpointIds[idx] = checkpoint.id;
12
+ checkpointBlockNumbers[idx] = checkpoint.block_number;
13
+ });
14
14
  return {
15
- checkpointIds: checkpointIds,
16
- checkpointBlockNumbers: checkpointBlockNumbers,
17
- maxReorgDepth: maxReorgDepth
18
- };
15
+ checkpointIds: checkpointIds,
16
+ checkpointBlockNumbers: checkpointBlockNumbers,
17
+ maxReorgDepth: maxReorgDepth
18
+ };
19
19
  }
20
20
 
21
21
  function getSafeCheckpointId(safeCheckpointTracking, sourceBlockNumber) {
22
- var safeBlockNumber = sourceBlockNumber - safeCheckpointTracking.maxReorgDepth | 0;
23
- var match = safeCheckpointTracking.checkpointIds;
22
+ let safeBlockNumber = sourceBlockNumber - safeCheckpointTracking.maxReorgDepth | 0;
23
+ let match = safeCheckpointTracking.checkpointIds;
24
24
  if (match.length === 0) {
25
25
  return 0n;
26
26
  }
@@ -30,16 +30,16 @@ function getSafeCheckpointId(safeCheckpointTracking, sourceBlockNumber) {
30
30
  if (match.length === 1) {
31
31
  return match[0];
32
32
  }
33
- var trackingCheckpointsCount = safeCheckpointTracking.checkpointIds.length;
34
- var result;
35
- var idx = 1;
36
- while(idx < trackingCheckpointsCount && result === undefined) {
33
+ let trackingCheckpointsCount = safeCheckpointTracking.checkpointIds.length;
34
+ let result;
35
+ let idx = 1;
36
+ while (idx < trackingCheckpointsCount && result === undefined) {
37
37
  if (safeCheckpointTracking.checkpointBlockNumbers[idx] > safeBlockNumber) {
38
38
  result = safeCheckpointTracking.checkpointIds[idx - 1 | 0];
39
39
  }
40
40
  idx = idx + 1 | 0;
41
41
  };
42
- var checkpointId = result;
42
+ let checkpointId = result;
43
43
  if (checkpointId !== undefined) {
44
44
  return checkpointId;
45
45
  } else {
@@ -48,53 +48,50 @@ function getSafeCheckpointId(safeCheckpointTracking, sourceBlockNumber) {
48
48
  }
49
49
 
50
50
  function updateOnNewBatch(safeCheckpointTracking, sourceBlockNumber, chainId, batchCheckpointIds, batchCheckpointBlockNumbers, batchCheckpointChainIds) {
51
- var safeCheckpointId = getSafeCheckpointId(safeCheckpointTracking, sourceBlockNumber);
52
- var mutCheckpointIds = [];
53
- var mutCheckpointBlockNumbers = [];
54
- for(var idx = 0 ,idx_finish = safeCheckpointTracking.checkpointIds.length; idx < idx_finish; ++idx){
55
- var checkpointId = safeCheckpointTracking.checkpointIds[idx];
51
+ let safeCheckpointId = getSafeCheckpointId(safeCheckpointTracking, sourceBlockNumber);
52
+ let mutCheckpointIds = [];
53
+ let mutCheckpointBlockNumbers = [];
54
+ for (let idx = 0, idx_finish = safeCheckpointTracking.checkpointIds.length; idx < idx_finish; ++idx) {
55
+ let checkpointId = safeCheckpointTracking.checkpointIds[idx];
56
56
  if (checkpointId >= safeCheckpointId) {
57
57
  mutCheckpointIds.push(checkpointId);
58
58
  mutCheckpointBlockNumbers.push(safeCheckpointTracking.checkpointBlockNumbers[idx]);
59
59
  }
60
-
61
60
  }
62
- for(var idx$1 = 0 ,idx_finish$1 = batchCheckpointIds.length; idx$1 < idx_finish$1; ++idx$1){
61
+ for (let idx$1 = 0, idx_finish$1 = batchCheckpointIds.length; idx$1 < idx_finish$1; ++idx$1) {
63
62
  if (batchCheckpointChainIds[idx$1] === chainId) {
64
63
  mutCheckpointIds.push(batchCheckpointIds[idx$1]);
65
64
  mutCheckpointBlockNumbers.push(batchCheckpointBlockNumbers[idx$1]);
66
65
  }
67
-
68
66
  }
69
67
  return {
70
- checkpointIds: mutCheckpointIds,
71
- checkpointBlockNumbers: mutCheckpointBlockNumbers,
72
- maxReorgDepth: safeCheckpointTracking.maxReorgDepth
73
- };
68
+ checkpointIds: mutCheckpointIds,
69
+ checkpointBlockNumbers: mutCheckpointBlockNumbers,
70
+ maxReorgDepth: safeCheckpointTracking.maxReorgDepth
71
+ };
74
72
  }
75
73
 
76
74
  function rollback(safeCheckpointTracking, targetBlockNumber) {
77
- var mutCheckpointIds = [];
78
- var mutCheckpointBlockNumbers = [];
79
- for(var idx = 0 ,idx_finish = safeCheckpointTracking.checkpointIds.length; idx < idx_finish; ++idx){
80
- var blockNumber = safeCheckpointTracking.checkpointBlockNumbers[idx];
75
+ let mutCheckpointIds = [];
76
+ let mutCheckpointBlockNumbers = [];
77
+ for (let idx = 0, idx_finish = safeCheckpointTracking.checkpointIds.length; idx < idx_finish; ++idx) {
78
+ let blockNumber = safeCheckpointTracking.checkpointBlockNumbers[idx];
81
79
  if (blockNumber <= targetBlockNumber) {
82
80
  mutCheckpointIds.push(safeCheckpointTracking.checkpointIds[idx]);
83
81
  mutCheckpointBlockNumbers.push(safeCheckpointTracking.checkpointBlockNumbers[idx]);
84
82
  }
85
-
86
83
  }
87
84
  return {
88
- checkpointIds: mutCheckpointIds,
89
- checkpointBlockNumbers: mutCheckpointBlockNumbers,
90
- maxReorgDepth: safeCheckpointTracking.maxReorgDepth
91
- };
85
+ checkpointIds: mutCheckpointIds,
86
+ checkpointBlockNumbers: mutCheckpointBlockNumbers,
87
+ maxReorgDepth: safeCheckpointTracking.maxReorgDepth
88
+ };
92
89
  }
93
90
 
94
91
  export {
95
- make ,
96
- getSafeCheckpointId ,
97
- updateOnNewBatch ,
98
- rollback ,
92
+ make,
93
+ getSafeCheckpointId,
94
+ updateOnNewBatch,
95
+ rollback,
99
96
  }
100
97
  /* No side effect */