@aztec/aztec-node 0.0.1-commit.b655e406 → 0.0.1-commit.c7c42ec

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.
@@ -6,29 +6,35 @@ function _ts_decorate(decorators, target, key, desc) {
6
6
  }
7
7
  import { createArchiver } from '@aztec/archiver';
8
8
  import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
9
- import { createBlobSinkClient } from '@aztec/blob-sink/client';
9
+ import { createBlobClient } from '@aztec/blob-client/client';
10
+ import { createReadOnlyFileStoreBlobClients, createWritableFileStoreBlobClient } from '@aztec/blob-client/filestore';
10
11
  import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
11
12
  import { EpochCache } from '@aztec/epoch-cache';
12
- import { RegistryContract, RollupContract, createEthereumChain, getPublicClient } from '@aztec/ethereum';
13
+ import { createEthereumChain } from '@aztec/ethereum/chain';
14
+ import { getPublicClient } from '@aztec/ethereum/client';
15
+ import { RegistryContract, RollupContract } from '@aztec/ethereum/contracts';
16
+ import { BlockNumber } from '@aztec/foundation/branded-types';
13
17
  import { compactArray, pick } from '@aztec/foundation/collection';
18
+ import { Fr } from '@aztec/foundation/curves/bn254';
14
19
  import { EthAddress } from '@aztec/foundation/eth-address';
15
- import { Fr } from '@aztec/foundation/fields';
16
20
  import { BadRequestError } from '@aztec/foundation/json-rpc';
17
21
  import { createLogger } from '@aztec/foundation/log';
18
- import { SerialQueue } from '@aztec/foundation/queue';
19
22
  import { count } from '@aztec/foundation/string';
20
23
  import { DateProvider, Timer } from '@aztec/foundation/timer';
21
24
  import { MembershipWitness } from '@aztec/foundation/trees';
22
25
  import { KeystoreManager, loadKeystores, mergeKeystores } from '@aztec/node-keystore';
23
26
  import { trySnapshotSync, uploadSnapshot } from '@aztec/node-lib/actions';
24
- import { createL1TxUtilsWithBlobsFromEthSigner } from '@aztec/node-lib/factories';
27
+ import { createForwarderL1TxUtilsFromEthSigner, createL1TxUtilsWithBlobsFromEthSigner } from '@aztec/node-lib/factories';
25
28
  import { createP2PClient, getDefaultAllowedSetupFunctions } from '@aztec/p2p';
26
29
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
27
30
  import { BlockBuilder, GlobalVariableBuilder, SequencerClient, createValidatorForAcceptingTxs } from '@aztec/sequencer-client';
31
+ import { CheckpointsBuilder } from '@aztec/sequencer-client';
28
32
  import { PublicProcessorFactory } from '@aztec/simulator/server';
29
33
  import { AttestationsBlockWatcher, EpochPruneWatcher, createSlasher } from '@aztec/slasher';
34
+ import { CollectionLimitsConfig, PublicSimulatorConfig } from '@aztec/stdlib/avm';
30
35
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
31
36
  import { L2BlockHash } from '@aztec/stdlib/block';
37
+ import { GasFees } from '@aztec/stdlib/gas';
32
38
  import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
33
39
  import { AztecNodeAdminConfigSchema } from '@aztec/stdlib/interfaces/client';
34
40
  import { tryStop } from '@aztec/stdlib/interfaces/server';
@@ -66,13 +72,12 @@ import { NodeMetrics } from './node_metrics.js';
66
72
  proofVerifier;
67
73
  telemetry;
68
74
  log;
75
+ blobClient;
69
76
  metrics;
70
77
  // Prevent two snapshot operations to happen simultaneously
71
78
  isUploadingSnapshot;
72
- // Serial queue to ensure that we only send one tx at a time
73
- txQueue;
74
79
  tracer;
