@aztec/epoch-cache 3.0.0-nightly.20251127 → 3.0.0-nightly.20251201.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dest/config.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { type L1ContractsConfig, type L1ReaderConfig } from '@aztec/ethereum';
2
2
  export type EpochCacheConfig = Pick<L1ReaderConfig & L1ContractsConfig, 'l1RpcUrls' | 'l1ChainId' | 'viemPollingIntervalMS' | 'ethereumSlotDuration'>;
3
3
  export declare function getEpochCacheConfigEnvVars(): EpochCacheConfig;
4
- //# sourceMappingURL=config.d.ts.map
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGlCQUFpQixFQUN0QixLQUFLLGNBQWMsRUFHcEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUNqQyxjQUFjLEdBQUcsaUJBQWlCLEVBQ2xDLFdBQVcsR0FBRyxXQUFXLEdBQUcsdUJBQXVCLEdBQUcsc0JBQXNCLENBQzdFLENBQUM7QUFFRix3QkFBZ0IsMEJBQTBCLElBQUksZ0JBQWdCLENBRTdEIn0=
@@ -1,32 +1,33 @@
1
1
  import { RollupContract } from '@aztec/ethereum';
2
+ import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
3
  import { EthAddress } from '@aztec/foundation/eth-address';
3
4
  import { DateProvider } from '@aztec/foundation/timer';
4
5
  import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
5
6
  import { type EpochCacheConfig } from './config.js';
6
7
  export type EpochAndSlot = {
7
- epoch: bigint;
8
- slot: bigint;
8
+ epoch: EpochNumber;
9
+ slot: SlotNumber;
9
10
  ts: bigint;
10
11
  };
11
12
  export type EpochCommitteeInfo = {
12
13
  committee: EthAddress[] | undefined;
13
14
  seed: bigint;
14
- epoch: bigint;
15
+ epoch: EpochNumber;
15
16
  };
