@aztec/aztec-node 0.0.1-commit.96dac018d → 0.0.1-commit.9badcec54

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.
@@ -1,9 +1,9 @@
1
1
  import type { EpochCache } from '@aztec/epoch-cache';
2
- import type { DataStoreConfig } from '@aztec/kv-store/config';
3
2
  import type { P2PClient } from '@aztec/p2p';
4
3
  import type { L2BlockSource } from '@aztec/stdlib/block';
5
4
  import type { SlasherConfig } from '@aztec/stdlib/interfaces/server';
5
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbnRpbmVsL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pDLHdCQUFzQixjQUFjLENBQ2xDLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFFBQVEsRUFBRSxhQUFhLEVBQ3ZCLEdBQUcsRUFBRSxTQUFTLEVBQ2QsTUFBTSxFQUFFLGNBQWMsR0FBRyxlQUFlLEdBQUcsYUFBYSxFQUN4RCxNQUFNLHlDQUFnQyxHQUNyQyxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQVkvQiJ9
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbnRpbmVsL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pDLHdCQUFzQixjQUFjLENBQ2xDLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFFBQVEsRUFBRSxhQUFhLEVBQ3ZCLEdBQUcsRUFBRSxTQUFTLEVBQ2QsTUFBTSxFQUFFLGNBQWMsR0FBRyxlQUFlLEdBQUcsYUFBYSxFQUN4RCxNQUFNLHlDQUFnQyxHQUNyQyxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQVkvQiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/sentinel/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,wBAAsB,cAAc,CAClC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,cAAc,GAAG,eAAe,GAAG,aAAa,EACxD,MAAM,yCAAgC,GACrC,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAY/B"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/sentinel/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,wBAAsB,cAAc,CAClC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,cAAc,GAAG,eAAe,GAAG,aAAa,EACxD,MAAM,yCAAgC,GACrC,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAY/B"}
@@ -48,7 +48,7 @@ export class Sentinel extends EventEmitter {
48
48
  this.runningPromise.start();
49
49
  }
