envio 3.5.0-alpha.2 → 3.5.0-rc.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.
- package/package.json +6 -6
- package/src/Batch.res +8 -8
- package/src/Batch.res.mjs +4 -3
- package/src/BatchProcessing.res +24 -0
- package/src/BatchProcessing.res.mjs +12 -0
- package/src/ChainFetching.res +20 -19
- package/src/ChainFetching.res.mjs +14 -14
- package/src/ChainId.res +58 -0
- package/src/ChainId.res.mjs +49 -0
- package/src/ChainId.resi +27 -0
- package/src/ChainMap.res +12 -26
- package/src/ChainMap.res.mjs +5 -41
- package/src/ChainMap.resi +5 -20
- package/src/ChainMetadata.res +1 -1
- package/src/ChainMetadata.res.mjs +3 -2
- package/src/ChainState.res +45 -24
- package/src/ChainState.res.mjs +40 -16
- package/src/ChainState.resi +3 -1
- package/src/Config.res +43 -26
- package/src/Config.res.mjs +19 -16
- package/src/ContractRegisterContext.res +1 -1
- package/src/ContractRegisterContext.res.mjs +1 -1
- package/src/Core.res +1 -0
- package/src/CrossChainState.res +90 -22
- package/src/CrossChainState.res.mjs +55 -16
- package/src/CrossChainState.resi +5 -1
- package/src/Env.res +0 -3
- package/src/Env.res.mjs +0 -3
- package/src/EventConfigBuilder.res +1 -1
- package/src/EventProcessing.res +4 -4
- package/src/EventProcessing.res.mjs +5 -5
- package/src/FetchState.res +489 -153
- package/src/FetchState.res.mjs +399 -129
- package/src/FinalizeBackfill.res +61 -0
- package/src/FinalizeBackfill.res.mjs +44 -0
- package/src/HandlerRegister.res +8 -8
- package/src/HandlerRegister.res.mjs +5 -4
- package/src/HandlerRegister.resi +1 -1
- package/src/InMemoryStore.res +4 -0
- package/src/InMemoryStore.res.mjs +1 -1
- package/src/InMemoryTable.res +15 -15
- package/src/InMemoryTable.res.mjs +14 -14
- package/src/IndexerLoop.res +9 -2
- package/src/IndexerLoop.res.mjs +8 -1
- package/src/IndexerState.res +52 -23
- package/src/IndexerState.res.mjs +52 -14
- package/src/IndexerState.resi +11 -6
- package/src/Internal.res +19 -17
- package/src/Internal.res.mjs +18 -9
- package/src/LoadLayer.res +10 -2
- package/src/LoadLayer.res.mjs +3 -1
- package/src/LogSelection.res +2 -2
- package/src/Main.res +7 -11
- package/src/Main.res.mjs +4 -6
- package/src/Metrics.res +6 -6
- package/src/Metrics.res.mjs +4 -3
- package/src/Persistence.res +23 -4
- package/src/PgStorage.res +447 -100
- package/src/PgStorage.res.mjs +285 -99
- package/src/RawEvent.res +1 -2
- package/src/RawEvent.res.mjs +1 -1
- package/src/Rollback.res +18 -20
- package/src/Rollback.res.mjs +9 -9
- package/src/RollbackCommit.res +2 -2
- package/src/RollbackCommit.res.mjs +3 -3
- package/src/SafeCheckpointTracking.res +2 -2
- package/src/SimulateDeadInputTracker.res +17 -21
- package/src/SimulateDeadInputTracker.res.mjs +9 -8
- package/src/SimulateItems.res +8 -10
- package/src/SimulateItems.res.mjs +9 -10
- package/src/Sink.res +2 -2
- package/src/Sink.res.mjs +3 -2
- package/src/TestIndexer.res +14 -14
- package/src/TestIndexer.res.mjs +16 -10
- package/src/UserContext.res +2 -2
- package/src/UserContext.res.mjs +2 -1
- package/src/Utils.res +0 -4
- package/src/Utils.res.mjs +1 -6
- package/src/bindings/ClickHouse.res +20 -2
- package/src/bindings/ClickHouse.res.mjs +25 -14
- package/src/db/EntityFilter.res +0 -4
- package/src/db/EntityFilter.res.mjs +1 -8
- package/src/db/EntityHistory.res +1 -1
- package/src/db/IndexCatalog.res +248 -0
- package/src/db/IndexCatalog.res.mjs +222 -0
- package/src/db/IndexDefinition.res +131 -0
- package/src/db/IndexDefinition.res.mjs +138 -0
- package/src/db/IndexManager.res +145 -0
- package/src/db/IndexManager.res.mjs +130 -0
- package/src/db/InternalTable.res +54 -23
- package/src/db/InternalTable.res.mjs +38 -23
- package/src/db/Table.res +24 -14
- package/src/db/Table.res.mjs +21 -16
- package/src/sources/AddressSet.res +5 -4
- package/src/sources/AddressStore.res +25 -14
- package/src/sources/AddressStore.res.mjs +10 -12
- package/src/sources/Evm.res +2 -2
- package/src/sources/Evm.res.mjs +1 -1
- package/src/sources/EvmChain.res +3 -3
- package/src/sources/EvmChain.res.mjs +3 -3
- package/src/sources/EvmHyperSyncSource.res +7 -7
- package/src/sources/EvmHyperSyncSource.res.mjs +6 -6
- package/src/sources/Fuel.res +2 -2
- package/src/sources/Fuel.res.mjs +1 -1
- package/src/sources/FuelHyperSyncClient.res +3 -0
- package/src/sources/FuelHyperSyncClient.res.mjs +1 -0
- package/src/sources/FuelHyperSyncSource.res +5 -7
- package/src/sources/FuelHyperSyncSource.res.mjs +5 -5
- package/src/sources/HyperSync.resi +2 -2
- package/src/sources/HyperSyncClient.res +5 -0
- package/src/sources/HyperSyncClient.res.mjs +1 -0
- package/src/sources/RpcSource.res +13 -14
- package/src/sources/RpcSource.res.mjs +13 -12
- package/src/sources/SimulateSource.res +42 -15
- package/src/sources/SimulateSource.res.mjs +27 -9
- package/src/sources/Source.res +1 -5
- package/src/sources/SourceManager.res +12 -12
- package/src/sources/SourceManager.res.mjs +11 -10
- package/src/sources/SourceManager.resi +2 -2
- package/src/sources/Svm.res +4 -5
- package/src/sources/Svm.res.mjs +5 -4
- package/src/sources/SvmHyperSyncClient.res +3 -0
- package/src/sources/SvmHyperSyncClient.res.mjs +1 -0
- package/src/sources/SvmHyperSyncSource.res +4 -4
- package/src/sources/SvmHyperSyncSource.res.mjs +3 -3
- package/src/tui/Tui.res +1 -1
- package/src/tui/Tui.res.mjs +2 -1
- package/src/tui/components/CustomHooks.res +5 -4
- package/src/tui/components/CustomHooks.res.mjs +4 -2
|
@@ -4,7 +4,6 @@ import * as Env from "./Env.res.mjs";
|
|
|
4
4
|
import * as Batch from "./Batch.res.mjs";
|
|
5
5
|
import * as Utils from "./Utils.res.mjs";
|
|
6
6
|
import * as Logging from "./Logging.res.mjs";
|
|
7
|
-
import * as ChainMap from "./ChainMap.res.mjs";
|
|
8
7
|
import * as ChainState from "./ChainState.res.mjs";
|
|
9
8
|
import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
|
|
10
9
|
import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
|
|
@@ -27,6 +26,7 @@ function make(chainStates, isInReorgThreshold, isRealtime, targetBufferSizeOpt)
|
|
|
27
26
|
chainStates: chainStates,
|
|
28
27
|
chainIds: Object.values(chainStates).map(cs => ChainState.chainConfig(cs).id),
|
|
29
28
|
isRealtime: isRealtime,
|
|
29
|
+
isCaughtUp: isRealtime,
|
|
30
30
|
isInReorgThreshold: isInReorgThreshold,
|
|
31
31
|
targetBufferSize: targetBufferSize
|
|
32
32
|
};
|
|
@@ -40,6 +40,10 @@ function isRealtime(crossChainState) {
|
|
|
40
40
|
return crossChainState.isRealtime;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
function isCaughtUp(crossChainState) {
|
|
44
|
+
return crossChainState.isCaughtUp;
|
|
45
|
+
}
|
|
46
|
+
|
|
43
47
|
function isInReorgThreshold(crossChainState) {
|
|
44
48
|
return crossChainState.isInReorgThreshold;
|
|
45
49
|
}
|
|
@@ -104,20 +108,58 @@ function applyBatchProgress(crossChainState, batch, blockTimestampName) {
|
|
|
104
108
|
everyChainCaughtUp = false;
|
|
105
109
|
}
|
|
106
110
|
}
|
|
107
|
-
|
|
111
|
+
crossChainState.isCaughtUp = crossChainState.isCaughtUp || nextItemIsNone(crossChainState) && everyChainCaughtUp;
|
|
108
112
|
let allChainsReady = true;
|
|
109
113
|
for (let i$1 = 0, i_finish$1 = chainIds.length; i$1 < i_finish$1; ++i$1) {
|
|
110
|
-
|
|
111
|
-
if (indexerCaughtUp) {
|
|
112
|
-
ChainState.markReady(cs$1);
|
|
113
|
-
}
|
|
114
|
-
if (!ChainState.isReady(cs$1)) {
|
|
114
|
+
if (!ChainState.isReady(crossChainState.chainStates[chainIds[i$1]])) {
|
|
115
115
|
allChainsReady = false;
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
crossChainState.isRealtime = crossChainState.isRealtime || allChainsReady;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
function isSettledAtHead(crossChainState) {
|
|
122
|
+
let settled = nextItemIsNone(crossChainState);
|
|
123
|
+
for (let i = 0, i_finish = crossChainState.chainIds.length; i < i_finish; ++i) {
|
|
124
|
+
if (!ChainState.isFetchingAtHead(crossChainState.chainStates[crossChainState.chainIds[i]])) {
|
|
125
|
+
settled = false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return settled;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function markCaughtUpIfSettled(crossChainState) {
|
|
132
|
+
if (isSettledAtHead(crossChainState)) {
|
|
133
|
+
crossChainState.isCaughtUp = true;
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function markCaughtUpOnResume(crossChainState) {
|
|
139
|
+
let everyChainCaughtUp = crossChainState.chainIds.length !== 0;
|
|
140
|
+
let everyChainReady = true;
|
|
141
|
+
for (let i = 0, i_finish = crossChainState.chainIds.length; i < i_finish; ++i) {
|
|
142
|
+
let cs = crossChainState.chainStates[crossChainState.chainIds[i]];
|
|
143
|
+
if (!ChainState.isDurablyCaughtUp(cs)) {
|
|
144
|
+
everyChainCaughtUp = false;
|
|
145
|
+
}
|
|
146
|
+
if (!ChainState.isReady(cs)) {
|
|
147
|
+
everyChainReady = false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (everyChainCaughtUp && !everyChainReady && nextItemIsNone(crossChainState)) {
|
|
151
|
+
crossChainState.isCaughtUp = true;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function markReady(crossChainState, readyAt) {
|
|
157
|
+
for (let i = 0, i_finish = crossChainState.chainIds.length; i < i_finish; ++i) {
|
|
158
|
+
ChainState.markReady(crossChainState.chainStates[crossChainState.chainIds[i]], readyAt);
|
|
159
|
+
}
|
|
160
|
+
crossChainState.isRealtime = true;
|
|
161
|
+
}
|
|
162
|
+
|
|
121
163
|
function priorityOrder(crossChainState) {
|
|
122
164
|
return Object.values(crossChainState.chainStates).toSorted((a, b) => Primitive_float.compare(ChainState.frontierProgress(a), ChainState.frontierProgress(b)));
|
|
123
165
|
}
|
|
@@ -203,15 +245,8 @@ async function checkAndFetch(crossChainState, dispatchChain) {
|
|
|
203
245
|
for (let i = 0, i_finish = crossChainState.chainIds.length; i < i_finish; ++i) {
|
|
204
246
|
let chainId = crossChainState.chainIds[i];
|
|
205
247
|
let action = actionByChain[chainId];
|
|
206
|
-
if (action !== undefined) {
|
|
207
|
-
|
|
208
|
-
if (typeof action === "object" || action === "WaitingForNewBlock") {
|
|
209
|
-
exit = 1;
|
|
210
|
-
}
|
|
211
|
-
if (exit === 1) {
|
|
212
|
-
let chain = ChainMap.Chain.makeUnsafe(chainId);
|
|
213
|
-
promises.push(dispatchChain(chain, action));
|
|
214
|
-
}
|
|
248
|
+
if (action !== undefined && (typeof action === "object" || action === "WaitingForNewBlock")) {
|
|
249
|
+
promises.push(dispatchChain(chainId, action));
|
|
215
250
|
}
|
|
216
251
|
}
|
|
217
252
|
await Promise.all(promises);
|
|
@@ -222,6 +257,7 @@ export {
|
|
|
222
257
|
make,
|
|
223
258
|
chainStates,
|
|
224
259
|
isRealtime,
|
|
260
|
+
isCaughtUp,
|
|
225
261
|
isInReorgThreshold,
|
|
226
262
|
targetBufferSize,
|
|
227
263
|
nextItemIsNone,
|
|
@@ -229,6 +265,9 @@ export {
|
|
|
229
265
|
createBatch,
|
|
230
266
|
enterReorgThreshold,
|
|
231
267
|
applyBatchProgress,
|
|
268
|
+
markCaughtUpIfSettled,
|
|
269
|
+
markCaughtUpOnResume,
|
|
270
|
+
markReady,
|
|
232
271
|
priorityOrder,
|
|
233
272
|
checkAndFetch,
|
|
234
273
|
}
|
package/src/CrossChainState.resi
CHANGED
|
@@ -15,6 +15,7 @@ let make: (
|
|
|
15
15
|
// Accessors.
|
|
16
16
|
let chainStates: t => dict<ChainState.t>
|
|
17
17
|
let isRealtime: t => bool
|
|
18
|
+
let isCaughtUp: t => bool
|
|
18
19
|
let isInReorgThreshold: t => bool
|
|
19
20
|
let targetBufferSize: t => int
|
|
20
21
|
|
|
@@ -31,10 +32,13 @@ let createBatch: (
|
|
|
31
32
|
) => Batch.t
|
|
32
33
|
let enterReorgThreshold: t => unit
|
|
33
34
|
let applyBatchProgress: (t, ~batch: Batch.t, ~blockTimestampName: string) => unit
|
|
35
|
+
let markCaughtUpIfSettled: t => unit
|
|
36
|
+
let markCaughtUpOnResume: t => unit
|
|
37
|
+
let markReady: (t, ~readyAt: Date.t) => unit
|
|
34
38
|
|
|
35
39
|
// Fetch control.
|
|
36
40
|
let priorityOrder: t => array<ChainState.t>
|
|
37
41
|
let checkAndFetch: (
|
|
38
42
|
t,
|
|
39
|
-
~dispatchChain: (~
|
|
43
|
+
~dispatchChain: (~chainId: ChainId.t, ~action: FetchState.nextQuery) => promise<unit>,
|
|
40
44
|
) => promise<unit>
|
package/src/Env.res
CHANGED
|
@@ -3,9 +3,6 @@
|
|
|
3
3
|
|
|
4
4
|
%%private(let envSafe = EnvSafe.make())
|
|
5
5
|
|
|
6
|
-
// resets the timestampCaughtUpToHeadOrEndblock after a restart when true
|
|
7
|
-
let updateSyncTimeOnRestart =
|
|
8
|
-
envSafe->EnvSafe.get("UPDATE_SYNC_TIME_ON_RESTART", S.bool, ~fallback=true)
|
|
9
6
|
let targetBufferSize = envSafe->EnvSafe.get("ENVIO_INDEXING_MAX_BUFFER_SIZE", S.option(S.int))
|
|
10
7
|
let maxAddrInPartition = envSafe->EnvSafe.get("MAX_PARTITION_SIZE", S.int, ~fallback=5_000)
|
|
11
8
|
|
package/src/Env.res.mjs
CHANGED
|
@@ -13,8 +13,6 @@ import 'dotenv/config'
|
|
|
13
13
|
|
|
14
14
|
let envSafe = EnvSafe.make(undefined);
|
|
15
15
|
|
|
16
|
-
let updateSyncTimeOnRestart = EnvSafe.get(envSafe, "UPDATE_SYNC_TIME_ON_RESTART", S$RescriptSchema.bool, undefined, true, undefined, undefined);
|
|
17
|
-
|
|
18
16
|
let targetBufferSize = EnvSafe.get(envSafe, "ENVIO_INDEXING_MAX_BUFFER_SIZE", S$RescriptSchema.option(S$RescriptSchema.int), undefined, undefined, undefined, undefined);
|
|
19
17
|
|
|
20
18
|
let maxAddrInPartition = EnvSafe.get(envSafe, "MAX_PARTITION_SIZE", S$RescriptSchema.int, undefined, 5000, undefined, undefined);
|
|
@@ -221,7 +219,6 @@ EnvSafe.close(envSafe);
|
|
|
221
219
|
let maxChainConcurrency = 100;
|
|
222
220
|
|
|
223
221
|
export {
|
|
224
|
-
updateSyncTimeOnRestart,
|
|
225
222
|
targetBufferSize,
|
|
226
223
|
maxAddrInPartition,
|
|
227
224
|
maxChainConcurrency,
|
|
@@ -342,7 +342,7 @@ let buildEvmOnEventRegistration = (
|
|
|
342
342
|
~handler: option<Internal.handler>,
|
|
343
343
|
~contractRegister: option<Internal.contractRegister>,
|
|
344
344
|
~where: option<JSON.t>,
|
|
345
|
-
~chainId:
|
|
345
|
+
~chainId: ChainId.t,
|
|
346
346
|
~onEventBlockFilterSchema: S.t<option<unknown>>,
|
|
347
347
|
~startBlock: option<int>=?,
|
|
348
348
|
): Internal.evmOnEventRegistration => {
|
package/src/EventProcessing.res
CHANGED
|
@@ -13,7 +13,7 @@ let computeChainsState = (chainStates: dict<ChainState.t>): Internal.chains => {
|
|
|
13
13
|
values->Array.forEach(cs => {
|
|
14
14
|
let chainId = (cs->ChainState.chainConfig).id
|
|
15
15
|
chains->Dict.set(
|
|
16
|
-
chainId->
|
|
16
|
+
chainId->ChainId.toString,
|
|
17
17
|
{
|
|
18
18
|
Internal.id: chainId,
|
|
19
19
|
isRealtime,
|
|
@@ -280,7 +280,7 @@ let registerProcessEventBatchMetrics = (
|
|
|
280
280
|
batch.progressedChainsById->Dict.forEachWithKey((chainAfterBatch, chainId) => {
|
|
281
281
|
logger->Logging.childTrace({
|
|
282
282
|
"msg": "Finished processing",
|
|
283
|
-
"chainId": chainId
|
|
283
|
+
"chainId": chainId,
|
|
284
284
|
"batchSize": chainAfterBatch.batchSize,
|
|
285
285
|
"progress": chainAfterBatch.progressBlockNumber,
|
|
286
286
|
})
|
|
@@ -312,7 +312,7 @@ let materializeBatchEvents = async (
|
|
|
312
312
|
| _ =>
|
|
313
313
|
let itemsByChain: dict<array<Internal.item>> = Dict.make()
|
|
314
314
|
batch.items->Array.forEach(item => {
|
|
315
|
-
let chainId = item->Internal.getItemChainId->
|
|
315
|
+
let chainId = item->Internal.getItemChainId->ChainId.toString
|
|
316
316
|
switch itemsByChain->Utils.Dict.dangerouslyGetNonOption(chainId) {
|
|
317
317
|
| Some(items) => items->Array.push(item)
|
|
318
318
|
| None => itemsByChain->Dict.set(chainId, [item])
|
|
@@ -345,7 +345,7 @@ let processEventBatch = async (
|
|
|
345
345
|
batch.progressedChainsById->Dict.forEachWithKey((chainAfterBatch, chainId) => {
|
|
346
346
|
logger->Logging.childTrace({
|
|
347
347
|
"msg": "Started processing",
|
|
348
|
-
"chainId": chainId
|
|
348
|
+
"chainId": chainId,
|
|
349
349
|
"batchSize": chainAfterBatch.batchSize,
|
|
350
350
|
})
|
|
351
351
|
})
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
3
|
import * as Utils from "./Utils.res.mjs";
|
|
4
|
+
import * as ChainId from "./ChainId.res.mjs";
|
|
4
5
|
import * as Logging from "./Logging.res.mjs";
|
|
5
6
|
import * as Writing from "./Writing.res.mjs";
|
|
6
7
|
import * as Internal from "./Internal.res.mjs";
|
|
7
8
|
import * as Ecosystem from "./Ecosystem.res.mjs";
|
|
8
9
|
import * as ChainState from "./ChainState.res.mjs";
|
|
9
|
-
import * as Stdlib_Int from "@rescript/runtime/lib/es6/Stdlib_Int.js";
|
|
10
10
|
import * as Performance from "./bindings/Performance.res.mjs";
|
|
11
11
|
import * as Persistence from "./Persistence.res.mjs";
|
|
12
12
|
import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
|
|
@@ -25,7 +25,7 @@ function computeChainsState(chainStates) {
|
|
|
25
25
|
let isRealtime = values.every(ChainState.isReady);
|
|
26
26
|
values.forEach(cs => {
|
|
27
27
|
let chainId = ChainState.chainConfig(cs).id;
|
|
28
|
-
chains[
|
|
28
|
+
chains[ChainId.toString(chainId)] = {
|
|
29
29
|
id: chainId,
|
|
30
30
|
isRealtime: isRealtime
|
|
31
31
|
};
|
|
@@ -179,7 +179,7 @@ async function runBatchHandlersOrThrow(batch, indexerState, loadManager, persist
|
|
|
179
179
|
function registerProcessEventBatchMetrics(logger, batch, indexerState, loadDuration, handlerDuration) {
|
|
180
180
|
Stdlib_Dict.forEachWithKey(batch.progressedChainsById, (chainAfterBatch, chainId) => Logging.childTrace(logger, {
|
|
181
181
|
msg: "Finished processing",
|
|
182
|
-
chainId:
|
|
182
|
+
chainId: chainId,
|
|
183
183
|
batchSize: chainAfterBatch.batchSize,
|
|
184
184
|
progress: chainAfterBatch.progressBlockNumber
|
|
185
185
|
}));
|
|
@@ -191,7 +191,7 @@ async function materializeBatchEvents(batch, chainStates, ecosystem) {
|
|
|
191
191
|
if (match.length !== 1) {
|
|
192
192
|
let itemsByChain = {};
|
|
193
193
|
batch.items.forEach(item => {
|
|
194
|
-
let chainId = Internal.getItemChainId(item)
|
|
194
|
+
let chainId = ChainId.toString(Internal.getItemChainId(item));
|
|
195
195
|
let items = itemsByChain[chainId];
|
|
196
196
|
if (items !== undefined) {
|
|
197
197
|
items.push(item);
|
|
@@ -214,7 +214,7 @@ async function processEventBatch(batch, indexerState, loadManager, persistence,
|
|
|
214
214
|
let logger = Logging.getLogger();
|
|
215
215
|
Stdlib_Dict.forEachWithKey(batch.progressedChainsById, (chainAfterBatch, chainId) => Logging.childTrace(logger, {
|
|
216
216
|
msg: "Started processing",
|
|
217
|
-
chainId:
|
|
217
|
+
chainId: chainId,
|
|
218
218
|
batchSize: chainAfterBatch.batchSize
|
|
219
219
|
}));
|
|
220
220
|
try {
|