envio 3.1.2 → 3.2.0

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 (134) hide show
  1. package/evm.schema.json +83 -11
  2. package/fuel.schema.json +83 -11
  3. package/index.d.ts +184 -3
  4. package/package.json +6 -6
  5. package/src/Batch.res +2 -2
  6. package/src/ChainFetcher.res +27 -3
  7. package/src/ChainFetcher.res.mjs +17 -3
  8. package/src/ChainManager.res +163 -0
  9. package/src/ChainManager.res.mjs +136 -0
  10. package/src/Config.res +213 -30
  11. package/src/Config.res.mjs +102 -41
  12. package/src/Core.res +16 -10
  13. package/src/Ecosystem.res +0 -3
  14. package/src/Env.res +2 -2
  15. package/src/Env.res.mjs +2 -2
  16. package/src/Envio.res +101 -2
  17. package/src/Envio.res.mjs +2 -3
  18. package/src/EventConfigBuilder.res +52 -0
  19. package/src/EventConfigBuilder.res.mjs +32 -0
  20. package/src/EventUtils.res +2 -2
  21. package/src/FetchState.res +23 -14
  22. package/src/FetchState.res.mjs +21 -15
  23. package/src/GlobalState.res +219 -363
  24. package/src/GlobalState.res.mjs +314 -491
  25. package/src/GlobalStateManager.res +49 -59
  26. package/src/GlobalStateManager.res.mjs +5 -4
  27. package/src/GlobalStateManager.resi +1 -1
  28. package/src/HandlerLoader.res +12 -1
  29. package/src/HandlerLoader.res.mjs +6 -1
  30. package/src/HandlerRegister.res +9 -9
  31. package/src/HandlerRegister.res.mjs +9 -9
  32. package/src/Hasura.res +102 -32
  33. package/src/Hasura.res.mjs +88 -34
  34. package/src/InMemoryStore.res +10 -1
  35. package/src/InMemoryStore.res.mjs +4 -1
  36. package/src/InMemoryTable.res +83 -136
  37. package/src/InMemoryTable.res.mjs +57 -86
  38. package/src/Internal.res +54 -5
  39. package/src/Internal.res.mjs +2 -8
  40. package/src/LazyLoader.res +2 -2
  41. package/src/LazyLoader.res.mjs +3 -3
  42. package/src/LoadLayer.res +47 -60
  43. package/src/LoadLayer.res.mjs +28 -50
  44. package/src/LoadLayer.resi +2 -5
  45. package/src/LogSelection.res +4 -4
  46. package/src/LogSelection.res.mjs +5 -7
  47. package/src/Logging.res +1 -1
  48. package/src/Main.res +61 -2
  49. package/src/Main.res.mjs +37 -1
  50. package/src/Persistence.res +3 -16
  51. package/src/PgStorage.res +125 -114
  52. package/src/PgStorage.res.mjs +112 -95
  53. package/src/Ports.res +5 -0
  54. package/src/Ports.res.mjs +9 -0
  55. package/src/Prometheus.res +3 -3
  56. package/src/Prometheus.res.mjs +4 -4
  57. package/src/ReorgDetection.res +4 -4
  58. package/src/ReorgDetection.res.mjs +4 -5
  59. package/src/SafeCheckpointTracking.res +16 -16
  60. package/src/SafeCheckpointTracking.res.mjs +2 -2
  61. package/src/SimulateItems.res +10 -14
  62. package/src/SimulateItems.res.mjs +5 -2
  63. package/src/Sink.res +1 -1
  64. package/src/Sink.res.mjs +1 -2
  65. package/src/SvmTypes.res +9 -0
  66. package/src/SvmTypes.res.mjs +14 -0
  67. package/src/TestIndexer.res +17 -57
  68. package/src/TestIndexer.res.mjs +14 -48
  69. package/src/TestIndexerProxyStorage.res +23 -23
  70. package/src/TestIndexerProxyStorage.res.mjs +12 -15
  71. package/src/Throttler.res +2 -2
  72. package/src/Time.res +2 -2
  73. package/src/Time.res.mjs +2 -2
  74. package/src/UserContext.res +19 -118
  75. package/src/UserContext.res.mjs +10 -66
  76. package/src/Utils.res +15 -15
  77. package/src/Utils.res.mjs +7 -8
  78. package/src/adapters/MarkBatchProcessedAdapter.res +5 -0
  79. package/src/adapters/MarkBatchProcessedAdapter.res.mjs +14 -0
  80. package/src/bindings/BigDecimal.res +1 -1
  81. package/src/bindings/BigDecimal.res.mjs +2 -2
  82. package/src/bindings/ClickHouse.res +8 -6
  83. package/src/bindings/ClickHouse.res.mjs +5 -5
  84. package/src/bindings/Hrtime.res +1 -1
  85. package/src/bindings/Pino.res +2 -2
  86. package/src/bindings/Pino.res.mjs +3 -4
  87. package/src/db/EntityFilter.res +410 -0
  88. package/src/db/EntityFilter.res.mjs +424 -0
  89. package/src/db/EntityHistory.res +1 -1
  90. package/src/db/EntityHistory.res.mjs +1 -1
  91. package/src/db/InternalTable.res +10 -10
  92. package/src/db/InternalTable.res.mjs +41 -45
  93. package/src/db/Schema.res +2 -2
  94. package/src/db/Schema.res.mjs +3 -3
  95. package/src/db/Table.res +106 -22
  96. package/src/db/Table.res.mjs +84 -35
  97. package/src/sources/EventRouter.res +67 -2
  98. package/src/sources/EventRouter.res.mjs +45 -3
  99. package/src/sources/Evm.res +0 -7
  100. package/src/sources/Evm.res.mjs +0 -15
  101. package/src/sources/EvmChain.res +1 -1
  102. package/src/sources/EvmChain.res.mjs +1 -2
  103. package/src/sources/EvmRpcClient.res +42 -0
  104. package/src/sources/EvmRpcClient.res.mjs +64 -0
  105. package/src/sources/Fuel.res +0 -7
  106. package/src/sources/Fuel.res.mjs +0 -15
  107. package/src/sources/HyperFuelSource.res +5 -4
  108. package/src/sources/HyperFuelSource.res.mjs +2 -2
  109. package/src/sources/HyperSyncClient.res +9 -5
  110. package/src/sources/HyperSyncClient.res.mjs +2 -2
  111. package/src/sources/HyperSyncHeightStream.res +2 -2
  112. package/src/sources/HyperSyncHeightStream.res.mjs +2 -2
  113. package/src/sources/HyperSyncSource.res +10 -9
  114. package/src/sources/HyperSyncSource.res.mjs +4 -4
  115. package/src/sources/Rpc.res +1 -5
  116. package/src/sources/Rpc.res.mjs +1 -9
  117. package/src/sources/RpcSource.res +57 -21
  118. package/src/sources/RpcSource.res.mjs +47 -20
  119. package/src/sources/RpcWebSocketHeightStream.res +1 -1
  120. package/src/sources/SourceManager.res +3 -2
  121. package/src/sources/SourceManager.res.mjs +1 -1
  122. package/src/sources/Svm.res +3 -10
  123. package/src/sources/Svm.res.mjs +4 -18
  124. package/src/sources/SvmHyperSyncClient.res +265 -0
  125. package/src/sources/SvmHyperSyncClient.res.mjs +28 -0
  126. package/src/sources/SvmHyperSyncSource.res +638 -0
  127. package/src/sources/SvmHyperSyncSource.res.mjs +557 -0
  128. package/src/tui/Tui.res +9 -2
  129. package/src/tui/Tui.res.mjs +18 -3
  130. package/src/tui/components/BufferedProgressBar.res +2 -2
  131. package/src/tui/components/TuiData.res +3 -0
  132. package/svm.schema.json +523 -14
  133. package/src/TableIndices.res +0 -115
  134. package/src/TableIndices.res.mjs +0 -144