50
50
  /** Loads initial slot and initializes blockstream. We will not process anything at or before the initial slot. */ async init() {
51
- this.initialSlot = this.epochCache.getEpochAndSlotNow().slot;
51
+ this.initialSlot = this.epochCache.getSlotNow();
52
52
  const startingBlock = BlockNumber(await this.archiver.getBlockNumber());
53
53
  this.logger.info(`Starting validator sentinel with initial slot ${this.initialSlot} and block ${startingBlock}`);
54
54
  this.blockStream = new L2BlockStream(this.archiver, this.l2TipsStore, this, this.logger, {
@@ -157,13 +157,13 @@ export class Sentinel extends EventEmitter {
157
157
  return false;
158
158
  }
159
159
  // Check that we have at least requiredConsecutiveEpochs and that all of them are above the inactivity threshold
160
- return pastEpochs.slice(0, requiredConsecutiveEpochs).every((p)=>p.missed / p.total >= this.config.slashInactivityTargetPercentage);
160
+ return pastEpochs.slice(0, requiredConsecutiveEpochs).every((p)=>p.total === 0 ? false : p.missed / p.total >= this.config.slashInactivityTargetPercentage);
161
161
  }
162
162
  async handleProvenPerformance(epoch, performance) {
163
163
  if (this.config.slashInactivityPenalty === 0n) {
164
164
  return;
165
165
  }
166
- const inactiveValidators = getEntries(performance).filter(([_, { missed, total }])=>missed / total >= this.config.slashInactivityTargetPercentage).map(([address])=>address);
166
+ const inactiveValidators = getEntries(performance).filter(([_, { missed, total }])=>total > 0 && missed / total >= this.config.slashInactivityTargetPercentage).map(([address])=>address);
167
167
  this.logger.debug(`Found ${inactiveValidators.length} inactive validators in epoch ${epoch}`, {
168
168
  inactiveValidators,
169
169
  epoch,
@@ -190,7 +190,7 @@ export class Sentinel extends EventEmitter {
190
190
  * Note that we do not process historical data, since we rely on p2p data for processing,
191
191
  * and we don't have that data if we were offline during the period.
192
192
  */ async work() {
193
- const { slot: currentSlot } = this.epochCache.getEpochAndSlotNow();
193
+ const currentSlot = this.epochCache.getSlotNow();
194
194
  try {
195
195
  // Manually sync the block stream to ensure we have the latest data.
196
196
  // Note we never `start` the blockstream, so it loops at the same pace as we do.
@@ -229,10 +229,10 @@ export class Sentinel extends EventEmitter {
229
229
  this.logger.trace(`Refusing to process slot ${targetSlot} given initial slot ${this.initialSlot}`);
230
230
  return false;
231
231
  }
232
- const archiverSlot = await this.archiver.getL2SlotNumber();
233
- if (archiverSlot === undefined || archiverSlot < targetSlot) {
232
+ const syncedSlot = await this.archiver.getSyncedL2SlotNumber();
233
+ if (syncedSlot === undefined || syncedSlot < targetSlot) {
234
234
  this.logger.debug(`Waiting for archiver to sync with L2 slot ${targetSlot}`, {
235
- archiverSlot,
235
+ syncedSlot,
236
236
  targetSlot
237
237
  });
238
238
  return false;
@@ -351,7 +351,7 @@ export class Sentinel extends EventEmitter {
351
351
  v.toString(),
352
352
  await this.store.getHistory(v)
353
353
  ]))) : await this.store.getHistories();
354
- const slotNow = this.epochCache.getEpochAndSlotNow().slot;
354
+ const slotNow = this.epochCache.getSlotNow();
355
355
  fromSlot ??= SlotNumber(Math.max((this.lastProcessedSlot ?? slotNow) - this.store.getHistoryLength(), 0));
356
356
  toSlot ??= this.lastProcessedSlot ?? slotNow;
357
357
  const stats = mapValues(histories, (history, address)=>this.computeStatsForValidator(address, history ?? [], fromSlot, toSlot));
@@ -367,7 +367,7 @@ export class Sentinel extends EventEmitter {
367
367
  if (!history || history.length === 0) {
368
368
  return undefined;
369
369
  }
370
- const slotNow = this.epochCache.getEpochAndSlotNow().slot;
370
+ const slotNow = this.epochCache.getSlotNow();
371
371
  const effectiveFromSlot = fromSlot ?? SlotNumber(Math.max((this.lastProcessedSlot ?? slotNow) - this.store.getHistoryLength(), 0));
372
372
  const effectiveToSlot = toSlot ?? this.lastProcessedSlot ?? slotNow;
373
373
  const historyLength = BigInt(this.store.getHistoryLength());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/aztec-node",
3
- "version": "0.0.1-commit.96dac018d",
3
+ "version": "0.0.1-commit.9badcec54",
4
4
  "main": "dest/index.js",
5
5
  "type": "module",
6
6
  "exports": {
@@ -65,32 +65,31 @@
65
65
  ]
66
66
  },
67
67
  "dependencies": {
68
- "@aztec/archiver": "0.0.1-commit.96dac018d",
69
- "@aztec/bb-prover": "0.0.1-commit.96dac018d",
70
- "@aztec/blob-client": "0.0.1-commit.96dac018d",
71
- "@aztec/blob-lib": "0.0.1-commit.96dac018d",
72
- "@aztec/constants": "0.0.1-commit.96dac018d",
73
- "@aztec/epoch-cache": "0.0.1-commit.96dac018d",
74
- "@aztec/ethereum": "0.0.1-commit.96dac018d",
75
- "@aztec/foundation": "0.0.1-commit.96dac018d",
76
- "@aztec/kv-store": "0.0.1-commit.96dac018d",
77
- "@aztec/l1-artifacts": "0.0.1-commit.96dac018d",
78
- "@aztec/merkle-tree": "0.0.1-commit.96dac018d",
79
- "@aztec/node-keystore": "0.0.1-commit.96dac018d",
80
- "@aztec/node-lib": "0.0.1-commit.96dac018d",
81
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.96dac018d",
82
- "@aztec/p2p": "0.0.1-commit.96dac018d",
83
- "@aztec/protocol-contracts": "0.0.1-commit.96dac018d",
84
- "@aztec/prover-client": "0.0.1-commit.96dac018d",
85
- "@aztec/prover-node": "0.0.1-commit.96dac018d",
86
- "@aztec/sequencer-client": "0.0.1-commit.96dac018d",
87
- "@aztec/simulator": "0.0.1-commit.96dac018d",
88
- "@aztec/slasher": "0.0.1-commit.96dac018d",
89
- "@aztec/stdlib": "0.0.1-commit.96dac018d",
90
- "@aztec/telemetry-client": "0.0.1-commit.96dac018d",
91
- "@aztec/validator-client": "0.0.1-commit.96dac018d",
92
- "@aztec/validator-ha-signer": "0.0.1-commit.96dac018d",
93
- "@aztec/world-state": "0.0.1-commit.96dac018d",
68
+ "@aztec/archiver": "0.0.1-commit.9badcec54",
69
+ "@aztec/bb-prover": "0.0.1-commit.9badcec54",
70
+ "@aztec/blob-client": "0.0.1-commit.9badcec54",
71
+ "@aztec/blob-lib": "0.0.1-commit.9badcec54",
72
+ "@aztec/constants": "0.0.1-commit.9badcec54",
73
+ "@aztec/epoch-cache": "0.0.1-commit.9badcec54",
74
+ "@aztec/ethereum": "0.0.1-commit.9badcec54",
75
+ "@aztec/foundation": "0.0.1-commit.9badcec54",
76
+ "@aztec/kv-store": "0.0.1-commit.9badcec54",
77
+ "@aztec/l1-artifacts": "0.0.1-commit.9badcec54",
78
+ "@aztec/node-keystore": "0.0.1-commit.9badcec54",
79
+ "@aztec/node-lib": "0.0.1-commit.9badcec54",
80
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.9badcec54",
81
+ "@aztec/p2p": "0.0.1-commit.9badcec54",
82
+ "@aztec/protocol-contracts": "0.0.1-commit.9badcec54",
83
+ "@aztec/prover-client": "0.0.1-commit.9badcec54",
84
+ "@aztec/prover-node": "0.0.1-commit.9badcec54",
85
+ "@aztec/sequencer-client": "0.0.1-commit.9badcec54",
86
+ "@aztec/simulator": "0.0.1-commit.9badcec54",
87
+ "@aztec/slasher": "0.0.1-commit.9badcec54",
88
+ "@aztec/stdlib": "0.0.1-commit.9badcec54",
89
+ "@aztec/telemetry-client": "0.0.1-commit.9badcec54",
90
+ "@aztec/validator-client": "0.0.1-commit.9badcec54",
91
+ "@aztec/validator-ha-signer": "0.0.1-commit.9badcec54",
92
+ "@aztec/world-state": "0.0.1-commit.9badcec54",
94
93
  "koa": "^2.16.1",
95
94
  "koa-router": "^13.1.1",
96
95
  "tslib": "^2.4.0",
@@ -3,7 +3,6 @@ import { type GenesisStateConfig, genesisStateConfigMappings } from '@aztec/ethe
3
3
  import { type L1ContractAddresses, l1ContractAddressesMapping } from '@aztec/ethereum/l1-contract-addresses';
4
4
  import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
5
5
  import { EthAddress } from '@aztec/foundation/eth-address';
6
- import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
7
6
  import {
8
7
  type KeyStore,
9
8
  type ValidatorKeyStore,
@@ -27,6 +26,7 @@ import { slasherConfigMappings } from '@aztec/slasher';
27
26
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
28
27
  import { type NodeRPCConfig, nodeRpcConfigMappings } from '@aztec/stdlib/config';
29
28
  import type { SlasherConfig } from '@aztec/stdlib/interfaces/server';
29
+ import { type DataStoreConfig, dataConfigMappings } from '@aztec/stdlib/kv-store';
30
30
  import { type ValidatorClientConfig, validatorClientConfigMappings } from '@aztec/validator-client/config';
31
31
  import { type WorldStateConfig, worldStateConfigMappings } from '@aztec/world-state/config';
32
32