75
- constructor(config, p2pClient, blockSource, logsSource, contractDataSource, l1ToL2MessageSource, worldStateSynchronizer, sequencer, slasherClient, validatorsSentinel, epochPruneWatcher, l1ChainId, version, globalVariableBuilder, epochCache, packageVersion, proofVerifier, telemetry = getTelemetryClient(), log = createLogger('node')){
80
+ constructor(config, p2pClient, blockSource, logsSource, contractDataSource, l1ToL2MessageSource, worldStateSynchronizer, sequencer, slasherClient, validatorsSentinel, epochPruneWatcher, l1ChainId, version, globalVariableBuilder, epochCache, packageVersion, proofVerifier, telemetry = getTelemetryClient(), log = createLogger('node'), blobClient){
76
81
  this.config = config;
77
82
  this.p2pClient = p2pClient;
78
83
  this.blockSource = blockSource;
@@ -92,11 +97,10 @@ import { NodeMetrics } from './node_metrics.js';
92
97
  this.proofVerifier = proofVerifier;
93
98
  this.telemetry = telemetry;
94
99
  this.log = log;
100
+ this.blobClient = blobClient;
95
101
  this.isUploadingSnapshot = false;
96
- this.txQueue = new SerialQueue();
97
102
  this.metrics = new NodeMetrics(telemetry, 'AztecNodeService');
98
103
  this.tracer = telemetry.getTracer('AztecNodeService');
99
- this.txQueue.start();
100
104
  this.log.info(`Aztec Node version: ${this.packageVersion}`);
101
105
  this.log.info(`Aztec Node started on chain 0x${l1ChainId.toString(16)}`, config.l1Contracts);
102
106
  }
@@ -119,9 +123,6 @@ import { NodeMetrics } from './node_metrics.js';
119
123
  const packageVersion = getPackageVersion() ?? '';
120
124
  const telemetry = deps.telemetry ?? getTelemetryClient();
121
125
  const dateProvider = deps.dateProvider ?? new DateProvider();
122
- const blobSinkClient = deps.blobSinkClient ?? createBlobSinkClient(config, {
123
- logger: createLogger('node:blob-sink:client')
124
- });
125
126
  const ethereumChain = createEthereumChain(config.l1RpcUrls, config.l1ChainId);
126
127
  // Build a key store from file if given or from environment otherwise
127
128
  let keyStoreManager;
@@ -152,7 +153,9 @@ import { NodeMetrics } from './node_metrics.js';
152
153
  }
153
154
  const publicClient = createPublicClient({
154
155
  chain: ethereumChain.chainInfo,
155
- transport: fallback(config.l1RpcUrls.map((url)=>http(url))),
156
+ transport: fallback(config.l1RpcUrls.map((url)=>http(url, {
157
+ batch: false
158
+ }))),
156
159
  pollingInterval: config.viemPollingIntervalMS
157
160
  });
158
161
  const l1ContractsAddresses = await RegistryContract.collectAddresses(publicClient, config.l1Contracts.registryAddress, config.rollupVersion ?? 'canonical');
@@ -171,13 +174,27 @@ import { NodeMetrics } from './node_metrics.js';
171
174
  if (config.rollupVersion !== Number(rollupVersionFromRollup)) {
172
175
  log.warn(`Registry looked up and returned a rollup with version (${config.rollupVersion}), but this does not match with version detected from the rollup directly: (${rollupVersionFromRollup}).`);
173
176
  }
177
+ const blobFileStoreMetadata = {
178
+ l1ChainId: config.l1ChainId,
179
+ rollupVersion: config.rollupVersion,
180
+ rollupAddress: config.l1Contracts.rollupAddress.toString()
181
+ };
182
+ const [fileStoreClients, fileStoreUploadClient] = await Promise.all([
183
+ createReadOnlyFileStoreBlobClients(config.blobFileStoreUrls, blobFileStoreMetadata, log),
184
+ createWritableFileStoreBlobClient(config.blobFileStoreUploadUrl, blobFileStoreMetadata, log)
185
+ ]);
186
+ const blobClient = deps.blobClient ?? createBlobClient(config, {
187
+ logger: createLogger('node:blob-client:client'),
188
+ fileStoreClients,
189
+ fileStoreUploadClient
190
+ });
174
191
  // attempt snapshot sync if possible
175
192
  await trySnapshotSync(config, log);
