envio 3.0.0-alpha.21 → 3.0.0-alpha.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin.mjs +2 -48
- package/evm.schema.json +67 -0
- package/fuel.schema.json +67 -0
- package/index.d.ts +822 -38
- package/index.js +5 -3
- package/package.json +10 -8
- package/rescript.json +5 -9
- package/src/Address.res +4 -5
- package/src/Address.res.mjs +9 -12
- package/src/Api.res +15 -0
- package/src/Api.res.mjs +20 -0
- package/src/Batch.res +32 -34
- package/src/Batch.res.mjs +172 -187
- package/src/Bin.res +89 -0
- package/src/Bin.res.mjs +97 -0
- package/src/ChainFetcher.res +33 -57
- package/src/ChainFetcher.res.mjs +197 -227
- package/src/ChainManager.res +6 -14
- package/src/ChainManager.res.mjs +74 -85
- package/src/ChainMap.res +14 -16
- package/src/ChainMap.res.mjs +38 -38
- package/src/Config.res +193 -135
- package/src/Config.res.mjs +566 -592
- package/src/Core.res +182 -0
- package/src/Core.res.mjs +207 -0
- package/src/Ecosystem.res +25 -4
- package/src/Ecosystem.res.mjs +12 -13
- package/src/Env.res +20 -13
- package/src/Env.res.mjs +124 -113
- package/src/EnvSafe.res +269 -0
- package/src/EnvSafe.res.mjs +296 -0
- package/src/EnvSafe.resi +18 -0
- package/src/Envio.res +37 -26
- package/src/Envio.res.mjs +59 -60
- package/src/ErrorHandling.res +2 -2
- package/src/ErrorHandling.res.mjs +15 -15
- package/src/EventConfigBuilder.res +219 -81
- package/src/EventConfigBuilder.res.mjs +259 -202
- package/src/EventProcessing.res +27 -38
- package/src/EventProcessing.res.mjs +165 -183
- package/src/EventUtils.res +11 -11
- package/src/EventUtils.res.mjs +21 -22
- package/src/EvmTypes.res +0 -1
- package/src/EvmTypes.res.mjs +5 -5
- package/src/FetchState.res +360 -256
- package/src/FetchState.res.mjs +958 -914
- package/src/GlobalState.res +365 -351
- package/src/GlobalState.res.mjs +958 -992
- package/src/GlobalStateManager.res +1 -2
- package/src/GlobalStateManager.res.mjs +36 -44
- package/src/HandlerLoader.res +107 -23
- package/src/HandlerLoader.res.mjs +128 -38
- package/src/HandlerRegister.res +127 -103
- package/src/HandlerRegister.res.mjs +164 -164
- package/src/HandlerRegister.resi +12 -4
- package/src/Hasura.res +35 -22
- package/src/Hasura.res.mjs +158 -167
- package/src/InMemoryStore.res +20 -27
- package/src/InMemoryStore.res.mjs +64 -80
- package/src/InMemoryTable.res +34 -39
- package/src/InMemoryTable.res.mjs +165 -170
- package/src/Internal.res +52 -33
- package/src/Internal.res.mjs +84 -81
- package/src/LazyLoader.res.mjs +55 -61
- package/src/LoadLayer.res +77 -78
- package/src/LoadLayer.res.mjs +160 -189
- package/src/LoadManager.res +16 -21
- package/src/LoadManager.res.mjs +79 -84
- package/src/LogSelection.res +236 -68
- package/src/LogSelection.res.mjs +211 -141
- package/src/Logging.res +13 -9
- package/src/Logging.res.mjs +130 -143
- package/src/Main.res +428 -51
- package/src/Main.res.mjs +528 -271
- package/src/Persistence.res +77 -84
- package/src/Persistence.res.mjs +131 -132
- package/src/PgStorage.res +291 -167
- package/src/PgStorage.res.mjs +797 -817
- package/src/Prometheus.res +50 -58
- package/src/Prometheus.res.mjs +345 -373
- package/src/ReorgDetection.res +22 -24
- package/src/ReorgDetection.res.mjs +100 -106
- package/src/SafeCheckpointTracking.res +7 -7
- package/src/SafeCheckpointTracking.res.mjs +40 -43
- package/src/SimulateItems.res +41 -49
- package/src/SimulateItems.res.mjs +257 -272
- package/src/Sink.res +2 -2
- package/src/Sink.res.mjs +22 -26
- package/src/TableIndices.res +1 -2
- package/src/TableIndices.res.mjs +42 -48
- package/src/TestIndexer.res +196 -189
- package/src/TestIndexer.res.mjs +536 -536
- package/src/TestIndexerProxyStorage.res +15 -16
- package/src/TestIndexerProxyStorage.res.mjs +98 -122
- package/src/TestIndexerWorker.res +4 -0
- package/src/TestIndexerWorker.res.mjs +7 -0
- package/src/Throttler.res +3 -3
- package/src/Throttler.res.mjs +23 -24
- package/src/Time.res +1 -1
- package/src/Time.res.mjs +18 -21
- package/src/TopicFilter.res +3 -3
- package/src/TopicFilter.res.mjs +29 -30
- package/src/UserContext.res +93 -54
- package/src/UserContext.res.mjs +197 -182
- package/src/Utils.res +141 -86
- package/src/Utils.res.mjs +334 -295
- package/src/bindings/BigDecimal.res +0 -2
- package/src/bindings/BigDecimal.res.mjs +19 -23
- package/src/bindings/ClickHouse.res +28 -27
- package/src/bindings/ClickHouse.res.mjs +243 -240
- package/src/bindings/DateFns.res +11 -11
- package/src/bindings/DateFns.res.mjs +7 -7
- package/src/bindings/EventSource.res.mjs +2 -2
- package/src/bindings/Express.res +2 -5
- package/src/bindings/Hrtime.res +2 -2
- package/src/bindings/Hrtime.res.mjs +30 -32
- package/src/bindings/Lodash.res.mjs +1 -1
- package/src/bindings/NodeJs.res +14 -9
- package/src/bindings/NodeJs.res.mjs +20 -20
- package/src/bindings/Pino.res +8 -10
- package/src/bindings/Pino.res.mjs +40 -43
- package/src/bindings/Postgres.res +2 -5
- package/src/bindings/Postgres.res.mjs +9 -9
- package/src/bindings/PromClient.res +17 -2
- package/src/bindings/PromClient.res.mjs +30 -7
- package/src/bindings/SDSL.res.mjs +2 -2
- package/src/bindings/Viem.res +4 -4
- package/src/bindings/Viem.res.mjs +20 -22
- package/src/bindings/Vitest.res +1 -1
- package/src/bindings/Vitest.res.mjs +2 -2
- package/src/bindings/WebSocket.res +1 -1
- package/src/db/EntityHistory.res +9 -3
- package/src/db/EntityHistory.res.mjs +84 -59
- package/src/db/InternalTable.res +62 -60
- package/src/db/InternalTable.res.mjs +271 -203
- package/src/db/Schema.res +1 -2
- package/src/db/Schema.res.mjs +28 -32
- package/src/db/Table.res +28 -27
- package/src/db/Table.res.mjs +276 -292
- package/src/sources/EventRouter.res +21 -16
- package/src/sources/EventRouter.res.mjs +55 -57
- package/src/sources/Evm.res +17 -1
- package/src/sources/Evm.res.mjs +16 -8
- package/src/sources/EvmChain.res +15 -17
- package/src/sources/EvmChain.res.mjs +40 -42
- package/src/sources/Fuel.res +14 -1
- package/src/sources/Fuel.res.mjs +16 -8
- package/src/sources/FuelSDK.res +1 -1
- package/src/sources/FuelSDK.res.mjs +6 -8
- package/src/sources/HyperFuel.res +8 -10
- package/src/sources/HyperFuel.res.mjs +113 -123
- package/src/sources/HyperFuelClient.res.mjs +6 -7
- package/src/sources/HyperFuelSource.res +19 -20
- package/src/sources/HyperFuelSource.res.mjs +339 -356
- package/src/sources/HyperSync.res +11 -13
- package/src/sources/HyperSync.res.mjs +206 -220
- package/src/sources/HyperSyncClient.res +5 -7
- package/src/sources/HyperSyncClient.res.mjs +70 -75
- package/src/sources/HyperSyncHeightStream.res +8 -9
- package/src/sources/HyperSyncHeightStream.res.mjs +78 -86
- package/src/sources/HyperSyncJsonApi.res +18 -15
- package/src/sources/HyperSyncJsonApi.res.mjs +201 -231
- package/src/sources/HyperSyncSource.res +17 -21
- package/src/sources/HyperSyncSource.res.mjs +268 -290
- package/src/sources/Rpc.res +5 -5
- package/src/sources/Rpc.res.mjs +168 -192
- package/src/sources/RpcSource.res +166 -167
- package/src/sources/RpcSource.res.mjs +972 -1046
- package/src/sources/RpcWebSocketHeightStream.res +10 -11
- package/src/sources/RpcWebSocketHeightStream.res.mjs +131 -145
- package/src/sources/SimulateSource.res +1 -1
- package/src/sources/SimulateSource.res.mjs +35 -38
- package/src/sources/Source.res +1 -1
- package/src/sources/Source.res.mjs +3 -3
- package/src/sources/SourceManager.res +39 -20
- package/src/sources/SourceManager.res.mjs +340 -371
- package/src/sources/SourceManager.resi +2 -1
- package/src/sources/Svm.res +12 -5
- package/src/sources/Svm.res.mjs +44 -41
- package/src/tui/Tui.res +23 -12
- package/src/tui/Tui.res.mjs +292 -290
- package/src/tui/bindings/Ink.res +2 -4
- package/src/tui/bindings/Ink.res.mjs +35 -41
- package/src/tui/components/BufferedProgressBar.res +7 -7
- package/src/tui/components/BufferedProgressBar.res.mjs +46 -46
- package/src/tui/components/CustomHooks.res +1 -2
- package/src/tui/components/CustomHooks.res.mjs +102 -122
- package/src/tui/components/Messages.res +1 -2
- package/src/tui/components/Messages.res.mjs +38 -42
- package/src/tui/components/SyncETA.res +10 -11
- package/src/tui/components/SyncETA.res.mjs +178 -196
- package/src/tui/components/TuiData.res +1 -1
- package/src/tui/components/TuiData.res.mjs +7 -6
- package/src/vendored/Rest.res +52 -66
- package/src/vendored/Rest.res.mjs +324 -364
- package/svm.schema.json +67 -0
- package/src/Address.gen.ts +0 -8
- package/src/Config.gen.ts +0 -19
- package/src/Envio.gen.ts +0 -55
- package/src/EvmTypes.gen.ts +0 -6
- package/src/InMemoryStore.gen.ts +0 -6
- package/src/Internal.gen.ts +0 -64
- package/src/PgStorage.gen.ts +0 -10
- package/src/PgStorage.res.d.mts +0 -5
- package/src/Types.ts +0 -56
- package/src/bindings/BigDecimal.gen.ts +0 -14
- package/src/bindings/BigDecimal.res.d.mts +0 -5
- package/src/bindings/BigInt.gen.ts +0 -10
- package/src/bindings/BigInt.res +0 -70
- package/src/bindings/BigInt.res.d.mts +0 -5
- package/src/bindings/BigInt.res.mjs +0 -154
- package/src/bindings/Ethers.res.d.mts +0 -5
- package/src/bindings/Pino.gen.ts +0 -17
- package/src/bindings/Postgres.gen.ts +0 -8
- package/src/bindings/Postgres.res.d.mts +0 -5
- package/src/bindings/Promise.res +0 -67
- package/src/bindings/Promise.res.mjs +0 -26
- package/src/db/InternalTable.gen.ts +0 -36
- package/src/sources/HyperSyncClient.gen.ts +0 -19
package/index.js
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
// on the JS side, so we need to do it here
|
|
4
4
|
|
|
5
5
|
import * as Sury from "rescript-schema";
|
|
6
|
-
import {
|
|
6
|
+
import { $$BigInt as UtilsBigInt } from "./src/Utils.res.mjs";
|
|
7
|
+
const bigintSchema = UtilsBigInt.schema;
|
|
7
8
|
import { schema as bigDecimalSchema } from "./src/bindings/BigDecimal.res.mjs";
|
|
8
9
|
|
|
9
|
-
// Re-export everything from envioGen
|
|
10
10
|
export * from "./src/Envio.res.mjs";
|
|
11
|
+
export { indexer, createTestIndexer } from "./src/Api.res.mjs";
|
|
12
|
+
export { default as BigDecimal } from "bignumber.js";
|
|
11
13
|
|
|
12
14
|
// Important! Should match the index.d.ts file
|
|
13
15
|
export const S = {
|
|
@@ -37,7 +39,7 @@ export const S = {
|
|
|
37
39
|
tuple: Sury.tuple,
|
|
38
40
|
merge: Sury.merge,
|
|
39
41
|
optional: Sury.optional,
|
|
40
|
-
nullable: Sury.
|
|
42
|
+
nullable: (schema) => Sury.union([schema, null]),
|
|
41
43
|
bigDecimal: bigDecimalSchema,
|
|
42
44
|
// Nullish type will change in "sury@10"
|
|
43
45
|
// nullish: Sury.nullish,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "envio",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.22",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A latency and sync speed optimized, developer friendly blockchain data indexer.",
|
|
6
6
|
"bin": "./bin.mjs",
|
|
@@ -51,18 +51,19 @@
|
|
|
51
51
|
"@fuel-ts/utils": "0.96.1",
|
|
52
52
|
"bignumber.js": "9.3.1",
|
|
53
53
|
"eventsource": "4.1.0",
|
|
54
|
+
"js-sdsl": "4.4.2",
|
|
54
55
|
"express": "4.19.2",
|
|
55
56
|
"pino": "10.3.1",
|
|
56
57
|
"pino-pretty": "13.1.3",
|
|
57
58
|
"prom-client": "15.1.3",
|
|
58
59
|
"yargs": "17.7.2",
|
|
59
|
-
"rescript": "
|
|
60
|
-
"rescript-schema": "9.
|
|
60
|
+
"@rescript/runtime": "12.2.0",
|
|
61
|
+
"rescript-schema": "9.5.1",
|
|
61
62
|
"viem": "2.46.2",
|
|
62
|
-
"rescript-envsafe": "5.0.0",
|
|
63
63
|
"dotenv": "16.4.5",
|
|
64
64
|
"date-fns": "3.3.1",
|
|
65
65
|
"@rescript/react": "0.14.1",
|
|
66
|
+
"react": "19.2.5",
|
|
66
67
|
"ink": "6.8.0",
|
|
67
68
|
"ink-big-text": "2.0.0",
|
|
68
69
|
"ink-spinner": "5.0.0",
|
|
@@ -70,9 +71,10 @@
|
|
|
70
71
|
"tsx": "4.21.0"
|
|
71
72
|
},
|
|
72
73
|
"optionalDependencies": {
|
|
73
|
-
"envio-linux-x64": "3.0.0-alpha.
|
|
74
|
-
"envio-linux-
|
|
75
|
-
"envio-
|
|
76
|
-
"envio-darwin-
|
|
74
|
+
"envio-linux-x64": "3.0.0-alpha.22",
|
|
75
|
+
"envio-linux-x64-musl": "3.0.0-alpha.22",
|
|
76
|
+
"envio-linux-arm64": "3.0.0-alpha.22",
|
|
77
|
+
"envio-darwin-x64": "3.0.0-alpha.22",
|
|
78
|
+
"envio-darwin-arm64": "3.0.0-alpha.22"
|
|
77
79
|
}
|
|
78
80
|
}
|
package/rescript.json
CHANGED
|
@@ -12,16 +12,12 @@
|
|
|
12
12
|
"module": "esmodule",
|
|
13
13
|
"in-source": true
|
|
14
14
|
},
|
|
15
|
-
"gentypeconfig": {
|
|
16
|
-
"shims": {
|
|
17
|
-
"Js": "Js"
|
|
18
|
-
},
|
|
19
|
-
"generatedFileExtension": ".gen.ts",
|
|
20
|
-
"moduleResolution": "node16"
|
|
21
|
-
},
|
|
22
15
|
"jsx": {
|
|
23
16
|
"version": 4
|
|
24
17
|
},
|
|
25
|
-
"
|
|
26
|
-
"
|
|
18
|
+
"dependencies": ["rescript-schema", "@rescript/react"],
|
|
19
|
+
"compiler-flags": ["-open RescriptSchema"],
|
|
20
|
+
"warnings": {
|
|
21
|
+
"error": "+3"
|
|
22
|
+
}
|
|
27
23
|
}
|
package/src/Address.res
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
@genType.import(("./Types.ts", "Address"))
|
|
2
1
|
type t
|
|
3
2
|
|
|
4
3
|
let schema = S.string->S.setName("Address")->(Utils.magic: S.t<string> => S.t<t>)
|
|
@@ -22,16 +21,16 @@ module Evm = {
|
|
|
22
21
|
// Validate that the string is a proper address but return a lowercased value
|
|
23
22
|
let fromStringLowercaseOrThrow = string => {
|
|
24
23
|
if fromStringLowercaseOrThrow(string) {
|
|
25
|
-
unsafeFromString(string->
|
|
24
|
+
unsafeFromString(string->String.toLowerCase)
|
|
26
25
|
} else {
|
|
27
|
-
|
|
26
|
+
JsError.throwWithMessage(
|
|
28
27
|
`Address "${string}" is invalid. Expected a 20-byte hex string starting with 0x.`,
|
|
29
28
|
)
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
let fromAddressLowercaseOrThrow = address =>
|
|
34
|
-
address->toString->
|
|
33
|
+
address->toString->String.toLowerCase->(Utils.magic: string => t)
|
|
35
34
|
|
|
36
35
|
// Reassign since the function might be used in the handler code
|
|
37
36
|
// and we don't want to have a "viem" import there. It's needed to keep "viem" a dependency
|
|
@@ -42,7 +41,7 @@ module Evm = {
|
|
|
42
41
|
fromStringOrThrow(string)
|
|
43
42
|
} catch {
|
|
44
43
|
| _ =>
|
|
45
|
-
|
|
44
|
+
JsError.throwWithMessage(
|
|
46
45
|
`Address "${string}" is invalid. Expected a 20-byte hex string starting with 0x.`,
|
|
47
46
|
)
|
|
48
47
|
}
|
package/src/Address.res.mjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
3
|
import * as Viem from "viem";
|
|
4
|
-
import * as
|
|
4
|
+
import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
|
|
5
5
|
import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
let schema = S$RescriptSchema.setName(S$RescriptSchema.string, "Address");
|
|
8
8
|
|
|
9
9
|
function fromStringLowercaseOrThrow(string) {
|
|
10
10
|
if (Viem.isAddress(string)) {
|
|
11
11
|
return string.toLowerCase();
|
|
12
12
|
} else {
|
|
13
|
-
return
|
|
13
|
+
return Stdlib_JsError.throwWithMessage(`Address "` + string + `" is invalid. Expected a 20-byte hex string starting with 0x.`);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -21,17 +21,14 @@ function fromAddressLowercaseOrThrow(address) {
|
|
|
21
21
|
function fromStringOrThrow(string) {
|
|
22
22
|
try {
|
|
23
23
|
return Viem.getAddress(string);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return Js_exn.raiseError("Address \"" + string + "\" is invalid. Expected a 20-byte hex string starting with 0x.");
|
|
24
|
+
} catch (exn) {
|
|
25
|
+
return Stdlib_JsError.throwWithMessage(`Address "` + string + `" is invalid. Expected a 20-byte hex string starting with 0x.`);
|
|
27
26
|
}
|
|
28
27
|
}
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
return fromStringOrThrow(address);
|
|
32
|
-
}
|
|
29
|
+
let fromAddressOrThrow = fromStringOrThrow;
|
|
33
30
|
|
|
34
|
-
|
|
31
|
+
let Evm = {
|
|
35
32
|
fromStringLowercaseOrThrow: fromStringLowercaseOrThrow,
|
|
36
33
|
fromAddressLowercaseOrThrow: fromAddressLowercaseOrThrow,
|
|
37
34
|
fromStringOrThrow: fromStringOrThrow,
|
|
@@ -39,7 +36,7 @@ var Evm = {
|
|
|
39
36
|
};
|
|
40
37
|
|
|
41
38
|
export {
|
|
42
|
-
schema
|
|
43
|
-
Evm
|
|
39
|
+
schema,
|
|
40
|
+
Evm,
|
|
44
41
|
}
|
|
45
42
|
/* schema Not a pure module */
|
package/src/Api.res
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Top-of-graph module — putting these in Main or TestIndexer would cycle
|
|
2
|
+
// back through Envio.
|
|
3
|
+
|
|
4
|
+
let indexer: unknown = Main.getGlobalIndexer()
|
|
5
|
+
|
|
6
|
+
let createTestIndexer: unit => unknown = () => {
|
|
7
|
+
let workerPath =
|
|
8
|
+
NodeJs.Path.join(
|
|
9
|
+
NodeJs.Path.getDirname(NodeJs.ImportMeta.importMeta),
|
|
10
|
+
"TestIndexerWorker.res.mjs",
|
|
11
|
+
)->NodeJs.Path.toString
|
|
12
|
+
TestIndexer.makeCreateTestIndexer(~config=Config.loadWithoutRegistrations(), ~workerPath)()->(
|
|
13
|
+
Utils.magic: TestIndexer.t<'a> => unknown
|
|
14
|
+
)
|
|
15
|
+
}
|
package/src/Api.res.mjs
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as Main from "./Main.res.mjs";
|
|
4
|
+
import * as Path from "path";
|
|
5
|
+
import * as Config from "./Config.res.mjs";
|
|
6
|
+
import * as NodeJs from "./bindings/NodeJs.res.mjs";
|
|
7
|
+
import * as TestIndexer from "./TestIndexer.res.mjs";
|
|
8
|
+
|
|
9
|
+
let indexer = Main.getGlobalIndexer();
|
|
10
|
+
|
|
11
|
+
function createTestIndexer() {
|
|
12
|
+
let workerPath = Path.join(NodeJs.Path.getDirname(import.meta), "TestIndexerWorker.res.mjs");
|
|
13
|
+
return TestIndexer.makeCreateTestIndexer(Config.loadWithoutRegistrations(), workerPath)();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
indexer,
|
|
18
|
+
createTestIndexer,
|
|
19
|
+
}
|
|
20
|
+
/* indexer Not a pure module */
|
package/src/Batch.res
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
open Belt
|
|
2
|
-
|
|
3
1
|
@@warning("-44")
|
|
4
2
|
open Utils.UnsafeIntOperators
|
|
5
3
|
|
|
@@ -29,7 +27,7 @@ type t = {
|
|
|
29
27
|
checkpointIds: array<bigint>,
|
|
30
28
|
checkpointChainIds: array<int>,
|
|
31
29
|
checkpointBlockNumbers: array<int>,
|
|
32
|
-
checkpointBlockHashes: array<
|
|
30
|
+
checkpointBlockHashes: array<Null.t<string>>,
|
|
33
31
|
checkpointEventsProcessed: array<int>,
|
|
34
32
|
}
|
|
35
33
|
|
|
@@ -68,7 +66,7 @@ let getOrderedNextChain = (fetchStates: ChainMap.t<FetchState.t>, ~batchSizePerC
|
|
|
68
66
|
}
|
|
69
67
|
|
|
70
68
|
// Save overhead of recreating the dict every time
|
|
71
|
-
let immutableEmptyBatchSizePerChain: dict<int> =
|
|
69
|
+
let immutableEmptyBatchSizePerChain: dict<int> = Dict.make()
|
|
72
70
|
let hasOrderedReadyItem = (fetchStates: ChainMap.t<FetchState.t>) => {
|
|
73
71
|
switch fetchStates->getOrderedNextChain(~batchSizePerChain=immutableEmptyBatchSizePerChain) {
|
|
74
72
|
| Some(fetchState) => fetchState->FetchState.hasReadyItem
|
|
@@ -79,7 +77,7 @@ let hasOrderedReadyItem = (fetchStates: ChainMap.t<FetchState.t>) => {
|
|
|
79
77
|
let hasUnorderedReadyItem = (fetchStates: ChainMap.t<FetchState.t>) => {
|
|
80
78
|
fetchStates
|
|
81
79
|
->ChainMap.values
|
|
82
|
-
->
|
|
80
|
+
->Array.some(fetchState => {
|
|
83
81
|
fetchState->FetchState.isActivelyIndexing && fetchState->FetchState.hasReadyItem
|
|
84
82
|
})
|
|
85
83
|
}
|
|
@@ -128,7 +126,7 @@ let getProgressedChainsById = {
|
|
|
128
126
|
~batchSizePerChain: dict<int>,
|
|
129
127
|
~progressBlockNumberPerChain: dict<int>,
|
|
130
128
|
) => {
|
|
131
|
-
let progressedChainsById =
|
|
129
|
+
let progressedChainsById = Dict.make()
|
|
132
130
|
|
|
133
131
|
// Needed to:
|
|
134
132
|
// - Recalculate the computed queue sizes
|
|
@@ -136,7 +134,7 @@ let getProgressedChainsById = {
|
|
|
136
134
|
// - Trigger onBlock pointer update
|
|
137
135
|
chainsBeforeBatch
|
|
138
136
|
->ChainMap.values
|
|
139
|
-
->Array.
|
|
137
|
+
->Array.forEach(chainBeforeBatch => {
|
|
140
138
|
let fetchState = chainBeforeBatch.fetchState
|
|
141
139
|
|
|
142
140
|
let progressBlockNumberAfterBatch = switch progressBlockNumberPerChain->Utils.Dict.dangerouslyGetNonOption(
|
|
@@ -150,7 +148,7 @@ let getProgressedChainsById = {
|
|
|
150
148
|
fetchState.chainId->Int.toString,
|
|
151
149
|
) {
|
|
152
150
|
| Some(batchSize) =>
|
|
153
|
-
let leftItems = fetchState.buffer->
|
|
151
|
+
let leftItems = fetchState.buffer->Array.slice(~start=batchSize)
|
|
154
152
|
getChainAfterBatchIfProgressed(
|
|
155
153
|
~chainBeforeBatch,
|
|
156
154
|
~batchSize,
|
|
@@ -198,16 +196,16 @@ let addReorgCheckpoints = (
|
|
|
198
196
|
let prevCheckpointId = ref(prevCheckpointId)
|
|
199
197
|
for blockNumber in fromBlockExclusive + 1 to toBlockExclusive - 1 {
|
|
200
198
|
switch reorgDetection->ReorgDetection.getHashByBlockNumber(~blockNumber) {
|
|
201
|
-
|
|
|
199
|
+
| Null.Value(hash) =>
|
|
202
200
|
let checkpointId = prevCheckpointId.contents->BigInt.add(1n)
|
|
203
201
|
prevCheckpointId := checkpointId
|
|
204
202
|
|
|
205
|
-
mutCheckpointIds->
|
|
206
|
-
mutCheckpointChainIds->
|
|
207
|
-
mutCheckpointBlockNumbers->
|
|
208
|
-
mutCheckpointBlockHashes->
|
|
209
|
-
mutCheckpointEventsProcessed->
|
|
210
|
-
|
|
|
203
|
+
mutCheckpointIds->Array.push(checkpointId)
|
|
204
|
+
mutCheckpointChainIds->Array.push(chainId)
|
|
205
|
+
mutCheckpointBlockNumbers->Array.push(blockNumber)
|
|
206
|
+
mutCheckpointBlockHashes->Array.push(Null.Value(hash))
|
|
207
|
+
mutCheckpointEventsProcessed->Array.push(0)
|
|
208
|
+
| Null.Null => ()
|
|
211
209
|
}
|
|
212
210
|
}
|
|
213
211
|
prevCheckpointId.contents
|
|
@@ -224,8 +222,8 @@ let prepareOrderedBatch = (
|
|
|
224
222
|
let totalBatchSize = ref(0)
|
|
225
223
|
let isFinished = ref(false)
|
|
226
224
|
let prevCheckpointId = ref(checkpointIdBeforeBatch)
|
|
227
|
-
let mutBatchSizePerChain =
|
|
228
|
-
let mutProgressBlockNumberPerChain =
|
|
225
|
+
let mutBatchSizePerChain = Dict.make()
|
|
226
|
+
let mutProgressBlockNumberPerChain = Dict.make()
|
|
229
227
|
|
|
230
228
|
let fetchStates = chainsBeforeBatch->ChainMap.map(chainBeforeBatch => chainBeforeBatch.fetchState)
|
|
231
229
|
|
|
@@ -283,30 +281,30 @@ let prepareOrderedBatch = (
|
|
|
283
281
|
let checkpointId = prevCheckpointId.contents->BigInt.add(1n)
|
|
284
282
|
|
|
285
283
|
items
|
|
286
|
-
->
|
|
284
|
+
->Array.push(item0)
|
|
287
285
|
->ignore
|
|
288
286
|
for idx in 1 to newItemsCount - 1 {
|
|
289
287
|
items
|
|
290
|
-
->
|
|
288
|
+
->Array.push(fetchState.buffer->Belt.Array.getUnsafe(itemsCountBefore + idx))
|
|
291
289
|
->ignore
|
|
292
290
|
}
|
|
293
291
|
|
|
294
292
|
checkpointIds
|
|
295
|
-
->
|
|
293
|
+
->Array.push(checkpointId)
|
|
296
294
|
->ignore
|
|
297
295
|
checkpointChainIds
|
|
298
|
-
->
|
|
296
|
+
->Array.push(fetchState.chainId)
|
|
299
297
|
->ignore
|
|
300
298
|
checkpointBlockNumbers
|
|
301
|
-
->
|
|
299
|
+
->Array.push(blockNumber)
|
|
302
300
|
->ignore
|
|
303
301
|
checkpointBlockHashes
|
|
304
|
-
->
|
|
302
|
+
->Array.push(
|
|
305
303
|
chainBeforeBatch.reorgDetection->ReorgDetection.getHashByBlockNumber(~blockNumber),
|
|
306
304
|
)
|
|
307
305
|
->ignore
|
|
308
306
|
checkpointEventsProcessed
|
|
309
|
-
->
|
|
307
|
+
->Array.push(newItemsCount)
|
|
310
308
|
->ignore
|
|
311
309
|
|
|
312
310
|
prevCheckpointId := checkpointId
|
|
@@ -371,7 +369,7 @@ let prepareUnorderedBatch = (
|
|
|
371
369
|
let preparedFetchStates =
|
|
372
370
|
chainsBeforeBatch
|
|
373
371
|
->ChainMap.values
|
|
374
|
-
->
|
|
372
|
+
->Array.map(chainBeforeBatch => chainBeforeBatch.fetchState)
|
|
375
373
|
->FetchState.sortForUnorderedBatch(~batchSizeTarget)
|
|
376
374
|
|
|
377
375
|
let chainIdx = ref(0)
|
|
@@ -379,8 +377,8 @@ let prepareUnorderedBatch = (
|
|
|
379
377
|
let totalBatchSize = ref(0)
|
|
380
378
|
|
|
381
379
|
let prevCheckpointId = ref(checkpointIdBeforeBatch)
|
|
382
|
-
let mutBatchSizePerChain =
|
|
383
|
-
let mutProgressBlockNumberPerChain =
|
|
380
|
+
let mutBatchSizePerChain = Dict.make()
|
|
381
|
+
let mutProgressBlockNumberPerChain = Dict.make()
|
|
384
382
|
|
|
385
383
|
let items = []
|
|
386
384
|
let checkpointIds = []
|
|
@@ -393,7 +391,7 @@ let prepareUnorderedBatch = (
|
|
|
393
391
|
// the way to group as many items from a single chain as possible
|
|
394
392
|
// This way the loaders optimisations will hit more often
|
|
395
393
|
while totalBatchSize.contents < batchSizeTarget && chainIdx.contents < preparedNumber {
|
|
396
|
-
let fetchState = preparedFetchStates->
|
|
394
|
+
let fetchState = preparedFetchStates->Array.getUnsafe(chainIdx.contents)
|
|
397
395
|
let chainBatchSize =
|
|
398
396
|
fetchState->FetchState.getReadyItemsCount(
|
|
399
397
|
~targetSize=batchSizeTarget - totalBatchSize.contents,
|
|
@@ -426,15 +424,15 @@ let prepareUnorderedBatch = (
|
|
|
426
424
|
|
|
427
425
|
let checkpointId = prevCheckpointId.contents->BigInt.add(1n)
|
|
428
426
|
|
|
429
|
-
checkpointIds->
|
|
430
|
-
checkpointChainIds->
|
|
431
|
-
checkpointBlockNumbers->
|
|
427
|
+
checkpointIds->Array.push(checkpointId)->ignore
|
|
428
|
+
checkpointChainIds->Array.push(fetchState.chainId)->ignore
|
|
429
|
+
checkpointBlockNumbers->Array.push(blockNumber)->ignore
|
|
432
430
|
checkpointBlockHashes
|
|
433
|
-
->
|
|
431
|
+
->Array.push(
|
|
434
432
|
chainBeforeBatch.reorgDetection->ReorgDetection.getHashByBlockNumber(~blockNumber),
|
|
435
433
|
)
|
|
436
434
|
->ignore
|
|
437
|
-
checkpointEventsProcessed->
|
|
435
|
+
checkpointEventsProcessed->Array.push(1)->ignore
|
|
438
436
|
|
|
439
437
|
prevBlockNumber := blockNumber
|
|
440
438
|
prevCheckpointId := checkpointId
|
|
@@ -448,7 +446,7 @@ let prepareUnorderedBatch = (
|
|
|
448
446
|
->ignore
|
|
449
447
|
}
|
|
450
448
|
|
|
451
|
-
items->
|
|
449
|
+
items->Array.push(item)->ignore
|
|
452
450
|
}
|
|
453
451
|
|
|
454
452
|
totalBatchSize := totalBatchSize.contents + chainBatchSize
|