@aztec/epoch-cache 3.0.0-nightly.20251127 → 3.0.0-nightly.20251128
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 +1 -1
- package/dest/epoch_cache.d.ts +10 -15
- package/dest/epoch_cache.d.ts.map +1 -1
- package/dest/epoch_cache.js +2 -1
- package/dest/index.d.ts +1 -1
- package/package.json +9 -8
- package/src/epoch_cache.ts +12 -10
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=
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGlCQUFpQixFQUN0QixLQUFLLGNBQWMsRUFHcEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUNqQyxjQUFjLEdBQUcsaUJBQWlCLEVBQ2xDLFdBQVcsR0FBRyxXQUFXLEdBQUcsdUJBQXVCLEdBQUcsc0JBQXNCLENBQzdFLENBQUM7QUFFRix3QkFBZ0IsMEJBQTBCLElBQUksZ0JBQWdCLENBRTdEIn0=
|
package/dest/epoch_cache.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { RollupContract } from '@aztec/ethereum';
|
|
2
|
+
import { EpochNumber } 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:
|
|
8
|
+
epoch: EpochNumber;
|
|
8
9
|
slot: bigint;
|
|
9
10
|
ts: bigint;
|
|
10
11
|
};
|
|
11
12
|
export type EpochCommitteeInfo = {
|
|
12
13
|
committee: EthAddress[] | undefined;
|
|
13
14
|
seed: bigint;
|
|
14
|
-
epoch:
|
|
15
|
+
epoch: EpochNumber;
|
|
15
16
|
};
|
|
16
17
|
export type SlotTag = 'now' | 'next' | bigint;
|
|
17
18
|
export interface EpochCacheInterface {
|
|
@@ -20,8 +21,8 @@ export interface EpochCacheInterface {
|
|
|
20
21
|
getEpochAndSlotInNextL1Slot(): EpochAndSlot & {
|
|
21
22
|
now: bigint;
|
|
22
23
|
};
|
|
23
|
-
getProposerIndexEncoding(epoch:
|
|
24
|
-
computeProposerIndex(slot: bigint, epoch:
|
|
24
|
+
getProposerIndexEncoding(epoch: EpochNumber, slot: bigint, seed: bigint): `0x${string}`;
|
|
25
|
+
computeProposerIndex(slot: bigint, epoch: EpochNumber, seed: bigint, size: bigint): bigint;
|
|
25
26
|
getProposerAttesterAddressInCurrentOrNextSlot(): Promise<{
|
|
26
27
|
currentProposer: EthAddress | undefined;
|
|
27
28
|
nextProposer: EthAddress | undefined;
|
|
@@ -49,7 +50,7 @@ export declare class EpochCache implements EpochCacheInterface {
|
|
|
49
50
|
cacheSize: number;
|
|
50
51
|
validatorRefreshIntervalSeconds: number;
|
|
51
52
|
};
|
|
52
|
-
protected cache: Map<
|
|
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:
|
|
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:
|
|
89
|
-
computeProposerIndex(slot: bigint, epoch:
|
|
89
|
+
getProposerIndexEncoding(epoch: EpochNumber, slot: bigint, seed: bigint): `0x${string}`;
|
|
90
|
+
computeProposerIndex(slot: bigint, epoch: EpochNumber, seed: bigint, size: bigint): bigint;
|
|
90
91
|
/**
|
|
91
92
|
* Returns the current and next proposer's attester address
|
|
92
93
|
*
|
|
@@ -111,12 +112,6 @@ export declare class EpochCache implements EpochCacheInterface {
|
|
|
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
116
|
getProposerFromEpochCommittee(epochCommitteeInfo: EpochCommitteeInfo, slot: bigint): EthAddress | undefined;
|
|
122
117
|
/** Check if a validator is in the given slot's committee */
|
|
@@ -125,4 +120,4 @@ export declare class EpochCache implements EpochCacheInterface {
|
|
|
125
120
|
filterInCommittee(slot: SlotTag, validators: EthAddress[]): Promise<EthAddress[]>;
|
|
126
121
|
getRegisteredValidators(): Promise<EthAddress[]>;
|
|
127
122
|
}
|
|
128
|
-
//# sourceMappingURL=
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2hfY2FjaGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lcG9jaF9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLGNBQWMsRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsS0FBSyxpQkFBaUIsRUFPdkIsTUFBTSw2QkFBNkIsQ0FBQztBQUlyQyxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBOEIsTUFBTSxhQUFhLENBQUM7QUFFaEYsTUFBTSxNQUFNLFlBQVksR0FBRztJQUN6QixLQUFLLEVBQUUsV0FBVyxDQUFDO0lBQ25CLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDO0NBQ1osQ0FBQztBQUVGLE1BQU0sTUFBTSxrQkFBa0IsR0FBRztJQUMvQixTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixLQUFLLEVBQUUsV0FBVyxDQUFDO0NBQ3BCLENBQUM7QUFFRixNQUFNLE1BQU0sT0FBTyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBRTlDLE1BQU0sV0FBVyxtQkFBbUI7SUFDbEMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JFLGtCQUFrQixJQUFJLFlBQVksQ0FBQztJQUNuQywyQkFBMkIsSUFBSSxZQUFZLEdBQUc7UUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUM5RCx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUs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
|
|
@@ -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,EACL,KAAK,iBAAiB,EAOvB,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAAE,KAAK,gBAAgB,EAA8B,MAAM,aAAa,CAAC;AAEhF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,
|
|
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
|
@@ -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,7 +186,7 @@ import { getEpochCacheConfigEnvVars } from './config.js';
|
|
|
185
186
|
name: 'seed'
|
|
186
187
|
}
|
|
187
188
|
], [
|
|
188
|
-
epoch,
|
|
189
|
+
BigInt(epoch),
|
|
189
190
|
slot,
|
|
190
191
|
seed
|
|
191
192
|
]);
|
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=
|
|
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.
|
|
3
|
+
"version": "3.0.0-nightly.20251128",
|
|
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 &&
|
|
19
|
-
"build:dev": "
|
|
18
|
+
"build": "yarn clean && tsgo -b",
|
|
19
|
+
"build:dev": "tsgo -b --watch",
|
|
20
20
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
21
|
-
"start:dev": "
|
|
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.
|
|
30
|
-
"@aztec/foundation": "3.0.0-nightly.
|
|
31
|
-
"@aztec/l1-artifacts": "3.0.0-nightly.
|
|
32
|
-
"@aztec/stdlib": "3.0.0-nightly.
|
|
29
|
+
"@aztec/ethereum": "3.0.0-nightly.20251128",
|
|
30
|
+
"@aztec/foundation": "3.0.0-nightly.20251128",
|
|
31
|
+
"@aztec/l1-artifacts": "3.0.0-nightly.20251128",
|
|
32
|
+
"@aztec/stdlib": "3.0.0-nightly.20251128",
|
|
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"
|
package/src/epoch_cache.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { NoCommitteeError, RollupContract, createEthereumChain } from '@aztec/ethereum';
|
|
2
|
+
import { EpochNumber } 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,7 +18,7 @@ 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:
|
|
21
|
+
epoch: EpochNumber;
|
|
21
22
|
slot: bigint;
|
|
22
23
|
ts: bigint;
|
|
23
24
|
};
|
|
@@ -25,7 +26,7 @@ export type EpochAndSlot = {
|
|
|
25
26
|
export type EpochCommitteeInfo = {
|
|
26
27
|
committee: EthAddress[] | undefined;
|
|
27
28
|
seed: bigint;
|
|
28
|
-
epoch:
|
|
29
|
+
epoch: EpochNumber;
|
|
29
30
|
};
|
|
30
31
|
|
|
31
32
|
export type SlotTag = 'now' | 'next' | bigint;
|
|
@@ -34,8 +35,8 @@ export interface EpochCacheInterface {
|
|
|
34
35
|
getCommittee(slot: SlotTag | undefined): Promise<EpochCommitteeInfo>;
|
|
35
36
|
getEpochAndSlotNow(): EpochAndSlot;
|
|
36
37
|
getEpochAndSlotInNextL1Slot(): EpochAndSlot & { now: bigint };
|
|
37
|
-
getProposerIndexEncoding(epoch:
|
|
38
|
-
computeProposerIndex(slot: bigint, epoch:
|
|
38
|
+
getProposerIndexEncoding(epoch: EpochNumber, slot: bigint, seed: bigint): `0x${string}`;
|
|
39
|
+
computeProposerIndex(slot: bigint, epoch: EpochNumber, seed: bigint, size: bigint): bigint;
|
|
39
40
|
getProposerAttesterAddressInCurrentOrNextSlot(): Promise<{
|
|
40
41
|
currentProposer: EthAddress | undefined;
|
|
41
42
|
nextProposer: EthAddress | undefined;
|
|
@@ -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
|
-
|
|
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');
|
|
@@ -163,7 +165,7 @@ export class EpochCache implements EpochCacheInterface {
|
|
|
163
165
|
};
|
|
164
166
|
}
|
|
165
167
|
|
|
166
|
-
public getCommitteeForEpoch(epoch:
|
|
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:
|
|
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:
|
|
231
|
+
getProposerIndexEncoding(epoch: EpochNumber, slot: bigint, 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), slot, seed],
|
|
237
239
|
);
|
|
238
240
|
}
|
|
239
241
|
|
|
240
|
-
public computeProposerIndex(slot: bigint, epoch:
|
|
242
|
+
public computeProposerIndex(slot: bigint, 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;
|