176
193
  const epochCache = await EpochCache.create(config.l1Contracts.rollupAddress, config, {
177
194
  dateProvider
178
195
  });
179
196
  const archiver = await createArchiver(config, {
180
- blobSinkClient,
197
+ blobClient,
181
198
  epochCache,
182
199
  telemetry,
183
200
  dateProvider
@@ -186,7 +203,7 @@ import { NodeMetrics } from './node_metrics.js';
186
203
  });
187
204
  // now create the merkle trees and the world state synchronizer
188
205
  const worldStateSynchronizer = await createWorldStateSynchronizer(config, archiver, options.prefilledPublicData, telemetry);
189
- const circuitVerifier = config.realProofs ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier();
206
+ const circuitVerifier = config.realProofs || config.debugForceTxProofVerification ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier(config.proverTestVerificationDelayMs);
190
207
  if (!config.realProofs) {
191
208
  log.warn(`Aztec node is accepting fake proofs`);
192
209
  }
@@ -211,7 +228,8 @@ import { NodeMetrics } from './node_metrics.js';
211
228
  blockBuilder,
212
229
  blockSource: archiver,
213
230
  l1ToL2MessageSource: archiver,
214
- keyStoreManager
231
+ keyStoreManager,
232
+ fileStoreBlobUploadClient: fileStoreUploadClient
215
233
  });
216
234
  // If we have a validator client, register it as a source of offenses for the slasher,
217
235
  // and have it register callbacks on the p2p client *before* we start it, otherwise messages
@@ -266,13 +284,20 @@ import { NodeMetrics } from './node_metrics.js';
266
284
  // Validator enabled, create/start relevant service
267
285
  let sequencer;
268
286
  let slasherClient;
