@aztec/aztec-node 0.0.1-commit.b655e406 → 0.0.1-commit.fce3e4f
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/dest/aztec-node/config.d.ts +1 -1
- package/dest/aztec-node/node_metrics.d.ts +1 -1
- package/dest/aztec-node/node_metrics.d.ts.map +1 -1
- package/dest/aztec-node/server.d.ts +3 -3
- package/dest/aztec-node/server.d.ts.map +1 -1
- package/dest/aztec-node/server.js +10 -11
- package/dest/bin/index.d.ts +1 -1
- package/dest/index.d.ts +1 -1
- package/dest/sentinel/config.d.ts +1 -1
- package/dest/sentinel/factory.d.ts +1 -1
- package/dest/sentinel/index.d.ts +1 -1
- package/dest/sentinel/sentinel.d.ts +19 -18
- package/dest/sentinel/sentinel.d.ts.map +1 -1
- package/dest/sentinel/sentinel.js +20 -13
- package/dest/sentinel/store.d.ts +6 -5
- package/dest/sentinel/store.d.ts.map +1 -1
- package/dest/sentinel/store.js +3 -2
- package/dest/test/index.d.ts +1 -1
- package/package.json +28 -27
- package/src/aztec-node/server.ts +14 -12
- package/src/sentinel/sentinel.ts +44 -32
- package/src/sentinel/store.ts +11 -10
|
@@ -31,4 +31,4 @@ export declare const aztecNodeConfigMappings: ConfigMappingsType<AztecNodeConfig
|
|
|
31
31
|
*/
|
|
32
32
|
export declare function getConfigEnvVars(): AztecNodeConfig;
|
|
33
33
|
export declare function createKeyStoreForValidator(config: TxSenderConfig & SequencerClientConfig & SharedNodeConfig): KeyStore | undefined;
|
|
34
|
-
//# sourceMappingURL=
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUEwQixNQUFNLHdCQUF3QixDQUFDO0FBQ3JGLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUN2QixLQUFLLG1CQUFtQixFQUd6QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUE4QyxNQUFNLDBCQUEwQixDQUFDO0FBRS9HLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRixPQUFPLEVBQ0wsS0FBSyxRQUFRLEVBSWQsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQXFCLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLEtBQUssc0JBQXNCLEVBQThCLE1BQU0sNkJBQTZCLENBQUM7QUFDdEcsT0FBTyxFQUNMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssY0FBYyxFQUNuQiw2QkFBNkIsRUFDOUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUd4QyxPQUFPLEVBQUUsS0FBSyxhQUFhLEVBQXlCLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQWlDLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0csT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQTRCLE1BQU0sMkJBQTJCLENBQUM7QUFJNUYsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUEwQixNQUFNLHVCQUF1QixDQUFDO0FBRXBGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxLQUFLLHFCQUFxQixFQUFFLENBQUM7QUFFckU7O0dBRUc7QUFDSCxNQUFNLE1BQU0sZUFBZSxHQUFHLGNBQWMsR0FDMUMscUJBQXFCLEdBQ3JCLHFCQUFxQixHQUNyQixzQkFBc0IsR0FDdEIsZ0JBQWdCLEdBQ2hCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxjQUFjLEdBQUcsb0JBQW9CLEdBQUcsWUFBWSxDQUFDLEdBQ2xGLFNBQVMsR0FDVCxlQUFlLEdBQ2YsY0FBYyxHQUNkLGdCQUFnQixHQUNoQixrQkFBa0IsR0FDbEIsYUFBYSxHQUNiLGFBQWEsR0FBRztJQUNkLDZCQUE2QjtJQUM3QixXQUFXLEVBQUUsbUJBQW1CLENBQUM7SUFDakMsc0RBQXNEO0lBQ3RELGdCQUFnQixFQUFFLE9BQU8sQ0FBQztJQUMxQixpR0FBaUc7SUFDakcsdUJBQXVCLEVBQUUsT0FBTyxDQUFDO0NBQ2xDLENBQUM7QUFFSixlQUFPLE1BQU0sdUJBQXVCLEVBQUUsa0JBQWtCLENBQUMsZUFBZSxDQTRCdkUsQ0FBQztBQUVGOzs7R0FHRztBQUNILHdCQUFnQixnQkFBZ0IsSUFBSSxlQUFlLENBRWxEO0FBb0VELHdCQUFnQiwwQkFBMEIsQ0FDeEMsTUFBTSxFQUFFLGNBQWMsR0FBRyxxQkFBcUIsR0FBRyxnQkFBZ0IsR0FDaEUsUUFBUSxHQUFHLFNBQVMsQ0FNdEIifQ==
|
|
@@ -9,4 +9,4 @@ export declare class NodeMetrics {
|
|
|
9
9
|
recordSnapshot(durationMs: number): void;
|
|
10
10
|
recordSnapshotError(): void;
|
|
11
11
|
}
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9tZXRyaWNzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9ub2RlX21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLHFCQUFhLFdBQVc7SUFDdEIsT0FBTyxDQUFDLGNBQWMsQ0FBZ0I7SUFDdEMsT0FBTyxDQUFDLGlCQUFpQixDQUFZO0lBRXJDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBZ0I7SUFDMUMsT0FBTyxDQUFDLGdCQUFnQixDQUFZO0lBRXBDLFlBQVksTUFBTSxFQUFFLGVBQWUsRUFBRSxJQUFJLFNBQWMsRUFxQnREO0lBRUQsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sUUFPakQ7SUFFRCxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sUUFNaEM7SUFFRCxtQkFBbUIsU0FFbEI7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node_metrics.d.ts","sourceRoot":"","sources":["../../src/aztec-node/node_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,iBAAiB,CAAY;IAErC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,gBAAgB,CAAY;
|
|
1
|
+
{"version":3,"file":"node_metrics.d.ts","sourceRoot":"","sources":["../../src/aztec-node/node_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,iBAAiB,CAAY;IAErC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,gBAAgB,CAAY;IAEpC,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,SAAc,EAqBtD;IAED,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,QAOjD;IAED,cAAc,CAAC,UAAU,EAAE,MAAM,QAMhC;IAED,mBAAmB,SAElB;CACF"}
|
|
@@ -2,6 +2,7 @@ import { type BlobSinkClientInterface } from '@aztec/blob-sink/client';
|
|
|
2
2
|
import { ARCHIVE_HEIGHT, type L1_TO_L2_MSG_TREE_HEIGHT, type NOTE_HASH_TREE_HEIGHT, type NULLIFIER_TREE_HEIGHT, type PUBLIC_DATA_TREE_HEIGHT } from '@aztec/constants';
|
|
3
3
|
import { type EpochCacheInterface } from '@aztec/epoch-cache';
|
|
4
4
|
import { type L1ContractAddresses } from '@aztec/ethereum';
|
|
5
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
5
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
7
|
import { Fr } from '@aztec/foundation/fields';
|
|
7
8
|
import { type Logger } from '@aztec/foundation/log';
|
|
@@ -53,7 +54,6 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
53
54
|
private log;
|
|
54
55
|
private metrics;
|
|
55
56
|
private isUploadingSnapshot;
|
|
56
|
-
private txQueue;
|
|
57
57
|
readonly tracer: Tracer;
|
|
58
58
|
constructor(config: AztecNodeConfig, p2pClient: P2P, blockSource: L2BlockSource & Partial<Service>, logsSource: L2LogsSource, contractDataSource: ContractDataSource, l1ToL2MessageSource: L1ToL2MessageSource, worldStateSynchronizer: WorldStateSynchronizer, sequencer: SequencerClient | undefined, slasherClient: SlasherClientInterface | undefined, validatorsSentinel: Sentinel | undefined, epochPruneWatcher: EpochPruneWatcher | undefined, l1ChainId: number, version: number, globalVariableBuilder: GlobalVariableBuilderInterface, epochCache: EpochCacheInterface, packageVersion: string, proofVerifier: ClientProtocolCircuitVerifier, telemetry?: TelemetryClient, log?: Logger);
|
|
59
59
|
getWorldStateSyncStatus(): Promise<WorldStateSyncStatus>;
|
|
@@ -332,7 +332,7 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
332
332
|
getProtocolContractAddresses(): Promise<ProtocolContractAddresses>;
|
|
333
333
|
registerContractFunctionSignatures(signatures: string[]): Promise<void>;
|
|
334
334
|
getValidatorsStats(): Promise<ValidatorsStats>;
|
|
335
|
-
getValidatorStats(validatorAddress: EthAddress, fromSlot?:
|
|
335
|
+
getValidatorStats(validatorAddress: EthAddress, fromSlot?: SlotNumber, toSlot?: SlotNumber): Promise<SingleValidatorStats | undefined>;
|
|
336
336
|
startSnapshotUpload(location: string): Promise<void>;
|
|
337
337
|
rollbackTo(targetBlock: number, force?: boolean): Promise<void>;
|
|
338
338
|
pauseSync(): Promise<void>;
|
|
@@ -340,4 +340,4 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
340
340
|
getSlashPayloads(): Promise<SlashPayloadRound[]>;
|
|
341
341
|
getSlashOffenses(round: bigint | 'all' | 'current'): Promise<Offense[]>;
|
|
342
342
|
}
|
|
343
|
-
//# sourceMappingURL=server.d.ts.map
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssdUJBQXVCLEVBQXdCLE1BQU0seUJBQXlCLENBQUM7QUFDN0YsT0FBTyxFQUNMLGNBQWMsRUFFZCxLQUFLLHdCQUF3QixFQUM3QixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHVCQUF1QixFQUM3QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBYyxLQUFLLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUUsT0FBTyxFQUNMLEtBQUssbUJBQW1CLEVBS3pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUMsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQVMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJekUsT0FBTyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssYUFBYSxFQUFvRCxNQUFNLFlBQVksQ0FBQztBQUU1RyxPQUFPLEVBR0wsZUFBZSxFQUNmLEtBQUssa0JBQWtCLEVBRXhCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixLQUFLLHNCQUFzQixFQUc1QixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFP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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EACL,cAAc,EAEd,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,KAAK,mBAAmB,EAKzB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,6 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
15
15
|
import { Fr } from '@aztec/foundation/fields';
|
|
16
16
|
import { BadRequestError } from '@aztec/foundation/json-rpc';
|
|
17
17
|
import { createLogger } from '@aztec/foundation/log';
|
|
18
|
-
import { SerialQueue } from '@aztec/foundation/queue';
|
|
19
18
|
import { count } from '@aztec/foundation/string';
|
|
20
19
|
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
21
20
|
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
@@ -27,6 +26,7 @@ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
|
27
26
|
import { BlockBuilder, GlobalVariableBuilder, SequencerClient, createValidatorForAcceptingTxs } from '@aztec/sequencer-client';
|
|
28
27
|
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
29
28
|
import { AttestationsBlockWatcher, EpochPruneWatcher, createSlasher } from '@aztec/slasher';
|
|
29
|
+
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
30
30
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
31
31
|
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
32
32
|
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
@@ -69,8 +69,6 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
69
69
|
metrics;
|
|
70
70
|
// Prevent two snapshot operations to happen simultaneously
|
|
71
71
|
isUploadingSnapshot;
|
|
72
|
-
// Serial queue to ensure that we only send one tx at a time
|
|
73
|
-
txQueue;
|
|
74
72
|
tracer;
|
|
75
73
|
constructor(config, p2pClient, blockSource, logsSource, contractDataSource, l1ToL2MessageSource, worldStateSynchronizer, sequencer, slasherClient, validatorsSentinel, epochPruneWatcher, l1ChainId, version, globalVariableBuilder, epochCache, packageVersion, proofVerifier, telemetry = getTelemetryClient(), log = createLogger('node')){
|
|
76
74
|
this.config = config;
|
|
@@ -93,10 +91,8 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
93
91
|
this.telemetry = telemetry;
|
|
94
92
|
this.log = log;
|
|
95
93
|
this.isUploadingSnapshot = false;
|
|
96
|
-
this.txQueue = new SerialQueue();
|
|
97
94
|
this.metrics = new NodeMetrics(telemetry, 'AztecNodeService');
|
|
98
95
|
this.tracer = telemetry.getTracer('AztecNodeService');
|
|
99
|
-
this.txQueue.start();
|
|
100
96
|
this.log.info(`Aztec Node version: ${this.packageVersion}`);
|
|
101
97
|
this.log.info(`Aztec Node started on chain 0x${l1ChainId.toString(16)}`, config.l1Contracts);
|
|
102
98
|
}
|
|
@@ -186,7 +182,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
186
182
|
});
|
|
187
183
|
// now create the merkle trees and the world state synchronizer
|
|
188
184
|
const worldStateSynchronizer = await createWorldStateSynchronizer(config, archiver, options.prefilledPublicData, telemetry);
|
|
189
|
-
const circuitVerifier = config.realProofs ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier();
|
|
185
|
+
const circuitVerifier = config.realProofs ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier(config.proverTestVerificationDelayMs);
|
|
190
186
|
if (!config.realProofs) {
|
|
191
187
|
log.warn(`Aztec node is accepting fake proofs`);
|
|
192
188
|
}
|
|
@@ -467,7 +463,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
467
463
|
* Method to submit a transaction to the p2p pool.
|
|
468
464
|
* @param tx - The transaction to be submitted.
|
|
469
465
|
*/ async sendTx(tx) {
|
|
470
|
-
await this
|
|
466
|
+
await this.#sendTx(tx);
|
|
471
467
|
}
|
|
472
468
|
async #sendTx(tx) {
|
|
473
469
|
const timer = new Timer();
|
|
@@ -508,7 +504,6 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
508
504
|
* Method to stop the aztec node.
|
|
509
505
|
*/ async stop() {
|
|
510
506
|
this.log.info(`Stopping Aztec Node`);
|
|
511
|
-
await this.txQueue.end();
|
|
512
507
|
await tryStop(this.validatorsSentinel);
|
|
513
508
|
await tryStop(this.epochPruneWatcher);
|
|
514
509
|
await tryStop(this.slasherClient);
|
|
@@ -813,11 +808,15 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
813
808
|
});
|
|
814
809
|
const merkleTreeFork = await this.worldStateSynchronizer.fork();
|
|
815
810
|
try {
|
|
816
|
-
const
|
|
811
|
+
const config = PublicSimulatorConfig.from({
|
|
817
812
|
skipFeeEnforcement,
|
|
818
|
-
|
|
819
|
-
|
|
813
|
+
collectDebugLogs: true,
|
|
814
|
+
collectHints: false,
|
|
815
|
+
collectCallMetadata: true,
|
|
816
|
+
maxDebugLogMemoryReads: this.config.rpcSimulatePublicMaxDebugLogMemoryReads,
|
|
817
|
+
collectStatistics: false
|
|
820
818
|
});
|
|
819
|
+
const processor = publicProcessorFactory.create(merkleTreeFork, newGlobalVariables, config);
|
|
821
820
|
// REFACTOR: Consider merging ProcessReturnValues into ProcessedTx
|
|
822
821
|
const [processedTxs, failedTxs, _usedTxs, returns] = await processor.process([
|
|
823
822
|
tx
|
package/dest/bin/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env -S node --no-warnings
|
|
2
2
|
export {};
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
package/dest/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './aztec-node/config.js';
|
|
2
2
|
export * from './aztec-node/server.js';
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsd0JBQXdCLENBQUMifQ==
|
|
@@ -5,4 +5,4 @@ export type SentinelConfig = {
|
|
|
5
5
|
sentinelEnabled: boolean;
|
|
6
6
|
};
|
|
7
7
|
export declare const sentinelConfigMappings: ConfigMappingsType<SentinelConfig>;
|
|
8
|
-
//# sourceMappingURL=
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VudGluZWwvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUEyQyxNQUFNLDBCQUEwQixDQUFDO0FBRTVHLE1BQU0sTUFBTSxjQUFjLEdBQUc7SUFDM0IsNkJBQTZCLEVBQUUsTUFBTSxDQUFDO0lBQ3RDLCtDQUErQyxFQUFFLE1BQU0sQ0FBQztJQUN4RCxlQUFlLEVBQUUsT0FBTyxDQUFDO0NBQzFCLENBQUM7QUFFRixlQUFPLE1BQU0sc0JBQXNCLEVBQUUsa0JBQWtCLENBQUMsY0FBYyxDQTRCckUsQ0FBQyJ9
|
|
@@ -6,4 +6,4 @@ import type { SlasherConfig } from '@aztec/stdlib/interfaces/server';
|
|
|
6
6
|
import type { SentinelConfig } from './config.js';
|
|
7
7
|
import { Sentinel } from './sentinel.js';
|
|
8
8
|
export declare function createSentinel(epochCache: EpochCache, archiver: L2BlockSource, p2p: P2PClient, config: SentinelConfig & DataStoreConfig & SlasherConfig, logger?: import("@aztec/foundation/log").Logger): Promise<Sentinel | undefined>;
|
|
9
|
-
//# sourceMappingURL=
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbnRpbmVsL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pDLHdCQUFzQixjQUFjLENBQ2xDLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFFBQVEsRUFBRSxhQUFhLEVBQ3ZCLEdBQUcsRUFBRSxTQUFTLEVBQ2QsTUFBTSxFQUFFLGNBQWMsR0FBRyxlQUFlLEdBQUcsYUFBYSxFQUN4RCxNQUFNLHlDQUFnQyxHQUNyQyxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQWlCL0IifQ==
|
package/dest/sentinel/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { Sentinel } from './sentinel.js';
|
|
2
2
|
export type { ValidatorsStats, ValidatorStats, ValidatorStatusHistory, ValidatorStatusInSlot, } from '@aztec/stdlib/validators';
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZW50aW5lbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLFlBQVksRUFDVixlQUFlLEVBQ2YsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixxQkFBcUIsR0FDdEIsTUFBTSwwQkFBMEIsQ0FBQyJ9
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
|
+
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
4
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
4
5
|
import { type L2TipsStore } from '@aztec/kv-store/stores';
|
|
@@ -19,9 +20,9 @@ export declare class Sentinel extends Sentinel_base implements L2BlockStreamEven
|
|
|
19
20
|
protected runningPromise: RunningPromise;
|
|
20
21
|
protected blockStream: L2BlockStream;
|
|
21
22
|
protected l2TipsStore: L2TipsStore;
|
|
22
|
-
protected initialSlot:
|
|
23
|
-
protected lastProcessedSlot:
|
|
24
|
-
protected slotNumberToBlock: Map<
|
|
23
|
+
protected initialSlot: SlotNumber | undefined;
|
|
24
|
+
protected lastProcessedSlot: SlotNumber | undefined;
|
|
25
|
+
protected slotNumberToBlock: Map<SlotNumber, {
|
|
25
26
|
blockNumber: number;
|
|
26
27
|
archive: string;
|
|
27
28
|
attestors: EthAddress[];
|
|
@@ -34,15 +35,15 @@ export declare class Sentinel extends Sentinel_base implements L2BlockStreamEven
|
|
|
34
35
|
stop(): Promise<void>;
|
|
35
36
|
handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
|
|
36
37
|
protected handleChainProven(event: L2BlockStreamEvent): Promise<void>;
|
|
37
|
-
protected computeProvenPerformance(epoch:
|
|
38
|
+
protected computeProvenPerformance(epoch: EpochNumber): Promise<ValidatorsEpochPerformance>;
|
|
38
39
|
/**
|
|
39
40
|
* Checks if a validator has been inactive for the specified number of consecutive epochs for which we have data on it.
|
|
40
41
|
* @param validator The validator address to check
|
|
41
42
|
* @param currentEpoch Epochs strictly before the current one are evaluated only
|
|
42
43
|
* @param requiredConsecutiveEpochs Number of consecutive epochs required for slashing
|
|
43
44
|
*/
|
|
44
|
-
protected checkPastInactivity(validator: EthAddress, currentEpoch:
|
|
45
|
-
protected handleProvenPerformance(epoch:
|
|
45
|
+
protected checkPastInactivity(validator: EthAddress, currentEpoch: EpochNumber, requiredConsecutiveEpochs: number): Promise<boolean>;
|
|
46
|
+
protected handleProvenPerformance(epoch: EpochNumber, performance: ValidatorsEpochPerformance): Promise<void>;
|
|
46
47
|
/**
|
|
47
48
|
* Process data for two L2 slots ago.
|
|
48
49
|
* Note that we do not process historical data, since we rely on p2p data for processing,
|
|
@@ -54,38 +55,38 @@ export declare class Sentinel extends Sentinel_base implements L2BlockStreamEven
|
|
|
54
55
|
* We also don't move past the archiver last synced L2 slot, as we don't want to process data that is not yet available.
|
|
55
56
|
* Last, we check the p2p is synced with the archiver, so it has pulled all attestations from it.
|
|
56
57
|
*/
|
|
57
|
-
protected isReadyToProcess(currentSlot:
|
|
58
|
+
protected isReadyToProcess(currentSlot: SlotNumber): Promise<SlotNumber | false>;
|
|
58
59
|
/**
|
|
59
60
|
* Gathers committee and proposer data for a given slot, computes slot stats,
|
|
60
61
|
* and updates overall stats.
|
|
61
62
|
*/
|
|
62
|
-
protected processSlot(slot:
|
|
63
|
+
protected processSlot(slot: SlotNumber): Promise<void>;
|
|
63
64
|
/** Computes activity for a given slot. */
|
|
64
|
-
protected getSlotActivity(slot:
|
|
65
|
+
protected getSlotActivity(slot: SlotNumber, epoch: EpochNumber, proposer: EthAddress, committee: EthAddress[]): Promise<{
|
|
65
66
|
[k: string]: ValidatorStatusInSlot | undefined;
|
|
66
67
|
}>;
|
|
67
68
|
/** Push the status for each slot for each validator. */
|
|
68
|
-
protected updateValidators(slot:
|
|
69
|
+
protected updateValidators(slot: SlotNumber, stats: Record<`0x${string}`, ValidatorStatusInSlot | undefined>): Promise<void>;
|
|
69
70
|
/** Computes stats to be returned based on stored data. */
|
|
70
|
-
computeStats({ fromSlot, toSlot, validators
|
|
71
|
-
fromSlot?:
|
|
72
|
-
toSlot?:
|
|
71
|
+
computeStats({ fromSlot, toSlot, validators }?: {
|
|
72
|
+
fromSlot?: SlotNumber;
|
|
73
|
+
toSlot?: SlotNumber;
|
|
73
74
|
validators?: EthAddress[];
|
|
74
75
|
}): Promise<ValidatorsStats>;
|
|
75
76
|
/** Computes stats for a single validator. */
|
|
76
|
-
getValidatorStats(validatorAddress: EthAddress, fromSlot?:
|
|
77
|
-
protected computeStatsForValidator(address: `0x${string}`, allHistory: ValidatorStatusHistory, fromSlot?:
|
|
77
|
+
getValidatorStats(validatorAddress: EthAddress, fromSlot?: SlotNumber, toSlot?: SlotNumber): Promise<SingleValidatorStats | undefined>;
|
|
78
|
+
protected computeStatsForValidator(address: `0x${string}`, allHistory: ValidatorStatusHistory, fromSlot?: SlotNumber, toSlot?: SlotNumber): ValidatorStats;
|
|
78
79
|
protected computeMissed(history: ValidatorStatusHistory, computeOverPrefix: ValidatorStatusType | undefined, filter: ValidatorStatusInSlot[]): {
|
|
79
80
|
currentStreak: number;
|
|
80
81
|
rate: number | undefined;
|
|
81
82
|
count: number;
|
|
82
83
|
total: number;
|
|
83
84
|
};
|
|
84
|
-
protected computeFromSlot(slot:
|
|
85
|
+
protected computeFromSlot(slot: SlotNumber | undefined): {
|
|
85
86
|
timestamp: bigint;
|
|
86
|
-
slot:
|
|
87
|
+
slot: SlotNumber;
|
|
87
88
|
date: string;
|
|
88
89
|
} | undefined;
|
|
89
90
|
}
|
|
90
91
|
export {};
|
|
91
|
-
//# sourceMappingURL=
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudGluZWwuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZW50aW5lbC9zZW50aW5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFxQixLQUFLLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEVBSUwsS0FBSyxPQUFPLEVBQ1osS0FBSyxjQUFjLEVBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUNMLEtBQUssYUFBYSxFQUNsQixhQUFhLEVBQ2IsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyx5QkFBeUIsRUFFL0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEtBQUssRUFDVixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixlQUFlLEVBQ2hCLE1BQU0sMEJBQTBCLENBQUM7QUFJbEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFFM0MscUJBQWEsUUFBUyxTQUFRLGFBQTJDLFlBQVcseUJBQXlCLEVBQUUsT0FBTztJQVlsSCxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVU7SUFDaEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxhQUFhO0lBQ2pDLFNBQVMsQ0FB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../src/sentinel/sentinel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../src/sentinel/sentinel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { countWhile, filterAsync, fromEntries, getEntries, mapValues } from '@aztec/foundation/collection';
|
|
2
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -19,6 +20,7 @@ export class Sentinel extends EventEmitter {
|
|
|
19
20
|
l2TipsStore;
|
|
20
21
|
initialSlot;
|
|
21
22
|
lastProcessedSlot;
|
|
23
|
+
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
22
24
|
slotNumberToBlock;
|
|
23
25
|
constructor(epochCache, archiver, p2p, store, config, logger = createLogger('node:sentinel')){
|
|
24
26
|
super(), this.epochCache = epochCache, this.archiver = archiver, this.p2p = p2p, this.store = store, this.config = config, this.logger = logger, this.slotNumberToBlock = new Map();
|
|
@@ -131,13 +133,15 @@ export class Sentinel extends EventEmitter {
|
|
|
131
133
|
}
|
|
132
134
|
// Get all historical performance for this validator
|
|
133
135
|
const allPerformance = await this.store.getProvenPerformance(validator);
|
|
136
|
+
// Sort by epoch descending to get most recent first, keep only epochs strictly before the current one, and get the first N
|
|
137
|
+
const pastEpochs = allPerformance.sort((a, b)=>Number(b.epoch - a.epoch)).filter((p)=>p.epoch < currentEpoch);
|
|
134
138
|
// If we don't have enough historical data, don't slash
|
|
135
|
-
if (
|
|
139
|
+
if (pastEpochs.length < requiredConsecutiveEpochs) {
|
|
136
140
|
this.logger.debug(`Not enough historical data for slashing ${validator} for inactivity (${allPerformance.length} epochs < ${requiredConsecutiveEpochs} required)`);
|
|
137
141
|
return false;
|
|
138
142
|
}
|
|
139
|
-
//
|
|
140
|
-
return
|
|
143
|
+
// Check that we have at least requiredConsecutiveEpochs and that all of them are above the inactivity threshold
|
|
144
|
+
return pastEpochs.slice(0, requiredConsecutiveEpochs).every((p)=>p.missed / p.total >= this.config.slashInactivityTargetPercentage);
|
|
141
145
|
}
|
|
142
146
|
async handleProvenPerformance(epoch, performance) {
|
|
143
147
|
if (this.config.slashInactivityPenalty === 0n) {
|
|
@@ -155,7 +159,7 @@ export class Sentinel extends EventEmitter {
|
|
|
155
159
|
validator: EthAddress.fromString(address),
|
|
156
160
|
amount: this.config.slashInactivityPenalty,
|
|
157
161
|
offenseType: OffenseType.INACTIVITY,
|
|
158
|
-
epochOrSlot: epoch
|
|
162
|
+
epochOrSlot: BigInt(epoch)
|
|
159
163
|
}));
|
|
160
164
|
if (criminals.length > 0) {
|
|
161
165
|
this.logger.verbose(`Identified ${criminals.length} validators to slash due to inactivity in at least ${epochThreshold} consecutive epochs`, {
|
|
@@ -190,7 +194,11 @@ export class Sentinel extends EventEmitter {
|
|
|
190
194
|
* We also don't move past the archiver last synced L2 slot, as we don't want to process data that is not yet available.
|
|
191
195
|
* Last, we check the p2p is synced with the archiver, so it has pulled all attestations from it.
|
|
192
196
|
*/ async isReadyToProcess(currentSlot) {
|
|
193
|
-
|
|
197
|
+
if (currentSlot < 2) {
|
|
198
|
+
this.logger.trace(`Current slot ${currentSlot} too early.`);
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
const targetSlot = SlotNumber(currentSlot - 2);
|
|
194
202
|
if (this.lastProcessedSlot && this.lastProcessedSlot >= targetSlot) {
|
|
195
203
|
this.logger.trace(`Already processed slot ${targetSlot}`, {
|
|
196
204
|
lastProcessedSlot: this.lastProcessedSlot
|
|
@@ -314,7 +322,7 @@ export class Sentinel extends EventEmitter {
|
|
|
314
322
|
await this.store.getHistory(v)
|
|
315
323
|
]))) : await this.store.getHistories();
|
|
316
324
|
const slotNow = this.epochCache.getEpochAndSlotNow().slot;
|
|
317
|
-
fromSlot ??= (this.lastProcessedSlot ?? slotNow) -
|
|
325
|
+
fromSlot ??= SlotNumber(Math.max((this.lastProcessedSlot ?? slotNow) - this.store.getHistoryLength(), 0));
|
|
318
326
|
toSlot ??= this.lastProcessedSlot ?? slotNow;
|
|
319
327
|
const stats = mapValues(histories, (history, address)=>this.computeStatsForValidator(address, history ?? [], fromSlot, toSlot));
|
|
320
328
|
return {
|
|
@@ -330,25 +338,24 @@ export class Sentinel extends EventEmitter {
|
|
|
330
338
|
return undefined;
|
|
331
339
|
}
|
|
332
340
|
const slotNow = this.epochCache.getEpochAndSlotNow().slot;
|
|
333
|
-
const effectiveFromSlot = fromSlot ?? (this.lastProcessedSlot ?? slotNow) -
|
|
341
|
+
const effectiveFromSlot = fromSlot ?? SlotNumber(Math.max((this.lastProcessedSlot ?? slotNow) - this.store.getHistoryLength(), 0));
|
|
334
342
|
const effectiveToSlot = toSlot ?? this.lastProcessedSlot ?? slotNow;
|
|
335
343
|
const historyLength = BigInt(this.store.getHistoryLength());
|
|
336
|
-
if (effectiveToSlot - effectiveFromSlot > historyLength) {
|
|
337
|
-
throw new Error(`Slot range (${effectiveToSlot - effectiveFromSlot}) exceeds history length (${historyLength}). ` + `Requested range: ${effectiveFromSlot} to ${effectiveToSlot}.`);
|
|
344
|
+
if (BigInt(effectiveToSlot) - BigInt(effectiveFromSlot) > historyLength) {
|
|
345
|
+
throw new Error(`Slot range (${BigInt(effectiveToSlot) - BigInt(effectiveFromSlot)}) exceeds history length (${historyLength}). ` + `Requested range: ${effectiveFromSlot} to ${effectiveToSlot}.`);
|
|
338
346
|
}
|
|
339
347
|
const validator = this.computeStatsForValidator(validatorAddress.toString(), history, effectiveFromSlot, effectiveToSlot);
|
|
340
|
-
const allTimeProvenPerformance = await this.store.getProvenPerformance(validatorAddress);
|
|
341
348
|
return {
|
|
342
349
|
validator,
|
|
343
|
-
allTimeProvenPerformance,
|
|
350
|
+
allTimeProvenPerformance: await this.store.getProvenPerformance(validatorAddress),
|
|
344
351
|
lastProcessedSlot: this.lastProcessedSlot,
|
|
345
352
|
initialSlot: this.initialSlot,
|
|
346
353
|
slotWindow: this.store.getHistoryLength()
|
|
347
354
|
};
|
|
348
355
|
}
|
|
349
356
|
computeStatsForValidator(address, allHistory, fromSlot, toSlot) {
|
|
350
|
-
let history = fromSlot ? allHistory.filter((h)=>h.slot >= fromSlot) : allHistory;
|
|
351
|
-
history = toSlot ? history.filter((h)=>h.slot <= toSlot) : history;
|
|
357
|
+
let history = fromSlot ? allHistory.filter((h)=>BigInt(h.slot) >= fromSlot) : allHistory;
|
|
358
|
+
history = toSlot ? history.filter((h)=>BigInt(h.slot) <= toSlot) : history;
|
|
352
359
|
const lastProposal = history.filter((h)=>h.status === 'block-proposed' || h.status === 'block-mined').at(-1);
|
|
353
360
|
const lastAttestation = history.filter((h)=>h.status === 'attestation-sent').at(-1);
|
|
354
361
|
return {
|
package/dest/sentinel/store.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
3
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
3
4
|
import type { ValidatorStatusHistory, ValidatorStatusInSlot, ValidatorsEpochPerformance } from '@aztec/stdlib/validators';
|
|
4
5
|
export declare class SentinelStore {
|
|
5
6
|
private store;
|
|
6
7
|
private config;
|
|
7
|
-
static readonly SCHEMA_VERSION
|
|
8
|
+
static readonly SCHEMA_VERSION: number;
|
|
8
9
|
private readonly historyMap;
|
|
9
10
|
private readonly provenMap;
|
|
10
11
|
constructor(store: AztecAsyncKVStore, config: {
|
|
@@ -13,14 +14,14 @@ export declare class SentinelStore {
|
|
|
13
14
|
});
|
|
14
15
|
getHistoryLength(): number;
|
|
15
16
|
getHistoricProvenPerformanceLength(): number;
|
|
16
|
-
updateProvenPerformance(epoch:
|
|
17
|
+
updateProvenPerformance(epoch: EpochNumber, performance: ValidatorsEpochPerformance): Promise<void>;
|
|
17
18
|
getProvenPerformance(who: EthAddress): Promise<{
|
|
18
19
|
missed: number;
|
|
19
20
|
total: number;
|
|
20
|
-
epoch:
|
|
21
|
+
epoch: EpochNumber;
|
|
21
22
|
}[]>;
|
|
22
23
|
private pushValidatorProvenPerformanceForEpoch;
|
|
23
|
-
updateValidators(slot:
|
|
24
|
+
updateValidators(slot: SlotNumber, statuses: Record<`0x${string}`, ValidatorStatusInSlot | undefined>): Promise<void>;
|
|
24
25
|
private pushValidatorStatusForSlot;
|
|
25
26
|
getHistories(): Promise<Record<`0x${string}`, ValidatorStatusHistory>>;
|
|
26
27
|
getHistory(address: EthAddress): Promise<ValidatorStatusHistory | undefined>;
|
|
@@ -31,4 +32,4 @@ export declare class SentinelStore {
|
|
|
31
32
|
private statusToNumber;
|
|
32
33
|
private statusFromNumber;
|
|
33
34
|
}
|
|
34
|
-
//# sourceMappingURL=
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZW50aW5lbC9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEtBQUssRUFDVixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMzQixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLHFCQUFhLGFBQWE7SUFXdEIsT0FBTyxDQUFDLEtBQUs7SUFDYixPQUFPLENBQUMsTUFBTTtJQVhoQixnQkFBdUIsY0FBYyxTQUFLO0lBRzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUF1QztJQUlsRSxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBdUM7SUFFakUsWUFDVSxLQUFLLEVBQUUsaUJBQWlCLEVBQ3hCLE1BQU0sRUFBRTtRQUFFLGFBQWEsRUFBRSxNQUFNLENBQUM7UUFBQywrQkFBK0IsRUFBRSxNQUFNLENBQUE7S0FBRSxFQUluRjtJQUVNLGdCQUFnQixXQUV0QjtJQUVNLGtDQUFrQyxXQUV4QztJQUVZLHVCQUF1QixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixpQkFNL0Y7SUFFWSxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQztRQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQTtLQUFFLEVBQUUsQ0FBQyxDQUduSDtZQUVhLHNDQUFzQztJQTZCdkMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssTUFBTSxFQUFFLEVBQUUscUJBQXFCLEdBQUcsU0FBUyxDQUFDLGlCQVFqSDtZQUVhLDBCQUEwQjtJQVkzQixZQUFZLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FNbEY7SUFFWSxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDLENBR3hGO0lBRUQsT0FBTyxDQUFDLG9CQUFvQjtJQU01QixPQUFPLENBQUMsc0JBQXNCO0lBYTlCLE9BQU8sQ0FBQyxnQkFBZ0I7SUFNeEIsT0FBTyxDQUFDLGtCQUFrQjtJQVcxQixPQUFPLENBQUMsY0FBYztJQW1CdEIsT0FBTyxDQUFDLGdCQUFnQjtDQWdCekIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/sentinel/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,0BAA0B,CAAC;AAElC,qBAAa,aAAa;IAWtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IAXhB,gBAAuB,cAAc,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/sentinel/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,0BAA0B,CAAC;AAElC,qBAAa,aAAa;IAWtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IAXhB,gBAAuB,cAAc,SAAK;IAG1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuC;IAIlE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IAEjE,YACU,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,+BAA+B,EAAE,MAAM,CAAA;KAAE,EAInF;IAEM,gBAAgB,WAEtB;IAEM,kCAAkC,WAExC;IAEY,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,0BAA0B,iBAM/F;IAEY,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,EAAE,CAAC,CAGnH;YAEa,sCAAsC;IA6BvC,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,qBAAqB,GAAG,SAAS,CAAC,iBAQjH;YAEa,0BAA0B;IAY3B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAMlF;IAEY,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAGxF;IAED,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,gBAAgB;CAgBzB"}
|
package/dest/sentinel/store.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
3
|
import { BufferReader, numToUInt8, numToUInt32BE, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
3
4
|
export class SentinelStore {
|
|
@@ -105,7 +106,7 @@ export class SentinelStore {
|
|
|
105
106
|
const performance = [];
|
|
106
107
|
while(!reader.isEmpty()){
|
|
107
108
|
performance.push({
|
|
108
|
-
epoch:
|
|
109
|
+
epoch: EpochNumber(reader.readNumber()),
|
|
109
110
|
missed: reader.readNumber(),
|
|
110
111
|
total: reader.readNumber()
|
|
111
112
|
});
|
|
@@ -122,7 +123,7 @@ export class SentinelStore {
|
|
|
122
123
|
const reader = new BufferReader(buffer);
|
|
123
124
|
const history = [];
|
|
124
125
|
while(!reader.isEmpty()){
|
|
125
|
-
const slot =
|
|
126
|
+
const slot = SlotNumber(reader.readNumber());
|
|
126
127
|
const status = this.statusFromNumber(reader.readUInt8());
|
|
127
128
|
history.push({
|
|
128
129
|
slot,
|
package/dest/test/index.d.ts
CHANGED
|
@@ -28,4 +28,4 @@ export declare class TestAztecNodeService extends AztecNodeService {
|
|
|
28
28
|
epochCache: EpochCacheInterface;
|
|
29
29
|
packageVersion: string;
|
|
30
30
|
}
|
|
31
|
-
//# sourceMappingURL=
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JHLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxLQUFLLEVBQUUscUJBQXFCLElBQUksOEJBQThCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRyxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQkFBcUIsU0FBUSxnQkFBZ0I7SUFDakQsTUFBTSxFQUFFLGVBQWUsQ0FBQztJQUN4QixTQUFTLEVBQUUsR0FBRyxDQUFDO0lBQ2YsV0FBVyxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsVUFBVSxFQUFFLFlBQVksQ0FBQztJQUN6QixrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQztJQUN2QyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQztJQUN6QyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQztJQUMvQyxTQUFTLEVBQUUsZUFBZSxHQUFHLFNBQVMsQ0FBQztJQUN2QyxhQUFhLEVBQUUsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0lBQ2xELGtCQUFrQixFQUFFLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFDekMsaUJBQWlCLEVBQUUsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO0lBQ2pELFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixxQkFBcUIsRUFBRSw4QkFBOEIsQ0FBQztJQUN0RCxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDaEMsY0FBYyxFQUFFLE1BQU0sQ0FBQztDQUN2QyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/aztec-node",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.fce3e4f",
|
|
4
4
|
"main": "dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"start": "node --no-warnings ./dest/bin",
|
|
22
22
|
"start:debug": "node --no-warnings --inspect ./dest/bin",
|
|
23
|
-
"build": "yarn clean &&
|
|
24
|
-
"build:dev": "
|
|
23
|
+
"build": "yarn clean && tsgo -b",
|
|
24
|
+
"build:dev": "tsgo -b --watch",
|
|
25
25
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
26
26
|
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
|
|
27
27
|
},
|
|
@@ -66,38 +66,39 @@
|
|
|
66
66
|
]
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
70
|
-
"@aztec/bb-prover": "0.0.1-commit.
|
|
71
|
-
"@aztec/blob-sink": "0.0.1-commit.
|
|
72
|
-
"@aztec/constants": "0.0.1-commit.
|
|
73
|
-
"@aztec/epoch-cache": "0.0.1-commit.
|
|
74
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
75
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
76
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
77
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
78
|
-
"@aztec/merkle-tree": "0.0.1-commit.
|
|
79
|
-
"@aztec/node-keystore": "0.0.1-commit.
|
|
80
|
-
"@aztec/node-lib": "0.0.1-commit.
|
|
81
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
82
|
-
"@aztec/p2p": "0.0.1-commit.
|
|
83
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
84
|
-
"@aztec/prover-client": "0.0.1-commit.
|
|
85
|
-
"@aztec/sequencer-client": "0.0.1-commit.
|
|
86
|
-
"@aztec/simulator": "0.0.1-commit.
|
|
87
|
-
"@aztec/slasher": "0.0.1-commit.
|
|
88
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
89
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
90
|
-
"@aztec/validator-client": "0.0.1-commit.
|
|
91
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
69
|
+
"@aztec/archiver": "0.0.1-commit.fce3e4f",
|
|
70
|
+
"@aztec/bb-prover": "0.0.1-commit.fce3e4f",
|
|
71
|
+
"@aztec/blob-sink": "0.0.1-commit.fce3e4f",
|
|
72
|
+
"@aztec/constants": "0.0.1-commit.fce3e4f",
|
|
73
|
+
"@aztec/epoch-cache": "0.0.1-commit.fce3e4f",
|
|
74
|
+
"@aztec/ethereum": "0.0.1-commit.fce3e4f",
|
|
75
|
+
"@aztec/foundation": "0.0.1-commit.fce3e4f",
|
|
76
|
+
"@aztec/kv-store": "0.0.1-commit.fce3e4f",
|
|
77
|
+
"@aztec/l1-artifacts": "0.0.1-commit.fce3e4f",
|
|
78
|
+
"@aztec/merkle-tree": "0.0.1-commit.fce3e4f",
|
|
79
|
+
"@aztec/node-keystore": "0.0.1-commit.fce3e4f",
|
|
80
|
+
"@aztec/node-lib": "0.0.1-commit.fce3e4f",
|
|
81
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.fce3e4f",
|
|
82
|
+
"@aztec/p2p": "0.0.1-commit.fce3e4f",
|
|
83
|
+
"@aztec/protocol-contracts": "0.0.1-commit.fce3e4f",
|
|
84
|
+
"@aztec/prover-client": "0.0.1-commit.fce3e4f",
|
|
85
|
+
"@aztec/sequencer-client": "0.0.1-commit.fce3e4f",
|
|
86
|
+
"@aztec/simulator": "0.0.1-commit.fce3e4f",
|
|
87
|
+
"@aztec/slasher": "0.0.1-commit.fce3e4f",
|
|
88
|
+
"@aztec/stdlib": "0.0.1-commit.fce3e4f",
|
|
89
|
+
"@aztec/telemetry-client": "0.0.1-commit.fce3e4f",
|
|
90
|
+
"@aztec/validator-client": "0.0.1-commit.fce3e4f",
|
|
91
|
+
"@aztec/world-state": "0.0.1-commit.fce3e4f",
|
|
92
92
|
"koa": "^2.16.1",
|
|
93
93
|
"koa-router": "^13.1.1",
|
|
94
94
|
"tslib": "^2.4.0",
|
|
95
|
-
"viem": "npm:@
|
|
95
|
+
"viem": "npm:@aztec/viem@2.38.2"
|
|
96
96
|
},
|
|
97
97
|
"devDependencies": {
|
|
98
98
|
"@jest/globals": "^30.0.0",
|
|
99
99
|
"@types/jest": "^30.0.0",
|
|
100
100
|
"@types/node": "^22.15.17",
|
|
101
|
+
"@typescript/native-preview": "7.0.0-dev.20251126.1",
|
|
101
102
|
"jest": "^30.0.0",
|
|
102
103
|
"jest-mock-extended": "^4.0.0",
|
|
103
104
|
"ts-node": "^10.9.1",
|
package/src/aztec-node/server.ts
CHANGED
|
@@ -17,12 +17,12 @@ import {
|
|
|
17
17
|
createEthereumChain,
|
|
18
18
|
getPublicClient,
|
|
19
19
|
} from '@aztec/ethereum';
|
|
20
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
20
21
|
import { compactArray, pick } from '@aztec/foundation/collection';
|
|
21
22
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
22
23
|
import { Fr } from '@aztec/foundation/fields';
|
|
23
24
|
import { BadRequestError } from '@aztec/foundation/json-rpc';
|
|
24
25
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
25
|
-
import { SerialQueue } from '@aztec/foundation/queue';
|
|
26
26
|
import { count } from '@aztec/foundation/string';
|
|
27
27
|
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
28
28
|
import { MembershipWitness, SiblingPath } from '@aztec/foundation/trees';
|
|
@@ -46,6 +46,7 @@ import {
|
|
|
46
46
|
type Watcher,
|
|
47
47
|
createSlasher,
|
|
48
48
|
} from '@aztec/slasher';
|
|
49
|
+
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
49
50
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
50
51
|
import {
|
|
51
52
|
type InBlock,
|
|
@@ -132,9 +133,6 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
132
133
|
// Prevent two snapshot operations to happen simultaneously
|
|
133
134
|
private isUploadingSnapshot = false;
|
|
134
135
|
|
|
135
|
-
// Serial queue to ensure that we only send one tx at a time
|
|
136
|
-
private txQueue: SerialQueue = new SerialQueue();
|
|
137
|
-
|
|
138
136
|
public readonly tracer: Tracer;
|
|
139
137
|
|
|
140
138
|
constructor(
|
|
@@ -160,7 +158,6 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
160
158
|
) {
|
|
161
159
|
this.metrics = new NodeMetrics(telemetry, 'AztecNodeService');
|
|
162
160
|
this.tracer = telemetry.getTracer('AztecNodeService');
|
|
163
|
-
this.txQueue.start();
|
|
164
161
|
|
|
165
162
|
this.log.info(`Aztec Node version: ${this.packageVersion}`);
|
|
166
163
|
this.log.info(`Aztec Node started on chain 0x${l1ChainId.toString(16)}`, config.l1Contracts);
|
|
@@ -287,7 +284,9 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
287
284
|
options.prefilledPublicData,
|
|
288
285
|
telemetry,
|
|
289
286
|
);
|
|
290
|
-
const circuitVerifier = config.realProofs
|
|
287
|
+
const circuitVerifier = config.realProofs
|
|
288
|
+
? await BBCircuitVerifier.new(config)
|
|
289
|
+
: new TestCircuitVerifier(config.proverTestVerificationDelayMs);
|
|
291
290
|
if (!config.realProofs) {
|
|
292
291
|
log.warn(`Aztec node is accepting fake proofs`);
|
|
293
292
|
}
|
|
@@ -685,7 +684,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
685
684
|
* @param tx - The transaction to be submitted.
|
|
686
685
|
*/
|
|
687
686
|
public async sendTx(tx: Tx) {
|
|
688
|
-
await this
|
|
687
|
+
await this.#sendTx(tx);
|
|
689
688
|
}
|
|
690
689
|
|
|
691
690
|
async #sendTx(tx: Tx) {
|
|
@@ -732,7 +731,6 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
732
731
|
*/
|
|
733
732
|
public async stop() {
|
|
734
733
|
this.log.info(`Stopping Aztec Node`);
|
|
735
|
-
await this.txQueue.end();
|
|
736
734
|
await tryStop(this.validatorsSentinel);
|
|
737
735
|
await tryStop(this.epochPruneWatcher);
|
|
738
736
|
await tryStop(this.slasherClient);
|
|
@@ -1149,11 +1147,15 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1149
1147
|
|
|
1150
1148
|
const merkleTreeFork = await this.worldStateSynchronizer.fork();
|
|
1151
1149
|
try {
|
|
1152
|
-
const
|
|
1150
|
+
const config = PublicSimulatorConfig.from({
|
|
1153
1151
|
skipFeeEnforcement,
|
|
1154
|
-
|
|
1152
|
+
collectDebugLogs: true,
|
|
1153
|
+
collectHints: false,
|
|
1154
|
+
collectCallMetadata: true,
|
|
1155
1155
|
maxDebugLogMemoryReads: this.config.rpcSimulatePublicMaxDebugLogMemoryReads,
|
|
1156
|
+
collectStatistics: false,
|
|
1156
1157
|
});
|
|
1158
|
+
const processor = publicProcessorFactory.create(merkleTreeFork, newGlobalVariables, config);
|
|
1157
1159
|
|
|
1158
1160
|
// REFACTOR: Consider merging ProcessReturnValues into ProcessedTx
|
|
1159
1161
|
const [processedTxs, failedTxs, _usedTxs, returns] = await processor.process([tx]);
|
|
@@ -1242,8 +1244,8 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1242
1244
|
|
|
1243
1245
|
public getValidatorStats(
|
|
1244
1246
|
validatorAddress: EthAddress,
|
|
1245
|
-
fromSlot?:
|
|
1246
|
-
toSlot?:
|
|
1247
|
+
fromSlot?: SlotNumber,
|
|
1248
|
+
toSlot?: SlotNumber,
|
|
1247
1249
|
): Promise<SingleValidatorStats | undefined> {
|
|
1248
1250
|
return this.validatorsSentinel?.getValidatorStats(validatorAddress, fromSlot, toSlot) ?? Promise.resolve(undefined);
|
|
1249
1251
|
}
|
package/src/sentinel/sentinel.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
|
+
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { countWhile, filterAsync, fromEntries, getEntries, mapValues } from '@aztec/foundation/collection';
|
|
3
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -40,9 +41,10 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
40
41
|
protected blockStream!: L2BlockStream;
|
|
41
42
|
protected l2TipsStore: L2TipsStore;
|
|
42
43
|
|
|
43
|
-
protected initialSlot:
|
|
44
|
-
protected lastProcessedSlot:
|
|
45
|
-
|
|
44
|
+
protected initialSlot: SlotNumber | undefined;
|
|
45
|
+
protected lastProcessedSlot: SlotNumber | undefined;
|
|
46
|
+
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
47
|
+
protected slotNumberToBlock: Map<SlotNumber, { blockNumber: number; archive: string; attestors: EthAddress[] }> =
|
|
46
48
|
new Map();
|
|
47
49
|
|
|
48
50
|
constructor(
|
|
@@ -134,7 +136,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
134
136
|
await this.handleProvenPerformance(epoch, performance);
|
|
135
137
|
}
|
|
136
138
|
|
|
137
|
-
protected async computeProvenPerformance(epoch:
|
|
139
|
+
protected async computeProvenPerformance(epoch: EpochNumber): Promise<ValidatorsEpochPerformance> {
|
|
138
140
|
const [fromSlot, toSlot] = getSlotRangeForEpoch(epoch, this.epochCache.getL1Constants());
|
|
139
141
|
const { committee } = await this.epochCache.getCommittee(fromSlot);
|
|
140
142
|
if (!committee) {
|
|
@@ -142,7 +144,11 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
142
144
|
return {};
|
|
143
145
|
}
|
|
144
146
|
|
|
145
|
-
const stats = await this.computeStats({
|
|
147
|
+
const stats = await this.computeStats({
|
|
148
|
+
fromSlot,
|
|
149
|
+
toSlot,
|
|
150
|
+
validators: committee,
|
|
151
|
+
});
|
|
146
152
|
this.logger.debug(`Stats for epoch ${epoch}`, { ...stats, fromSlot, toSlot, epoch });
|
|
147
153
|
|
|
148
154
|
// Note that we are NOT using the total slots in the epoch as `total` here, since we only
|
|
@@ -165,7 +171,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
165
171
|
*/
|
|
166
172
|
protected async checkPastInactivity(
|
|
167
173
|
validator: EthAddress,
|
|
168
|
-
currentEpoch:
|
|
174
|
+
currentEpoch: EpochNumber,
|
|
169
175
|
requiredConsecutiveEpochs: number,
|
|
170
176
|
): Promise<boolean> {
|
|
171
177
|
if (requiredConsecutiveEpochs === 0) {
|
|
@@ -175,23 +181,24 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
175
181
|
// Get all historical performance for this validator
|
|
176
182
|
const allPerformance = await this.store.getProvenPerformance(validator);
|
|
177
183
|
|
|
184
|
+
// Sort by epoch descending to get most recent first, keep only epochs strictly before the current one, and get the first N
|
|
185
|
+
const pastEpochs = allPerformance.sort((a, b) => Number(b.epoch - a.epoch)).filter(p => p.epoch < currentEpoch);
|
|
186
|
+
|
|
178
187
|
// If we don't have enough historical data, don't slash
|
|
179
|
-
if (
|
|
188
|
+
if (pastEpochs.length < requiredConsecutiveEpochs) {
|
|
180
189
|
this.logger.debug(
|
|
181
190
|
`Not enough historical data for slashing ${validator} for inactivity (${allPerformance.length} epochs < ${requiredConsecutiveEpochs} required)`,
|
|
182
191
|
);
|
|
183
192
|
return false;
|
|
184
193
|
}
|
|
185
194
|
|
|
186
|
-
//
|
|
187
|
-
return
|
|
188
|
-
.sort((a, b) => Number(b.epoch - a.epoch))
|
|
189
|
-
.filter(p => p.epoch < currentEpoch)
|
|
195
|
+
// Check that we have at least requiredConsecutiveEpochs and that all of them are above the inactivity threshold
|
|
196
|
+
return pastEpochs
|
|
190
197
|
.slice(0, requiredConsecutiveEpochs)
|
|
191
198
|
.every(p => p.missed / p.total >= this.config.slashInactivityTargetPercentage);
|
|
192
199
|
}
|
|
193
200
|
|
|
194
|
-
protected async handleProvenPerformance(epoch:
|
|
201
|
+
protected async handleProvenPerformance(epoch: EpochNumber, performance: ValidatorsEpochPerformance) {
|
|
195
202
|
if (this.config.slashInactivityPenalty === 0n) {
|
|
196
203
|
return;
|
|
197
204
|
}
|
|
@@ -215,7 +222,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
215
222
|
validator: EthAddress.fromString(address),
|
|
216
223
|
amount: this.config.slashInactivityPenalty,
|
|
217
224
|
offenseType: OffenseType.INACTIVITY,
|
|
218
|
-
epochOrSlot: epoch,
|
|
225
|
+
epochOrSlot: BigInt(epoch),
|
|
219
226
|
}));
|
|
220
227
|
|
|
221
228
|
if (criminals.length > 0) {
|
|
@@ -256,8 +263,13 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
256
263
|
* We also don't move past the archiver last synced L2 slot, as we don't want to process data that is not yet available.
|
|
257
264
|
* Last, we check the p2p is synced with the archiver, so it has pulled all attestations from it.
|
|
258
265
|
*/
|
|
259
|
-
protected async isReadyToProcess(currentSlot:
|
|
260
|
-
|
|
266
|
+
protected async isReadyToProcess(currentSlot: SlotNumber): Promise<SlotNumber | false> {
|
|
267
|
+
if (currentSlot < 2) {
|
|
268
|
+
this.logger.trace(`Current slot ${currentSlot} too early.`);
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
const targetSlot = SlotNumber(currentSlot - 2);
|
|
261
273
|
if (this.lastProcessedSlot && this.lastProcessedSlot >= targetSlot) {
|
|
262
274
|
this.logger.trace(`Already processed slot ${targetSlot}`, { lastProcessedSlot: this.lastProcessedSlot });
|
|
263
275
|
return false;
|
|
@@ -294,7 +306,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
294
306
|
* Gathers committee and proposer data for a given slot, computes slot stats,
|
|
295
307
|
* and updates overall stats.
|
|
296
308
|
*/
|
|
297
|
-
protected async processSlot(slot:
|
|
309
|
+
protected async processSlot(slot: SlotNumber) {
|
|
298
310
|
const { epoch, seed, committee } = await this.epochCache.getCommittee(slot);
|
|
299
311
|
if (!committee || committee.length === 0) {
|
|
300
312
|
this.logger.trace(`No committee found for slot ${slot} at epoch ${epoch}`);
|
|
@@ -310,7 +322,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
310
322
|
}
|
|
311
323
|
|
|
312
324
|
/** Computes activity for a given slot. */
|
|
313
|
-
protected async getSlotActivity(slot:
|
|
325
|
+
protected async getSlotActivity(slot: SlotNumber, epoch: EpochNumber, proposer: EthAddress, committee: EthAddress[]) {
|
|
314
326
|
this.logger.debug(`Computing stats for slot ${slot} at epoch ${epoch}`, { slot, epoch, proposer, committee });
|
|
315
327
|
|
|
316
328
|
// Check if there is an L2 block in L1 for this L2 slot
|
|
@@ -372,7 +384,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
372
384
|
}
|
|
373
385
|
|
|
374
386
|
/** Push the status for each slot for each validator. */
|
|
375
|
-
protected updateValidators(slot:
|
|
387
|
+
protected updateValidators(slot: SlotNumber, stats: Record<`0x${string}`, ValidatorStatusInSlot | undefined>) {
|
|
376
388
|
return this.store.updateValidators(slot, stats);
|
|
377
389
|
}
|
|
378
390
|
|
|
@@ -381,13 +393,13 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
381
393
|
fromSlot,
|
|
382
394
|
toSlot,
|
|
383
395
|
validators,
|
|
384
|
-
}: { fromSlot?:
|
|
396
|
+
}: { fromSlot?: SlotNumber; toSlot?: SlotNumber; validators?: EthAddress[] } = {}): Promise<ValidatorsStats> {
|
|
385
397
|
const histories = validators
|
|
386
398
|
? fromEntries(await Promise.all(validators.map(async v => [v.toString(), await this.store.getHistory(v)])))
|
|
387
399
|
: await this.store.getHistories();
|
|
388
400
|
|
|
389
401
|
const slotNow = this.epochCache.getEpochAndSlotNow().slot;
|
|
390
|
-
fromSlot ??= (this.lastProcessedSlot ?? slotNow) -
|
|
402
|
+
fromSlot ??= SlotNumber(Math.max((this.lastProcessedSlot ?? slotNow) - this.store.getHistoryLength(), 0));
|
|
391
403
|
toSlot ??= this.lastProcessedSlot ?? slotNow;
|
|
392
404
|
|
|
393
405
|
const stats = mapValues(histories, (history, address) =>
|
|
@@ -405,8 +417,8 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
405
417
|
/** Computes stats for a single validator. */
|
|
406
418
|
public async getValidatorStats(
|
|
407
419
|
validatorAddress: EthAddress,
|
|
408
|
-
fromSlot?:
|
|
409
|
-
toSlot?:
|
|
420
|
+
fromSlot?: SlotNumber,
|
|
421
|
+
toSlot?: SlotNumber,
|
|
410
422
|
): Promise<SingleValidatorStats | undefined> {
|
|
411
423
|
const history = await this.store.getHistory(validatorAddress);
|
|
412
424
|
|
|
@@ -415,13 +427,14 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
415
427
|
}
|
|
416
428
|
|
|
417
429
|
const slotNow = this.epochCache.getEpochAndSlotNow().slot;
|
|
418
|
-
const effectiveFromSlot =
|
|
430
|
+
const effectiveFromSlot =
|
|
431
|
+
fromSlot ?? SlotNumber(Math.max((this.lastProcessedSlot ?? slotNow) - this.store.getHistoryLength(), 0));
|
|
419
432
|
const effectiveToSlot = toSlot ?? this.lastProcessedSlot ?? slotNow;
|
|
420
433
|
|
|
421
434
|
const historyLength = BigInt(this.store.getHistoryLength());
|
|
422
|
-
if (effectiveToSlot - effectiveFromSlot > historyLength) {
|
|
435
|
+
if (BigInt(effectiveToSlot) - BigInt(effectiveFromSlot) > historyLength) {
|
|
423
436
|
throw new Error(
|
|
424
|
-
`Slot range (${effectiveToSlot - effectiveFromSlot}) exceeds history length (${historyLength}). ` +
|
|
437
|
+
`Slot range (${BigInt(effectiveToSlot) - BigInt(effectiveFromSlot)}) exceeds history length (${historyLength}). ` +
|
|
425
438
|
`Requested range: ${effectiveFromSlot} to ${effectiveToSlot}.`,
|
|
426
439
|
);
|
|
427
440
|
}
|
|
@@ -432,11 +445,10 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
432
445
|
effectiveFromSlot,
|
|
433
446
|
effectiveToSlot,
|
|
434
447
|
);
|
|
435
|
-
const allTimeProvenPerformance = await this.store.getProvenPerformance(validatorAddress);
|
|
436
448
|
|
|
437
449
|
return {
|
|
438
450
|
validator,
|
|
439
|
-
allTimeProvenPerformance,
|
|
451
|
+
allTimeProvenPerformance: await this.store.getProvenPerformance(validatorAddress),
|
|
440
452
|
lastProcessedSlot: this.lastProcessedSlot,
|
|
441
453
|
initialSlot: this.initialSlot,
|
|
442
454
|
slotWindow: this.store.getHistoryLength(),
|
|
@@ -446,11 +458,11 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
446
458
|
protected computeStatsForValidator(
|
|
447
459
|
address: `0x${string}`,
|
|
448
460
|
allHistory: ValidatorStatusHistory,
|
|
449
|
-
fromSlot?:
|
|
450
|
-
toSlot?:
|
|
461
|
+
fromSlot?: SlotNumber,
|
|
462
|
+
toSlot?: SlotNumber,
|
|
451
463
|
): ValidatorStats {
|
|
452
|
-
let history = fromSlot ? allHistory.filter(h => h.slot >= fromSlot) : allHistory;
|
|
453
|
-
history = toSlot ? history.filter(h => h.slot <= toSlot) : history;
|
|
464
|
+
let history = fromSlot ? allHistory.filter(h => BigInt(h.slot) >= fromSlot) : allHistory;
|
|
465
|
+
history = toSlot ? history.filter(h => BigInt(h.slot) <= toSlot) : history;
|
|
454
466
|
const lastProposal = history.filter(h => h.status === 'block-proposed' || h.status === 'block-mined').at(-1);
|
|
455
467
|
const lastAttestation = history.filter(h => h.status === 'attestation-sent').at(-1);
|
|
456
468
|
return {
|
|
@@ -479,7 +491,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
479
491
|
};
|
|
480
492
|
}
|
|
481
493
|
|
|
482
|
-
protected computeFromSlot(slot:
|
|
494
|
+
protected computeFromSlot(slot: SlotNumber | undefined) {
|
|
483
495
|
if (slot === undefined) {
|
|
484
496
|
return undefined;
|
|
485
497
|
}
|
package/src/sentinel/store.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
3
|
import { BufferReader, numToUInt8, numToUInt32BE, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
3
4
|
import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store';
|
|
@@ -33,7 +34,7 @@ export class SentinelStore {
|
|
|
33
34
|
return this.config.historicProvenPerformanceLength;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
|
-
public async updateProvenPerformance(epoch:
|
|
37
|
+
public async updateProvenPerformance(epoch: EpochNumber, performance: ValidatorsEpochPerformance) {
|
|
37
38
|
await this.store.transactionAsync(async () => {
|
|
38
39
|
for (const [who, { missed, total }] of Object.entries(performance)) {
|
|
39
40
|
await this.pushValidatorProvenPerformanceForEpoch({ who: EthAddress.fromString(who), missed, total, epoch });
|
|
@@ -41,7 +42,7 @@ export class SentinelStore {
|
|
|
41
42
|
});
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
public async getProvenPerformance(who: EthAddress): Promise<{ missed: number; total: number; epoch:
|
|
45
|
+
public async getProvenPerformance(who: EthAddress): Promise<{ missed: number; total: number; epoch: EpochNumber }[]> {
|
|
45
46
|
const currentPerformanceBuffer = await this.provenMap.getAsync(who.toString());
|
|
46
47
|
return currentPerformanceBuffer ? this.deserializePerformance(currentPerformanceBuffer) : [];
|
|
47
48
|
}
|
|
@@ -55,7 +56,7 @@ export class SentinelStore {
|
|
|
55
56
|
who: EthAddress;
|
|
56
57
|
missed: number;
|
|
57
58
|
total: number;
|
|
58
|
-
epoch:
|
|
59
|
+
epoch: EpochNumber;
|
|
59
60
|
}) {
|
|
60
61
|
const currentPerformance = await this.getProvenPerformance(who);
|
|
61
62
|
const existingIndex = currentPerformance.findIndex(p => p.epoch === epoch);
|
|
@@ -75,7 +76,7 @@ export class SentinelStore {
|
|
|
75
76
|
await this.provenMap.set(who.toString(), this.serializePerformance(performanceToKeep));
|
|
76
77
|
}
|
|
77
78
|
|
|
78
|
-
public async updateValidators(slot:
|
|
79
|
+
public async updateValidators(slot: SlotNumber, statuses: Record<`0x${string}`, ValidatorStatusInSlot | undefined>) {
|
|
79
80
|
await this.store.transactionAsync(async () => {
|
|
80
81
|
for (const [who, status] of Object.entries(statuses)) {
|
|
81
82
|
if (status) {
|
|
@@ -87,7 +88,7 @@ export class SentinelStore {
|
|
|
87
88
|
|
|
88
89
|
private async pushValidatorStatusForSlot(
|
|
89
90
|
who: EthAddress,
|
|
90
|
-
slot:
|
|
91
|
+
slot: SlotNumber,
|
|
91
92
|
status: 'block-mined' | 'block-proposed' | 'block-missed' | 'attestation-sent' | 'attestation-missed',
|
|
92
93
|
) {
|
|
93
94
|
await this.store.transactionAsync(async () => {
|
|
@@ -110,18 +111,18 @@ export class SentinelStore {
|
|
|
110
111
|
return data && this.deserializeHistory(data);
|
|
111
112
|
}
|
|
112
113
|
|
|
113
|
-
private serializePerformance(performance: { missed: number; total: number; epoch:
|
|
114
|
+
private serializePerformance(performance: { missed: number; total: number; epoch: EpochNumber }[]): Buffer {
|
|
114
115
|
return serializeToBuffer(
|
|
115
116
|
performance.map(p => [numToUInt32BE(Number(p.epoch)), numToUInt32BE(p.missed), numToUInt32BE(p.total)]),
|
|
116
117
|
);
|
|
117
118
|
}
|
|
118
119
|
|
|
119
|
-
private deserializePerformance(buffer: Buffer): { missed: number; total: number; epoch:
|
|
120
|
+
private deserializePerformance(buffer: Buffer): { missed: number; total: number; epoch: EpochNumber }[] {
|
|
120
121
|
const reader = new BufferReader(buffer);
|
|
121
|
-
const performance: { missed: number; total: number; epoch:
|
|
122
|
+
const performance: { missed: number; total: number; epoch: EpochNumber }[] = [];
|
|
122
123
|
while (!reader.isEmpty()) {
|
|
123
124
|
performance.push({
|
|
124
|
-
epoch:
|
|
125
|
+
epoch: EpochNumber(reader.readNumber()),
|
|
125
126
|
missed: reader.readNumber(),
|
|
126
127
|
total: reader.readNumber(),
|
|
127
128
|
});
|
|
@@ -139,7 +140,7 @@ export class SentinelStore {
|
|
|
139
140
|
const reader = new BufferReader(buffer);
|
|
140
141
|
const history: ValidatorStatusHistory = [];
|
|
141
142
|
while (!reader.isEmpty()) {
|
|
142
|
-
const slot =
|
|
143
|
+
const slot = SlotNumber(reader.readNumber());
|
|
143
144
|
const status = this.statusFromNumber(reader.readUInt8());
|
|
144
145
|
history.push({ slot, status });
|
|
145
146
|
}
|