@@ -288,6 +288,37 @@ function buildEvmEventConfig(contractName, eventName, sighash, params, isWildcar
288
288
  };
289
289
  }
290
290
 
291
+ function buildSvmInstructionEventConfig(contractName, instructionName, programId, discriminator, discriminatorByteLen, includeTransaction, includeLogs, includeTokenBalances, accountFilters, isInner, isWildcard, handler, contractRegister, accountsOpt, argsOpt, definedTypesOpt, startBlock) {
292
+ let accounts = accountsOpt !== undefined ? accountsOpt : [];
293
+ let args = argsOpt !== undefined ? argsOpt : null;
294
+ let definedTypes = definedTypesOpt !== undefined ? definedTypesOpt : null;
295
+ let paramsSchema = Utils.Schema.coerceToJsonPgType(S$RescriptSchema.json(false));
296
+ return {
297
+ id: discriminator !== undefined ? discriminator : "none",
298
+ name: instructionName,
299
+ contractName: contractName,
300
+ isWildcard: isWildcard,
301
+ filterByAddresses: false,
302
+ dependsOnAddresses: !isWildcard,
303
+ handler: handler,
304
+ contractRegister: contractRegister,
305
+ paramsRawEventSchema: paramsSchema,
306
+ simulateParamsSchema: paramsSchema,
307
+ startBlock: startBlock,
308
+ programId: programId,
309
+ discriminator: discriminator,
310
+ discriminatorByteLen: discriminatorByteLen,
311
+ includeTransaction: includeTransaction,
312
+ includeLogs: includeLogs,
313
+ includeTokenBalances: includeTokenBalances,
314
+ accountFilters: accountFilters,
315
+ isInner: isInner,
316
+ accounts: accounts,
317
+ args: args,
318
+ definedTypes: definedTypes
319
+ };
320
+ }
321
+
291
322
  function buildFuelEventConfig(contractName, eventName, kind, sighash, rawAbi, isWildcard, handler, contractRegister, startBlock) {
292
323
  let fuelKind;
293
324
  switch (kind) {
@@ -363,6 +394,7 @@ export {
363
394
  alwaysIncludedBlockFields,
364
395
  resolveFieldSelection,
365
396
  buildEvmEventConfig,
397
+ buildSvmInstructionEventConfig,
366
398
  buildFuelEventConfig,
367
399
  }
368
400
  /* paramMetaSchema Not a pure module */
@@ -45,8 +45,8 @@ let packEventIndex = (~blockNumber, ~logIndex) => {
45
45
  // let logIndexMask = 65535->BigInt.fromInt
46
46
  // let logIndex = packedEventIndex->BigInt.bitwiseAnd(logIndexMask)
47
47
  // {
48
- // blockNumber: blockNumber->BigInt.toString->Belt.Int.fromString->Belt.Option.getUnsafe,
49
- // logIndex: logIndex->BigInt.toString->Belt.Int.fromString->Belt.Option.getUnsafe,
48
+ // blockNumber: blockNumber->BigInt.toString->Int.fromString->Option.getUnsafe,
49
+ // logIndex: logIndex->BigInt.toString->Int.fromString->Option.getUnsafe,
50
50
  // }
51
51
  // }
52
52
 
@@ -336,7 +336,7 @@ module OptimizedPartitions = {
336
336
  let _ = newPartitions->Array.sort(ascSortFn)
337
337
 
338
338
  let partitionsCount = newPartitions->Array.length
339
- let idsInAscOrder = Belt.Array.makeUninitializedUnsafe(partitionsCount)
339
+ let idsInAscOrder = Utils.Array.jsArrayCreate(partitionsCount)
340
340
  let entities = Dict.make()
341
341
  for idx in 0 to partitionsCount - 1 {
342
342
  let p = newPartitions->Array.getUnsafe(idx)
@@ -639,7 +639,7 @@ let updateInternal = (
639
639
  let maxBlockNumber = switch switch mutItemsRef.contents {
640
640
  | Some(mutItems) => mutItems
641
641
  | None => fetchState.buffer
642
- }->Belt.Array.get(fetchState.targetBufferSize - 1) {
642
+ }->Array.get(fetchState.targetBufferSize - 1) {
643
643
  | Some(item) => item->Internal.getItemBlockNumber
644
644
  | None =>
645
645
  switch optimizedPartitions->OptimizedPartitions.getLatestFullyFetchedBlock {
@@ -974,6 +974,10 @@ let registerDynamicContracts = (
974
974
  // so that later conflicting registrations are detected, and are persisted
975
975
  // to envio_addresses so they can be picked up on restart with updated config.
976
976
  let noEventsAddresses: dict<indexingAddress> = Dict.make()
977
+ // Batch-level view of all addresses registered so far (across contracts,
978
+ // including no-events ones), so two contracts registering the same address
979
+ // within one batch conflict the same way as against indexingAddresses.
980
+ let registeringAddresses: dict<indexingAddress> = Dict.make()
977
981
 
978
982
  for itemIdx in 0 to items->Array.length - 1 {
979
983
  let item = items->Array.getUnsafe(itemIdx)
@@ -1021,9 +1025,7 @@ let registerDynamicContracts = (
1021
1025
  }
1022
1026
  shouldRemove := true
1023
1027
  | None =>
1024
- let registeringContracts =
1025
- registeringContractsByContract->Utils.Dict.getOrInsertEmptyDict(dc.contractName)
1026
- let shouldUpdate = switch registeringContracts->Utils.Dict.dangerouslyGetNonOption(
1028
+ let shouldUpdate = switch registeringAddresses->Utils.Dict.dangerouslyGetNonOption(
1027
1029
  dc.address->Address.toString,
1028
1030
  ) {
1029
1031
  | Some(registeringContract) if registeringContract.contractName != dc.contractName =>
@@ -1046,7 +1048,10 @@ let registerDynamicContracts = (
1046
1048
  earliestRegisteringEventBlockNumber.contents,
1047
1049
  dcWithStartBlock.effectiveStartBlock,
1048
1050
  )
1049
- registeringContracts->Dict.set(dc.address->Address.toString, dcWithStartBlock)
1051
+ registeringContractsByContract
1052
+ ->Utils.Dict.getOrInsertEmptyDict(dc.contractName)
1053
+ ->Dict.set(dc.address->Address.toString, dcWithStartBlock)
1054
+ registeringAddresses->Dict.set(dc.address->Address.toString, dcWithStartBlock)
1050
1055
  } else {
1051
1056
  shouldRemove := true
1052
1057
  }
@@ -1073,11 +1078,14 @@ let registerDynamicContracts = (
1073
1078
  }
1074
1079
  shouldRemove := true
1075
1080
  | None =>
1076
- switch noEventsAddresses->Utils.Dict.dangerouslyGetNonOption(
1081
+ switch registeringAddresses->Utils.Dict.dangerouslyGetNonOption(
1077
1082
  dc.address->Address.toString,
1078
1083
  ) {
1079
- | Some(_) =>
1080
- // Already queued for persistence by an earlier item in this batch.
1084
+ | Some(existingContract) =>
1085
+ if existingContract.contractName != dc.contractName {
1086
+ fetchState->warnDifferentContractType(~existingContract, ~dc=dcAsIndexingAddress)
1087
+ }
1088
+ // Otherwise already queued for persistence by an earlier item in this batch.
1081
1089
  shouldRemove := true
1082
1090
  | None =>
1083
1091
  let logger = Logging.createChild(
@@ -1092,6 +1100,7 @@ let registerDynamicContracts = (
1092
1100
  // skip partition registration since there's nothing to fetch.
1093
1101
  logger->Logging.childWarn(`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.`)
1094
1102
  noEventsAddresses->Dict.set(dc.address->Address.toString, dcAsIndexingAddress)
1103
+ registeringAddresses->Dict.set(dc.address->Address.toString, dcAsIndexingAddress)
1095
1104
  }
1096
1105
  }
1097
1106
  }
@@ -1508,7 +1517,7 @@ let getNextQuery = (
1508
1517
  }
1509
1518
 
1510
1519
  let hasReadyItem = ({buffer} as fetchState: t) => {
1511
- switch buffer->Belt.Array.get(0) {
1520
+ switch buffer->Array.get(0) {
1512
1521
  | Some(item) => item->Internal.getItemBlockNumber <= fetchState->bufferBlockNumber
1513
1522
  | None => false
1514
1523
  }
@@ -1519,7 +1528,7 @@ let getReadyItemsCount = (fetchState: t, ~targetSize: int, ~fromItem) => {
1519
1528
  let acc = ref(0)
1520
1529
  let isFinished = ref(false)
1521
1530
  while !isFinished.contents {
1522
- switch fetchState.buffer->Belt.Array.get(fromItem + acc.contents) {
1531
+ switch fetchState.buffer->Array.get(fromItem + acc.contents) {
1523
1532
  | Some(item) =>
1524
1533
  let itemBlockNumber = item->Internal.getItemBlockNumber
1525
1534
  if itemBlockNumber <= readyBlockNumber.contents {
@@ -1951,7 +1960,7 @@ let isReadyToEnterReorgThreshold = ({endBlock, blockLag, buffer, knownHeight} as
1951
1960
 
1952
1961
  let sortForUnorderedBatch = {
1953
1962
  let hasFullBatch = ({buffer} as fetchState: t, ~batchSizeTarget) => {
1954
- switch buffer->Belt.Array.get(batchSizeTarget - 1) {
1963
+ switch buffer->Array.get(batchSizeTarget - 1) {
1955
1964
  | Some(item) => item->Internal.getItemBlockNumber <= fetchState->bufferBlockNumber
1956
1965
  | None => false
1957
1966
  }
@@ -1966,7 +1975,7 @@ let sortForUnorderedBatch = {
1966
1975
  if totalRange <= 0 {
1967
1976
  0.
1968
1977
  } else {
1969
- let progress = switch fetchState.buffer->Belt.Array.get(0) {
1978
+ let progress = switch fetchState.buffer->Array.get(0) {
1970
1979
  | Some(item) => item->Internal.getItemBlockNumber - firstEventBlock
1971
1980
  | None => fetchState->bufferBlockNumber - firstEventBlock
1972
1981
  }
@@ -2001,7 +2010,7 @@ let sortForUnorderedBatch = {
2001
2010
 
2002
2011
  let getProgressBlockNumberAt = ({buffer} as fetchState: t, ~index) => {
2003
2012
  let bufferBlockNumber = fetchState->bufferBlockNumber
2004
- switch buffer->Belt.Array.get(index) {
2013
+ switch buffer->Array.get(index) {
2005
2014
  | Some(item) if bufferBlockNumber >= item->Internal.getItemBlockNumber =>
2006
2015
  item->Internal.getItemBlockNumber - 1
2007
2016
  | _ => bufferBlockNumber
@@ -3,7 +3,6 @@
3
3
  import * as Utils from "./Utils.res.mjs";
4
4
  import * as Js_math from "@rescript/runtime/lib/es6/Js_math.js";
5
5
  import * as Logging from "./Logging.res.mjs";
6
- import * as Belt_Array from "@rescript/runtime/lib/es6/Belt_Array.js";
7
6
  import * as Prometheus from "./Prometheus.res.mjs";
8
7
  import * as Stdlib_Int from "@rescript/runtime/lib/es6/Stdlib_Int.js";
9
8
  import * as Primitive_int from "@rescript/runtime/lib/es6/Primitive_int.js";
@@ -271,7 +270,7 @@ function make(partitions, maxAddrInPartition, nextPartitionIndex, dynamicContrac
271
270
  }
272
271
  newPartitions.sort(ascSortFn);
273
272
  let partitionsCount = newPartitions.length;
274
- let idsInAscOrder = new Array(partitionsCount);
273
+ let idsInAscOrder = Array(partitionsCount);
275
274
  let entities = {};
276
275
  for (let idx$2 = 0; idx$2 < partitionsCount; ++idx$2) {
277
276
  let p$1 = newPartitions[idx$2];
@@ -489,7 +488,9 @@ function updateInternal(fetchState, optimizedPartitionsOpt, indexingAddressesOpt
489
488
  let latestOnBlockBlockNumber;
490
489
  if (onBlockConfigs.length !== 0) {
491
490
  let mutItems$1 = mutItemsRef;
492
- let item = Belt_Array.get(mutItems$1 !== undefined ? mutItems$1 : fetchState.buffer, fetchState.targetBufferSize - 1 | 0);
491
+ let item = (
492
+ mutItems$1 !== undefined ? mutItems$1 : fetchState.buffer
493
+ )[fetchState.targetBufferSize - 1 | 0];
493
494
  let maxBlockNumber;
494
495
  if (item !== undefined) {
495
496
  maxBlockNumber = item.blockNumber;
@@ -726,6 +727,7 @@ function registerDynamicContracts(fetchState, items) {
726
727
  let earliestRegisteringEventBlockNumber = Infinity;
727
728
  let hasDCWithFilterByAddresses = false;
728
729
  let noEventsAddresses = {};
730
+ let registeringAddresses = {};
729
731
  for (let itemIdx = 0, itemIdx_finish = items.length; itemIdx < itemIdx_finish; ++itemIdx) {
730
732
  let item = items[itemIdx];
731
733
  let dcs = item.dcs;
@@ -761,8 +763,7 @@ function registerDynamicContracts(fetchState, items) {
761
763
  }
762
764
  shouldRemove = true;
763
765
  } else {
764
- let registeringContracts = Utils.Dict.getOrInsertEmptyDict(registeringContractsByContract, dc.contractName);
765
- let registeringContract = registeringContracts[dc.address];
766
+ let registeringContract = registeringAddresses[dc.address];
766
767
  let shouldUpdate;
767
768
  if (registeringContract !== undefined) {
768
769
  if (registeringContract.contractName !== dc.contractName) {
@@ -777,7 +778,8 @@ function registerDynamicContracts(fetchState, items) {
777
778
  }
778
779
  if (shouldUpdate) {
779
780
  earliestRegisteringEventBlockNumber = Primitive_int.min(earliestRegisteringEventBlockNumber, dcWithStartBlock_effectiveStartBlock);
780
- registeringContracts[dc.address] = dcWithStartBlock;
781
+ Utils.Dict.getOrInsertEmptyDict(registeringContractsByContract, dc.contractName)[dc.address] = dcWithStartBlock;
782
+ registeringAddresses[dc.address] = dcWithStartBlock;
781
783
  } else {
782
784
  shouldRemove = true;
783
785
  }
@@ -800,8 +802,11 @@ function registerDynamicContracts(fetchState, items) {
800
802
  }
801
803
  shouldRemove = true;
802
804
  } else {
803
- let match$1 = noEventsAddresses[dc.address];
804
- if (match$1 !== undefined) {
805
+ let existingContract$2 = registeringAddresses[dc.address];
806
+ if (existingContract$2 !== undefined) {
807
+ if (existingContract$2.contractName !== dc.contractName) {
808
+ warnDifferentContractType(fetchState, existingContract$2, dcAsIndexingAddress);
809
+ }
805
810
  shouldRemove = true;
806
811
  } else {
807
812
  let logger$1 = Logging.createChild({
@@ -811,6 +816,7 @@ function registerDynamicContracts(fetchState, items) {
811
816
  });
812
817
  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.`);
813
818
  noEventsAddresses[dc.address] = dcAsIndexingAddress;
819
+ registeringAddresses[dc.address] = dcAsIndexingAddress;
814
820
  }
815
821
  }
816
822
  }
@@ -888,8 +894,8 @@ function registerDynamicContracts(fetchState, items) {
888
894
  }
889
895
  }
890
896
  }
891
- let registeringContracts$1 = registeringContractsByContract[contractName];
892
- Object.assign(newIndexingAddresses, registeringContracts$1);
897
+ let registeringContracts = registeringContractsByContract[contractName];
898
+ Object.assign(newIndexingAddresses, registeringContracts);
893
899
  }
894
900
  Object.assign(newIndexingAddresses, noEventsAddresses);
895
901
  let optimizedPartitions = createPartitionsFromIndexingAddresses(registeringContractsByContract, fetchState.contractConfigs, dynamicContractsRef, fetchState.normalSelection, fetchState.optimizedPartitions.maxAddrInPartition, fetchState.optimizedPartitions.nextPartitionIndex + newPartitions.length | 0, mutExistingPartitions.concat(newPartitions), 0);
@@ -1179,7 +1185,7 @@ function getNextQuery(fetchState, concurrencyLimit) {
1179
1185
  }
1180
1186
 
1181
1187
  function hasReadyItem(fetchState) {
1182
- let item = Belt_Array.get(fetchState.buffer, 0);
1188
+ let item = fetchState.buffer[0];
1183
1189
  if (item !== undefined) {
1184
1190
  return item.blockNumber <= bufferBlockNumber(fetchState);
1185
1191
  } else {
@@ -1192,7 +1198,7 @@ function getReadyItemsCount(fetchState, targetSize, fromItem) {
1192
1198
  let acc = 0;
1193
1199
  let isFinished = false;
1194
1200
  while (!isFinished) {
1195
- let item = Belt_Array.get(fetchState.buffer, fromItem + acc | 0);
1201
+ let item = fetchState.buffer[fromItem + acc | 0];
1196
1202
  if (item !== undefined) {
1197
1203
  let itemBlockNumber = item.blockNumber;
1198
1204
  if (itemBlockNumber <= readyBlockNumber) {
@@ -1544,7 +1550,7 @@ function isReadyToEnterReorgThreshold(fetchState) {
1544
1550
  }
1545
1551
 
1546
1552
  function hasFullBatch(fetchState, batchSizeTarget) {
1547
- let item = Belt_Array.get(fetchState.buffer, batchSizeTarget - 1 | 0);
1553
+ let item = fetchState.buffer[batchSizeTarget - 1 | 0];
1548
1554
  if (item !== undefined) {
1549
1555
  return item.blockNumber <= bufferBlockNumber(fetchState);
1550
1556
  } else {
@@ -1561,7 +1567,7 @@ function getProgressPercentage(fetchState) {
1561
1567
  if (totalRange <= 0) {
1562
1568
  return 0;
1563
1569
  }
1564
- let item = Belt_Array.get(fetchState.buffer, 0);
1570
+ let item = fetchState.buffer[0];
1565
1571
  let progress = item !== undefined ? item.blockNumber - firstEventBlock | 0 : bufferBlockNumber(fetchState) - firstEventBlock | 0;
1566
1572
  return progress / totalRange;
1567
1573
  }
@@ -1593,7 +1599,7 @@ function sortForUnorderedBatch(fetchStates, batchSizeTarget) {
1593
1599
 
1594
1600
  function getProgressBlockNumberAt(fetchState, index) {
1595
1601
  let bufferBlockNumber$1 = bufferBlockNumber(fetchState);
1596
- let item = Belt_Array.get(fetchState.buffer, index);
1602
+ let item = fetchState.buffer[index];
1597
1603
  if (item !== undefined && bufferBlockNumber$1 >= item.blockNumber) {
1598
1604
  return item.blockNumber - 1 | 0;
1599
1605
  } else {