Skip to content

Commit

Permalink
Merge 00e0de4 into e1fb2fa
Browse files Browse the repository at this point in the history
  • Loading branch information
g11tech authored Jan 12, 2022
2 parents e1fb2fa + 00e0de4 commit 650b658
Show file tree
Hide file tree
Showing 14 changed files with 31 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {byteArrayEquals, List, toHexString} from "@chainsafe/ssz";
import {CachedBeaconState} from "../../allForks";
import {getRandaoMix} from "../../util";
import {ExecutionEngine} from "../executionEngine";
import {isMergeComplete} from "../utils";
import {isMergeTransitionComplete} from "../utils";

export function processExecutionPayload(
state: CachedBeaconState<merge.BeaconState>,
Expand All @@ -12,7 +12,7 @@ export function processExecutionPayload(
): void {
// Verify consistency of the parent hash, block number, base fee per gas and gas limit
// with respect to the previous execution payload header
if (isMergeComplete(state)) {
if (isMergeTransitionComplete(state)) {
const {latestExecutionPayloadHeader} = state;
if (!byteArrayEquals(payload.parentHash as Uint8Array, latestExecutionPayloadHeader.blockHash as Uint8Array)) {
throw Error(
Expand Down
8 changes: 4 additions & 4 deletions packages/beacon-state-transition/src/merge/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {allForks, merge, ssz} from "@chainsafe/lodestar-types";
*/
export function isExecutionEnabled(state: merge.BeaconState, body: merge.BeaconBlockBody): boolean {
return (
isMergeComplete(state) ||
isMergeTransitionComplete(state) ||
!ssz.merge.ExecutionPayload.equals(body.executionPayload, ssz.merge.ExecutionPayload.defaultValue())
);
}
Expand All @@ -15,9 +15,9 @@ export function isExecutionEnabled(state: merge.BeaconState, body: merge.BeaconB
* Merge block is the SINGLE block that transitions from POW to POS.
* state has no execution data AND this block has execution data
*/
export function isMergeBlock(state: merge.BeaconState, body: merge.BeaconBlockBody): boolean {
export function isMergeTransitionBlock(state: merge.BeaconState, body: merge.BeaconBlockBody): boolean {
return (
!isMergeComplete(state) &&
!isMergeTransitionComplete(state) &&
!ssz.merge.ExecutionPayload.equals(body.executionPayload, ssz.merge.ExecutionPayload.defaultValue())
);
}
Expand All @@ -26,7 +26,7 @@ export function isMergeBlock(state: merge.BeaconState, body: merge.BeaconBlockBo
* Merge is complete when the state includes execution layer data:
* state.latestExecutionPayloadHeader NOT EMPTY
*/
export function isMergeComplete(state: merge.BeaconState): boolean {
export function isMergeTransitionComplete(state: merge.BeaconState): boolean {
return !ssz.merge.ExecutionPayloadHeader.equals(
state.latestExecutionPayloadHeader,
ssz.merge.ExecutionPayloadHeader.defaultTreeBacked()
Expand Down
6 changes: 4 additions & 2 deletions packages/fork-choice/src/forkChoice/forkChoice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,10 @@ export class ForkChoice implements IForkChoice {
}

if (
preCachedData?.isMergeBlock ||
(merge.isMergeStateType(state) && merge.isMergeBlockBodyType(block.body) && merge.isMergeBlock(state, block.body))
preCachedData?.isMergeTransitionBlock ||
(merge.isMergeStateType(state) &&
merge.isMergeBlockBodyType(block.body) &&
merge.isMergeTransitionBlock(state, block.body))
)
assertValidTerminalPowBlock(this.config, (block as unknown) as merge.BeaconBlock, preCachedData);

Expand Down
2 changes: 1 addition & 1 deletion packages/fork-choice/src/forkChoice/interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ export type OnBlockPrecachedData = {
/**
* Optimistic sync fields
*/
isMergeBlock?: boolean;
isMergeTransitionBlock?: boolean;
executionStatus?: ExecutionStatus;
};

Expand Down
4 changes: 2 additions & 2 deletions packages/lodestar/src/chain/blocks/importBlock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ export async function importBlock(chain: ImportBlockModules, fullyVerifiedBlock:
if (
merge.isMergeStateType(postState) &&
merge.isMergeBlockBodyType(block.message.body) &&
merge.isMergeBlock(postState, block.message.body)
merge.isMergeTransitionBlock(postState, block.message.body)
) {
// pow_block = get_pow_block(block.body.execution_payload.parent_hash)
const powBlockRootHex = toHexString(block.message.body.executionPayload.parentHash);
Expand All @@ -108,7 +108,7 @@ export async function importBlock(chain: ImportBlockModules, fullyVerifiedBlock:
throw Error(`merge block parent's parent POW block not found ${powBlock.parentHash}`);
onBlockPrecachedData.powBlock = powBlock;
onBlockPrecachedData.powBlockParent = powBlockParent;
onBlockPrecachedData.isMergeBlock = true;
onBlockPrecachedData.isMergeTransitionBlock = true;
}

const prevFinalizedEpoch = chain.forkChoice.getFinalizedCheckpoint().epoch;
Expand Down
2 changes: 1 addition & 1 deletion packages/lodestar/src/chain/factory/block/body.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ async function prepareExecutionPayload(
// Use different POW block hash parent for block production based on merge status.
// Returned value of null == using an empty ExecutionPayload value
let parentHash: Root;
if (!merge.isMergeComplete(state)) {
if (!merge.isMergeTransitionComplete(state)) {
if (
!ssz.Root.equals(chain.config.TERMINAL_BLOCK_HASH, ZERO_HASH) &&
getCurrentEpoch(state) < chain.config.TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH
Expand Down
2 changes: 1 addition & 1 deletion packages/lodestar/src/chain/forkChoice/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export function initializeForkChoice(
finalizedEpoch: finalizedCheckpoint.epoch,
finalizedRoot: toHexString(finalizedCheckpoint.root),

...(merge.isMergeStateType(state) && merge.isMergeComplete(state)
...(merge.isMergeStateType(state) && merge.isMergeTransitionComplete(state)
? {
executionPayloadBlockHash: toHexString(state.latestExecutionPayloadHeader.blockHash),
executionStatus: blockHeader.slot === GENESIS_SLOT ? ExecutionStatus.Valid : ExecutionStatus.Syncing,
Expand Down
6 changes: 3 additions & 3 deletions packages/lodestar/src/eth1/eth1MergeBlockTracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export type Eth1MergeBlockTrackerModules = {
logger: ILogger;
signal: AbortSignal;
clockEpoch: Epoch;
isMergeComplete: boolean;
isMergeTransitionComplete: boolean;
};

/**
Expand All @@ -57,15 +57,15 @@ export class Eth1MergeBlockTracker {
private readonly intervals: NodeJS.Timeout[] = [];

constructor(
{config, logger, signal, clockEpoch, isMergeComplete}: Eth1MergeBlockTrackerModules,
{config, logger, signal, clockEpoch, isMergeTransitionComplete}: Eth1MergeBlockTrackerModules,
private readonly eth1Provider: IEth1Provider
) {
this.config = config;
this.logger = logger;
this.signal = signal;

// If merge has already happened, disable
if (isMergeComplete) {
if (isMergeTransitionComplete) {
this.status = StatusCode.POST_MERGE;
return;
}
Expand Down
2 changes: 1 addition & 1 deletion packages/lodestar/src/eth1/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export function initializeEth1ForBlockProduction(
logger: modules.logger,
signal: modules.signal,
clockEpoch: computeEpochAtSlot(getCurrentSlot(modules.config, anchorState.genesisTime)),
isMergeComplete: merge.isMergeStateType(anchorState) && merge.isMergeComplete(anchorState),
isMergeTransitionComplete: merge.isMergeStateType(anchorState) && merge.isMergeTransitionComplete(anchorState),
});
} else {
return new Eth1ForBlockProductionDisabled();
Expand Down
4 changes: 2 additions & 2 deletions packages/lodestar/src/node/notifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ export async function runNodeNotifier({
const peersRow = `peers: ${connectedPeerCount}`;
const finalizedCheckpointRow = `finalized: ${prettyBytes(finalizedRoot)}:${finalizedEpoch}`;
const headRow = `head: ${headInfo.slot} ${prettyBytes(headInfo.blockRoot)}`;
const isMergeComplete = merge.isMergeStateType(headState) && merge.isMergeComplete(headState);
const mergeInfo = isMergeComplete
const isMergeTransitionComplete = merge.isMergeStateType(headState) && merge.isMergeTransitionComplete(headState);
const mergeInfo = isMergeTransitionComplete
? [
`execution: ${headInfo.executionStatus.toLowerCase()}(${prettyBytes(
headInfo.executionPayloadBlockHash ?? "empty"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ describe("eth1 / Eth1Provider", function () {
signal: controller.signal,
eth1Provider,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
});

// Resolves when Eth1ForBlockProduction has fetched both blocks and deposits
Expand Down
6 changes: 3 additions & 3 deletions packages/lodestar/test/e2e/eth1/eth1MergeBlockTracker.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ describe("eth1 / Eth1MergeBlockTracker", function () {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down Expand Up @@ -94,7 +94,7 @@ describe("eth1 / Eth1MergeBlockTracker", function () {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down Expand Up @@ -131,7 +131,7 @@ describe("eth1 / Eth1MergeBlockTracker", function () {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down
5 changes: 3 additions & 2 deletions packages/lodestar/test/sim/merge-interop.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -365,8 +365,9 @@ describe("executionEngine / ExecutionEngineHttp", function () {
// By this slot, ttd should be reached and merge complete
case Number(ttd) + 3: {
const headState = bn.chain.getHeadState();
const isMergeComplete = merge.isMergeStateType(headState) && merge.isMergeComplete(headState);
if (!isMergeComplete) reject("Merge not completed");
const isMergeTransitionComplete =
merge.isMergeStateType(headState) && merge.isMergeTransitionComplete(headState);
if (!isMergeTransitionComplete) reject("Merge not completed");

// Send another tx post-merge, total amount in destination account should be double after this is included in chain
if (TX_SCENARIOS.includes("simple")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ describe("eth1 / Eth1MergeBlockTracker", () => {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down Expand Up @@ -137,7 +137,7 @@ describe("eth1 / Eth1MergeBlockTracker", () => {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down Expand Up @@ -210,7 +210,7 @@ describe("eth1 / Eth1MergeBlockTracker", () => {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down

0 comments on commit 650b658

Please sign in to comment.