From 737d0cdfa4a6b1ed757a5a31d1a80c6f07020927 Mon Sep 17 00:00:00 2001 From: dapplion <35266934+dapplion@users.noreply.github.com> Date: Mon, 19 Dec 2022 16:38:46 +0800 Subject: [PATCH] Misc changes from eip-4844 branch --- packages/beacon-node/src/chain/chain.ts | 4 ++-- packages/beacon-node/src/chain/clock/LocalClock.ts | 2 +- packages/beacon-node/src/chain/options.ts | 2 +- .../src/chain/produceBlock/produceBlockBody.ts | 5 ++++- packages/beacon-node/src/network/network.ts | 10 +++++----- packages/beacon-node/src/sync/sync.ts | 1 + packages/state-transition/src/util/index.ts | 2 +- packages/validator/test/unit/utils/params.test.ts | 11 +++++++---- 8 files changed, 22 insertions(+), 15 deletions(-) diff --git a/packages/beacon-node/src/chain/chain.ts b/packages/beacon-node/src/chain/chain.ts index 8bef363d73e8..d386a96a879c 100644 --- a/packages/beacon-node/src/chain/chain.ts +++ b/packages/beacon-node/src/chain/chain.ts @@ -353,11 +353,11 @@ export class BeaconChain implements IBeaconChain { return await this.db.block.get(fromHexString(block.blockRoot)); } - async produceBlock(blockAttributes: BlockAttributes): Promise { + produceBlock(blockAttributes: BlockAttributes): Promise { return this.produceBlockWrapper(BlockType.Full, blockAttributes); } - async produceBlindedBlock(blockAttributes: BlockAttributes): Promise { + produceBlindedBlock(blockAttributes: BlockAttributes): Promise { return this.produceBlockWrapper(BlockType.Blinded, blockAttributes); } diff --git a/packages/beacon-node/src/chain/clock/LocalClock.ts b/packages/beacon-node/src/chain/clock/LocalClock.ts index 3fb30fbbf876..88de1fedd974 100644 --- a/packages/beacon-node/src/chain/clock/LocalClock.ts +++ b/packages/beacon-node/src/chain/clock/LocalClock.ts @@ -14,7 +14,7 @@ import {IBeaconClock} from "./interface.js"; export class LocalClock implements IBeaconClock { private readonly config: IChainForkConfig; private readonly genesisTime: number; - private timeoutId: NodeJS.Timeout; + private timeoutId: number | NodeJS.Timeout; private readonly emitter: ChainEventEmitter; private readonly signal: AbortSignal; private _currentSlot: number; diff --git a/packages/beacon-node/src/chain/options.ts b/packages/beacon-node/src/chain/options.ts index 187cc1a675f4..7b3106c0c5bf 100644 --- a/packages/beacon-node/src/chain/options.ts +++ b/packages/beacon-node/src/chain/options.ts @@ -49,7 +49,7 @@ export type BlockProcessOpts = { * will still issue fcU for block proposal */ disableImportExecutionFcU?: boolean; - /** For EIP4844 */ + // TODO EIP-4844: to test without capella disabledWithdrawals?: boolean; }; diff --git a/packages/beacon-node/src/chain/produceBlock/produceBlockBody.ts b/packages/beacon-node/src/chain/produceBlock/produceBlockBody.ts index 4ee83f6a6832..a91c82b4077e 100644 --- a/packages/beacon-node/src/chain/produceBlock/produceBlockBody.ts +++ b/packages/beacon-node/src/chain/produceBlock/produceBlockBody.ts @@ -186,14 +186,16 @@ export async function produceBlockBody( // are pre-merge. We don't care the same for builder segment as the execution block // will takeover if the builder flow was activated and errors try { + // https://github.com/ethereum/consensus-specs/blob/dev/specs/eip4844/validator.md#constructing-the-beaconblockbody const prepareRes = await prepareExecutionPayload( this, fork, safeBlockHash, finalizedBlockHash ?? ZERO_HASH_HEX, - currentState as CachedBeaconStateBellatrix, + currentState as CachedBeaconStateExecutions, feeRecipient ); + if (prepareRes.isPremerge) { (blockBody as allForks.ExecutionBlockBody).executionPayload = ssz.allForksExecution[ fork @@ -208,6 +210,7 @@ export async function produceBlockBody( // See: https://discord.com/channels/595666850260713488/892088344438255616/1009882079632314469 await sleep(PAYLOAD_GENERATION_TIME_MS); } + const payload = await this.executionEngine.getPayload(fork, payloadId); (blockBody as allForks.ExecutionBlockBody).executionPayload = payload; diff --git a/packages/beacon-node/src/network/network.ts b/packages/beacon-node/src/network/network.ts index 83437712f1ba..65a6454b4e6e 100644 --- a/packages/beacon-node/src/network/network.ts +++ b/packages/beacon-node/src/network/network.ts @@ -14,7 +14,7 @@ import {ChainEvent, IBeaconChain, IBeaconClock} from "../chain/index.js"; import {BlockInput, BlockInputType, getBlockInput} from "../chain/blocks/types.js"; import {INetworkOptions} from "./options.js"; import {INetwork} from "./interface.js"; -import {ReqRespBeaconNode, ReqRespHandlers} from "./reqresp/ReqRespBeaconNode.js"; +import {ReqRespBeaconNode, ReqRespHandlers} from "./reqresp/index.js"; import {Eth2Gossipsub, getGossipHandlers, GossipHandlers, GossipTopicTypeMap, GossipType} from "./gossip/index.js"; import {MetadataController} from "./metadata.js"; import {FORK_EPOCH_LOOKAHEAD, getActiveForks} from "./forks.js"; @@ -219,7 +219,7 @@ export class Network implements INetwork { }); case BlockInputType.postEIP4844OldBlobs: - throw Error(`Attempting to broadcast old BlockImport slot ${blockInput.block.message.slot}`); + throw Error(`Attempting to broadcast old BlockInput slot ${blockInput.block.message.slot}`); } } @@ -247,7 +247,7 @@ export class Network implements INetwork { throw Error(`blocks.length ${blocks.length} != blobsSidecars.length ${blobsSidecars.length}`); } - const blockInput: BlockInput[] = []; + const blockInputs: BlockInput[] = []; for (let i = 0; i < blocks.length; i++) { const block = blocks[i]; const blobsSidecar = blobsSidecars[i]; @@ -257,9 +257,9 @@ export class Network implements INetwork { throw Error(`blob does not match block slot ${block.message.slot} != ${blobsSidecar.beaconBlockSlot}`); } - blockInput.push(getBlockInput.postEIP4844(this.config, block, blobsSidecar)); + blockInputs.push(getBlockInput.postEIP4844(this.config, block, blobsSidecar)); } - return blockInput; + return blockInputs; } // Post EIP-4844 but old blobs diff --git a/packages/beacon-node/src/sync/sync.ts b/packages/beacon-node/src/sync/sync.ts index 8a799e2fba4f..463f0f3e146e 100644 --- a/packages/beacon-node/src/sync/sync.ts +++ b/packages/beacon-node/src/sync/sync.ts @@ -119,6 +119,7 @@ export class BeaconSync implements IBeaconSync { get state(): SyncState { const currentSlot = this.chain.clock.currentSlot; const headSlot = this.chain.forkChoice.getHead().slot; + if ( // Consider node synced IF // Before genesis OR diff --git a/packages/state-transition/src/util/index.ts b/packages/state-transition/src/util/index.ts index 24f4f3dd3707..bbc9bf8a8654 100644 --- a/packages/state-transition/src/util/index.ts +++ b/packages/state-transition/src/util/index.ts @@ -3,6 +3,7 @@ export * from "./array.js"; export * from "./attestation.js"; export * from "./attesterStatus.js"; export * from "./balance.js"; +export * from "./blindedBlock.js"; export * from "./blobs.js"; export * from "./capella.js"; export * from "./execution.js"; @@ -23,4 +24,3 @@ export * from "./slot.js"; export * from "./syncCommittee.js"; export * from "./validator.js"; export * from "./weakSubjectivity.js"; -export * from "./blindedBlock.js"; diff --git a/packages/validator/test/unit/utils/params.test.ts b/packages/validator/test/unit/utils/params.test.ts index aa1da1073841..0363c3c1a515 100644 --- a/packages/validator/test/unit/utils/params.test.ts +++ b/packages/validator/test/unit/utils/params.test.ts @@ -12,6 +12,8 @@ const testCases: {name: string; items: [IChainConfig, Record]}[] {name: "nimbus", items: [networksChainConfig.ropsten, nimbusRopstenConfig]}, ]; +/* eslint-disable @typescript-eslint/naming-convention */ + describe("utils / params / assertEqualParams", () => { it("default == default", () => { const chainConfigJson = chainConfigToJson(chainConfig); @@ -19,13 +21,14 @@ describe("utils / params / assertEqualParams", () => { }); it("default != other", () => { - const chainConfigJson = chainConfigToJson(chainConfig); + const ALTAIR_FORK_EPOCH = 10; + const localConfig: typeof chainConfig = {...chainConfig, ALTAIR_FORK_EPOCH}; + const chainConfigJson = chainConfigToJson(localConfig); // Force ALTAIR_FORK_EPOCH value to be different - // eslint-disable-next-line @typescript-eslint/naming-convention - const otherConfig = {...chainConfigJson, ALTAIR_FORK_EPOCH: String(chainConfig.ALTAIR_FORK_EPOCH + 1)}; + const otherConfig = {...chainConfigJson, ALTAIR_FORK_EPOCH: String(ALTAIR_FORK_EPOCH + 1)}; - expect(() => assertEqualParams(chainConfig, otherConfig)).to.throw(NotEqualParamsError); + expect(() => assertEqualParams(localConfig, otherConfig)).to.throw(NotEqualParamsError); }); it("should fill missing remote values with default and be equal", () => {