envio 3.0.0-alpha.2 → 3.0.0-alpha.20
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/README.md +164 -30
- package/bin.mjs +49 -0
- package/evm.schema.json +79 -169
- package/fuel.schema.json +50 -21
- package/index.d.ts +497 -1
- package/index.js +4 -0
- package/package.json +42 -31
- package/rescript.json +4 -1
- package/src/Batch.res +11 -8
- package/src/Batch.res.mjs +11 -9
- package/src/ChainFetcher.res +531 -0
- package/src/ChainFetcher.res.mjs +339 -0
- package/src/ChainManager.res +190 -0
- package/src/ChainManager.res.mjs +166 -0
- package/src/Change.res +3 -3
- package/src/Config.gen.ts +19 -0
- package/src/Config.res +737 -22
- package/src/Config.res.mjs +703 -26
- package/src/{Indexer.res → Ctx.res} +1 -1
- package/src/Ecosystem.res +9 -124
- package/src/Ecosystem.res.mjs +19 -160
- package/src/Env.res +30 -74
- package/src/Env.res.mjs +25 -87
- package/src/Envio.gen.ts +3 -1
- package/src/Envio.res +20 -9
- package/src/EventProcessing.res +469 -0
- package/src/EventProcessing.res.mjs +337 -0
- package/src/EvmTypes.gen.ts +6 -0
- package/src/EvmTypes.res +1 -0
- package/src/FetchState.res +1256 -639
- package/src/FetchState.res.mjs +1135 -612
- package/src/GlobalState.res +1190 -0
- package/src/GlobalState.res.mjs +1183 -0
- package/src/GlobalStateManager.res +68 -0
- package/src/GlobalStateManager.res.mjs +75 -0
- package/src/GlobalStateManager.resi +7 -0
- package/src/HandlerLoader.res +89 -0
- package/src/HandlerLoader.res.mjs +79 -0
- package/src/HandlerRegister.res +357 -0
- package/src/HandlerRegister.res.mjs +299 -0
- package/src/{EventRegister.resi → HandlerRegister.resi} +13 -13
- package/src/Hasura.res +111 -175
- package/src/Hasura.res.mjs +88 -150
- package/src/InMemoryStore.res +1 -1
- package/src/InMemoryStore.res.mjs +3 -3
- package/src/InMemoryTable.res +1 -1
- package/src/InMemoryTable.res.mjs +1 -1
- package/src/Internal.gen.ts +4 -0
- package/src/Internal.res +230 -12
- package/src/Internal.res.mjs +115 -1
- package/src/LoadLayer.res +444 -0
- package/src/LoadLayer.res.mjs +296 -0
- package/src/LoadLayer.resi +32 -0
- package/src/LogSelection.res +33 -27
- package/src/LogSelection.res.mjs +6 -0
- package/src/Logging.res +21 -7
- package/src/Logging.res.mjs +16 -8
- package/src/Main.res +377 -0
- package/src/Main.res.mjs +339 -0
- package/src/Persistence.res +7 -21
- package/src/Persistence.res.mjs +3 -3
- package/src/PgStorage.gen.ts +10 -0
- package/src/PgStorage.res +116 -69
- package/src/PgStorage.res.d.mts +5 -0
- package/src/PgStorage.res.mjs +93 -50
- package/src/Prometheus.res +294 -224
- package/src/Prometheus.res.mjs +353 -340
- package/src/ReorgDetection.res +6 -10
- package/src/ReorgDetection.res.mjs +6 -6
- package/src/SafeCheckpointTracking.res +4 -4
- package/src/SafeCheckpointTracking.res.mjs +2 -2
- package/src/Sink.res +4 -2
- package/src/Sink.res.mjs +2 -1
- package/src/TableIndices.res +0 -1
- package/src/TestIndexer.res +692 -0
- package/src/TestIndexer.res.mjs +527 -0
- package/src/TestIndexerProxyStorage.res +205 -0
- package/src/TestIndexerProxyStorage.res.mjs +151 -0
- package/src/TopicFilter.res +1 -1
- package/src/Types.ts +1 -1
- package/src/UserContext.res +424 -0
- package/src/UserContext.res.mjs +279 -0
- package/src/Utils.res +97 -26
- package/src/Utils.res.mjs +91 -44
- package/src/bindings/BigInt.res +10 -0
- package/src/bindings/BigInt.res.mjs +15 -0
- package/src/bindings/ClickHouse.res +120 -23
- package/src/bindings/ClickHouse.res.mjs +118 -28
- package/src/bindings/DateFns.res +74 -0
- package/src/bindings/DateFns.res.mjs +22 -0
- package/src/bindings/EventSource.res +8 -1
- package/src/bindings/EventSource.res.mjs +8 -1
- package/src/bindings/Express.res +1 -0
- package/src/bindings/Hrtime.res +14 -1
- package/src/bindings/Hrtime.res.mjs +22 -2
- package/src/bindings/Hrtime.resi +4 -0
- package/src/bindings/Lodash.res +0 -1
- package/src/bindings/NodeJs.res +49 -3
- package/src/bindings/NodeJs.res.mjs +11 -3
- package/src/bindings/Pino.res +24 -10
- package/src/bindings/Pino.res.mjs +14 -8
- package/src/bindings/Postgres.gen.ts +8 -0
- package/src/bindings/Postgres.res +5 -1
- package/src/bindings/Postgres.res.d.mts +5 -0
- package/src/bindings/PromClient.res +0 -10
- package/src/bindings/PromClient.res.mjs +0 -3
- package/src/bindings/Vitest.res +142 -0
- package/src/bindings/Vitest.res.mjs +9 -0
- package/src/bindings/WebSocket.res +27 -0
- package/src/bindings/WebSocket.res.mjs +2 -0
- package/src/bindings/Yargs.res +8 -0
- package/src/bindings/Yargs.res.mjs +2 -0
- package/src/db/EntityHistory.res +7 -7
- package/src/db/EntityHistory.res.mjs +9 -9
- package/src/db/InternalTable.res +59 -111
- package/src/db/InternalTable.res.mjs +73 -104
- package/src/db/Table.res +27 -8
- package/src/db/Table.res.mjs +25 -14
- package/src/sources/Evm.res +84 -0
- package/src/sources/Evm.res.mjs +105 -0
- package/src/sources/EvmChain.res +94 -0
- package/src/sources/EvmChain.res.mjs +60 -0
- package/src/sources/Fuel.res +19 -34
- package/src/sources/Fuel.res.mjs +34 -16
- package/src/sources/FuelSDK.res +38 -0
- package/src/sources/FuelSDK.res.mjs +29 -0
- package/src/sources/HyperFuel.res +2 -2
- package/src/sources/HyperFuel.resi +1 -1
- package/src/sources/HyperFuelClient.res +2 -2
- package/src/sources/HyperFuelSource.res +33 -13
- package/src/sources/HyperFuelSource.res.mjs +24 -16
- package/src/sources/HyperSync.res +36 -6
- package/src/sources/HyperSync.res.mjs +9 -7
- package/src/sources/HyperSync.resi +4 -0
- package/src/sources/HyperSyncClient.res +1 -1
- package/src/sources/HyperSyncHeightStream.res +47 -116
- package/src/sources/HyperSyncHeightStream.res.mjs +46 -73
- package/src/sources/HyperSyncSource.res +118 -139
- package/src/sources/HyperSyncSource.res.mjs +104 -121
- package/src/sources/Rpc.res +86 -14
- package/src/sources/Rpc.res.mjs +101 -9
- package/src/sources/RpcSource.res +621 -364
- package/src/sources/RpcSource.res.mjs +843 -410
- package/src/sources/RpcWebSocketHeightStream.res +181 -0
- package/src/sources/RpcWebSocketHeightStream.res.mjs +196 -0
- package/src/sources/Source.res +7 -5
- package/src/sources/SourceManager.res +325 -225
- package/src/sources/SourceManager.res.mjs +314 -171
- package/src/sources/SourceManager.resi +17 -6
- package/src/sources/Svm.res +81 -0
- package/src/sources/Svm.res.mjs +90 -0
- package/src/tui/Tui.res +247 -0
- package/src/tui/Tui.res.mjs +337 -0
- package/src/tui/bindings/Ink.res +371 -0
- package/src/tui/bindings/Ink.res.mjs +72 -0
- package/src/tui/bindings/Style.res +123 -0
- package/src/tui/bindings/Style.res.mjs +2 -0
- package/src/tui/components/BufferedProgressBar.res +40 -0
- package/src/tui/components/BufferedProgressBar.res.mjs +57 -0
- package/src/tui/components/CustomHooks.res +122 -0
- package/src/tui/components/CustomHooks.res.mjs +179 -0
- package/src/tui/components/Messages.res +41 -0
- package/src/tui/components/Messages.res.mjs +75 -0
- package/src/tui/components/SyncETA.res +174 -0
- package/src/tui/components/SyncETA.res.mjs +263 -0
- package/src/tui/components/TuiData.res +47 -0
- package/src/tui/components/TuiData.res.mjs +34 -0
- package/svm.schema.json +112 -0
- package/bin.js +0 -48
- package/src/EventRegister.res +0 -241
- package/src/EventRegister.res.mjs +0 -240
- package/src/bindings/Ethers.gen.ts +0 -14
- package/src/bindings/Ethers.res +0 -204
- package/src/bindings/Ethers.res.mjs +0 -130
- /package/src/{Indexer.res.mjs → Ctx.res.mjs} +0 -0
package/src/ReorgDetection.res
CHANGED
|
@@ -77,13 +77,10 @@ let make = (
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
let getDataByBlockNumberCopyInThreshold = (
|
|
81
|
-
{dataByBlockNumber, maxReorgDepth}: t,
|
|
82
|
-
~currentBlockHeight,
|
|
83
|
-
) => {
|
|
80
|
+
let getDataByBlockNumberCopyInThreshold = ({dataByBlockNumber, maxReorgDepth}: t, ~knownHeight) => {
|
|
84
81
|
// Js engine automatically orders numeric object keys
|
|
85
82
|
let ascBlockNumberKeys = dataByBlockNumber->Js.Dict.keys
|
|
86
|
-
let thresholdBlockNumber =
|
|
83
|
+
let thresholdBlockNumber = knownHeight - maxReorgDepth
|
|
87
84
|
|
|
88
85
|
let copy = Js.Dict.empty()
|
|
89
86
|
|
|
@@ -105,10 +102,9 @@ let getDataByBlockNumberCopyInThreshold = (
|
|
|
105
102
|
let registerReorgGuard = (
|
|
106
103
|
{maxReorgDepth, shouldRollbackOnReorg} as self: t,
|
|
107
104
|
~reorgGuard: reorgGuard,
|
|
108
|
-
~
|
|
105
|
+
~knownHeight,
|
|
109
106
|
) => {
|
|
110
|
-
let dataByBlockNumberCopyInThreshold =
|
|
111
|
-
self->getDataByBlockNumberCopyInThreshold(~currentBlockHeight)
|
|
107
|
+
let dataByBlockNumberCopyInThreshold = self->getDataByBlockNumberCopyInThreshold(~knownHeight)
|
|
112
108
|
|
|
113
109
|
let {rangeLastBlock, prevRangeLastBlock} = reorgGuard
|
|
114
110
|
|
|
@@ -248,12 +244,12 @@ let rollbackToValidBlockNumber = (
|
|
|
248
244
|
}
|
|
249
245
|
}
|
|
250
246
|
|
|
251
|
-
let getThresholdBlockNumbersBelowBlock = (self: t, ~blockNumber: int, ~
|
|
247
|
+
let getThresholdBlockNumbersBelowBlock = (self: t, ~blockNumber: int, ~knownHeight) => {
|
|
252
248
|
let arr = []
|
|
253
249
|
|
|
254
250
|
// Js engine automatically orders numeric object keys
|
|
255
251
|
let ascBlockNumberKeys = self.dataByBlockNumber->Js.Dict.keys
|
|
256
|
-
let thresholdBlockNumber =
|
|
252
|
+
let thresholdBlockNumber = knownHeight - self.maxReorgDepth
|
|
257
253
|
|
|
258
254
|
for idx in 0 to ascBlockNumberKeys->Array.length - 1 {
|
|
259
255
|
let blockNumberKey = ascBlockNumberKeys->Js.Array2.unsafe_get(idx)
|
|
@@ -30,10 +30,10 @@ function make(chainReorgCheckpoints, maxReorgDepth, shouldRollbackOnReorg) {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
function getDataByBlockNumberCopyInThreshold(param,
|
|
33
|
+
function getDataByBlockNumberCopyInThreshold(param, knownHeight) {
|
|
34
34
|
var dataByBlockNumber = param.dataByBlockNumber;
|
|
35
35
|
var ascBlockNumberKeys = Object.keys(dataByBlockNumber);
|
|
36
|
-
var thresholdBlockNumber =
|
|
36
|
+
var thresholdBlockNumber = knownHeight - param.maxReorgDepth | 0;
|
|
37
37
|
var copy = {};
|
|
38
38
|
for(var idx = 0 ,idx_finish = ascBlockNumberKeys.length; idx < idx_finish; ++idx){
|
|
39
39
|
var blockNumberKey = ascBlockNumberKeys[idx];
|
|
@@ -47,10 +47,10 @@ function getDataByBlockNumberCopyInThreshold(param, currentBlockHeight) {
|
|
|
47
47
|
return copy;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
function registerReorgGuard(self, reorgGuard,
|
|
50
|
+
function registerReorgGuard(self, reorgGuard, knownHeight) {
|
|
51
51
|
var maxReorgDepth = self.maxReorgDepth;
|
|
52
52
|
var shouldRollbackOnReorg = self.shouldRollbackOnReorg;
|
|
53
|
-
var dataByBlockNumberCopyInThreshold = getDataByBlockNumberCopyInThreshold(self,
|
|
53
|
+
var dataByBlockNumberCopyInThreshold = getDataByBlockNumberCopyInThreshold(self, knownHeight);
|
|
54
54
|
var prevRangeLastBlock = reorgGuard.prevRangeLastBlock;
|
|
55
55
|
var rangeLastBlock = reorgGuard.rangeLastBlock;
|
|
56
56
|
var scannedBlock = dataByBlockNumberCopyInThreshold[String(rangeLastBlock.blockNumber)];
|
|
@@ -159,10 +159,10 @@ function rollbackToValidBlockNumber(param, blockNumber) {
|
|
|
159
159
|
};
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
function getThresholdBlockNumbersBelowBlock(self, blockNumber,
|
|
162
|
+
function getThresholdBlockNumbersBelowBlock(self, blockNumber, knownHeight) {
|
|
163
163
|
var arr = [];
|
|
164
164
|
var ascBlockNumberKeys = Object.keys(self.dataByBlockNumber);
|
|
165
|
-
var thresholdBlockNumber =
|
|
165
|
+
var thresholdBlockNumber = knownHeight - self.maxReorgDepth | 0;
|
|
166
166
|
for(var idx = 0 ,idx_finish = ascBlockNumberKeys.length; idx < idx_finish; ++idx){
|
|
167
167
|
var blockNumberKey = ascBlockNumberKeys[idx];
|
|
168
168
|
var scannedBlock = self.dataByBlockNumber[blockNumberKey];
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// The safe checkpoint id can be used to optimize checkpoints traverse logic and
|
|
5
5
|
// make pruning operation super cheap.
|
|
6
6
|
type t = {
|
|
7
|
-
checkpointIds: array<
|
|
7
|
+
checkpointIds: array<bigint>,
|
|
8
8
|
checkpointBlockNumbers: array<int>,
|
|
9
9
|
maxReorgDepth: int,
|
|
10
10
|
}
|
|
@@ -37,10 +37,10 @@ let getSafeCheckpointId = (safeCheckpointTracking: t, ~sourceBlockNumber: int) =
|
|
|
37
37
|
let safeBlockNumber = sourceBlockNumber - safeCheckpointTracking.maxReorgDepth
|
|
38
38
|
|
|
39
39
|
switch safeCheckpointTracking.checkpointIds {
|
|
40
|
-
| [] =>
|
|
40
|
+
| [] => 0n
|
|
41
41
|
| _
|
|
42
42
|
if safeCheckpointTracking.checkpointBlockNumbers->Belt.Array.getUnsafe(0) >
|
|
43
|
-
safeBlockNumber =>
|
|
43
|
+
safeBlockNumber => 0n
|
|
44
44
|
| [checkpointId] => checkpointId
|
|
45
45
|
| _ => {
|
|
46
46
|
let trackingCheckpointsCount = safeCheckpointTracking.checkpointIds->Array.length
|
|
@@ -71,7 +71,7 @@ let updateOnNewBatch = (
|
|
|
71
71
|
safeCheckpointTracking: t,
|
|
72
72
|
~sourceBlockNumber: int,
|
|
73
73
|
~chainId: int,
|
|
74
|
-
~batchCheckpointIds: array<
|
|
74
|
+
~batchCheckpointIds: array<bigint>,
|
|
75
75
|
~batchCheckpointBlockNumbers: array<int>,
|
|
76
76
|
~batchCheckpointChainIds: array<int>,
|
|
77
77
|
) => {
|
|
@@ -22,10 +22,10 @@ function getSafeCheckpointId(safeCheckpointTracking, sourceBlockNumber) {
|
|
|
22
22
|
var safeBlockNumber = sourceBlockNumber - safeCheckpointTracking.maxReorgDepth | 0;
|
|
23
23
|
var match = safeCheckpointTracking.checkpointIds;
|
|
24
24
|
if (match.length === 0) {
|
|
25
|
-
return
|
|
25
|
+
return 0n;
|
|
26
26
|
}
|
|
27
27
|
if (safeCheckpointTracking.checkpointBlockNumbers[0] > safeBlockNumber) {
|
|
28
|
-
return
|
|
28
|
+
return 0n;
|
|
29
29
|
}
|
|
30
30
|
if (match.length === 1) {
|
|
31
31
|
return match[0];
|
package/src/Sink.res
CHANGED
|
@@ -5,7 +5,7 @@ type t = {
|
|
|
5
5
|
~entities: array<Internal.entityConfig>=?,
|
|
6
6
|
~enums: array<Table.enumConfig<Table.enum>>=?,
|
|
7
7
|
) => promise<unit>,
|
|
8
|
-
resume: (~checkpointId:
|
|
8
|
+
resume: (~checkpointId: Internal.checkpointId) => promise<unit>,
|
|
9
9
|
writeBatch: (
|
|
10
10
|
~batch: Batch.t,
|
|
11
11
|
~updatedEntities: array<Persistence.updatedEntity>,
|
|
@@ -27,6 +27,8 @@ let makeClickHouse = (~host, ~database, ~username, ~password): t => {
|
|
|
27
27
|
| None => "envio_sink"
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
let cache = Utils.WeakMap.make()
|
|
31
|
+
|
|
30
32
|
{
|
|
31
33
|
name: "ClickHouse",
|
|
32
34
|
initialize: (~chainConfigs as _=[], ~entities=[], ~enums=[]) => {
|
|
@@ -38,7 +40,7 @@ let makeClickHouse = (~host, ~database, ~username, ~password): t => {
|
|
|
38
40
|
writeBatch: async (~batch, ~updatedEntities) => {
|
|
39
41
|
await Promise.all(
|
|
40
42
|
updatedEntities->Belt.Array.map(({entityConfig, updates}) => {
|
|
41
|
-
ClickHouse.setUpdatesOrThrow(client, ~updates, ~entityConfig, ~database)
|
|
43
|
+
ClickHouse.setUpdatesOrThrow(client, ~cache, ~updates, ~entityConfig, ~database)
|
|
42
44
|
}),
|
|
43
45
|
)->Promise.ignoreValue
|
|
44
46
|
await ClickHouse.setCheckpointsOrThrow(client, ~batch, ~database)
|
package/src/Sink.res.mjs
CHANGED
|
@@ -11,6 +11,7 @@ function makeClickHouse(host, database, username, password) {
|
|
|
11
11
|
password: password
|
|
12
12
|
});
|
|
13
13
|
var database$1 = database !== undefined ? database : "envio_sink";
|
|
14
|
+
var cache = new WeakMap();
|
|
14
15
|
return {
|
|
15
16
|
name: "ClickHouse",
|
|
16
17
|
initialize: (function ($staropt$star, $staropt$star$1, $staropt$star$2) {
|
|
@@ -24,7 +25,7 @@ function makeClickHouse(host, database, username, password) {
|
|
|
24
25
|
}),
|
|
25
26
|
writeBatch: (async function (batch, updatedEntities) {
|
|
26
27
|
await Promise.all(Belt_Array.map(updatedEntities, (function (param) {
|
|
27
|
-
return ClickHouse.setUpdatesOrThrow(client, param.updates, param.entityConfig, database$1);
|
|
28
|
+
return ClickHouse.setUpdatesOrThrow(client, cache, param.updates, param.entityConfig, database$1);
|
|
28
29
|
})));
|
|
29
30
|
return await ClickHouse.setCheckpointsOrThrow(client, batch, database$1);
|
|
30
31
|
})
|
package/src/TableIndices.res
CHANGED