@aztec/epoch-cache 1.0.0-nightly.20250714 → 1.0.0-nightly.20250715
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/epoch_cache.d.ts +5 -0
- package/dest/epoch_cache.d.ts.map +1 -1
- package/dest/epoch_cache.js +16 -1
- package/package.json +5 -5
- package/src/epoch_cache.ts +15 -1
package/dest/epoch_cache.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export interface EpochCacheInterface {
|
|
|
28
28
|
currentSlot: bigint;
|
|
29
29
|
nextSlot: bigint;
|
|
30
30
|
}>;
|
|
31
|
+
getRegisteredValidators(): Promise<EthAddress[]>;
|
|
31
32
|
isInCommittee(slot: SlotTag, validator: EthAddress): Promise<boolean>;
|
|
32
33
|
filterInCommittee(slot: SlotTag, validators: EthAddress[]): Promise<EthAddress[]>;
|
|
33
34
|
}
|
|
@@ -46,9 +47,12 @@ export declare class EpochCache implements EpochCacheInterface {
|
|
|
46
47
|
private readonly dateProvider;
|
|
47
48
|
private readonly config;
|
|
48
49
|
private cache;
|
|
50
|
+
private allValidators;
|
|
51
|
+
private lastValidatorRefresh;
|
|
49
52
|
private readonly log;
|
|
50
53
|
constructor(rollup: RollupContract, initialEpoch?: bigint, initialValidators?: EthAddress[] | undefined, initialSampleSeed?: bigint, l1constants?: L1RollupConstants, dateProvider?: DateProvider, config?: {
|
|
51
54
|
cacheSize: number;
|
|
55
|
+
validatorRefreshIntervalSeconds: number;
|
|
52
56
|
});
|
|
53
57
|
static create(rollupAddress: EthAddress, config?: EpochCacheConfig, deps?: {
|
|
54
58
|
dateProvider?: DateProvider;
|
|
@@ -106,5 +110,6 @@ export declare class EpochCache implements EpochCacheInterface {
|
|
|
106
110
|
isInCommittee(slot: SlotTag, validator: EthAddress): Promise<boolean>;
|
|
107
111
|
/** From the set of given addresses, return all that are on the committee for the given slot */
|
|
108
112
|
filterInCommittee(slot: SlotTag, validators: EthAddress[]): Promise<EthAddress[]>;
|
|
113
|
+
getRegisteredValidators(): Promise<EthAddress[]>;
|
|
109
114
|
}
|
|
110
115
|
//# sourceMappingURL=epoch_cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch_cache.d.ts","sourceRoot":"","sources":["../src/epoch_cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,cAAc,EAAuB,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAEL,KAAK,iBAAiB,EAOvB,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAAE,KAAK,gBAAgB,EAA8B,MAAM,aAAa,CAAC;AAEhF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrE,kBAAkB,IAAI,YAAY,CAAC;IACnC,2BAA2B,IAAI,YAAY,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAAC;IACnF,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtF,6CAA6C,IAAI,OAAO,CAAC;QACvD,eAAe,EAAE,UAAU,GAAG,SAAS,CAAC;QACxC,YAAY,EAAE,UAAU,GAAG,SAAS,CAAC;QACrC,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CACnF;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAW,YAAW,mBAAmB;
|
|
1
|
+
{"version":3,"file":"epoch_cache.d.ts","sourceRoot":"","sources":["../src/epoch_cache.ts"],"names":[],"mappings":"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"}
|
package/dest/epoch_cache.js
CHANGED
|
@@ -19,15 +19,20 @@ import { getEpochCacheConfigEnvVars } from './config.js';
|
|
|
19
19
|
dateProvider;
|
|
20
20
|
config;
|
|
21
21
|
cache;
|
|
22
|
+
allValidators;
|
|
23
|
+
lastValidatorRefresh;
|
|
22
24
|
log;
|
|
23
25
|
constructor(rollup, initialEpoch = 0n, initialValidators = undefined, initialSampleSeed = 0n, l1constants = EmptyL1RollupConstants, dateProvider = new DateProvider(), config = {
|
|
24
|
-
cacheSize: 12
|
|
26
|
+
cacheSize: 12,
|
|
27
|
+
validatorRefreshIntervalSeconds: 60
|
|
25
28
|
}){
|
|
26
29
|
this.rollup = rollup;
|
|
27
30
|
this.l1constants = l1constants;
|
|
28
31
|
this.dateProvider = dateProvider;
|
|
29
32
|
this.config = config;
|
|
30
33
|
this.cache = new Map();
|
|
34
|
+
this.allValidators = new Set();
|
|
35
|
+
this.lastValidatorRefresh = 0;
|
|
31
36
|
this.log = createLogger('epoch-cache');
|
|
32
37
|
this.cache.set(initialEpoch, {
|
|
33
38
|
epoch: initialEpoch,
|
|
@@ -237,4 +242,14 @@ import { getEpochCacheConfigEnvVars } from './config.js';
|
|
|
237
242
|
const committeeSet = new Set(committee.map((v)=>v.toString()));
|
|
238
243
|
return validators.filter((v)=>committeeSet.has(v.toString()));
|
|
239
244
|
}
|
|
245
|
+
async getRegisteredValidators() {
|
|
246
|
+
const validatorRefreshIntervalMs = this.config.validatorRefreshIntervalSeconds * 1000;
|
|
247
|
+
const validatorRefreshTime = this.lastValidatorRefresh + validatorRefreshIntervalMs;
|
|
248
|
+
if (validatorRefreshTime < this.dateProvider.now()) {
|
|
249
|
+
const currentSet = await this.rollup.getAttesters();
|
|
250
|
+
this.allValidators = new Set(currentSet);
|
|
251
|
+
this.lastValidatorRefresh = this.dateProvider.now();
|
|
252
|
+
}
|
|
253
|
+
return Array.from(this.allValidators.keys().map((v)=>EthAddress.fromString(v)));
|
|
254
|
+
}
|
|
240
255
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/epoch-cache",
|
|
3
|
-
"version": "1.0.0-nightly.
|
|
3
|
+
"version": "1.0.0-nightly.20250715",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
"../package.common.json"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@aztec/ethereum": "1.0.0-nightly.
|
|
30
|
-
"@aztec/foundation": "1.0.0-nightly.
|
|
31
|
-
"@aztec/l1-artifacts": "1.0.0-nightly.
|
|
32
|
-
"@aztec/stdlib": "1.0.0-nightly.
|
|
29
|
+
"@aztec/ethereum": "1.0.0-nightly.20250715",
|
|
30
|
+
"@aztec/foundation": "1.0.0-nightly.20250715",
|
|
31
|
+
"@aztec/l1-artifacts": "1.0.0-nightly.20250715",
|
|
32
|
+
"@aztec/stdlib": "1.0.0-nightly.20250715",
|
|
33
33
|
"@viem/anvil": "^0.0.10",
|
|
34
34
|
"dotenv": "^16.0.3",
|
|
35
35
|
"get-port": "^7.1.0",
|
package/src/epoch_cache.ts
CHANGED
|
@@ -43,6 +43,7 @@ export interface EpochCacheInterface {
|
|
|
43
43
|
currentSlot: bigint;
|
|
44
44
|
nextSlot: bigint;
|
|
45
45
|
}>;
|
|
46
|
+
getRegisteredValidators(): Promise<EthAddress[]>;
|
|
46
47
|
isInCommittee(slot: SlotTag, validator: EthAddress): Promise<boolean>;
|
|
47
48
|
filterInCommittee(slot: SlotTag, validators: EthAddress[]): Promise<EthAddress[]>;
|
|
48
49
|
}
|
|
@@ -58,6 +59,8 @@ export interface EpochCacheInterface {
|
|
|
58
59
|
*/
|
|
59
60
|
export class EpochCache implements EpochCacheInterface {
|
|
60
61
|
private cache: Map<bigint, EpochCommitteeInfo> = new Map();
|
|
62
|
+
private allValidators: Set<string> = new Set();
|
|
63
|
+
private lastValidatorRefresh = 0;
|
|
61
64
|
private readonly log: Logger = createLogger('epoch-cache');
|
|
62
65
|
|
|
63
66
|
constructor(
|
|
@@ -67,7 +70,7 @@ export class EpochCache implements EpochCacheInterface {
|
|
|
67
70
|
initialSampleSeed: bigint = 0n,
|
|
68
71
|
private readonly l1constants: L1RollupConstants = EmptyL1RollupConstants,
|
|
69
72
|
private readonly dateProvider: DateProvider = new DateProvider(),
|
|
70
|
-
private readonly config = { cacheSize: 12 },
|
|
73
|
+
private readonly config = { cacheSize: 12, validatorRefreshIntervalSeconds: 60 },
|
|
71
74
|
) {
|
|
72
75
|
this.cache.set(initialEpoch, { epoch: initialEpoch, committee: initialValidators, seed: initialSampleSeed });
|
|
73
76
|
this.log.debug(`Initialized EpochCache with ${initialValidators?.length ?? 'no'} validators`, {
|
|
@@ -298,4 +301,15 @@ export class EpochCache implements EpochCacheInterface {
|
|
|
298
301
|
const committeeSet = new Set(committee.map(v => v.toString()));
|
|
299
302
|
return validators.filter(v => committeeSet.has(v.toString()));
|
|
300
303
|
}
|
|
304
|
+
|
|
305
|
+
async getRegisteredValidators(): Promise<EthAddress[]> {
|
|
306
|
+
const validatorRefreshIntervalMs = this.config.validatorRefreshIntervalSeconds * 1000;
|
|
307
|
+
const validatorRefreshTime = this.lastValidatorRefresh + validatorRefreshIntervalMs;
|
|
308
|
+
if (validatorRefreshTime < this.dateProvider.now()) {
|
|
309
|
+
const currentSet = await this.rollup.getAttesters();
|
|
310
|
+
this.allValidators = new Set(currentSet);
|
|
311
|
+
this.lastValidatorRefresh = this.dateProvider.now();
|
|
312
|
+
}
|
|
313
|
+
return Array.from(this.allValidators.keys().map(v => EthAddress.fromString(v)));
|
|
314
|
+
}
|
|
301
315
|
}
|