Skip to content

Commit ea43dc5

Browse files
committed
feat: placeholder PR for electra
add types stub and epoch config fix types
1 parent 5ccae1c commit ea43dc5

File tree

19 files changed

+323
-4
lines changed

19 files changed

+323
-4
lines changed

packages/beacon-node/test/spec/presets/fork.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ const fork: TestRunnerFn<ForkStateCase, BeaconStateAllForks> = (forkNext) => {
3535
return slotFns.upgradeStateToCapella(preState as CachedBeaconStateBellatrix);
3636
case ForkName.deneb:
3737
return slotFns.upgradeStateToDeneb(preState as CachedBeaconStateCapella);
38+
case ForkName.electra:
39+
throw Error("not Implemented");
3840
}
3941
},
4042
options: {

packages/beacon-node/test/spec/presets/transition.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,14 @@ function getTransitionConfig(fork: ForkName, forkEpoch: number): Partial<ChainCo
102102
return {ALTAIR_FORK_EPOCH: 0, BELLATRIX_FORK_EPOCH: 0, CAPELLA_FORK_EPOCH: forkEpoch};
103103
case ForkName.deneb:
104104
return {ALTAIR_FORK_EPOCH: 0, BELLATRIX_FORK_EPOCH: 0, CAPELLA_FORK_EPOCH: 0, DENEB_FORK_EPOCH: forkEpoch};
105+
case ForkName.electra:
106+
return {
107+
ALTAIR_FORK_EPOCH: 0,
108+
BELLATRIX_FORK_EPOCH: 0,
109+
CAPELLA_FORK_EPOCH: 0,
110+
DENEB_FORK_EPOCH: 0,
111+
ELECTRA_FORK_EPOCH: forkEpoch,
112+
};
105113
}
106114
}
107115

packages/beacon-node/test/unit/chain/lightclient/upgradeLightClientHeader.test.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ describe("UpgradeLightClientHeader", function () {
1515
BELLATRIX_FORK_EPOCH: 2,
1616
CAPELLA_FORK_EPOCH: 3,
1717
DENEB_FORK_EPOCH: 4,
18+
ELECTRA_FORK_EPOCH: Infinity,
1819
});
1920

