mirror of
https://github.com/ChainSafe/lodestar.git
synced 2026-01-10 08:08:16 -05:00
fix: electra rebase fixes on the allforks type refactor
tests fixes
This commit is contained in:
@@ -18,6 +18,7 @@ import {
|
||||
BeaconBlockOrContents,
|
||||
BlindedBeaconBlock,
|
||||
Attestation,
|
||||
sszTypesFor,
|
||||
} from "@lodestar/types";
|
||||
import {Endpoint, RouteDefinitions, Schema} from "../../utils/index.js";
|
||||
import {fromGraffitiHex, toBoolean, toGraffitiHex} from "../../utils/serdes.js";
|
||||
@@ -622,9 +623,7 @@ export function getDefinitions(config: ChainForkConfig): RouteDefinitions<Endpoi
|
||||
resp: {
|
||||
data: WithVersion(
|
||||
(fork) =>
|
||||
(isForkBlobs(fork)
|
||||
? ssz.allForksBlobs[fork].BlockContents
|
||||
: ssz[fork].BeaconBlock) as Type<BeaconBlockOrContents>
|
||||
(isForkBlobs(fork) ? sszTypesFor(fork).BlockContents : ssz[fork].BeaconBlock) as Type<BeaconBlockOrContents>
|
||||
),
|
||||
meta: VersionCodec,
|
||||
},
|
||||
@@ -687,7 +686,7 @@ export function getDefinitions(config: ChainForkConfig): RouteDefinitions<Endpoi
|
||||
(executionPayloadBlinded
|
||||
? getExecutionForkTypes(version).BlindedBeaconBlock
|
||||
: isForkBlobs(version)
|
||||
? ssz.allForksBlobs[version].BlockContents
|
||||
? sszTypesFor(version).BlockContents
|
||||
: ssz[version].BeaconBlock) as Type<BeaconBlockOrContents | BlindedBeaconBlock>
|
||||
),
|
||||
meta: {
|
||||
|
||||
@@ -87,9 +87,9 @@ export function getGossipSSZType(topic: GossipTopic) {
|
||||
case GossipType.blob_sidecar:
|
||||
return ssz.deneb.BlobSidecar;
|
||||
case GossipType.beacon_aggregate_and_proof:
|
||||
return ssz.allForks[topic.fork].SignedAggregateAndProof;
|
||||
return sszTypesFor(topic.fork).SignedAggregateAndProof;
|
||||
case GossipType.beacon_attestation:
|
||||
return ssz.allForks[topic.fork].Attestation;
|
||||
return sszTypesFor(topic.fork).Attestation;
|
||||
case GossipType.proposer_slashing:
|
||||
return ssz.phase0.ProposerSlashing;
|
||||
case GossipType.attester_slashing:
|
||||
@@ -129,7 +129,7 @@ export function sszDeserialize<T extends GossipTopic>(topic: T, serializedData:
|
||||
* Deserialize a gossip serialized data into an Attestation object.
|
||||
*/
|
||||
export function sszDeserializeAttestation(fork: ForkName, serializedData: Uint8Array): Attestation {
|
||||
const sszType = ssz.allForks[fork].Attestation;
|
||||
const sszType = sszTypesFor(fork).Attestation;
|
||||
try {
|
||||
return sszType.deserialize(serializedData);
|
||||
} catch (e) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {BeaconConfig, ChainForkConfig} from "@lodestar/config";
|
||||
import {LogLevel, Logger, prettyBytes, toRootHex} from "@lodestar/utils";
|
||||
import {Root, Slot, ssz, deneb, UintNum64, SignedBeaconBlock} from "@lodestar/types";
|
||||
import {Root, Slot, ssz, deneb, UintNum64, SignedBeaconBlock, sszTypesFor} from "@lodestar/types";
|
||||
import {ForkName, ForkSeq} from "@lodestar/params";
|
||||
import {routes} from "@lodestar/api";
|
||||
import {computeTimeAtSlot} from "@lodestar/state-transition";
|
||||
@@ -422,7 +422,7 @@ function getDefaultHandlers(modules: ValidatorFnsModules, options: GossipHandler
|
||||
} catch (e) {
|
||||
if (e instanceof AttestationError && e.action === GossipAction.REJECT) {
|
||||
chain.persistInvalidSszValue(
|
||||
ssz.allForks[fork].SignedAggregateAndProof,
|
||||
sszTypesFor(fork).SignedAggregateAndProof,
|
||||
signedAggregateAndProof,
|
||||
"gossip_reject"
|
||||
);
|
||||
|
||||
@@ -230,14 +230,18 @@ export function getSeenAttDataKeyFromSignedAggregateAndProof(
|
||||
*/
|
||||
export function getSeenAttDataKeyFromSignedAggregateAndProofElectra(data: Uint8Array): SeenAttDataKey | null {
|
||||
const startIndex = SIGNED_AGGREGATE_AND_PROOF_SLOT_OFFSET;
|
||||
const endIndex = startIndex + ATTESTATION_DATA_SIZE + COMMITTEE_BITS_SIZE;
|
||||
const endIndex = startIndex + ATTESTATION_DATA_SIZE;
|
||||
|
||||
if (data.length < endIndex) {
|
||||
if (data.length < endIndex + SIGNATURE_SIZE + COMMITTEE_BITS_SIZE) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// base64 is a bit efficient than hex
|
||||
return toBase64(data.subarray(startIndex, endIndex));
|
||||
|
||||
return Buffer.concat([
|
||||
data.subarray(startIndex, endIndex),
|
||||
data.subarray(endIndex + SIGNATURE_SIZE, endIndex + SIGNATURE_SIZE + COMMITTEE_BITS_SIZE),
|
||||
]).toString("base64");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -343,8 +343,8 @@ const forkChoiceTest =
|
||||
[BLOCK_FILE_NAME]: ssz[fork].SignedBeaconBlock,
|
||||
[BLOBS_FILE_NAME]: ssz.deneb.Blobs,
|
||||
[POW_BLOCK_FILE_NAME]: ssz.bellatrix.PowBlock,
|
||||
[ATTESTATION_FILE_NAME]: ssz.allForks[fork].Attestation,
|
||||
[ATTESTER_SLASHING_FILE_NAME]: ssz.allForks[fork].AttesterSlashing,
|
||||
[ATTESTATION_FILE_NAME]: ssz.phase0.Attestation,
|
||||
[ATTESTER_SLASHING_FILE_NAME]: ssz.phase0.AttesterSlashing,
|
||||
},
|
||||
mapToTestCase: (t: Record<string, any>) => {
|
||||
// t has input file name as key
|
||||
|
||||
@@ -135,8 +135,8 @@ const operations: TestRunnerFn<OperationsTestCase, BeaconStateAllForks> = (fork,
|
||||
sszTypes: {
|
||||
pre: ssz[fork].BeaconState,
|
||||
post: ssz[fork].BeaconState,
|
||||
attestation: ssz.allForks[fork].Attestation,
|
||||
attester_slashing: ssz.allForks[fork].AttesterSlashing,
|
||||
attestation: ssz.phase0.Attestation,
|
||||
attester_slashing: ssz.phase0.AttesterSlashing,
|
||||
block: ssz[fork].BeaconBlock,
|
||||
body: ssz[fork].BeaconBlockBody,
|
||||
deposit: ssz.phase0.Deposit,
|
||||
|
||||
@@ -2,13 +2,8 @@ import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import {expect, it, vi} from "vitest";
|
||||
import {Type} from "@chainsafe/ssz";
|
||||
<<<<<<< HEAD
|
||||
import {ssz, sszTypesFor} from "@lodestar/types";
|
||||
import {ACTIVE_PRESET, ForkName} from "@lodestar/params";
|
||||
=======
|
||||
import {ssz} from "@lodestar/types";
|
||||
import {ACTIVE_PRESET, ForkName, ForkLightClient, ForkExecution} from "@lodestar/params";
|
||||
>>>>>>> 82d0692d63d (test: fix ssz_static spec tests for all forks (#6771))
|
||||
import {replaceUintTypeWithUintBigintType} from "../utils/replaceUintTypeWithUintBigintType.js";
|
||||
import {parseSszStaticTestcase} from "../utils/sszTestCaseParser.js";
|
||||
import {runValidSszTest} from "../utils/runValidSszTest.js";
|
||||
|
||||
@@ -195,6 +195,7 @@ describe("ExecutionEngine / http", () => {
|
||||
],
|
||||
depositRequests: null, // depositRequests is null pre-electra
|
||||
withdrawalRequests: null,
|
||||
consolidationRequests: null,
|
||||
},
|
||||
null, // null returned for missing blocks
|
||||
{
|
||||
@@ -205,6 +206,7 @@ describe("ExecutionEngine / http", () => {
|
||||
withdrawals: null, // withdrawals is null pre-capella
|
||||
depositRequests: null, // depositRequests is null pre-electra
|
||||
withdrawalRequests: null,
|
||||
consolidationRequests: null,
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -254,6 +256,7 @@ describe("ExecutionEngine / http", () => {
|
||||
],
|
||||
depositRequests: null, // depositRequests is null pre-electra
|
||||
withdrawalRequests: null,
|
||||
consolidationRequests: null,
|
||||
},
|
||||
null, // null returned for missing blocks
|
||||
{
|
||||
@@ -264,6 +267,7 @@ describe("ExecutionEngine / http", () => {
|
||||
withdrawals: null, // withdrawals is null pre-capella
|
||||
depositRequests: null, // depositRequests is null pre-electra
|
||||
withdrawalRequests: null,
|
||||
consolidationRequests: null,
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -102,7 +102,7 @@ describe("beaconBlocksMaybeBlobsByRange", () => {
|
||||
const expectedResponse = blocksWithBlobs.map(([block, blobSidecars]) => {
|
||||
const blobs = blobSidecars !== undefined ? blobSidecars : [];
|
||||
return getBlockInput.availableData(config, block, BlockSource.byRange, null, {
|
||||
fork: ForkName.deneb,
|
||||
fork: ForkName.electra,
|
||||
blobs,
|
||||
blobsSource: BlobsSource.byRange,
|
||||
blobsBytes: blobs.map(() => null),
|
||||
|
||||
@@ -119,6 +119,8 @@ export function upgradeLightClientHeader(
|
||||
ssz.electra.LightClientHeader.fields.execution.fields.depositRequestsRoot.defaultValue();
|
||||
(upgradedHeader as LightClientHeader<ForkName.electra>).execution.withdrawalRequestsRoot =
|
||||
ssz.electra.LightClientHeader.fields.execution.fields.withdrawalRequestsRoot.defaultValue();
|
||||
(upgradedHeader as LightClientHeader<ForkName.electra>).execution.consolidationRequestsRoot =
|
||||
ssz.electra.LightClientHeader.fields.execution.fields.consolidationRequestsRoot.defaultValue();
|
||||
|
||||
// Break if no further upgrades is required else fall through
|
||||
if (ForkSeq[targetFork] <= ForkSeq.electra) break;
|
||||
|
||||
@@ -100,9 +100,9 @@ export const {
|
||||
PENDING_PARTIAL_WITHDRAWALS_LIMIT,
|
||||
PENDING_CONSOLIDATIONS_LIMIT,
|
||||
MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA,
|
||||
MAX_CONSOLIDATIONS,
|
||||
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD,
|
||||
|
||||
MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD,
|
||||
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD,
|
||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD,
|
||||
MAX_ATTESTER_SLASHINGS_ELECTRA,
|
||||
MAX_ATTESTATIONS_ELECTRA,
|
||||
|
||||
@@ -120,7 +120,7 @@ export const mainnetPreset: BeaconPreset = {
|
||||
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: 17,
|
||||
|
||||
// ELECTRA
|
||||
MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD: 8192,
|
||||
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: 8192,
|
||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: 16,
|
||||
MAX_ATTESTER_SLASHINGS_ELECTRA: 1,
|
||||
MAX_ATTESTATIONS_ELECTRA: 8,
|
||||
@@ -133,6 +133,6 @@ export const mainnetPreset: BeaconPreset = {
|
||||
PENDING_BALANCE_DEPOSITS_LIMIT: 134217728,
|
||||
PENDING_PARTIAL_WITHDRAWALS_LIMIT: 134217728,
|
||||
PENDING_CONSOLIDATIONS_LIMIT: 262144,
|
||||
MAX_CONSOLIDATIONS: 1,
|
||||
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: 1,
|
||||
WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA: 4096,
|
||||
};
|
||||
|
||||
@@ -121,7 +121,7 @@ export const minimalPreset: BeaconPreset = {
|
||||
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: 9,
|
||||
|
||||
// ELECTRA
|
||||
MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD: 4,
|
||||
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: 4,
|
||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: 2,
|
||||
MAX_ATTESTER_SLASHINGS_ELECTRA: 1,
|
||||
MAX_ATTESTATIONS_ELECTRA: 8,
|
||||
@@ -134,6 +134,6 @@ export const minimalPreset: BeaconPreset = {
|
||||
PENDING_BALANCE_DEPOSITS_LIMIT: 134217728,
|
||||
PENDING_PARTIAL_WITHDRAWALS_LIMIT: 64,
|
||||
PENDING_CONSOLIDATIONS_LIMIT: 64,
|
||||
MAX_CONSOLIDATIONS: 1,
|
||||
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: 1,
|
||||
WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA: 4096,
|
||||
};
|
||||
|
||||
@@ -84,7 +84,7 @@ export type BeaconPreset = {
|
||||
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: number;
|
||||
|
||||
// ELECTRA
|
||||
MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD: number;
|
||||
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: number;
|
||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: number;
|
||||
MAX_ATTESTER_SLASHINGS_ELECTRA: number;
|
||||
MAX_ATTESTATIONS_ELECTRA: number;
|
||||
@@ -95,7 +95,7 @@ export type BeaconPreset = {
|
||||
PENDING_BALANCE_DEPOSITS_LIMIT: number;
|
||||
PENDING_PARTIAL_WITHDRAWALS_LIMIT: number;
|
||||
PENDING_CONSOLIDATIONS_LIMIT: number;
|
||||
MAX_CONSOLIDATIONS: number;
|
||||
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: number;
|
||||
WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA: number;
|
||||
};
|
||||
|
||||
@@ -184,7 +184,7 @@ export const beaconPresetTypes: BeaconPresetTypes = {
|
||||
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: "number",
|
||||
|
||||
// ELECTRA
|
||||
MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD: "number",
|
||||
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: "number",
|
||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: "number",
|
||||
MAX_ATTESTER_SLASHINGS_ELECTRA: "number",
|
||||
MAX_ATTESTATIONS_ELECTRA: "number",
|
||||
@@ -195,7 +195,7 @@ export const beaconPresetTypes: BeaconPresetTypes = {
|
||||
PENDING_BALANCE_DEPOSITS_LIMIT: "number",
|
||||
PENDING_PARTIAL_WITHDRAWALS_LIMIT: "number",
|
||||
PENDING_CONSOLIDATIONS_LIMIT: "number",
|
||||
MAX_CONSOLIDATIONS: "number",
|
||||
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: "number",
|
||||
WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA: "number",
|
||||
};
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import {loadConfigYaml} from "../yaml.js";
|
||||
// Not e2e, but slow. Run with e2e tests
|
||||
|
||||
/** https://github.com/ethereum/consensus-specs/releases */
|
||||
const specConfigCommit = "v1.5.0-alpha.2";
|
||||
const specConfigCommit = "v1.5.0-alpha.3";
|
||||
|
||||
describe("Ensure config is synced", function () {
|
||||
vi.setConfig({testTimeout: 60 * 1000});
|
||||
|
||||
@@ -11,13 +11,13 @@ import {
|
||||
BLOCK_BODY_EXECUTION_PAYLOAD_DEPTH as EXECUTION_PAYLOAD_DEPTH,
|
||||
EPOCHS_PER_SYNC_COMMITTEE_PERIOD,
|
||||
SLOTS_PER_EPOCH,
|
||||
MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD,
|
||||
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD,
|
||||
MAX_VALIDATORS_PER_COMMITTEE,
|
||||
MAX_COMMITTEES_PER_SLOT,
|
||||
MAX_ATTESTATIONS_ELECTRA,
|
||||
MAX_ATTESTER_SLASHINGS_ELECTRA,
|
||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD,
|
||||
MAX_CONSOLIDATIONS,
|
||||
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD,
|
||||
PENDING_BALANCE_DEPOSITS_LIMIT,
|
||||
PENDING_PARTIAL_WITHDRAWALS_LIMIT,
|
||||
PENDING_CONSOLIDATIONS_LIMIT,
|
||||
@@ -123,7 +123,7 @@ export const DepositRequest = new ContainerType(
|
||||
{typeName: "DepositRequest", jsonCase: "eth2"}
|
||||
);
|
||||
|
||||
export const DepositRequests = new ListCompositeType(DepositRequest, MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD);
|
||||
export const DepositRequests = new ListCompositeType(DepositRequest, MAX_DEPOSIT_REQUESTS_PER_PAYLOAD);
|
||||
|
||||
export const WithdrawalRequest = new ContainerType(
|
||||
{
|
||||
@@ -142,7 +142,10 @@ export const ConsolidationRequest = new ContainerType(
|
||||
},
|
||||
{typeName: "ConsolidationRequest", jsonCase: "eth2"}
|
||||
);
|
||||
export const ConsolidationRequests = new ListCompositeType(ConsolidationRequest, MAX_CONSOLIDATIONS);
|
||||
export const ConsolidationRequests = new ListCompositeType(
|
||||
ConsolidationRequest,
|
||||
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD
|
||||
);
|
||||
|
||||
export const ExecutionPayload = new ContainerType(
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@ describe("blinded data structures", function () {
|
||||
];
|
||||
|
||||
for (const {a, b} of blindedTypes) {
|
||||
for (const fork of Object.keys(ssz.allForks) as ForkName[]) {
|
||||
for (const fork of Object.keys(ssz.sszTypesFor) as ForkName[]) {
|
||||
if (!isForkExecution(fork)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -223,7 +223,7 @@ function getSpecCriticalParams(localConfig: ChainConfig): Record<keyof ConfigWit
|
||||
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: denebForkRelevant,
|
||||
|
||||
// ELECTRA
|
||||
MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD: electraForkRelevant,
|
||||
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: electraForkRelevant,
|
||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: electraForkRelevant,
|
||||
MAX_ATTESTER_SLASHINGS_ELECTRA: electraForkRelevant,
|
||||
MAX_ATTESTATIONS_ELECTRA: electraForkRelevant,
|
||||
@@ -234,7 +234,7 @@ function getSpecCriticalParams(localConfig: ChainConfig): Record<keyof ConfigWit
|
||||
PENDING_BALANCE_DEPOSITS_LIMIT: electraForkRelevant,
|
||||
PENDING_PARTIAL_WITHDRAWALS_LIMIT: electraForkRelevant,
|
||||
PENDING_CONSOLIDATIONS_LIMIT: electraForkRelevant,
|
||||
MAX_CONSOLIDATIONS: electraForkRelevant,
|
||||
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: electraForkRelevant,
|
||||
WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA: electraForkRelevant,
|
||||
MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT: electraForkRelevant,
|
||||
MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA: electraForkRelevant,
|
||||
|
||||
Reference in New Issue
Block a user