16
- export type SlotTag = 'now' | 'next' | bigint;
17
+ export type SlotTag = 'now' | 'next' | SlotNumber;
17
18
  export interface EpochCacheInterface {
18
19
  getCommittee(slot: SlotTag | undefined): Promise<EpochCommitteeInfo>;
19
20
  getEpochAndSlotNow(): EpochAndSlot;
20
21
  getEpochAndSlotInNextL1Slot(): EpochAndSlot & {
21
22
  now: bigint;
22
23
  };
23
- getProposerIndexEncoding(epoch: bigint, slot: bigint, seed: bigint): `0x${string}`;
24
- computeProposerIndex(slot: bigint, epoch: bigint, seed: bigint, size: bigint): bigint;
24
+ getProposerIndexEncoding(epoch: EpochNumber, slot: SlotNumber, seed: bigint): `0x${string}`;
25
+ computeProposerIndex(slot: SlotNumber, epoch: EpochNumber, seed: bigint, size: bigint): bigint;
25
26
  getProposerAttesterAddressInCurrentOrNextSlot(): Promise<{
26
27
  currentProposer: EthAddress | undefined;
27
28
  nextProposer: EthAddress | undefined;
28
- currentSlot: bigint;
29
- nextSlot: bigint;
29
+ currentSlot: SlotNumber;
30
+ nextSlot: SlotNumber;
30
31
  }>;
31
32
  getRegisteredValidators(): Promise<EthAddress[]>;
32
33
  isInCommittee(slot: SlotTag, validator: EthAddress): Promise<boolean>;
@@ -49,7 +50,7 @@ export declare class EpochCache implements EpochCacheInterface {
49
50
  cacheSize: number;
50
51
  validatorRefreshIntervalSeconds: number;
51
52
  };
52
- protected cache: Map<bigint, EpochCommitteeInfo>;
53
+ protected cache: Map<EpochNumber, EpochCommitteeInfo>;
53
54
  private allValidators;
54
55
  private lastValidatorRefresh;
55
56
  private readonly log;
@@ -73,7 +74,7 @@ export declare class EpochCache implements EpochCacheInterface {
73
74
  now: bigint;
74
75
  };
75
76
  private getEpochAndSlotAtTimestamp;
76
- getCommitteeForEpoch(epoch: bigint): Promise<EpochCommitteeInfo>;
77
+ getCommitteeForEpoch(epoch: EpochNumber): Promise<EpochCommitteeInfo>;
77
78
  /**
78
79
  * Get the current validator set
79
80
  * @param nextSlot - If true, get the validator set for the next slot.
@@ -85,8 +86,8 @@ export declare class EpochCache implements EpochCacheInterface {
85
86
  /**
86
87
  * Get the ABI encoding of the proposer index - see ValidatorSelectionLib.sol computeProposerIndex
87
88
  */
88
- getProposerIndexEncoding(epoch: bigint, slot: bigint, seed: bigint): `0x${string}`;
89
- computeProposerIndex(slot: bigint, epoch: bigint, seed: bigint, size: bigint): bigint;
89
+ getProposerIndexEncoding(epoch: EpochNumber, slot: SlotNumber, seed: bigint): `0x${string}`;
90
+ computeProposerIndex(slot: SlotNumber, epoch: EpochNumber, seed: bigint, size: bigint): bigint;
90
91
  /**
91
92
  * Returns the current and next proposer's attester address
92
93
  *
@@ -94,8 +95,8 @@ export declare class EpochCache implements EpochCacheInterface {
94
95
  * which can be the next slot. If this is the case, then it will send proposals early.
95
96
  */
96
97
  getProposerAttesterAddressInCurrentOrNextSlot(): Promise<{
97
- currentSlot: bigint;
98
- nextSlot: bigint;
98
+ currentSlot: SlotNumber;
99
+ nextSlot: SlotNumber;
99
100
  currentProposer: EthAddress | undefined;
100
101
  nextProposer: EthAddress | undefined;
101
102
  }>;
@@ -104,25 +105,19 @@ export declare class EpochCache implements EpochCacheInterface {
104
105
  * @returns The proposer attester address. If the committee does not exist, we throw a NoCommitteeError.
105
106
  * If the committee is empty (i.e. target committee size is 0, and anyone can propose), we return undefined.
106
107
  */
107
- getProposerAttesterAddressInSlot(slot: bigint): Promise<EthAddress | undefined>;
108
+ getProposerAttesterAddressInSlot(slot: SlotNumber): Promise<EthAddress | undefined>;
108
109
  /**
109
110
  * Get the proposer attester address in the next slot
110
111
  * @returns The proposer attester address. If the committee does not exist, we throw a NoCommitteeError.
111
112
  * If the committee is empty (i.e. target committee size is 0, and anyone can propose), we return undefined.
112
113
  */
113
114
  getProposerAttesterAddressInNextSlot(): Promise<EthAddress | undefined>;
114
- /**
115
- * Get the proposer attester address at a given epoch and slot
116
- * @param when - The epoch and slot to get the proposer attester address at
117
- * @returns The proposer attester address. If the committee does not exist, we throw a NoCommitteeError.
118
- * If the committee is empty (i.e. target committee size is 0, and anyone can propose), we return undefined.
119
- */
120
115
  private getProposerAttesterAddressAt;
121
- getProposerFromEpochCommittee(epochCommitteeInfo: EpochCommitteeInfo, slot: bigint): EthAddress | undefined;
116
+ getProposerFromEpochCommittee(epochCommitteeInfo: EpochCommitteeInfo, slot: SlotNumber): EthAddress | undefined;
122
117
  /** Check if a validator is in the given slot's committee */
123
118
  isInCommittee(slot: SlotTag, validator: EthAddress): Promise<boolean>;
124
119
  /** From the set of given addresses, return all that are on the committee for the given slot */
125
120
  filterInCommittee(slot: SlotTag, validators: EthAddress[]): Promise<EthAddress[]>;
126
121
  getRegisteredValidators(): Promise<EthAddress[]>;
127
122
  }
128
- //# sourceMappingURL=epoch_cache.d.ts.map
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2hfY2FjaGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lcG9jaF9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLGNBQWMsRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUNMLEtBQUssaUJBQWlCLEVBT3ZCLE1BQU0sNkJBQTZCLENBQUM7QUFJckMsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQThCLE1BQU0sYUFBYSxDQUFDO0FBRWhGLE1BQU0sTUFBTSxZQUFZLEdBQUc7SUFDekIsS0FBSyxFQUFFLFdBQVcsQ0FBQztJQUNuQixJQUFJLEVBQUUsVUFBVSxDQUFDO0lBQ2pCLEVBQUUsRUFBRSxNQUFNLENBQUM7Q0FDWixDQUFDO0FBRUYsTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxTQUFTLENBQUM7SUFDcEMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLEtBQUssRUFBRSxXQUFXLENBQUM7Q0FDcEIsQ0FBQztBQUVGLE1BQU0sTUFBTSxPQUFPLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFFbEQsTUFBTSxXQUFXLG1CQUFtQjtJQUNsQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sR0FBRyxTQUFTLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckUsa0JBQWtCLElBQUksWUFBWSxDQUFDO0lBQ25DLDJCQUEyQixJQUFJLFlBQVksR0FBRztRQUFFLEdBQUcsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDO0lBQzlELHdCQUF3QixDQUFD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
@@ -1 +1 @@
1
- {"version":3,"file":"epoch_cache.d.ts","sourceRoot":"","sources":["../src/epoch_cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"epoch_cache.d.ts","sourceRoot":"","sources":["../src/epoch_cache.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ import { getEpochCacheConfigEnvVars } from './config.js';
18
18
  l1constants;
19
19
  dateProvider;
20
20
  config;
21
+ // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
21
22
  cache;
22
23
  allValidators;
23
24
  lastValidatorRefresh;
@@ -185,8 +186,8 @@ import { getEpochCacheConfigEnvVars } from './config.js';
185
186
  name: 'seed'
186
187
  }
187
188
  ], [
188
- epoch,
189
- slot,
189
+ BigInt(epoch),
190
+ BigInt(slot),
190
191
  seed
191
192
  ]);