269
- if (!config.disableValidator) {
287
+ if (!config.disableValidator && validatorClient) {
270
288
  // We create a slasher only if we have a sequencer, since all slashing actions go through the sequencer publisher
271
289
  // as they are executed when the node is selected as proposer.
272
290
  const validatorAddresses = keyStoreManager ? NodeKeystoreAdapter.fromKeyStoreManager(keyStoreManager).getAddresses() : [];
273
291
  slasherClient = await createSlasher(config, config.l1Contracts, getPublicClient(config), watchers, dateProvider, epochCache, validatorAddresses, undefined);
274
292
  await slasherClient.start();
275
- const l1TxUtils = await createL1TxUtilsWithBlobsFromEthSigner(publicClient, keyStoreManager.createAllValidatorPublisherSigners(), {
293
+ const l1TxUtils = config.publisherForwarderAddress ? await createForwarderL1TxUtilsFromEthSigner(publicClient, keyStoreManager.createAllValidatorPublisherSigners(), config.publisherForwarderAddress, {
294
+ ...config,
295
+ scope: 'sequencer'
296
+ }, {
297
+ telemetry,
298
+ logger: log.createChild('l1-tx-utils'),
299
+ dateProvider
300
+ }) : await createL1TxUtilsWithBlobsFromEthSigner(publicClient, keyStoreManager.createAllValidatorPublisherSigners(), {
276
301
  ...config,
277
302
  scope: 'sequencer'
278
303
  }, {
@@ -281,6 +306,11 @@ import { NodeMetrics } from './node_metrics.js';
281
306
  dateProvider
282
307
  });
283
308
  // Create and start the sequencer client
309
+ const checkpointsBuilder = new CheckpointsBuilder({
310
+ ...config,
311
+ l1GenesisTime,
312
+ slotDuration: Number(slotDuration)
313
+ }, archiver, dateProvider, telemetry);
284
314
  sequencer = await SequencerClient.new(config, {
285
315
  ...deps,
286
316
  epochCache,
@@ -289,12 +319,12 @@ import { NodeMetrics } from './node_metrics.js';
289
319
  p2pClient,
290
320
  worldStateSynchronizer,
291
321
  slasherClient,
292
- blockBuilder,
322
+ checkpointsBuilder,
293
323
  l2BlockSource: archiver,
294
324
  l1ToL2MessageSource: archiver,
295
325
  telemetry,
296
326
  dateProvider,
297
- blobSinkClient,
327
+ blobClient,
298
328
  nodeKeyStore: keyStoreManager
299
329
  });
300
330
  }
@@ -304,7 +334,13 @@ import { NodeMetrics } from './node_metrics.js';
304
334
  } else if (sequencer) {
305
335
  log.warn(`Sequencer created but not started`);
306
336
  }
307
- return new AztecNodeService(config, p2pClient, archiver, archiver, archiver, archiver, worldStateSynchronizer, sequencer, slasherClient, validatorsSentinel, epochPruneWatcher, ethereumChain.chainInfo.id, config.rollupVersion, new GlobalVariableBuilder(config), epochCache, packageVersion, proofVerifier, telemetry, log);
337
+ const globalVariableBuilder = new GlobalVariableBuilder({
338
+ ...config,
339
+ rollupVersion: BigInt(config.rollupVersion),
340
+ l1GenesisTime,
341
+ slotDuration: Number(slotDuration)
342
+ });
343
+ return new AztecNodeService(config, p2pClient, archiver, archiver, archiver, archiver, worldStateSynchronizer, sequencer, slasherClient, validatorsSentinel, epochPruneWatcher, ethereumChain.chainInfo.id, config.rollupVersion, globalVariableBuilder, epochCache, packageVersion, proofVerifier, telemetry, log, blobClient);
308
344
  }
309
345
  /**
310
346
  * Returns the sequencer client instance.
@@ -399,6 +435,15 @@ import { NodeMetrics } from './node_metrics.js';
399
435
  */ async getCurrentBaseFees() {
400
436
  return await this.globalVariableBuilder.getCurrentBaseFees();
401
437
  }
438
+ async getMaxPriorityFees() {
439
+ for await (const tx of this.p2pClient.iteratePendingTxs()){
440
+ return tx.getGasSettings().maxPriorityFeesPerGas;
441
+ }
442
+ return GasFees.from({
443
+ feePerDaGas: 0n,
444
+ feePerL2Gas: 0n
445
+ });
446
+ }
402
447
  /**
403
448
  * Method to fetch the latest block number synchronized by the node.
404
449
  * @returns The block number.
@@ -432,22 +477,11 @@ import { NodeMetrics } from './node_metrics.js';
432
477
  getContract(address) {
433
478
  return this.contractDataSource.getContract(address);
434
479
  }
435
- /**
436
- * Retrieves all private logs from up to `limit` blocks, starting from the block number `from`.
437
- * @param from - The block number from which to begin retrieving logs.
438
- * @param limit - The maximum number of blocks to retrieve logs from.
439
- * @returns An array of private logs from the specified range of blocks.
440
- */ getPrivateLogs(from, limit) {
441
- return this.logsSource.getPrivateLogs(from, limit);
480
+ getPrivateLogsByTags(tags) {
481
+ return this.logsSource.getPrivateLogsByTags(tags);
442
482
  }
443
- /**
444
- * Gets all logs that match any of the received tags (i.e. logs with their first field equal to a tag).
445
- * @param tags - The tags to filter the logs by.
446
- * @param logsPerTag - The maximum number of logs to return for each tag. By default no limit is set
447
- * @returns For each received tag, an array of matching logs is returned. An empty array implies no logs match
448
- * that tag.
449
- */ getLogsByTags(tags, logsPerTag) {
450
- return this.logsSource.getLogsByTags(tags, logsPerTag);
483
+ getPublicLogsByTagsFromContract(contractAddress, tags) {
484
+ return this.logsSource.getPublicLogsByTagsFromContract(contractAddress, tags);
451
485
  }
452
486
  /**
453
487
  * Gets public logs based on the provided filter.
@@ -467,7 +501,7 @@ import { NodeMetrics } from './node_metrics.js';
467
501
  * Method to submit a transaction to the p2p pool.
468
502
  * @param tx - The transaction to be submitted.
469
503
  */ async sendTx(tx) {
470
- await this.txQueue.put(()=>this.#sendTx(tx));
504
+ await this.#sendTx(tx);
471
505
  }
472
506
  async #sendTx(tx) {
473
507
  const timer = new Timer();
@@ -508,7 +542,6 @@ import { NodeMetrics } from './node_metrics.js';
508
542
  * Method to stop the aztec node.
509
543
  */ async stop() {
510
544
  this.log.info(`Stopping Aztec Node`);
511
- await this.txQueue.end();
512
545
  await tryStop(this.validatorsSentinel);
513
546
  await tryStop(this.epochPruneWatcher);
514
547
  await tryStop(this.slasherClient);
@@ -517,6 +550,7 @@ import { NodeMetrics } from './node_metrics.js';
517
550
  await tryStop(this.p2pClient);
518
551
  await tryStop(this.worldStateSynchronizer);
519
552
  await tryStop(this.blockSource);
553
+ await tryStop(this.blobClient);
520
554
  await tryStop(this.telemetry);
521
555
  this.log.info(`Stopped Aztec Node`);
522
556
  }
@@ -572,7 +606,7 @@ import { NodeMetrics } from './node_metrics.js';
572
606
  // Now we obtain the block hashes from the archive tree by calling await `committedDb.getLeafValue(treeId, index)`
573
607
  // (note that block number corresponds to the leaf index in the archive tree).
574
608
  const blockHashes = await Promise.all(uniqueBlockNumbers.map((blockNumber)=>{
575
- return committedDb.getLeafValue(MerkleTreeId.ARCHIVE, blockNumber);
609
+ return committedDb.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(blockNumber));
576
610
  }));
577
611
  // If any of the block hashes are undefined, we throw an error.
578
612
  for(let i = 0; i < uniqueBlockNumbers.length; i++){
@@ -580,7 +614,7 @@ import { NodeMetrics } from './node_metrics.js';
580
614
  throw new Error(`Block hash is undefined for block number ${uniqueBlockNumbers[i]}`);
581
615
  }
582
616
  }
583
- // Create InBlock objects by combining indices, blockNumbers and blockHashes and return them.
617
+ // Create DataInBlock objects by combining indices, blockNumbers and blockHashes and return them.
584
618
  return maybeIndices.map((index, i)=>{
585
619
  if (index === undefined) {
586
620
  return undefined;
@@ -595,7 +629,7 @@ import { NodeMetrics } from './node_metrics.js';
595
629
  return undefined;
596
630
  }
597
631
  return {
598
- l2BlockNumber: Number(blockNumber),
632
+ l2BlockNumber: BlockNumber(Number(blockNumber)),
599
633
  l2BlockHash: L2BlockHash.fromField(blockHash),
600
634
  data: index
601
635
  };
@@ -654,7 +688,7 @@ import { NodeMetrics } from './node_metrics.js';
654
688
  }
655
689
  async getL1ToL2MessageBlock(l1ToL2Message) {
656
690
  const messageIndex = await this.l1ToL2MessageSource.getL1ToL2MessageIndex(l1ToL2Message);
657
- return messageIndex ? InboxLeaf.l2BlockFromIndex(messageIndex) : undefined;
691
+ return messageIndex ? BlockNumber.fromCheckpointNumber(InboxLeaf.checkpointNumberFromIndex(messageIndex)) : undefined;
658
692
  }
659
693
  /**
660
694
  * Returns whether an L1 to L2 message is synced by archiver and if it's ready to be included in a block.
@@ -772,7 +806,7 @@ import { NodeMetrics } from './node_metrics.js';
772
806
  * Returns the currently committed block header, or the initial header if no blocks have been produced.
773
807
  * @returns The current committed block header.
774
808
  */ async getBlockHeader(blockNumber = 'latest') {
775
- return blockNumber === 0 || blockNumber === 'latest' && await this.blockSource.getBlockNumber() === 0 ? this.worldStateSynchronizer.getCommitted().getInitialHeader() : this.blockSource.getBlockHeader(blockNumber);
809
+ return blockNumber === BlockNumber.ZERO || blockNumber === 'latest' && await this.blockSource.getBlockNumber() === BlockNumber.ZERO ? this.worldStateSynchronizer.getCommitted().getInitialHeader() : this.blockSource.getBlockHeader(blockNumber === 'latest' ? blockNumber : blockNumber);
776
810
  }
777
811
  /**
778
812
  * Get a block header specified by its hash.
@@ -800,7 +834,7 @@ import { NodeMetrics } from './node_metrics.js';
800
834
  throw new BadRequestError(`Transaction total gas limit ${txGasLimit + teardownGasLimit} (${txGasLimit} + ${teardownGasLimit}) exceeds maximum gas limit ${this.config.rpcSimulatePublicMaxGasLimit} for simulation`);
801
835
  }
802
836
  const txHash = tx.getTxHash();
803
- const blockNumber = await this.blockSource.getBlockNumber() + 1;
837
+ const blockNumber = BlockNumber(await this.blockSource.getBlockNumber() + 1);
804
838
  // If sequencer is not initialized, we just set these values to zero for simulation.
805
839
  const coinbase = EthAddress.ZERO;
806
840
  const feeRecipient = AztecAddress.ZERO;
@@ -813,11 +847,17 @@ import { NodeMetrics } from './node_metrics.js';
813
847
  });
814
848
  const merkleTreeFork = await this.worldStateSynchronizer.fork();
815
849
  try {
816
- const processor = publicProcessorFactory.create(merkleTreeFork, newGlobalVariables, {
850
+ const config = PublicSimulatorConfig.from({
817
851
  skipFeeEnforcement,
818
- clientInitiatedSimulation: true,
819
- maxDebugLogMemoryReads: this.config.rpcSimulatePublicMaxDebugLogMemoryReads
852
+ collectDebugLogs: true,
853
+ collectHints: false,
854
+ collectCallMetadata: true,
855
+ collectStatistics: false,
856
+ collectionLimits: CollectionLimitsConfig.from({
857
+ maxDebugLogMemoryReads: this.config.rpcSimulatePublicMaxDebugLogMemoryReads
858
+ })
820
859
  });
860
+ const processor = publicProcessorFactory.create(merkleTreeFork, newGlobalVariables, config);
821
861
  // REFACTOR: Consider merging ProcessReturnValues into ProcessedTx
822
862
  const [processedTxs, failedTxs, _usedTxs, returns] = await processor.process([
823
863
  tx
@@ -840,7 +880,7 @@ import { NodeMetrics } from './node_metrics.js';
840
880
  const verifier = isSimulation ? undefined : this.proofVerifier;
841
881
  // We accept transactions if they are not expired by the next slot (checked based on the IncludeByTimestamp field)
842
882
  const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
843
- const blockNumber = await this.blockSource.getBlockNumber() + 1;
883
+ const blockNumber = BlockNumber(await this.blockSource.getBlockNumber() + 1);
844
884
  const validator = createValidatorForAcceptingTxs(db, this.contractDataSource, verifier, {
845
885
  timestamp: nextSlotTimestamp,
846
886
  blockNumber,
@@ -1000,7 +1040,7 @@ import { NodeMetrics } from './node_metrics.js';
1000
1040
  if (typeof blockNumber === 'number' && blockNumber < INITIAL_L2_BLOCK_NUM - 1) {
1001
1041
  throw new Error('Invalid block number to get world state for: ' + blockNumber);
1002
1042
  }
1003
- let blockSyncedTo = 0;
1043
+ let blockSyncedTo = BlockNumber.ZERO;
1004
1044
  try {
1005
1045
  // Attempt to sync the world state if necessary
1006
1046
  blockSyncedTo = await this.#syncWorldState();
@@ -1023,7 +1063,7 @@ import { NodeMetrics } from './node_metrics.js';
1023
1063
  * @returns A promise that fulfils once the world state is synced
1024
1064
  */ async #syncWorldState() {
1025
1065
  const blockSourceHeight = await this.blockSource.getBlockNumber();
1026
- return this.worldStateSynchronizer.syncImmediate(blockSourceHeight);
1066
+ return await this.worldStateSynchronizer.syncImmediate(blockSourceHeight);
1027
1067
  }
1028
1068
  }
1029
1069
  _ts_decorate([
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env -S node --no-warnings
2
2
  export {};
3
- //# sourceMappingURL=index.d.ts.map
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=index.d.ts.map
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=config.d.ts.map
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=factory.d.ts.map
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbnRpbmVsL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pDLHdCQUFzQixjQUFjLENBQ2xDLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFFBQVEsRUFBRSxhQUFhLEVBQ3ZCLEdBQUcsRUFBRSxTQUFTLEVBQ2QsTUFBTSxFQUFFLGNBQWMsR0FBRyxlQUFlLEdBQUcsYUFBYSxFQUN4RCxNQUFNLHlDQUFnQyxHQUNyQyxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQWlCL0IifQ==
@@ -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=index.d.ts.map
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZW50aW5lbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLFlBQVksRUFDVixlQUFlLEVBQ2YsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixxQkFBcUIsR0FDdEIsTUFBTSwwQkFBMEIsQ0FBQyJ9
@@ -1,4 +1,5 @@
1
1
  import type { EpochCache } from '@aztec/epoch-cache';
2
+ import { BlockNumber, 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,10 +20,10 @@ 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: bigint | undefined;
23
- protected lastProcessedSlot: bigint | undefined;
24
- protected slotNumberToBlock: Map<bigint, {
25
- blockNumber: number;
23
+ protected initialSlot: SlotNumber | undefined;
24
+ protected lastProcessedSlot: SlotNumber | undefined;
25
+ protected slotNumberToBlock: Map<SlotNumber, {
26
+ blockNumber: BlockNumber;
26
27
  archive: string;
27
28
  attestors: EthAddress[];
28
29
  }>;
@@ -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: bigint): Promise<ValidatorsEpochPerformance>;
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: bigint, requiredConsecutiveEpochs: number): Promise<boolean>;
45
- protected handleProvenPerformance(epoch: bigint, performance: ValidatorsEpochPerformance): Promise<void>;
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: bigint): Promise<bigint | false>;
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: bigint): Promise<void>;
63
+ protected processSlot(slot: SlotNumber): Promise<void>;
63
64
  /** Computes activity for a given slot. */
64
- protected getSlotActivity(slot: bigint, epoch: bigint, proposer: EthAddress, committee: EthAddress[]): Promise<{
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: bigint, stats: Record<`0x${string}`, ValidatorStatusInSlot | undefined>): Promise<void>;
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?: bigint;
72
- toSlot?: bigint;
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?: bigint, toSlot?: bigint): Promise<SingleValidatorStats | undefined>;
77
- protected computeStatsForValidator(address: `0x${string}`, allHistory: ValidatorStatusHistory, fromSlot?: bigint, toSlot?: bigint): ValidatorStats;
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: bigint | undefined): {
85
+ protected computeFromSlot(slot: SlotNumber | undefined): {
85
86
  timestamp: bigint;
86
- slot: bigint;
87
+ slot: SlotNumber;
87
88
  date: string;
88
89
  } | undefined;
89
90
  }