2021
const genesisValidatorsRoot = Buffer.alloc(32, 0xaa);
@@ -27,6 +28,7 @@ describe("UpgradeLightClientHeader", function () {
2728
capella: ssz.capella.LightClientHeader.defaultValue(),
2829
bellatrix: ssz.altair.LightClientHeader.defaultValue(),
2930
deneb: ssz.deneb.LightClientHeader.defaultValue(),
31+
electra: ssz.electra.LightClientHeader.defaultValue(),
3032
};
3133

3234
testSlots = {
@@ -35,11 +37,18 @@ describe("UpgradeLightClientHeader", function () {
3537
bellatrix: 17,
3638
capella: 25,
3739
deneb: 33,
40+
electra: 0,
3841
};
3942
});
4043

41-
for (let i = ForkSeq.altair; i < Object.values(ForkName).length; i++) {
42-
for (let j = i + 1; j < Object.values(ForkName).length; j++) {
44+
// Since electra is not implemented for loop is till deneb (Object.values(ForkName).length-1)
45+
// Once electra is implemnted run for loop till Object.values(ForkName).length
46+
47+
// for (let i = ForkSeq.altair; i < Object.values(ForkName).length; i++) {
48+
// for (let j = i + 1; j < Object.values(ForkName).length; j++) {
49+
50+
for (let i = ForkSeq.altair; i < Object.values(ForkName).length - 1; i++) {
51+
for (let j = i + 1; j < Object.values(ForkName).length - 1; j++) {
4352
const fromFork = ForkName[ForkSeq[i] as ForkName];
4453
const toFork = ForkName[ForkSeq[j] as ForkName];
4554

@@ -53,7 +62,27 @@ describe("UpgradeLightClientHeader", function () {
5362
}
5463
}
5564

65+
// for electra not implemented
5666
for (let i = ForkSeq.altair; i < Object.values(ForkName).length; i++) {
67+
const fromFork = ForkName[ForkSeq[i] as ForkName];
68+
const toFork = ForkName["electra"];
69+
70+
it(`Throw error ${fromFork}=>${toFork}`, function () {
71+
lcHeaderByFork[fromFork].beacon.slot = testSlots[fromFork];
72+
lcHeaderByFork[toFork].beacon.slot = testSlots[fromFork];
73+
74+
expect(() => {
75+
upgradeLightClientHeader(config, toFork, lcHeaderByFork[fromFork]);
76+
}).toThrow("Not Implemented");
77+
});
78+
}
79+
80+
// Since electra is not implemented for loop is till deneb (Object.values(ForkName).length-1)
81+
// Once electra is implemnted run for loop till Object.values(ForkName).length
82+
83+
// for (let i = ForkSeq.altair; i < Object.values(ForkName).length; i++) {
84+
85+
for (let i = ForkSeq.altair; i < Object.values(ForkName).length - 1; i++) {
5786
for (let j = i; j > 0; j--) {
5887
const fromFork = ForkName[ForkSeq[i] as ForkName];
5988
const toFork = ForkName[ForkSeq[j] as ForkName];

packages/beacon-node/test/unit/network/fork.test.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ function getForkConfig({
99
bellatrix,
1010
capella,
1111
deneb,
12+
electra,
1213
}: {
1314
phase0: number;
1415
altair: number;
1516
bellatrix: number;
1617
capella: number;
1718
deneb: number;
19+
electra: number;
1820
}): BeaconConfig {
1921
const forks: Record<ForkName, ForkInfo> = {
2022
phase0: {
@@ -57,6 +59,14 @@ function getForkConfig({
5759
prevVersion: Buffer.from([0, 0, 0, 3]),
5860
prevForkName: ForkName.capella,
5961
},
62+
electra: {
63+
name: ForkName.electra,
64+
seq: ForkSeq.electra,
65+
epoch: electra,
66+
version: Buffer.from([0, 0, 0, 5]),
67+
prevVersion: Buffer.from([0, 0, 0, 4]),
68+
prevForkName: ForkName.deneb,
69+
},
6070
};
6171
const forksAscendingEpochOrder = Object.values(forks);
6272
const forksDescendingEpochOrder = Object.values(forks).reverse();
@@ -133,9 +143,10 @@ const testScenarios = [
133143
for (const testScenario of testScenarios) {
134144
const {phase0, altair, bellatrix, capella, testCases} = testScenario;
135145
const deneb = Infinity;
146+
const electra = Infinity;
136147

137148
describe(`network / fork: phase0: ${phase0}, altair: ${altair}, bellatrix: ${bellatrix} capella: ${capella}`, () => {
138-
const forkConfig = getForkConfig({phase0, altair, bellatrix, capella, deneb});
149+
const forkConfig = getForkConfig({phase0, altair, bellatrix, capella, deneb, electra});
139150
const forks = forkConfig.forks;
140151
for (const testCase of testCases) {
141152
const {epoch, currentFork, nextFork, activeForks} = testCase;

packages/beacon-node/test/utils/config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,13 @@ export function getConfig(fork: ForkName, forkEpoch = 0): ChainForkConfig {
3131
CAPELLA_FORK_EPOCH: 0,
3232
DENEB_FORK_EPOCH: forkEpoch,
3333
});
34+
case ForkName.electra:
35+
return createChainForkConfig({
36+
ALTAIR_FORK_EPOCH: 0,
37+
BELLATRIX_FORK_EPOCH: 0,
38+
CAPELLA_FORK_EPOCH: 0,
39+
DENEB_FORK_EPOCH: 0,
40+
ELECTRA_FORK_EPOCH: forkEpoch,
41+
});
3442
}
3543
}

packages/config/src/chainConfig/configs/mainnet.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ export const chainConfig: ChainConfig = {
4949
DENEB_FORK_VERSION: b("0x04000000"),
5050
DENEB_FORK_EPOCH: 269568, // March 13, 2024, 01:55:35pm UTC
5151

52+
// Electra
53+
ELECTRA_FORK_VERSION: b("0x05000000"),
54+
ELECTRA_FORK_EPOCH: Infinity,
55+
5256
// Time parameters
5357
// ---------------------------------------------------------------
5458
// 12 seconds

packages/config/src/chainConfig/configs/minimal.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ export const chainConfig: ChainConfig = {
4646
DENEB_FORK_VERSION: b("0x04000001"),
4747
DENEB_FORK_EPOCH: Infinity,
4848

49+
// Electra
50+
ELECTRA_FORK_VERSION: b("0x05000001"),
51+
ELECTRA_FORK_EPOCH: Infinity,
52+
4953
// Time parameters
5054
// ---------------------------------------------------------------
5155
// [customized] Faster for testing purposes

packages/config/src/chainConfig/types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ export type ChainConfig = {
4040
// DENEB
4141
DENEB_FORK_VERSION: Uint8Array;
4242
DENEB_FORK_EPOCH: number;
43+
// ELECTRA
44+
ELECTRA_FORK_VERSION: Uint8Array;
45+
ELECTRA_FORK_EPOCH: number;
4346

4447
// Time parameters
4548
SECONDS_PER_SLOT: number;
@@ -99,6 +102,9 @@ export const chainConfigTypes: SpecTypes<ChainConfig> = {
99102
// DENEB
100103
DENEB_FORK_VERSION: "bytes",
101104
DENEB_FORK_EPOCH: "number",
105+
// ELECTRA
106+
ELECTRA_FORK_VERSION: "bytes",
107+
ELECTRA_FORK_EPOCH: "number",
102108

103109
// Time parameters
104110
SECONDS_PER_SLOT: "number",

packages/config/src/forkConfig/index.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,18 @@ export function createForkConfig(config: ChainConfig): ForkConfig {
5555
prevVersion: config.CAPELLA_FORK_VERSION,
5656
prevForkName: ForkName.capella,
5757
};
58+
const electra: ForkInfo = {
59+
name: ForkName.electra,
60+
seq: ForkSeq.electra,
61+
epoch: config.ELECTRA_FORK_EPOCH,
62+
version: config.ELECTRA_FORK_VERSION,
63+
prevVersion: config.DENEB_FORK_VERSION,
64+
prevForkName: ForkName.deneb,
65+
};
5866

5967
/** Forks in order order of occurence, `phase0` first */
6068
// Note: Downstream code relies on proper ordering.
61-
const forks = {phase0, altair, bellatrix, capella, deneb};
69+
const forks = {phase0, altair, bellatrix, capella, deneb, electra};
6270

6371
// Prevents allocating an array on every getForkInfo() call
6472
const forksAscendingEpochOrder = Object.values(forks);

packages/light-client/src/spec/utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ export function upgradeLightClientHeader(
103103

104104
// Break if no further upgradation is required else fall through
105105
if (ForkSeq[targetFork] <= ForkSeq.deneb) break;
106+
107+
// eslint-disable-next-line no-fallthrough
108+
case ForkName.electra:
109+
throw Error("Not Implemented");
106110
}
107111
return upgradedHeader;
108112
}

0 commit comments

Comments
 (0)