192
193
  }
package/dest/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from './epoch_cache.js';
2
2
  export * from './config.js';
3
- //# sourceMappingURL=index.d.ts.map
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsYUFBYSxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/epoch-cache",
3
- "version": "3.0.0-nightly.20251127",
3
+ "version": "3.0.0-nightly.20251201.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -15,10 +15,10 @@
15
15
  "tsconfig": "./tsconfig.json"
16
16
  },
17
17
  "scripts": {
18
- "build": "yarn clean && tsc -b",
19
- "build:dev": "tsc -b --watch",
18
+ "build": "yarn clean && tsgo -b",
19
+ "build:dev": "tsgo -b --watch",
20
20
  "clean": "rm -rf ./dest .tsbuildinfo",
21
- "start:dev": "tsc-watch -p tsconfig.json --onSuccess 'yarn start'",
21
+ "start:dev": "concurrently -k \"tsgo -b -w\" \"nodemon --watch dest --exec yarn start\"",
22
22
  "start": "node ./dest/index.js",
23
23
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
24
24
  },
@@ -26,10 +26,10 @@
26
26
  "../package.common.json"
27
27
  ],
28
28
  "dependencies": {
29
- "@aztec/ethereum": "3.0.0-nightly.20251127",
30
- "@aztec/foundation": "3.0.0-nightly.20251127",
31
- "@aztec/l1-artifacts": "3.0.0-nightly.20251127",
32
- "@aztec/stdlib": "3.0.0-nightly.20251127",
29
+ "@aztec/ethereum": "3.0.0-nightly.20251201.2",
30
+ "@aztec/foundation": "3.0.0-nightly.20251201.2",
31
+ "@aztec/l1-artifacts": "3.0.0-nightly.20251201.2",
32
+ "@aztec/stdlib": "3.0.0-nightly.20251201.2",
33
33
  "@viem/anvil": "^0.0.10",
34
34
  "dotenv": "^16.0.3",
35
35
  "get-port": "^7.1.0",
@@ -42,6 +42,7 @@
42
42
  "@jest/globals": "^30.0.0",
43
43
  "@types/jest": "^30.0.0",
44
44
  "@types/node": "^22.15.17",
45
+ "@typescript/native-preview": "7.0.0-dev.20251126.1",
45
46
  "jest": "^30.0.0",
46
47
  "ts-node": "^10.9.1",
47
48
  "typescript": "^5.3.3"
@@ -1,4 +1,5 @@
1
1
  import { NoCommitteeError, RollupContract, createEthereumChain } from '@aztec/ethereum';
2
+ import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
3
  import { EthAddress } from '@aztec/foundation/eth-address';
3
4
  import { type Logger, createLogger } from '@aztec/foundation/log';
4
5
  import { DateProvider } from '@aztec/foundation/timer';
@@ -17,30 +18,30 @@ import { createPublicClient, encodeAbiParameters, fallback, http, keccak256 } fr
17
18
  import { type EpochCacheConfig, getEpochCacheConfigEnvVars } from './config.js';
18
19
 
19
20
  export type EpochAndSlot = {
20
- epoch: bigint;
21
- slot: bigint;
21
+ epoch: EpochNumber;
22
+ slot: SlotNumber;
22
23
  ts: bigint;
23
24
  };
24
25
 
25
26
  export type EpochCommitteeInfo = {
26
27
  committee: EthAddress[] | undefined;
27
28
  seed: bigint;
28
- epoch: bigint;
29
+ epoch: EpochNumber;
29
30
  };
30
31
 
31
- export type SlotTag = 'now' | 'next' | bigint;
32
+ export type SlotTag = 'now' | 'next' | SlotNumber;
32
33
 
33
34
  export interface EpochCacheInterface {
34
35
  getCommittee(slot: SlotTag | undefined): Promise<EpochCommitteeInfo>;
35
36
  getEpochAndSlotNow(): EpochAndSlot;
36
37
  getEpochAndSlotInNextL1Slot(): EpochAndSlot & { now: bigint };
37
- getProposerIndexEncoding(epoch: bigint, slot: bigint, seed: bigint): `0x${string}`;
38
- computeProposerIndex(slot: bigint, epoch: bigint, seed: bigint, size: bigint): bigint;
38
+ getProposerIndexEncoding(epoch: EpochNumber, slot: SlotNumber, seed: bigint): `0x${string}`;
39
+ computeProposerIndex(slot: SlotNumber, epoch: EpochNumber, seed: bigint, size: bigint): bigint;
39
40
  getProposerAttesterAddressInCurrentOrNextSlot(): Promise<{
40
41
  currentProposer: EthAddress | undefined;
41
42
  nextProposer: EthAddress | undefined;
42
- currentSlot: bigint;
43
- nextSlot: bigint;
43
+ currentSlot: SlotNumber;
44
+ nextSlot: SlotNumber;
44
45
  }>;
45
46
  getRegisteredValidators(): Promise<EthAddress[]>;
46
47
  isInCommittee(slot: SlotTag, validator: EthAddress): Promise<boolean>;
@@ -57,7 +58,8 @@ export interface EpochCacheInterface {
57
58
  * Note: This class is very dependent on the system clock being in sync.
58
59
  */
59
60
  export class EpochCache implements EpochCacheInterface {
60
- protected cache: Map<bigint, EpochCommitteeInfo> = new Map();
61
+ // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
62
+ protected cache: Map<EpochNumber, EpochCommitteeInfo> = new Map();
61
63
  private allValidators: Set<string> = new Set();
62
64
  private lastValidatorRefresh = 0;
63
65
  private readonly log: Logger = createLogger('epoch-cache');
@@ -142,7 +144,7 @@ export class EpochCache implements EpochCacheInterface {
142
144
  return BigInt(Math.floor(this.dateProvider.now() / 1000));
143
145
  }
144
146
 
145
- private getEpochAndSlotAtSlot(slot: bigint): EpochAndSlot {
147
+ private getEpochAndSlotAtSlot(slot: SlotNumber): EpochAndSlot {
146
148
  const epoch = getEpochAtSlot(slot, this.l1constants);
147
149
  const ts = getTimestampRangeForEpoch(epoch, this.l1constants)[0];
148
150
  return { epoch, ts, slot };
@@ -163,7 +165,7 @@ export class EpochCache implements EpochCacheInterface {
163
165
  };
164
166
  }
165
167
 
166
- public getCommitteeForEpoch(epoch: bigint): Promise<EpochCommitteeInfo> {
168
+ public getCommitteeForEpoch(epoch: EpochNumber): Promise<EpochCommitteeInfo> {
167
169
  const [startSlot] = getSlotRangeForEpoch(epoch, this.l1constants);
168
170
  return this.getCommittee(startSlot);
169
171
  }
@@ -205,7 +207,7 @@ export class EpochCache implements EpochCacheInterface {
205
207
  }
206
208
  }
207
209
 
208
- private async computeCommittee(when: { epoch: bigint; ts: bigint }): Promise<EpochCommitteeInfo> {
210
+ private async computeCommittee(when: { epoch: EpochNumber; ts: bigint }): Promise<EpochCommitteeInfo> {
209
211
  const { ts, epoch } = when;
210
212
  const [committeeHex, seed, l1Timestamp] = await Promise.all([
211
213
  this.rollup.getCommitteeAt(ts),
@@ -226,18 +228,18 @@ export class EpochCache implements EpochCacheInterface {
226
228
  /**
227
229
  * Get the ABI encoding of the proposer index - see ValidatorSelectionLib.sol computeProposerIndex
228
230
  */
229
- getProposerIndexEncoding(epoch: bigint, slot: bigint, seed: bigint): `0x${string}` {
231
+ getProposerIndexEncoding(epoch: EpochNumber, slot: SlotNumber, seed: bigint): `0x${string}` {
230
232
  return encodeAbiParameters(
231
233
  [
232
234
  { type: 'uint256', name: 'epoch' },
233
235
  { type: 'uint256', name: 'slot' },
234
236
  { type: 'uint256', name: 'seed' },
235
237
  ],
236
- [epoch, slot, seed],
238
+ [BigInt(epoch), BigInt(slot), seed],
237
239
  );
238
240
  }
239
241
 
240
- public computeProposerIndex(slot: bigint, epoch: bigint, seed: bigint, size: bigint): bigint {
242
+ public computeProposerIndex(slot: SlotNumber, epoch: EpochNumber, seed: bigint, size: bigint): bigint {
241
243
  // if committe size is 0, then mod 1 is 0
242
244
  if (size === 0n) {
243
245
  return 0n;
@@ -252,8 +254,8 @@ export class EpochCache implements EpochCacheInterface {
252
254
  * which can be the next slot. If this is the case, then it will send proposals early.
253
255
  */
254
256
  public async getProposerAttesterAddressInCurrentOrNextSlot(): Promise<{
255
- currentSlot: bigint;
256
- nextSlot: bigint;
257
+ currentSlot: SlotNumber;
258
+ nextSlot: SlotNumber;
257
259
  currentProposer: EthAddress | undefined;
258
260
  nextProposer: EthAddress | undefined;
259
261
  }> {
@@ -273,7 +275,7 @@ export class EpochCache implements EpochCacheInterface {
273
275
  * @returns The proposer attester address. If the committee does not exist, we throw a NoCommitteeError.
274
276
  * If the committee is empty (i.e. target committee size is 0, and anyone can propose), we return undefined.
275
277
  */
276
- public getProposerAttesterAddressInSlot(slot: bigint): Promise<EthAddress | undefined> {
278
+ public getProposerAttesterAddressInSlot(slot: SlotNumber): Promise<EthAddress | undefined> {
277
279
  const epochAndSlot = this.getEpochAndSlotAtSlot(slot);
278
280
  return this.getProposerAttesterAddressAt(epochAndSlot);
279
281
  }
@@ -307,7 +309,10 @@ export class EpochCache implements EpochCacheInterface {
307
309
  return committee[Number(proposerIndex)];
308
310
  }
309
311
 
310
- public getProposerFromEpochCommittee(epochCommitteeInfo: EpochCommitteeInfo, slot: bigint): EthAddress | undefined {
312
+ public getProposerFromEpochCommittee(
313
+ epochCommitteeInfo: EpochCommitteeInfo,
314
+ slot: SlotNumber,
315
+ ): EthAddress | undefined {
311
316
  if (!epochCommitteeInfo.committee || epochCommitteeInfo.committee.length === 0) {
312
317
  return undefined;
313
318
  }