@aztec/epoch-cache 0.0.1-commit.b2a5d0dd1 → 0.0.1-commit.b3d3157a
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/README.md +4 -5
- package/dest/config.d.ts +2 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +1 -3
- package/dest/epoch_cache.d.ts +2 -9
- package/dest/epoch_cache.d.ts.map +1 -1
- package/dest/epoch_cache.js +7 -22
- package/dest/test/test_epoch_cache.d.ts +1 -5
- package/dest/test/test_epoch_cache.d.ts.map +1 -1
- package/dest/test/test_epoch_cache.js +2 -12
- package/package.json +6 -6
- package/src/config.ts +3 -9
- package/src/epoch_cache.ts +4 -24
- package/src/test/test_epoch_cache.ts +2 -17
package/README.md
CHANGED
|
@@ -110,10 +110,10 @@ because the slot number is mixed into the hash.
|
|
|
110
110
|
|
|
111
111
|
### Proposer Pipelining
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
113
|
+
The proposer always builds for the *next* slot rather than the current one
|
|
114
|
+
(`PROPOSER_PIPELINING_SLOT_OFFSET = 1`). This gives the proposer a full slot of
|
|
115
|
+
lead time to assemble and propagate the block. The "target slot" methods on the
|
|
116
|
+
epoch cache apply this offset automatically.
|
|
117
117
|
|
|
118
118
|
### Empty Committees
|
|
119
119
|
|
|
@@ -205,7 +205,6 @@ used to check validator registration status independently of committee membershi
|
|
|
205
205
|
|-----------|---------|---------|
|
|
206
206
|
| `cacheSize` | 12 | Max number of epoch committee entries to keep |
|
|
207
207
|
| `validatorRefreshIntervalSeconds` | 60 | How often to refresh the full validator list |
|
|
208
|
-
| `enableProposerPipelining` | false | Build for next slot instead of current |
|
|
209
208
|
| `lagInEpochsForValidatorSet` | (from L1) | How far back to snapshot the validator set |
|
|
210
209
|
| `lagInEpochsForRandao` | (from L1) | How far back to sample the RANDAO seed |
|
|
211
210
|
| `targetCommitteeSize` | (from L1) | Number of validators to select per epoch |
|
package/dest/config.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { type L1ContractsConfig } from '@aztec/ethereum/config';
|
|
2
2
|
import { type L1ReaderConfig } from '@aztec/ethereum/l1-reader';
|
|
3
|
-
|
|
4
|
-
export type EpochCacheConfig = Pick<L1ReaderConfig & L1ContractsConfig & PipelineConfig, 'l1RpcUrls' | 'l1ChainId' | 'viemPollingIntervalMS' | 'ethereumSlotDuration' | 'l1HttpTimeoutMS' | 'enableProposerPipelining'>;
|
|
3
|
+
export type EpochCacheConfig = Pick<L1ReaderConfig & L1ContractsConfig, 'l1RpcUrls' | 'l1ChainId' | 'viemPollingIntervalMS' | 'ethereumSlotDuration' | 'l1HttpTimeoutMS'>;
|
|
5
4
|
export declare function getEpochCacheConfigEnvVars(): EpochCacheConfig;
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUErQixNQUFNLHdCQUF3QixDQUFDO0FBQzdGLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBNEIsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRixNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUNqQyxjQUFjLEdBQUcsaUJBQWlCLEVBQ2xDLFdBQVcsR0FBRyxXQUFXLEdBQUcsdUJBQXVCLEdBQUcsc0JBQXNCLEdBQUcsaUJBQWlCLENBQ2pHLENBQUM7QUFFRix3QkFBZ0IsMEJBQTBCLElBQUksZ0JBQWdCLENBRTdEIn0=
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAA+B,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,KAAK,cAAc,EAA4B,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAA+B,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,KAAK,cAAc,EAA4B,MAAM,2BAA2B,CAAC;AAE1F,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,cAAc,GAAG,iBAAiB,EAClC,WAAW,GAAG,WAAW,GAAG,uBAAuB,GAAG,sBAAsB,GAAG,iBAAiB,CACjG,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D"}
|
package/dest/config.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
2
2
|
import { getL1ReaderConfigFromEnv } from '@aztec/ethereum/l1-reader';
|
|
3
|
-
import { getPipelineConfigEnvVars } from '@aztec/stdlib/config';
|
|
4
3
|
export function getEpochCacheConfigEnvVars() {
|
|
5
4
|
return {
|
|
6
5
|
...getL1ReaderConfigFromEnv(),
|
|
7
|
-
...getL1ContractsConfigEnvVars()
|
|
8
|
-
...getPipelineConfigEnvVars()
|
|
6
|
+
...getL1ContractsConfigEnvVars()
|
|
9
7
|
};
|
|
10
8
|
}
|
package/dest/epoch_cache.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
4
4
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
5
5
|
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
6
6
|
import { type EpochCacheConfig } from './config.js';
|
|
7
|
-
/**
|
|
7
|
+
/** The proposer pipelines by building one slot ahead. */
|
|
8
8
|
export declare const PROPOSER_PIPELINING_SLOT_OFFSET = 1;
|
|
9
9
|
/** Flat return type for compound epoch/slot getters. */
|
|
10
10
|
export type EpochAndSlot = {
|
|
@@ -48,8 +48,6 @@ export interface EpochCacheInterface {
|
|
|
48
48
|
getTargetEpochAndSlotInNextL1Slot(): EpochAndSlot & {
|
|
49
49
|
nowSeconds: bigint;
|
|
50
50
|
};
|
|
51
|
-
isProposerPipeliningEnabled(): boolean;
|
|
52
|
-
pipeliningOffset(): number;
|
|
53
51
|
isEscapeHatchOpen(epoch: EpochNumber): Promise<boolean>;
|
|
54
52
|
isEscapeHatchOpenAtSlot(slot: SlotTag): Promise<boolean>;
|
|
55
53
|
getProposerIndexEncoding(epoch: EpochNumber, slot: SlotNumber, seed: bigint): `0x${string}`;
|
|
@@ -84,7 +82,6 @@ export declare class EpochCache implements EpochCacheInterface {
|
|
|
84
82
|
protected readonly config: {
|
|
85
83
|
cacheSize: number;
|
|
86
84
|
validatorRefreshIntervalSeconds: number;
|
|
87
|
-
enableProposerPipelining: boolean;
|
|
88
85
|
};
|
|
89
86
|
/**
|
|
90
87
|
* Single map holding both resolved entries and in-flight promises.
|
|
@@ -94,21 +91,17 @@ export declare class EpochCache implements EpochCacheInterface {
|
|
|
94
91
|
private allValidators;
|
|
95
92
|
private lastValidatorRefresh;
|
|
96
93
|
private readonly log;
|
|
97
|
-
protected enableProposerPipelining: boolean;
|
|
98
94
|
constructor(rollup: RollupContract, l1constants: L1RollupConstants & {
|
|
99
95
|
lagInEpochsForValidatorSet: number;
|
|
100
96
|
lagInEpochsForRandao: number;
|
|
101
97
|
}, dateProvider?: DateProvider, config?: {
|
|
102
98
|
cacheSize: number;
|
|
103
99
|
validatorRefreshIntervalSeconds: number;
|
|
104
|
-
enableProposerPipelining: boolean;
|
|
105
100
|
});
|
|
106
101
|
static create(rollupOrAddress: EthAddress | RollupContract, config?: EpochCacheConfig, deps?: {
|
|
107
102
|
dateProvider?: DateProvider;
|
|
108
103
|
}): Promise<EpochCache>;
|
|
109
104
|
getL1Constants(): L1RollupConstants;
|
|
110
|
-
isProposerPipeliningEnabled(): boolean;
|
|
111
|
-
pipeliningOffset(): number;
|
|
112
105
|
getSlotNow(): SlotNumber;
|
|
113
106
|
getTargetSlot(): SlotNumber;
|
|
114
107
|
getEpochNow(): EpochNumber;
|
|
@@ -191,4 +184,4 @@ export declare class EpochCache implements EpochCacheInterface {
|
|
|
191
184
|
getRegisteredValidators(): Promise<EthAddress[]>;
|
|
192
185
|
}
|
|
193
186
|
export {};
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2hfY2FjaGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lcG9jaF9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsS0FBSyxpQkFBaUIsRUFTdkIsTUFBTSw2QkFBNkIsQ0FBQztBQUlyQyxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBOEIsTUFBTSxhQUFhLENBQUM7QUFFaEYseURBQXlEO0FBQ3pELGVBQU8sTUFBTSwrQkFBK0IsSUFBSSxDQUFDO0FBRWpELHdEQUF3RDtBQUN4RCxNQUFNLE1BQU0sWUFBWSxHQUFHO0lBQ3pCLElBQUksRUFBRSxVQUFVLENBQUM7SUFDakIsS0FBSyxFQUFFLFdBQVcsQ0FBQztJQUNuQixFQUFFLEVBQUUsTUFBTSxDQUFDO0NBQ1osQ0FBQztBQUVGLE1BQU0sTUFBTSxrQkFBa0IsR0FBRztJQUMvQixTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixLQUFLLEVBQUUsV0FBVyxDQUFDO0lBQ25CLCtEQUErRDtJQUMvRCxpQkFBaUIsRUFBRSxPQUFPLENBQUM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sTUFBTSxPQUFPLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFLbEQsd0RBQXdEO0FBQ3hELEtBQUssZ0JBQWdCLEdBQUc7SUFDdEIsSUFBSSxFQUFFLGtCQUFrQixDQUFDO0lBQ3pCLDBFQUEwRTtJQUMxRSxzQkFBc0IsRUFBRSxNQUFNLENBQUM7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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch_cache.d.ts","sourceRoot":"","sources":["../src/epoch_cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,KAAK,iBAAiB,EASvB,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAAE,KAAK,gBAAgB,EAA8B,MAAM,aAAa,CAAC;AAEhF
|
|
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
|
@@ -9,7 +9,7 @@ import { DateProvider } from '@aztec/foundation/timer';
|
|
|
9
9
|
import { getEpochAtSlot, getEpochNumberAtTimestamp, getNextL1SlotTimestamp, getSlotAtNextL1Block, getSlotAtTimestamp, getSlotRangeForEpoch, getStartTimestampForEpoch, getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
10
10
|
import { createPublicClient, encodeAbiParameters, keccak256 } from 'viem';
|
|
11
11
|
import { getEpochCacheConfigEnvVars } from './config.js';
|
|
12
|
-
/**
|
|
12
|
+
/** The proposer pipelines by building one slot ahead. */ export const PROPOSER_PIPELINING_SLOT_OFFSET = 1;
|
|
13
13
|
/**
|
|
14
14
|
* Epoch cache
|
|
15
15
|
*
|
|
@@ -26,16 +26,13 @@ import { getEpochCacheConfigEnvVars } from './config.js';
|
|
|
26
26
|
/**
|
|
27
27
|
* Single map holding both resolved entries and in-flight promises.
|
|
28
28
|
* A `Promise` value means a fetch is in progress; concurrent callers await it.
|
|
29
|
-
*/
|
|
30
|
-
cache;
|
|
29
|
+
*/ cache;
|
|
31
30
|
allValidators;
|
|
32
31
|
lastValidatorRefresh;
|
|
33
32
|
log;
|
|
34
|
-
enableProposerPipelining;
|
|
35
33
|
constructor(rollup, l1constants, dateProvider = new DateProvider(), config = {
|
|
36
34
|
cacheSize: 12,
|
|
37
|
-
validatorRefreshIntervalSeconds: 60
|
|
38
|
-
enableProposerPipelining: false
|
|
35
|
+
validatorRefreshIntervalSeconds: 60
|
|
39
36
|
}){
|
|
40
37
|
this.rollup = rollup;
|
|
41
38
|
this.l1constants = l1constants;
|
|
@@ -45,10 +42,8 @@ import { getEpochCacheConfigEnvVars } from './config.js';
|
|
|
45
42
|
this.allValidators = new Set();
|
|
46
43
|
this.lastValidatorRefresh = 0;
|
|
47
44
|
this.log = createLogger('epoch-cache');
|
|
48
|
-
this.enableProposerPipelining = this.config.enableProposerPipelining;
|
|
49
45
|
this.log.debug(`Initialized EpochCache`, {
|
|
50
|
-
l1constants
|
|
51
|
-
enableProposerPipelining: this.enableProposerPipelining
|
|
46
|
+
l1constants
|
|
52
47
|
});
|
|
53
48
|
}
|
|
54
49
|
static async create(rollupOrAddress, config, deps = {}) {
|
|
@@ -93,25 +88,18 @@ import { getEpochCacheConfigEnvVars } from './config.js';
|
|
|
93
88
|
};
|
|
94
89
|
return new EpochCache(rollup, l1RollupConstants, deps.dateProvider, {
|
|
95
90
|
cacheSize: 12,
|
|
96
|
-
validatorRefreshIntervalSeconds: 60
|
|
97
|
-
enableProposerPipelining: config.enableProposerPipelining
|
|
91
|
+
validatorRefreshIntervalSeconds: 60
|
|
98
92
|
});
|
|
99
93
|
}
|
|
100
94
|
getL1Constants() {
|
|
101
95
|
return this.l1constants;
|
|
102
96
|
}
|
|
103
|
-
isProposerPipeliningEnabled() {
|
|
104
|
-
return this.enableProposerPipelining;
|
|
105
|
-
}
|
|
106
|
-
pipeliningOffset() {
|
|
107
|
-
return this.enableProposerPipelining ? PROPOSER_PIPELINING_SLOT_OFFSET : 0;
|
|
108
|
-
}
|
|
109
97
|
getSlotNow() {
|
|
110
98
|
return this.getEpochAndSlotNow().slot;
|
|
111
99
|
}
|
|
112
100
|
getTargetSlot() {
|
|
113
101
|
const slotNow = this.getSlotNow();
|
|
114
|
-
const offset =
|
|
102
|
+
const offset = PROPOSER_PIPELINING_SLOT_OFFSET;
|
|
115
103
|
return SlotNumber(slotNow + offset);
|
|
116
104
|
}
|
|
117
105
|
getEpochNow() {
|
|
@@ -140,9 +128,6 @@ import { getEpochCacheConfigEnvVars } from './config.js';
|
|
|
140
128
|
};
|
|
141
129
|
}
|
|
142
130
|
getTargetEpochAndSlotInNextL1Slot() {
|
|
143
|
-
if (!this.isProposerPipeliningEnabled()) {
|
|
144
|
-
return this.getEpochAndSlotInNextL1Slot();
|
|
145
|
-
}
|
|
146
131
|
const result = this.getEpochAndSlotInNextL1Slot();
|
|
147
132
|
const offset = PROPOSER_PIPELINING_SLOT_OFFSET;
|
|
148
133
|
const targetSlot = SlotNumber(result.slot + offset);
|
|
@@ -381,7 +366,7 @@ import { getEpochCacheConfigEnvVars } from './config.js';
|
|
|
381
366
|
}
|
|
382
367
|
/** Returns the target and next L2 slot in the next L1 slot. */ getTargetAndNextSlot() {
|
|
383
368
|
const nowSeconds = BigInt(this.dateProvider.nowInSeconds());
|
|
384
|
-
const offset =
|
|
369
|
+
const offset = PROPOSER_PIPELINING_SLOT_OFFSET;
|
|
385
370
|
const currentSlot = getSlotAtTimestamp(nowSeconds, this.l1constants);
|
|
386
371
|
const targetSlot = SlotNumber(currentSlot + offset);
|
|
387
372
|
const nextL2SlotOnL1 = getSlotAtNextL1Block(nowSeconds, this.l1constants);
|
|
@@ -17,7 +17,6 @@ export declare class TestEpochCache implements EpochCacheInterface {
|
|
|
17
17
|
private seed;
|
|
18
18
|
private registeredValidators;
|
|
19
19
|
private l1Constants;
|
|
20
|
-
private proposerPipeliningEnabled;
|
|
21
20
|
constructor(l1Constants?: Partial<L1RollupConstants>);
|
|
22
21
|
/**
|
|
23
22
|
* Sets the committee members. Used in validation and attestation flows.
|
|
@@ -55,14 +54,11 @@ export declare class TestEpochCache implements EpochCacheInterface {
|
|
|
55
54
|
*/
|
|
56
55
|
setL1Constants(constants: Partial<L1RollupConstants>): this;
|
|
57
56
|
getL1Constants(): L1RollupConstants;
|
|
58
|
-
setProposerPipeliningEnabled(enabled: boolean): void;
|
|
59
57
|
getCommittee(_slot?: SlotTag): Promise<EpochCommitteeInfo>;
|
|
60
58
|
getSlotNow(): SlotNumber;
|
|
61
59
|
getTargetSlot(): SlotNumber;
|
|
62
60
|
getEpochNow(): EpochNumber;
|
|
63
61
|
getTargetEpoch(): EpochNumber;
|
|
64
|
-
isProposerPipeliningEnabled(): boolean;
|
|
65
|
-
pipeliningOffset(): number;
|
|
66
62
|
getEpochAndSlotNow(): EpochAndSlot & {
|
|
67
63
|
nowMs: bigint;
|
|
68
64
|
};
|
|
@@ -89,4 +85,4 @@ export declare class TestEpochCache implements EpochCacheInterface {
|
|
|
89
85
|
isEscapeHatchOpen(_epoch: EpochNumber): Promise<boolean>;
|
|
90
86
|
isEscapeHatchOpenAtSlot(_slot?: SlotTag): Promise<boolean>;
|
|
91
87
|
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9lcG9jaF9jYWNoZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvdGVzdF9lcG9jaF9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR3JFLE9BQU8sRUFDTCxLQUFLLFlBQVksRUFDakIsS0FBSyxtQkFBbUIsRUFDeEIsS0FBSyxrQkFBa0IsRUFFdkIsS0FBSyxPQUFPLEVBQ2IsTUFBTSxtQkFBbUIsQ0FBQztBQWMzQjs7Ozs7O0dBTUc7QUFDSCxxQkFBYSxjQUFlLFlBQVcsbUJBQW1CO0lBQ3hELE9BQU8sQ0FBQyxTQUFTLENBQW9CO0lBQ3JDLE9BQU8sQ0FBQyxlQUFlLENBQXlCO0lBQ2hELE9BQU8sQ0FBQyxXQUFXLENBQTZCO0lBQ2hELE9BQU8sQ0FBQyxlQUFlLENBQWtCO0lBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQWM7SUFDMUIsT0FBTyxDQUFDLG9CQUFvQixDQUFvQjtJQUNoRCxPQUFPLENBQUMsV0FBVyxDQUFvQjtJQUV2QyxZQUFZLFdBQVcsR0FBRSxPQUFPLENBQUMsaUJBQWlCLENBQU0sRUFFdkQ7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FHMUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsUUFBUSxFQUFFLFVBQVUsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUdsRDtJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FHckM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FHdEM7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBRzFCO0lBRUQ7OztPQUdHO0lBQ0gsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FHdEQ7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FHMUQ7SUFFRCxjQUFjLElBQUksaUJBQWlCLENBRWxDO0lBRUQsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FRekQ7SUFFRCxVQUFVLElBQUksVUFBVSxDQUV2QjtJQUVELGFBQWEsSUFBSSxVQUFVLENBRTFCO0lBRUQsV0FBVyxJQUFJLFdBQVcsQ0FFekI7SUFFRCxjQUFjLElBQUksV0FBVyxDQUU1QjtJQUVELGtCQUFrQixJQUFJLFlBQVksR0FBRztRQUFFLEtBQUssRUFBRSxNQUFNLENBQUE7S0FBRSxDQVNyRDtJQUVELDJCQUEyQixJQUFJLFlBQVksR0FBRztRQUFFLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxDQVluRTtJQUVELGlDQUFpQyxJQUFJLFlBQVksR0FBRztRQUFFLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUt6RTtJQUVELHdCQUF3QixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLEtBQUssTUFBTSxFQUFFLENBRzFGO0lBRUQsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBSy9GO0lBRUQscUJBQXFCLElBQUk7UUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDO1FBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQTtLQUFFLENBUXpFO0lBRUQsb0JBQW9CLElBQUk7UUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO1FBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQTtLQUFFLENBUXZFO0lBRUQsZ0NBQWdDLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUVuRjtJQUVELHVCQUF1QixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUUvQztJQUVELGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUVyRTtJQUVELGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUdqRjtJQUVELGlCQUFpQixDQUFDLE1BQU0sRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUV2RDtJQUVELHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRXpEO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_epoch_cache.d.ts","sourceRoot":"","sources":["../../src/test/test_epoch_cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAEvB,KAAK,OAAO,EACb,MAAM,mBAAmB,CAAC;AAc3B;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,mBAAmB;IACxD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,oBAAoB,CAAoB;IAChD,OAAO,CAAC,WAAW,CAAoB;
|
|
1
|
+
{"version":3,"file":"test_epoch_cache.d.ts","sourceRoot":"","sources":["../../src/test/test_epoch_cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,6 @@ import { PROPOSER_PIPELINING_SLOT_OFFSET } from '../epoch_cache.js';
|
|
|
25
25
|
seed = 0n;
|
|
26
26
|
registeredValidators = [];
|
|
27
27
|
l1Constants;
|
|
28
|
-
proposerPipeliningEnabled = false;
|
|
29
28
|
constructor(l1Constants = {}){
|
|
30
29
|
this.l1Constants = {
|
|
31
30
|
...DEFAULT_L1_CONSTANTS,
|
|
@@ -87,9 +86,6 @@ import { PROPOSER_PIPELINING_SLOT_OFFSET } from '../epoch_cache.js';
|
|
|
87
86
|
getL1Constants() {
|
|
88
87
|
return this.l1Constants;
|
|
89
88
|
}
|
|
90
|
-
setProposerPipeliningEnabled(enabled) {
|
|
91
|
-
this.proposerPipeliningEnabled = enabled;
|
|
92
|
-
}
|
|
93
89
|
getCommittee(_slot) {
|
|
94
90
|
const epoch = getEpochAtSlot(this.currentSlot, this.l1Constants);
|
|
95
91
|
return Promise.resolve({
|
|
@@ -103,7 +99,7 @@ import { PROPOSER_PIPELINING_SLOT_OFFSET } from '../epoch_cache.js';
|
|
|
103
99
|
return this.currentSlot;
|
|
104
100
|
}
|
|
105
101
|
getTargetSlot() {
|
|
106
|
-
return
|
|
102
|
+
return SlotNumber(this.currentSlot + PROPOSER_PIPELINING_SLOT_OFFSET);
|
|
107
103
|
}
|
|
108
104
|
getEpochNow() {
|
|
109
105
|
return getEpochAtSlot(this.currentSlot, this.l1Constants);
|
|
@@ -111,12 +107,6 @@ import { PROPOSER_PIPELINING_SLOT_OFFSET } from '../epoch_cache.js';
|
|
|
111
107
|
getTargetEpoch() {
|
|
112
108
|
return getEpochAtSlot(this.getTargetSlot(), this.l1Constants);
|
|
113
109
|
}
|
|
114
|
-
isProposerPipeliningEnabled() {
|
|
115
|
-
return this.proposerPipeliningEnabled;
|
|
116
|
-
}
|
|
117
|
-
pipeliningOffset() {
|
|
118
|
-
return this.proposerPipeliningEnabled ? PROPOSER_PIPELINING_SLOT_OFFSET : 0;
|
|
119
|
-
}
|
|
120
110
|
getEpochAndSlotNow() {
|
|
121
111
|
const epochNow = getEpochAtSlot(this.currentSlot, this.l1Constants);
|
|
122
112
|
const ts = getTimestampRangeForEpoch(epochNow, this.l1Constants)[0];
|
|
@@ -142,7 +132,7 @@ import { PROPOSER_PIPELINING_SLOT_OFFSET } from '../epoch_cache.js';
|
|
|
142
132
|
}
|
|
143
133
|
getTargetEpochAndSlotInNextL1Slot() {
|
|
144
134
|
const result = this.getEpochAndSlotInNextL1Slot();
|
|
145
|
-
const offset =
|
|
135
|
+
const offset = PROPOSER_PIPELINING_SLOT_OFFSET;
|
|
146
136
|
const targetSlot = SlotNumber(result.slot + offset);
|
|
147
137
|
return {
|
|
148
138
|
...result,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/epoch-cache",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.b3d3157a",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -26,16 +26,16 @@
|
|
|
26
26
|
"../package.common.json"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
30
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
31
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
32
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
29
|
+
"@aztec/ethereum": "0.0.1-commit.b3d3157a",
|
|
30
|
+
"@aztec/foundation": "0.0.1-commit.b3d3157a",
|
|
31
|
+
"@aztec/l1-artifacts": "0.0.1-commit.b3d3157a",
|
|
32
|
+
"@aztec/stdlib": "0.0.1-commit.b3d3157a",
|
|
33
33
|
"dotenv": "^16.0.3",
|
|
34
34
|
"get-port": "^7.1.0",
|
|
35
35
|
"jest-mock-extended": "^4.0.0",
|
|
36
36
|
"tslib": "^2.4.0",
|
|
37
37
|
"viem": "npm:@aztec/viem@2.38.2",
|
|
38
|
-
"zod": "^
|
|
38
|
+
"zod": "^4"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@jest/globals": "^30.0.0",
|
package/src/config.ts
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
import { type L1ContractsConfig, getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
2
2
|
import { type L1ReaderConfig, getL1ReaderConfigFromEnv } from '@aztec/ethereum/l1-reader';
|
|
3
|
-
import { type PipelineConfig, getPipelineConfigEnvVars } from '@aztec/stdlib/config';
|
|
4
3
|
|
|
5
4
|
export type EpochCacheConfig = Pick<
|
|
6
|
-
L1ReaderConfig & L1ContractsConfig
|
|
7
|
-
| '
|
|
8
|
-
| 'l1ChainId'
|
|
9
|
-
| 'viemPollingIntervalMS'
|
|
10
|
-
| 'ethereumSlotDuration'
|
|
11
|
-
| 'l1HttpTimeoutMS'
|
|
12
|
-
| 'enableProposerPipelining'
|
|
5
|
+
L1ReaderConfig & L1ContractsConfig,
|
|
6
|
+
'l1RpcUrls' | 'l1ChainId' | 'viemPollingIntervalMS' | 'ethereumSlotDuration' | 'l1HttpTimeoutMS'
|
|
13
7
|
>;
|
|
14
8
|
|
|
15
9
|
export function getEpochCacheConfigEnvVars(): EpochCacheConfig {
|
|
16
|
-
return { ...getL1ReaderConfigFromEnv(), ...getL1ContractsConfigEnvVars()
|
|
10
|
+
return { ...getL1ReaderConfigFromEnv(), ...getL1ContractsConfigEnvVars() };
|
|
17
11
|
}
|
package/src/epoch_cache.ts
CHANGED
|
@@ -22,7 +22,7 @@ import { createPublicClient, encodeAbiParameters, keccak256 } from 'viem';
|
|
|
22
22
|
|
|
23
23
|
import { type EpochCacheConfig, getEpochCacheConfigEnvVars } from './config.js';
|
|
24
24
|
|
|
25
|
-
/**
|
|
25
|
+
/** The proposer pipelines by building one slot ahead. */
|
|
26
26
|
export const PROPOSER_PIPELINING_SLOT_OFFSET = 1;
|
|
27
27
|
|
|
28
28
|
/** Flat return type for compound epoch/slot getters. */
|
|
@@ -68,8 +68,6 @@ export interface EpochCacheInterface {
|
|
|
68
68
|
getEpochAndSlotInNextL1Slot(): EpochAndSlot & { nowSeconds: bigint };
|
|
69
69
|
/** Returns epoch/slot info for the next L1 slot with pipeline offset applied. */
|
|
70
70
|
getTargetEpochAndSlotInNextL1Slot(): EpochAndSlot & { nowSeconds: bigint };
|
|
71
|
-
isProposerPipeliningEnabled(): boolean;
|
|
72
|
-
pipeliningOffset(): number;
|
|
73
71
|
isEscapeHatchOpen(epoch: EpochNumber): Promise<boolean>;
|
|
74
72
|
isEscapeHatchOpenAtSlot(slot: SlotTag): Promise<boolean>;
|
|
75
73
|
getProposerIndexEncoding(epoch: EpochNumber, slot: SlotNumber, seed: bigint): `0x${string}`;
|
|
@@ -97,14 +95,11 @@ export class EpochCache implements EpochCacheInterface {
|
|
|
97
95
|
* Single map holding both resolved entries and in-flight promises.
|
|
98
96
|
* A `Promise` value means a fetch is in progress; concurrent callers await it.
|
|
99
97
|
*/
|
|
100
|
-
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
101
98
|
protected cache: Map<EpochNumber, CachedEpochEntry | Promise<CachedEpochEntry>> = new Map();
|
|
102
99
|
private allValidators: Set<string> = new Set();
|
|
103
100
|
private lastValidatorRefresh = 0;
|
|
104
101
|
private readonly log: Logger = createLogger('epoch-cache');
|
|
105
102
|
|
|
106
|
-
protected enableProposerPipelining: boolean;
|
|
107
|
-
|
|
108
103
|
constructor(
|
|
109
104
|
private rollup: RollupContract,
|
|
110
105
|
private readonly l1constants: L1RollupConstants & {
|
|
@@ -112,12 +107,10 @@ export class EpochCache implements EpochCacheInterface {
|
|
|
112
107
|
lagInEpochsForRandao: number;
|
|
113
108
|
},
|
|
114
109
|
private readonly dateProvider: DateProvider = new DateProvider(),
|
|
115
|
-
protected readonly config = { cacheSize: 12, validatorRefreshIntervalSeconds: 60
|
|
110
|
+
protected readonly config = { cacheSize: 12, validatorRefreshIntervalSeconds: 60 },
|
|
116
111
|
) {
|
|
117
|
-
this.enableProposerPipelining = this.config.enableProposerPipelining;
|
|
118
112
|
this.log.debug(`Initialized EpochCache`, {
|
|
119
113
|
l1constants,
|
|
120
|
-
enableProposerPipelining: this.enableProposerPipelining,
|
|
121
114
|
});
|
|
122
115
|
}
|
|
123
116
|
|
|
@@ -180,7 +173,6 @@ export class EpochCache implements EpochCacheInterface {
|
|
|
180
173
|
return new EpochCache(rollup, l1RollupConstants, deps.dateProvider, {
|
|
181
174
|
cacheSize: 12,
|
|
182
175
|
validatorRefreshIntervalSeconds: 60,
|
|
183
|
-
enableProposerPipelining: config.enableProposerPipelining,
|
|
184
176
|
});
|
|
185
177
|
}
|
|
186
178
|
|
|
@@ -188,21 +180,13 @@ export class EpochCache implements EpochCacheInterface {
|
|
|
188
180
|
return this.l1constants;
|
|
189
181
|
}
|
|
190
182
|
|
|
191
|
-
public isProposerPipeliningEnabled(): boolean {
|
|
192
|
-
return this.enableProposerPipelining;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
public pipeliningOffset(): number {
|
|
196
|
-
return this.enableProposerPipelining ? PROPOSER_PIPELINING_SLOT_OFFSET : 0;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
183
|
public getSlotNow(): SlotNumber {
|
|
200
184
|
return this.getEpochAndSlotNow().slot;
|
|
201
185
|
}
|
|
202
186
|
|
|
203
187
|
public getTargetSlot(): SlotNumber {
|
|
204
188
|
const slotNow = this.getSlotNow();
|
|
205
|
-
const offset =
|
|
189
|
+
const offset = PROPOSER_PIPELINING_SLOT_OFFSET;
|
|
206
190
|
return SlotNumber(slotNow + offset);
|
|
207
191
|
}
|
|
208
192
|
|
|
@@ -231,10 +215,6 @@ export class EpochCache implements EpochCacheInterface {
|
|
|
231
215
|
}
|
|
232
216
|
|
|
233
217
|
public getTargetEpochAndSlotInNextL1Slot(): EpochAndSlot & { nowSeconds: bigint } {
|
|
234
|
-
if (!this.isProposerPipeliningEnabled()) {
|
|
235
|
-
return this.getEpochAndSlotInNextL1Slot();
|
|
236
|
-
}
|
|
237
|
-
|
|
238
218
|
const result = this.getEpochAndSlotInNextL1Slot();
|
|
239
219
|
const offset = PROPOSER_PIPELINING_SLOT_OFFSET;
|
|
240
220
|
const targetSlot = SlotNumber(result.slot + offset);
|
|
@@ -507,7 +487,7 @@ export class EpochCache implements EpochCacheInterface {
|
|
|
507
487
|
/** Returns the target and next L2 slot in the next L1 slot. */
|
|
508
488
|
public getTargetAndNextSlot(): { targetSlot: SlotNumber; nextSlot: SlotNumber } {
|
|
509
489
|
const nowSeconds = BigInt(this.dateProvider.nowInSeconds());
|
|
510
|
-
const offset =
|
|
490
|
+
const offset = PROPOSER_PIPELINING_SLOT_OFFSET;
|
|
511
491
|
|
|
512
492
|
const currentSlot = getSlotAtTimestamp(nowSeconds, this.l1constants);
|
|
513
493
|
const targetSlot = SlotNumber(currentSlot + offset);
|
|
@@ -38,7 +38,6 @@ export class TestEpochCache implements EpochCacheInterface {
|
|
|
38
38
|
private seed: bigint = 0n;
|
|
39
39
|
private registeredValidators: EthAddress[] = [];
|
|
40
40
|
private l1Constants: L1RollupConstants;
|
|
41
|
-
private proposerPipeliningEnabled = false;
|
|
42
41
|
|
|
43
42
|
constructor(l1Constants: Partial<L1RollupConstants> = {}) {
|
|
44
43
|
this.l1Constants = { ...DEFAULT_L1_CONSTANTS, ...l1Constants };
|
|
@@ -111,10 +110,6 @@ export class TestEpochCache implements EpochCacheInterface {
|
|
|
111
110
|
return this.l1Constants;
|
|
112
111
|
}
|
|
113
112
|
|
|
114
|
-
setProposerPipeliningEnabled(enabled: boolean): void {
|
|
115
|
-
this.proposerPipeliningEnabled = enabled;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
113
|
getCommittee(_slot?: SlotTag): Promise<EpochCommitteeInfo> {
|
|
119
114
|
const epoch = getEpochAtSlot(this.currentSlot, this.l1Constants);
|
|
120
115
|
return Promise.resolve({
|
|
@@ -130,9 +125,7 @@ export class TestEpochCache implements EpochCacheInterface {
|
|
|
130
125
|
}
|
|
131
126
|
|
|
132
127
|
getTargetSlot(): SlotNumber {
|
|
133
|
-
return this.
|
|
134
|
-
? SlotNumber(this.currentSlot + PROPOSER_PIPELINING_SLOT_OFFSET)
|
|
135
|
-
: this.currentSlot;
|
|
128
|
+
return SlotNumber(this.currentSlot + PROPOSER_PIPELINING_SLOT_OFFSET);
|
|
136
129
|
}
|
|
137
130
|
|
|
138
131
|
getEpochNow(): EpochNumber {
|
|
@@ -143,14 +136,6 @@ export class TestEpochCache implements EpochCacheInterface {
|
|
|
143
136
|
return getEpochAtSlot(this.getTargetSlot(), this.l1Constants);
|
|
144
137
|
}
|
|
145
138
|
|
|
146
|
-
isProposerPipeliningEnabled(): boolean {
|
|
147
|
-
return this.proposerPipeliningEnabled;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
pipeliningOffset(): number {
|
|
151
|
-
return this.proposerPipeliningEnabled ? PROPOSER_PIPELINING_SLOT_OFFSET : 0;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
139
|
getEpochAndSlotNow(): EpochAndSlot & { nowMs: bigint } {
|
|
155
140
|
const epochNow = getEpochAtSlot(this.currentSlot, this.l1Constants);
|
|
156
141
|
const ts = getTimestampRangeForEpoch(epochNow, this.l1Constants)[0];
|
|
@@ -178,7 +163,7 @@ export class TestEpochCache implements EpochCacheInterface {
|
|
|
178
163
|
|
|
179
164
|
getTargetEpochAndSlotInNextL1Slot(): EpochAndSlot & { nowSeconds: bigint } {
|
|
180
165
|
const result = this.getEpochAndSlotInNextL1Slot();
|
|
181
|
-
const offset =
|
|
166
|
+
const offset = PROPOSER_PIPELINING_SLOT_OFFSET;
|
|
182
167
|
const targetSlot = SlotNumber(result.slot + offset);
|
|
183
168
|
return { ...result, slot: targetSlot, epoch: getEpochAtSlot(targetSlot, this.l1Constants) };
|
|
184
169
|
}
|