90
91
  export {};
91
- //# sourceMappingURL=sentinel.d.ts.map
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudGluZWwuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZW50aW5lbC9zZW50aW5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBcUIsS0FBSyxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxFQUlMLEtBQUssT0FBTyxFQUNaLEtBQUssY0FBYyxFQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsYUFBYSxFQUNiLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUsseUJBQXlCLEVBRS9CLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxLQUFLLEVBQ1Ysb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsZUFBZSxFQUNoQixNQUFNLDBCQUEwQixDQUFDO0FBSWxDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBRTNDLHFCQUFhLFFBQVMsU0FBUSxhQUEyQyxZQUFXLHlCQUF5QixFQUFFLE9BQU87SUFZbEgsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVO0lBQ2hDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsYUFBYTtJQUNqQyxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVM7SUFDeEIsU0FBUyxDQUFDLEtBQUssRUFBRSxhQUFhO0lBQzlCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUNwQixhQUFhLEVBQ2IsaUNBQWlDLEdBQUcsd0JBQXdCLEdBQUcsMENBQTBDLENBQzFHO0lBQ0QsU0FBUyxDQUFDLE1BQU07SUFuQmxCLFNBQVMsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDO0lBQ3pDLFNBQVMsQ0FBQyxXQUFXLEVBQUcsYUFBYSxDQUFDO0lBQ3RDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBRW5DLFNBQVMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUM5QyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUVwRCxTQUFTLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRTtRQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7UUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFBO0tBQUUsQ0FBQyxDQUN4RztJQUVaLFlBQ1ksVUFBVSxFQUFFLFVBQVUsRUFDdEIsUUFBUSxFQUFFLGFBQWEsRUFDdkIsR0FBRyxFQUFFLFNBQVMsRUFDZCxLQUFLLEVBQUUsYUFBYSxFQUNwQixNQUFNLEVBQUUsSUFBSSxDQUNwQixhQUFhLEVBQ2IsaUNBQWlDLEdBQUcsd0JBQXdCLEdBQUcsMENBQTBDLENBQzFHLEVBQ1MsTUFBTSx5Q0FBZ0MsRUFNakQ7SUFFTSxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFFakQ7SUFFWSxLQUFLLGtCQUdqQjtJQUVELGtIQUFrSDtJQUNsSCxVQUFnQixJQUFJLGtCQUtuQjtJQUVNLElBQUksa0JBRVY7SUFFWSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQTJCNUU7SUFFRCxVQUFnQixpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLGlCQW9CMUQ7SUFFRCxVQUFnQix3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQXlCaEc7SUFFRDs7Ozs7T0FLRztJQUNILFVBQWdCLG1CQUFtQixDQUNqQyxTQUFTLEVBQUUsVUFBVSxFQUNyQixZQUFZLEVBQUUsV0FBVyxFQUN6Qix5QkFBeUIsRUFBRSxNQUFNLEdBQ2hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0F1QmxCO0lBRUQsVUFBZ0IsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsMEJBQTBCLGlCQWtDbEc7SUFFRDs7OztPQUlHO0lBQ1UsSUFBSSxrQkFpQmhCO0lBRUQ7Ozs7T0FJRztJQUNILFVBQWdCLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FxQ3JGO0lBRUQ7OztPQUdHO0lBQ0gsVUFBZ0IsV0FBVyxDQUFDLElBQUksRUFBRSxVQUFVLGlCQWEzQztJQUVELDBDQUEwQztJQUMxQyxVQUFnQixlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTs7T0EyRGxIO0lBRUQsd0RBQXdEO0lBQ3hELFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxNQUFNLEVBQUUsRUFBRSxxQkFBcUIsR0FBRyxTQUFTLENBQUMsaUJBRTNHO0lBRUQsMERBQTBEO0lBQzdDLFlBQVksQ0FBQyxFQUN4QixRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDWCxHQUFFO1FBQUUsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBQUMsVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUE7S0FBTyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FtQjNHO0lBRUQsNkNBQTZDO0lBQ2hDLGlCQUFpQixDQUM1QixnQkFBZ0IsRUFBRSxVQUFVLEVBQzVCLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFDckIsTUFBTSxDQUFDLEVBQUUsVUFBVSxHQUNsQixPQUFPLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLENBa0MzQztJQUVELFNBQVMsQ0FBQyx3QkFBd0IsQ0FDaEMsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQ3RCLFVBQVUsRUFBRSxzQkFBc0IsRUFDbEMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUNyQixNQUFNLENBQUMsRUFBRSxVQUFVLEdBQ2xCLGNBQWMsQ0FjaEI7SUFFRCxTQUFTLENBQUMsYUFBYSxDQUNyQixPQUFPLEVBQUUsc0JBQXNCLEVBQy9CLGlCQUFpQixFQUFFLG1CQUFtQixHQUFHLFNBQVMsRUFDbEQsTUFBTSxFQUFFLHFCQUFxQixFQUFFOzs7OztNQVVoQztJQUVELFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxTQUFTOzs7O2tCQU1yRDtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../src/sentinel/sentinel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../src/sentinel/sentinel.ts"],"names":[],"mappings":"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"}