envio 3.3.0-alpha.0 → 3.3.0-alpha.2
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 +0 -6
- package/src/Batch.res.mjs +0 -11
- package/src/BatchProcessing.res +2 -12
- package/src/BatchProcessing.res.mjs +2 -7
- package/src/ChainFetching.res +22 -13
- package/src/ChainFetching.res.mjs +13 -13
- package/src/ChainMetadata.res +1 -11
- package/src/ChainMetadata.res.mjs +1 -10
- package/src/ChainState.res +176 -2
- package/src/ChainState.res.mjs +153 -9
- package/src/ChainState.resi +53 -1
- package/src/Config.res +3 -6
- package/src/Config.res.mjs +2 -3
- package/src/Core.res +7 -0
- package/src/CrossChainState.res +99 -91
- package/src/CrossChainState.res.mjs +72 -57
- package/src/CrossChainState.resi +1 -9
- package/src/Ecosystem.res +6 -1
- package/src/Env.res +0 -7
- package/src/Env.res.mjs +0 -6
- package/src/Envio.res +3 -2
- package/src/EventConfigBuilder.res +19 -5
- package/src/EventConfigBuilder.res.mjs +6 -4
- package/src/EventProcessing.res +26 -0
- package/src/EventProcessing.res.mjs +20 -0
- package/src/FetchState.res +92 -22
- package/src/FetchState.res.mjs +87 -14
- package/src/IndexerLoop.res +2 -3
- package/src/IndexerLoop.res.mjs +1 -1
- package/src/IndexerState.res +0 -8
- package/src/IndexerState.res.mjs +4 -8
- package/src/IndexerState.resi +0 -4
- package/src/Internal.res +43 -4
- package/src/Internal.res.mjs +18 -0
- package/src/Main.res +3 -50
- package/src/Main.res.mjs +3 -24
- package/src/Prometheus.res +0 -11
- package/src/Prometheus.res.mjs +83 -98
- package/src/Rollback.res +1 -1
- package/src/Rollback.res.mjs +1 -1
- package/src/SimulateItems.res +3 -0
- package/src/SimulateItems.res.mjs +2 -1
- package/src/sources/Evm.res +52 -38
- package/src/sources/Evm.res.mjs +48 -36
- package/src/sources/Fuel.res +3 -1
- package/src/sources/Fuel.res.mjs +1 -0
- package/src/sources/HyperFuelSource.res +5 -0
- package/src/sources/HyperFuelSource.res.mjs +2 -0
- package/src/sources/HyperSync.res +4 -1
- package/src/sources/HyperSync.res.mjs +5 -3
- package/src/sources/HyperSync.resi +1 -0
- package/src/sources/HyperSyncClient.res +9 -78
- package/src/sources/HyperSyncClient.res.mjs +1 -22
- package/src/sources/HyperSyncSource.res +3 -4
- package/src/sources/HyperSyncSource.res.mjs +2 -1
- package/src/sources/RpcSource.res +7 -2
- package/src/sources/RpcSource.res.mjs +3 -1
- package/src/sources/SimulateSource.res +3 -1
- package/src/sources/SimulateSource.res.mjs +1 -0
- package/src/sources/Source.res +4 -0
- package/src/sources/SourceManager.res +9 -8
- package/src/sources/SourceManager.res.mjs +21 -26
- package/src/sources/SourceManager.resi +2 -3
- package/src/sources/Svm.res +25 -2
- package/src/sources/Svm.res.mjs +27 -2
- package/src/sources/SvmHyperSyncClient.res +3 -29
- package/src/sources/SvmHyperSyncSource.res +60 -84
- package/src/sources/SvmHyperSyncSource.res.mjs +59 -78
- package/src/sources/TransactionStore.res +111 -0
- package/src/sources/TransactionStore.res.mjs +77 -0
- package/src/tui/Tui.res +13 -16
- package/src/tui/Tui.res.mjs +12 -14
package/src/Main.res
CHANGED
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
type chainData =
|
|
2
|
-
chainId: float,
|
|
3
|
-
poweredByHyperSync: bool,
|
|
4
|
-
firstEventBlockNumber: option<int>,
|
|
5
|
-
latestProcessedBlock: option<int>,
|
|
6
|
-
timestampCaughtUpToHeadOrEndblock: option<Date.t>,
|
|
7
|
-
numEventsProcessed: float,
|
|
8
|
-
latestFetchedBlockNumber: int,
|
|
9
|
-
// Need this for API backwards compatibility
|
|
10
|
-
@as("currentBlockHeight")
|
|
11
|
-
knownHeight: int,
|
|
12
|
-
numBatchesFetched: int,
|
|
13
|
-
startBlock: int,
|
|
14
|
-
endBlock: option<int>,
|
|
15
|
-
numAddresses: int,
|
|
16
|
-
}
|
|
1
|
+
type chainData = ChainState.chainData
|
|
17
2
|
@tag("status")
|
|
18
3
|
type state =
|
|
19
4
|
| @as("disabled") Disabled({})
|
|
@@ -183,7 +168,7 @@ let buildChainsObject = (~config: Config.t) => {
|
|
|
183
168
|
| Some(state) => {
|
|
184
169
|
let chain = ChainMap.Chain.makeUnsafe(~chainId=chainConfig.id)
|
|
185
170
|
let chainState = state->IndexerState.getChainState(~chain)
|
|
186
|
-
let indexingAddresses =
|
|
171
|
+
let indexingAddresses = chainState->ChainState.indexingAddresses
|
|
187
172
|
|
|
188
173
|
// Collect all addresses for this contract name from indexingAddresses
|
|
189
174
|
let addresses = []
|
|
@@ -780,39 +765,7 @@ let start = async (
|
|
|
780
765
|
| None => Initializing({})
|
|
781
766
|
| Some(state) => {
|
|
782
767
|
let chains =
|
|
783
|
-
state
|
|
784
|
-
->IndexerState.chainStates
|
|
785
|
-
->Dict.valuesToArray
|
|
786
|
-
->Array.map(cs => {
|
|
787
|
-
let fetchState = cs->ChainState.fetchState
|
|
788
|
-
let latestFetchedBlockNumber = Pervasives.max(
|
|
789
|
-
FetchState.bufferBlockNumber(fetchState),
|
|
790
|
-
0,
|
|
791
|
-
)
|
|
792
|
-
let knownHeight =
|
|
793
|
-
cs->ChainState.hasProcessedToEndblock
|
|
794
|
-
? fetchState.endBlock->Option.getOr(fetchState.knownHeight)
|
|
795
|
-
: fetchState.knownHeight
|
|
796
|
-
|
|
797
|
-
{
|
|
798
|
-
chainId: (cs->ChainState.chainConfig).id->Int.toFloat,
|
|
799
|
-
poweredByHyperSync: (
|
|
800
|
-
cs->ChainState.sourceManager->SourceManager.getActiveSource
|
|
801
|
-
).poweredByHyperSync,
|
|
802
|
-
latestFetchedBlockNumber,
|
|
803
|
-
knownHeight,
|
|
804
|
-
numBatchesFetched: 0,
|
|
805
|
-
startBlock: fetchState.startBlock,
|
|
806
|
-
endBlock: fetchState.endBlock,
|
|
807
|
-
firstEventBlockNumber: fetchState.firstEventBlock,
|
|
808
|
-
latestProcessedBlock: cs->ChainState.committedProgressBlockNumber === -1
|
|
809
|
-
? None
|
|
810
|
-
: Some(cs->ChainState.committedProgressBlockNumber),
|
|
811
|
-
timestampCaughtUpToHeadOrEndblock: cs->ChainState.timestampCaughtUpToHeadOrEndblock,
|
|
812
|
-
numEventsProcessed: cs->ChainState.numEventsProcessed,
|
|
813
|
-
numAddresses: fetchState->FetchState.numAddresses,
|
|
814
|
-
}
|
|
815
|
-
})
|
|
768
|
+
state->IndexerState.chainStates->Dict.valuesToArray->Array.map(ChainState.toChainData)
|
|
816
769
|
Active({
|
|
817
770
|
envioVersion,
|
|
818
771
|
chains,
|
package/src/Main.res.mjs
CHANGED
|
@@ -11,7 +11,6 @@ import * as Process from "process";
|
|
|
11
11
|
import * as ChainMap from "./ChainMap.res.mjs";
|
|
12
12
|
import * as PgStorage from "./PgStorage.res.mjs";
|
|
13
13
|
import * as ChainState from "./ChainState.res.mjs";
|
|
14
|
-
import * as FetchState from "./FetchState.res.mjs";
|
|
15
14
|
import * as Prometheus from "./Prometheus.res.mjs";
|
|
16
15
|
import * as IndexerLoop from "./IndexerLoop.res.mjs";
|
|
17
16
|
import * as Persistence from "./Persistence.res.mjs";
|
|
@@ -20,8 +19,6 @@ import Yargs from "yargs/yargs";
|
|
|
20
19
|
import * as IndexerState from "./IndexerState.res.mjs";
|
|
21
20
|
import * as ErrorHandling from "./ErrorHandling.res.mjs";
|
|
22
21
|
import * as HandlerLoader from "./HandlerLoader.res.mjs";
|
|
23
|
-
import * as Primitive_int from "@rescript/runtime/lib/es6/Primitive_int.js";
|
|
24
|
-
import * as SourceManager from "./sources/SourceManager.res.mjs";
|
|
25
22
|
import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
|
|
26
23
|
import * as Helpers from "yargs/helpers";
|
|
27
24
|
import * as RollbackCommit from "./RollbackCommit.res.mjs";
|
|
@@ -168,7 +165,7 @@ function buildChainsObject(config) {
|
|
|
168
165
|
if (state !== undefined) {
|
|
169
166
|
let chain = ChainMap.Chain.makeUnsafe(chainConfig.id);
|
|
170
167
|
let chainState = IndexerState.getChainState(Primitive_option.valFromOption(state), chain);
|
|
171
|
-
let indexingAddresses = ChainState.
|
|
168
|
+
let indexingAddresses = ChainState.indexingAddresses(chainState);
|
|
172
169
|
let addresses = [];
|
|
173
170
|
let values = Object.values(indexingAddresses);
|
|
174
171
|
for (let idx = 0, idx_finish = values.length; idx < idx_finish; ++idx) {
|
|
@@ -586,25 +583,7 @@ async function start(persistence, resetOpt, isTestOpt, exitAfterFirstEventBlockO
|
|
|
586
583
|
};
|
|
587
584
|
}
|
|
588
585
|
let state$1 = Primitive_option.valFromOption(state);
|
|
589
|
-
let chains = Object.values(IndexerState.chainStates(state$1)).map(
|
|
590
|
-
let fetchState = ChainState.fetchState(cs);
|
|
591
|
-
let latestFetchedBlockNumber = Primitive_int.max(FetchState.bufferBlockNumber(fetchState), 0);
|
|
592
|
-
let knownHeight = ChainState.hasProcessedToEndblock(cs) ? Stdlib_Option.getOr(fetchState.endBlock, fetchState.knownHeight) : fetchState.knownHeight;
|
|
593
|
-
return {
|
|
594
|
-
chainId: ChainState.chainConfig(cs).id,
|
|
595
|
-
poweredByHyperSync: SourceManager.getActiveSource(ChainState.sourceManager(cs)).poweredByHyperSync,
|
|
596
|
-
firstEventBlockNumber: fetchState.firstEventBlock,
|
|
597
|
-
latestProcessedBlock: ChainState.committedProgressBlockNumber(cs) === -1 ? undefined : ChainState.committedProgressBlockNumber(cs),
|
|
598
|
-
timestampCaughtUpToHeadOrEndblock: ChainState.timestampCaughtUpToHeadOrEndblock(cs),
|
|
599
|
-
numEventsProcessed: ChainState.numEventsProcessed(cs),
|
|
600
|
-
latestFetchedBlockNumber: latestFetchedBlockNumber,
|
|
601
|
-
currentBlockHeight: knownHeight,
|
|
602
|
-
numBatchesFetched: 0,
|
|
603
|
-
startBlock: fetchState.startBlock,
|
|
604
|
-
endBlock: fetchState.endBlock,
|
|
605
|
-
numAddresses: FetchState.numAddresses(fetchState)
|
|
606
|
-
};
|
|
607
|
-
});
|
|
586
|
+
let chains = Object.values(IndexerState.chainStates(state$1)).map(ChainState.toChainData);
|
|
608
587
|
return {
|
|
609
588
|
status: "active",
|
|
610
589
|
envioVersion: envioVersion,
|
|
@@ -615,7 +594,7 @@ async function start(persistence, resetOpt, isTestOpt, exitAfterFirstEventBlockO
|
|
|
615
594
|
};
|
|
616
595
|
}, persistence$1, isDevelopmentMode);
|
|
617
596
|
}
|
|
618
|
-
let state = IndexerState.makeFromDbState(config$2, persistence$1, Persistence.getInitializedState(persistence$1), registrations, isDevelopmentMode, shouldUseTui, exitAfterFirstEventBlock, undefined, undefined,
|
|
597
|
+
let state = IndexerState.makeFromDbState(config$2, persistence$1, Persistence.getInitializedState(persistence$1), registrations, isDevelopmentMode, shouldUseTui, exitAfterFirstEventBlock, undefined, undefined, onError);
|
|
619
598
|
if (shouldUseTui) {
|
|
620
599
|
Tui.start(() => state);
|
|
621
600
|
}
|
package/src/Prometheus.res
CHANGED
|
@@ -351,17 +351,6 @@ module IndexingAddresses = {
|
|
|
351
351
|
}
|
|
352
352
|
}
|
|
353
353
|
|
|
354
|
-
module IndexingMaxConcurrency = {
|
|
355
|
-
let gauge = PromClient.Gauge.makeGauge({
|
|
356
|
-
"name": "envio_indexing_max_concurrency",
|
|
357
|
-
"help": "The maximum number of concurrent data-source queries across the whole indexer.",
|
|
358
|
-
})
|
|
359
|
-
|
|
360
|
-
let set = (~maxConcurrency) => {
|
|
361
|
-
gauge->PromClient.Gauge.set(maxConcurrency)
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
|
|
365
354
|
module IndexingConcurrency = {
|
|
366
355
|
let gauge = SafeGauge.makeOrThrow(
|
|
367
356
|
~name="envio_indexing_concurrency",
|
package/src/Prometheus.res.mjs
CHANGED
|
@@ -400,42 +400,28 @@ let IndexingAddresses = {
|
|
|
400
400
|
set: set$4
|
|
401
401
|
};
|
|
402
402
|
|
|
403
|
-
let gauge$5 =
|
|
404
|
-
name: "envio_indexing_max_concurrency",
|
|
405
|
-
help: "The maximum number of concurrent data-source queries across the whole indexer."
|
|
406
|
-
});
|
|
403
|
+
let gauge$5 = makeOrThrow$1("envio_indexing_concurrency", "The number of executing concurrent queries to the chain data-source.", chainIdLabelsSchema);
|
|
407
404
|
|
|
408
|
-
function set$5(
|
|
409
|
-
gauge$5
|
|
405
|
+
function set$5(concurrency, chainId) {
|
|
406
|
+
handleInt$1(gauge$5, chainId, concurrency);
|
|
410
407
|
}
|
|
411
408
|
|
|
412
|
-
let
|
|
409
|
+
let IndexingConcurrency = {
|
|
413
410
|
gauge: gauge$5,
|
|
414
411
|
set: set$5
|
|
415
412
|
};
|
|
416
413
|
|
|
417
|
-
let gauge$6 = makeOrThrow$1("
|
|
414
|
+
let gauge$6 = makeOrThrow$1("envio_indexing_partitions", "The number of partitions used to split fetching logic by addresses and block ranges.", chainIdLabelsSchema);
|
|
418
415
|
|
|
419
|
-
function set$6(
|
|
420
|
-
handleInt$1(gauge$6, chainId,
|
|
416
|
+
function set$6(partitionsCount, chainId) {
|
|
417
|
+
handleInt$1(gauge$6, chainId, partitionsCount);
|
|
421
418
|
}
|
|
422
419
|
|
|
423
|
-
let
|
|
420
|
+
let IndexingPartitions = {
|
|
424
421
|
gauge: gauge$6,
|
|
425
422
|
set: set$6
|
|
426
423
|
};
|
|
427
424
|
|
|
428
|
-
let gauge$7 = makeOrThrow$1("envio_indexing_partitions", "The number of partitions used to split fetching logic by addresses and block ranges.", chainIdLabelsSchema);
|
|
429
|
-
|
|
430
|
-
function set$7(partitionsCount, chainId) {
|
|
431
|
-
handleInt$1(gauge$7, chainId, partitionsCount);
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
let IndexingPartitions = {
|
|
435
|
-
gauge: gauge$7,
|
|
436
|
-
set: set$7
|
|
437
|
-
};
|
|
438
|
-
|
|
439
425
|
let counter = makeOrThrow("envio_indexing_idle_seconds", "The time the indexer source syncing has been idle. A high value may indicate the source sync is a bottleneck.", chainIdLabelsSchema);
|
|
440
426
|
|
|
441
427
|
let IndexingIdleTime = {
|
|
@@ -454,51 +440,51 @@ let IndexingQueryTime = {
|
|
|
454
440
|
counter: counter$2
|
|
455
441
|
};
|
|
456
442
|
|
|
457
|
-
let gauge$
|
|
443
|
+
let gauge$7 = makeOrThrow$1("envio_indexing_buffer_size", "The current number of items in the indexing buffer.", chainIdLabelsSchema);
|
|
458
444
|
|
|
459
|
-
function set$
|
|
460
|
-
handleInt$1(gauge$
|
|
445
|
+
function set$7(bufferSize, chainId) {
|
|
446
|
+
handleInt$1(gauge$7, chainId, bufferSize);
|
|
461
447
|
}
|
|
462
448
|
|
|
463
449
|
let IndexingBufferSize = {
|
|
464
|
-
gauge: gauge$
|
|
465
|
-
set: set$
|
|
450
|
+
gauge: gauge$7,
|
|
451
|
+
set: set$7
|
|
466
452
|
};
|
|
467
453
|
|
|
468
|
-
let gauge$
|
|
454
|
+
let gauge$8 = PromClient.Gauge.makeGauge({
|
|
469
455
|
name: "envio_indexing_target_buffer_size",
|
|
470
456
|
help: "The indexer-wide target buffer size shared across all chains. The actual number of items in the queue may exceed this value, but the indexer always tries to keep the buffer filled up to this target."
|
|
471
457
|
});
|
|
472
458
|
|
|
473
|
-
function set$
|
|
474
|
-
gauge$
|
|
459
|
+
function set$8(targetBufferSize) {
|
|
460
|
+
gauge$8.set(targetBufferSize);
|
|
475
461
|
}
|
|
476
462
|
|
|
477
463
|
let IndexingTargetBufferSize = {
|
|
478
|
-
gauge: gauge$
|
|
479
|
-
set: set$
|
|
464
|
+
gauge: gauge$8,
|
|
465
|
+
set: set$8
|
|
480
466
|
};
|
|
481
467
|
|
|
482
|
-
let gauge$
|
|
468
|
+
let gauge$9 = makeOrThrow$1("envio_indexing_buffer_block", "The highest block number that has been fully fetched by the indexer.", chainIdLabelsSchema);
|
|
483
469
|
|
|
484
|
-
function set$
|
|
485
|
-
handleInt$1(gauge$
|
|
470
|
+
function set$9(blockNumber, chainId) {
|
|
471
|
+
handleInt$1(gauge$9, chainId, blockNumber);
|
|
486
472
|
}
|
|
487
473
|
|
|
488
474
|
let IndexingBufferBlockNumber = {
|
|
489
|
-
gauge: gauge$
|
|
490
|
-
set: set$
|
|
475
|
+
gauge: gauge$9,
|
|
476
|
+
set: set$9
|
|
491
477
|
};
|
|
492
478
|
|
|
493
|
-
let gauge$
|
|
479
|
+
let gauge$10 = makeOrThrow$1("envio_indexing_end_block", "The block number to stop indexing at. (inclusive)", chainIdLabelsSchema);
|
|
494
480
|
|
|
495
|
-
function set$
|
|
496
|
-
handleInt$1(gauge$
|
|
481
|
+
function set$10(endBlock, chainId) {
|
|
482
|
+
handleInt$1(gauge$10, chainId, endBlock);
|
|
497
483
|
}
|
|
498
484
|
|
|
499
485
|
let IndexingEndBlock = {
|
|
500
|
-
gauge: gauge$
|
|
501
|
-
set: set$
|
|
486
|
+
gauge: gauge$10,
|
|
487
|
+
set: set$10
|
|
502
488
|
};
|
|
503
489
|
|
|
504
490
|
let sourceLabelsSchema = S$RescriptSchema.schema(s => ({
|
|
@@ -539,18 +525,18 @@ let SourceRequestCount = {
|
|
|
539
525
|
addSeconds: addSeconds
|
|
540
526
|
};
|
|
541
527
|
|
|
542
|
-
let gauge$
|
|
528
|
+
let gauge$11 = makeOrThrow$1("envio_source_known_height", "The latest known block number reported by the source. This value may lag behind the actual chain height, as it is updated only when queried.", sourceLabelsSchema);
|
|
543
529
|
|
|
544
|
-
function set$
|
|
545
|
-
handleInt$1(gauge$
|
|
530
|
+
function set$11(sourceName, chainId, blockNumber) {
|
|
531
|
+
handleInt$1(gauge$11, {
|
|
546
532
|
source: sourceName,
|
|
547
533
|
chainId: chainId
|
|
548
534
|
}, blockNumber);
|
|
549
535
|
}
|
|
550
536
|
|
|
551
537
|
let SourceHeight = {
|
|
552
|
-
gauge: gauge$
|
|
553
|
-
set: set$
|
|
538
|
+
gauge: gauge$11,
|
|
539
|
+
set: set$11
|
|
554
540
|
};
|
|
555
541
|
|
|
556
542
|
let counter$4 = makeOrThrow("envio_reorg_detected_total", "Total number of reorgs detected", chainIdLabelsSchema);
|
|
@@ -564,43 +550,43 @@ let ReorgCount = {
|
|
|
564
550
|
increment: increment$5
|
|
565
551
|
};
|
|
566
552
|
|
|
567
|
-
let gauge$
|
|
553
|
+
let gauge$12 = makeOrThrow$1("envio_reorg_detected_block", "The block number where reorg was detected the last time. This doesn't mean that the block was reorged, this is simply where we found block hash to be different.", chainIdLabelsSchema);
|
|
568
554
|
|
|
569
|
-
function set$
|
|
570
|
-
handleInt$1(gauge$
|
|
555
|
+
function set$12(blockNumber, chain) {
|
|
556
|
+
handleInt$1(gauge$12, chain, blockNumber);
|
|
571
557
|
}
|
|
572
558
|
|
|
573
559
|
let ReorgDetectionBlockNumber = {
|
|
574
|
-
gauge: gauge$
|
|
575
|
-
set: set$
|
|
560
|
+
gauge: gauge$12,
|
|
561
|
+
set: set$12
|
|
576
562
|
};
|
|
577
563
|
|
|
578
|
-
let gauge$
|
|
564
|
+
let gauge$13 = PromClient.Gauge.makeGauge({
|
|
579
565
|
name: "envio_reorg_threshold",
|
|
580
566
|
help: "Whether indexing is currently within the reorg threshold"
|
|
581
567
|
});
|
|
582
568
|
|
|
583
|
-
function set$
|
|
584
|
-
gauge$
|
|
569
|
+
function set$13(isInReorgThreshold) {
|
|
570
|
+
gauge$13.set(isInReorgThreshold ? 1 : 0);
|
|
585
571
|
}
|
|
586
572
|
|
|
587
573
|
let ReorgThreshold = {
|
|
588
|
-
gauge: gauge$
|
|
589
|
-
set: set$
|
|
574
|
+
gauge: gauge$13,
|
|
575
|
+
set: set$13
|
|
590
576
|
};
|
|
591
577
|
|
|
592
|
-
let gauge$
|
|
578
|
+
let gauge$14 = PromClient.Gauge.makeGauge({
|
|
593
579
|
name: "envio_rollback_enabled",
|
|
594
580
|
help: "Whether rollback on reorg is enabled"
|
|
595
581
|
});
|
|
596
582
|
|
|
597
|
-
function set$
|
|
598
|
-
gauge$
|
|
583
|
+
function set$14(enabled) {
|
|
584
|
+
gauge$14.set(enabled ? 1 : 0);
|
|
599
585
|
}
|
|
600
586
|
|
|
601
587
|
let RollbackEnabled = {
|
|
602
|
-
gauge: gauge$
|
|
603
|
-
set: set$
|
|
588
|
+
gauge: gauge$14,
|
|
589
|
+
set: set$14
|
|
604
590
|
};
|
|
605
591
|
|
|
606
592
|
let timeCounter$3 = PromClient.Counter.makeCounter({
|
|
@@ -649,62 +635,62 @@ let RollbackHistoryPrune = {
|
|
|
649
635
|
increment: increment$7
|
|
650
636
|
};
|
|
651
637
|
|
|
652
|
-
let gauge$
|
|
638
|
+
let gauge$15 = makeOrThrow$1("envio_rollback_target_block", "The block number reorg was rollbacked to the last time.", chainIdLabelsSchema);
|
|
653
639
|
|
|
654
|
-
function set$
|
|
655
|
-
handleInt$1(gauge$
|
|
640
|
+
function set$15(blockNumber, chain) {
|
|
641
|
+
handleInt$1(gauge$15, chain, blockNumber);
|
|
656
642
|
}
|
|
657
643
|
|
|
658
644
|
let RollbackTargetBlockNumber = {
|
|
659
|
-
gauge: gauge$
|
|
660
|
-
set: set$
|
|
645
|
+
gauge: gauge$15,
|
|
646
|
+
set: set$15
|
|
661
647
|
};
|
|
662
648
|
|
|
663
|
-
let gauge$
|
|
649
|
+
let gauge$16 = PromClient.Gauge.makeGauge({
|
|
664
650
|
name: "envio_processing_max_batch_size",
|
|
665
651
|
help: "The maximum number of items to process in a single batch."
|
|
666
652
|
});
|
|
667
653
|
|
|
668
|
-
function set$
|
|
669
|
-
gauge$
|
|
654
|
+
function set$16(maxBatchSize) {
|
|
655
|
+
gauge$16.set(maxBatchSize);
|
|
670
656
|
}
|
|
671
657
|
|
|
672
658
|
let ProcessingMaxBatchSize = {
|
|
673
|
-
gauge: gauge$
|
|
674
|
-
set: set$
|
|
659
|
+
gauge: gauge$16,
|
|
660
|
+
set: set$16
|
|
675
661
|
};
|
|
676
662
|
|
|
677
|
-
let gauge$
|
|
663
|
+
let gauge$17 = makeOrThrow$1("envio_progress_block", "The block number of the latest block processed and stored in the database.", chainIdLabelsSchema);
|
|
678
664
|
|
|
679
|
-
function set$
|
|
680
|
-
handleInt$1(gauge$
|
|
665
|
+
function set$17(blockNumber, chainId) {
|
|
666
|
+
handleInt$1(gauge$17, chainId, blockNumber);
|
|
681
667
|
}
|
|
682
668
|
|
|
683
669
|
let ProgressBlockNumber = {
|
|
684
|
-
gauge: gauge$
|
|
685
|
-
set: set$
|
|
670
|
+
gauge: gauge$17,
|
|
671
|
+
set: set$17
|
|
686
672
|
};
|
|
687
673
|
|
|
688
|
-
let gauge$
|
|
674
|
+
let gauge$18 = makeOrThrow$1("envio_progress_events", "The number of events processed and reflected in the database.", chainIdLabelsSchema);
|
|
689
675
|
|
|
690
|
-
function set$
|
|
691
|
-
handleFloat$1(gauge$
|
|
676
|
+
function set$18(processedCount, chainId) {
|
|
677
|
+
handleFloat$1(gauge$18, chainId, processedCount);
|
|
692
678
|
}
|
|
693
679
|
|
|
694
680
|
let ProgressEventsCount = {
|
|
695
|
-
gauge: gauge$
|
|
696
|
-
set: set$
|
|
681
|
+
gauge: gauge$18,
|
|
682
|
+
set: set$18
|
|
697
683
|
};
|
|
698
684
|
|
|
699
|
-
let gauge$
|
|
685
|
+
let gauge$19 = makeOrThrow$1("envio_progress_latency", "The latency in milliseconds between the latest processed event creation and the time it was written to storage.", chainIdLabelsSchema);
|
|
700
686
|
|
|
701
|
-
function set$
|
|
702
|
-
handleInt$1(gauge$
|
|
687
|
+
function set$19(latencyMs, chainId) {
|
|
688
|
+
handleInt$1(gauge$19, chainId, latencyMs);
|
|
703
689
|
}
|
|
704
690
|
|
|
705
691
|
let ProgressLatency = {
|
|
706
|
-
gauge: gauge$
|
|
707
|
-
set: set$
|
|
692
|
+
gauge: gauge$19,
|
|
693
|
+
set: set$19
|
|
708
694
|
};
|
|
709
695
|
|
|
710
696
|
let effectLabelsSchema = S$RescriptSchema.object(s => s.f("effect", S$RescriptSchema.string));
|
|
@@ -724,15 +710,15 @@ let EffectCalls = {
|
|
|
724
710
|
activeCallsCount: activeCallsCount
|
|
725
711
|
};
|
|
726
712
|
|
|
727
|
-
let gauge$
|
|
713
|
+
let gauge$20 = makeOrThrow$1("envio_effect_cache", "The number of items in the effect cache.", effectLabelsSchema);
|
|
728
714
|
|
|
729
|
-
function set$
|
|
730
|
-
handleInt$1(gauge$
|
|
715
|
+
function set$20(count, effectName) {
|
|
716
|
+
handleInt$1(gauge$20, effectName, count);
|
|
731
717
|
}
|
|
732
718
|
|
|
733
719
|
let EffectCacheCount = {
|
|
734
|
-
gauge: gauge$
|
|
735
|
-
set: set$
|
|
720
|
+
gauge: gauge$20,
|
|
721
|
+
set: set$20
|
|
736
722
|
};
|
|
737
723
|
|
|
738
724
|
let counter$7 = makeOrThrow("envio_effect_cache_invalidations", "The number of effect cache invalidations.", effectLabelsSchema);
|
|
@@ -746,18 +732,18 @@ let EffectCacheInvalidationsCount = {
|
|
|
746
732
|
increment: increment$8
|
|
747
733
|
};
|
|
748
734
|
|
|
749
|
-
let gauge$
|
|
735
|
+
let gauge$21 = makeOrThrow$1("envio_effect_queue", "The number of effect calls waiting in the rate limit queue.", effectLabelsSchema);
|
|
750
736
|
|
|
751
737
|
let timeCounter$6 = makeOrThrow("envio_effect_queue_wait_seconds", "The time spent waiting in the rate limit queue.", effectLabelsSchema);
|
|
752
738
|
|
|
753
|
-
function set$
|
|
754
|
-
handleInt$1(gauge$
|
|
739
|
+
function set$21(count, effectName) {
|
|
740
|
+
handleInt$1(gauge$21, effectName, count);
|
|
755
741
|
}
|
|
756
742
|
|
|
757
743
|
let EffectQueueCount = {
|
|
758
|
-
gauge: gauge$
|
|
744
|
+
gauge: gauge$21,
|
|
759
745
|
timeCounter: timeCounter$6,
|
|
760
|
-
set: set$
|
|
746
|
+
set: set$21
|
|
761
747
|
};
|
|
762
748
|
|
|
763
749
|
let loadLabelsSchema = S$RescriptSchema.schema(s => ({
|
|
@@ -861,7 +847,6 @@ export {
|
|
|
861
847
|
Info,
|
|
862
848
|
ProcessStartTimeSeconds,
|
|
863
849
|
IndexingAddresses,
|
|
864
|
-
IndexingMaxConcurrency,
|
|
865
850
|
IndexingConcurrency,
|
|
866
851
|
IndexingPartitions,
|
|
867
852
|
IndexingIdleTime,
|
package/src/Rollback.res
CHANGED
|
@@ -18,7 +18,7 @@ let getLastKnownValidBlock = async (
|
|
|
18
18
|
->ChainState.reorgDetection
|
|
19
19
|
->ReorgDetection.getThresholdBlockNumbersBelowBlock(
|
|
20
20
|
~blockNumber=reorgBlockNumber,
|
|
21
|
-
~knownHeight=
|
|
21
|
+
~knownHeight=chainState->ChainState.knownHeight,
|
|
22
22
|
)
|
|
23
23
|
|
|
24
24
|
switch scannedBlockNumbers {
|
package/src/Rollback.res.mjs
CHANGED
|
@@ -18,7 +18,7 @@ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
|
|
|
18
18
|
import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
|
|
19
19
|
|
|
20
20
|
async function getLastKnownValidBlock(chainState, reorgBlockNumber, isRealtime) {
|
|
21
|
-
let scannedBlockNumbers = ReorgDetection.getThresholdBlockNumbersBelowBlock(ChainState.reorgDetection(chainState), reorgBlockNumber, ChainState.
|
|
21
|
+
let scannedBlockNumbers = ReorgDetection.getThresholdBlockNumbersBelowBlock(ChainState.reorgDetection(chainState), reorgBlockNumber, ChainState.knownHeight(chainState));
|
|
22
22
|
if (scannedBlockNumbers.length === 0) {
|
|
23
23
|
return ChainState.getHighestBlockBelowThreshold(chainState);
|
|
24
24
|
}
|
package/src/SimulateItems.res
CHANGED
|
@@ -288,6 +288,9 @@ let parse = (~simulateItems: array<JSON.t>, ~config: Config.t, ~chainConfig: Con
|
|
|
288
288
|
blockNumber,
|
|
289
289
|
blockHash,
|
|
290
290
|
logIndex,
|
|
291
|
+
// Simulate keeps the transaction inline on the payload, so the store
|
|
292
|
+
// key is unused.
|
|
293
|
+
transactionIndex: 0,
|
|
291
294
|
payload: (
|
|
292
295
|
{
|
|
293
296
|
contractName: eventConfig.contractName,
|
|
@@ -241,6 +241,7 @@ function parse(simulateItems, config, chainConfig) {
|
|
|
241
241
|
blockNumber: blockNumber,
|
|
242
242
|
blockHash: match$3[3],
|
|
243
243
|
logIndex: logIndex,
|
|
244
|
+
transactionIndex: 0,
|
|
244
245
|
payload: {
|
|
245
246
|
contractName: eventConfig.contractName,
|
|
246
247
|
eventName: eventConfig.name,
|
|
@@ -248,7 +249,7 @@ function parse(simulateItems, config, chainConfig) {
|
|
|
248
249
|
chainId: chainId,
|
|
249
250
|
srcAddress: srcAddress,
|
|
250
251
|
logIndex: logIndex,
|
|
251
|
-
transaction: transaction,
|
|
252
|
+
transaction: Primitive_option.some(transaction),
|
|
252
253
|
block: match$3[0]
|
|
253
254
|
}
|
|
254
255
|
});
|
package/src/sources/Evm.res
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// EVM's concrete item payload. Erased to `Internal.eventPayload` on the item
|
|
2
|
-
// and recovered here via `toPayload`.
|
|
2
|
+
// and recovered here via `toPayload`. HyperSync omits `transaction` (it lives
|
|
3
|
+
// raw in the per-chain store and is written onto the payload at batch prep);
|
|
4
|
+
// RPC/simulate build it inline.
|
|
3
5
|
type payload = {
|
|
4
6
|
contractName: string,
|
|
5
7
|
eventName: string,
|
|
@@ -7,12 +9,55 @@ type payload = {
|
|
|
7
9
|
chainId: int,
|
|
8
10
|
srcAddress: Address.t,
|
|
9
11
|
logIndex: int,
|
|
10
|
-
transaction
|
|
12
|
+
transaction?: Internal.eventTransaction,
|
|
11
13
|
block: Internal.eventBlock,
|
|
12
14
|
}
|
|
13
15
|
external fromPayload: payload => Internal.eventPayload = "%identity"
|
|
14
16
|
external toPayload: Internal.eventPayload => payload = "%identity"
|
|
15
17
|
|
|
18
|
+
// Ordered transaction field names. The index of each is the field code shared
|
|
19
|
+
// with the Rust store (`EvmTxField`) — keep this order in sync.
|
|
20
|
+
let transactionFields = [
|
|
21
|
+
"transactionIndex",
|
|
22
|
+
"hash",
|
|
23
|
+
"from",
|
|
24
|
+
"to",
|
|
25
|
+
"gas",
|
|
26
|
+
"gasPrice",
|
|
27
|
+
"maxPriorityFeePerGas",
|
|
28
|
+
"maxFeePerGas",
|
|
29
|
+
"cumulativeGasUsed",
|
|
30
|
+
"effectiveGasPrice",
|
|
31
|
+
"gasUsed",
|
|
32
|
+
"input",
|
|
33
|
+
"nonce",
|
|
34
|
+
"value",
|
|
35
|
+
"v",
|
|
36
|
+
"r",
|
|
37
|
+
"s",
|
|
38
|
+
"contractAddress",
|
|
39
|
+
"logsBloom",
|
|
40
|
+
"root",
|
|
41
|
+
"status",
|
|
42
|
+
"yParity",
|
|
43
|
+
"maxFeePerBlobGas",
|
|
44
|
+
"blobVersionedHashes",
|
|
45
|
+
"type",
|
|
46
|
+
"l1Fee",
|
|
47
|
+
"l1GasPrice",
|
|
48
|
+
"l1GasUsed",
|
|
49
|
+
"l1FeeScalar",
|
|
50
|
+
"gasUsedForL1",
|
|
51
|
+
"accessList",
|
|
52
|
+
"authorizationList",
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
// Field name → bit index (the code shared with the Rust store), built once.
|
|
56
|
+
let transactionFieldCodes = TransactionStore.fieldCodes(transactionFields)
|
|
57
|
+
|
|
58
|
+
let transactionFieldMask = (eventConfigs: array<Internal.eventConfig>): float =>
|
|
59
|
+
eventConfigs->TransactionStore.mask(~codes=transactionFieldCodes)
|
|
60
|
+
|
|
16
61
|
let cleanUpRawEventFieldsInPlace: JSON.t => unit = %raw(`fields => {
|
|
17
62
|
delete fields.hash
|
|
18
63
|
delete fields.number
|
|
@@ -50,41 +95,7 @@ let make = (~logger: Pino.t): Ecosystem.t => {
|
|
|
50
95
|
"sendRoot",
|
|
51
96
|
"mixHash",
|
|
52
97
|
],
|
|
53
|
-
transactionFields
|
|
54
|
-
"transactionIndex",
|
|
55
|
-
"hash",
|
|
56
|
-
"from",
|
|
57
|
-
"to",
|
|
58
|
-
"gas",
|
|
59
|
-
"gasPrice",
|
|
60
|
-
"maxPriorityFeePerGas",
|
|
61
|
-
"maxFeePerGas",
|
|
62
|
-
"cumulativeGasUsed",
|
|
63
|
-
"effectiveGasPrice",
|
|
64
|
-
"gasUsed",
|
|
65
|
-
"input",
|
|
66
|
-
"nonce",
|
|
67
|
-
"value",
|
|
68
|
-
"v",
|
|
69
|
-
"r",
|
|
70
|
-
"s",
|
|
71
|
-
"contractAddress",
|
|
72
|
-
"logsBloom",
|
|
73
|
-
"root",
|
|
74
|
-
"status",
|
|
75
|
-
"yParity",
|
|
76
|
-
"chainId",
|
|
77
|
-
"maxFeePerBlobGas",
|
|
78
|
-
"blobVersionedHashes",
|
|
79
|
-
"type",
|
|
80
|
-
"l1Fee",
|
|
81
|
-
"l1GasPrice",
|
|
82
|
-
"l1GasUsed",
|
|
83
|
-
"l1FeeScalar",
|
|
84
|
-
"gasUsedForL1",
|
|
85
|
-
"accessList",
|
|
86
|
-
"authorizationList",
|
|
87
|
-
],
|
|
98
|
+
transactionFields,
|
|
88
99
|
blockNumberName: "number",
|
|
89
100
|
blockTimestampName: "timestamp",
|
|
90
101
|
blockHashName: "hash",
|
|
@@ -106,7 +117,10 @@ let make = (~logger: Pino.t): Ecosystem.t => {
|
|
|
106
117
|
s.field("block", S.option(S.object(s2 => s2.field("number", S.unknown))))
|
|
107
118
|
),
|
|
108
119
|
logger,
|
|
109
|
-
|
|
120
|
+
transactionFieldMask,
|
|
121
|
+
// The payload carries `transaction` by batch prep (HyperSync) or inline
|
|
122
|
+
// (RPC/simulate), so the event is the payload as-is.
|
|
123
|
+
toEvent: eventItem => eventItem.payload->(Utils.magic: Internal.eventPayload => Internal.event),
|
|
110
124
|
toEventLogger: eventItem =>
|
|
111
125
|
Logging.createChildFrom(
|
|
112
126
|
~logger,
|