From cc24429828f3b7f235a09c99e88effb49df25de2 Mon Sep 17 00:00:00 2001 From: tersec Date: Tue, 18 Apr 2023 09:21:15 +0000 Subject: [PATCH] remove empty block fallback now that capella's on mainnnet (#4821) * remove empty block fallback now that capella's on mainnnet * build_empty_execution_payload is only testing infrastructure now * update error message --- AllTests-mainnet.md | 5 ++- beacon_chain/spec/helpers.nim | 34 +----------------- beacon_chain/validators/validator_duties.nim | 24 ++----------- tests/test_helpers.nim | 15 -------- tests/testblockutil.nim | 36 ++++++++++++++++++++ 5 files changed, 41 insertions(+), 73 deletions(-) diff --git a/AllTests-mainnet.md b/AllTests-mainnet.md index b8790e1ae..b12fb099e 100644 --- a/AllTests-mainnet.md +++ b/AllTests-mainnet.md @@ -509,11 +509,10 @@ OK: 12/12 Fail: 0/12 Skip: 0/12 OK: 1/1 Fail: 0/1 Skip: 0/1 ## Spec helpers ```diff -+ build_empty_execution_payload - Bellatrix OK + build_proof - BeaconState OK + integer_squareroot OK ``` -OK: 3/3 Fail: 0/3 Skip: 0/3 +OK: 2/2 Fail: 0/2 Skip: 0/2 ## Specific field types ```diff + root update OK @@ -676,4 +675,4 @@ OK: 2/2 Fail: 0/2 Skip: 0/2 OK: 9/9 Fail: 0/9 Skip: 0/9 ---TOTAL--- -OK: 385/390 Fail: 0/390 Skip: 5/390 +OK: 384/389 Fail: 0/389 Skip: 5/389 diff --git a/beacon_chain/spec/helpers.nim b/beacon_chain/spec/helpers.nim index 86cf6a704..ce7e436b9 100644 --- a/beacon_chain/spec/helpers.nim +++ b/beacon_chain/spec/helpers.nim @@ -13,7 +13,7 @@ import # Status libraries stew/[byteutils, endians2, objects, saturation_arith], chronicles, - eth/eip1559, eth/common/[eth_types, eth_types_rlp], + eth/common/[eth_types, eth_types_rlp], eth/rlp, eth/trie/[db, hexary], # Internal ./datatypes/[phase0, altair, bellatrix, capella, deneb], @@ -454,35 +454,3 @@ proc payloadToBlockHeader*( proc compute_execution_block_hash*( payload: ForkyExecutionPayload): Eth2Digest = rlpHash payloadToBlockHeader(payload) - -proc build_empty_execution_payload*( - state: bellatrix.BeaconState, - feeRecipient: Eth1Address): bellatrix.ExecutionPayloadForSigning = - ## Assuming a pre-state of the same slot, build a valid ExecutionPayload - ## without any transactions. - let - latest = state.latest_execution_payload_header - timestamp = compute_timestamp_at_slot(state, state.slot) - randao_mix = get_randao_mix(state, get_current_epoch(state)) - base_fee = calcEip1599BaseFee(GasInt.saturate latest.gas_limit, - GasInt.saturate latest.gas_used, - latest.base_fee_per_gas) - - var payload = bellatrix.ExecutionPayloadForSigning( - executionPayload: bellatrix.ExecutionPayload( - parent_hash: latest.block_hash, - fee_recipient: bellatrix.ExecutionAddress(data: distinctBase(feeRecipient)), - state_root: latest.state_root, # no changes to the state - receipts_root: EMPTY_ROOT_HASH, - block_number: latest.block_number + 1, - prev_randao: randao_mix, - gas_limit: latest.gas_limit, # retain same limit - gas_used: 0, # empty block, 0 gas - timestamp: timestamp, - base_fee_per_gas: base_fee), - blockValue: Wei.zero) - - payload.executionPayload.block_hash = - payload.executionPayload.compute_execution_block_hash() - - payload diff --git a/beacon_chain/validators/validator_duties.nim b/beacon_chain/validators/validator_duties.nim index 800a91233..e924a7699 100644 --- a/beacon_chain/validators/validator_duties.nim +++ b/beacon_chain/validators/validator_duties.nim @@ -296,26 +296,6 @@ proc getExecutionPayload( else: node.getFeeRecipient(pubkey.get().toPubKey(), validator_index, epoch) - template empty_execution_payload(): auto = - # Callers should already ensure these match, but type system doesn't - # transmit this information through the Forked types, so this has to - # be re-proven here. - withState(proposalState[]): - when consensusFork >= ConsensusFork.Capella: - # As of Capella, because EL state root changes in way more difficult to - # compute way from CL due to incorporation of withdrawals into EL state - # cannot use fake-EL fallback. Unlike transactions, withdrawals are not - # optional, so one cannot avoid this by not including any withdrawals. - Opt.none PayloadType - elif (consensusFork == ConsensusFork.Bellatrix and - PayloadType is bellatrix.ExecutionPayloadForSigning): - Opt.some build_empty_execution_payload(forkyState.data, feeRecipient) - elif consensusFork == ConsensusFork.Bellatrix: - raiseAssert "getExecutionPayload: mismatched proposalState and ExecutionPayload fork" - else: - # Vacuously -- these are pre-Bellatrix and not used. - Opt.some default(PayloadType) - try: let beaconHead = node.attestationPool[].getBeaconHead(node.dag.head) @@ -347,9 +327,9 @@ proc getExecutionPayload( return Opt.some payload.get except CatchableError as err: beacon_block_payload_errors.inc() - error "Error creating non-empty execution payload; using empty execution payload", + error "Error creating non-empty execution payload", msg = err.msg - return empty_execution_payload + return Opt.none PayloadType proc makeBeaconBlockForHeadAndSlot*( PayloadType: type ForkyExecutionPayloadForSigning, diff --git a/tests/test_helpers.nim b/tests/test_helpers.nim index 7472b4e68..1e80c447e 100644 --- a/tests/test_helpers.nim +++ b/tests/test_helpers.nim @@ -61,18 +61,3 @@ suite "Spec helpers": process(fieldVar, i shl childDepth) i += 1 process(state, state.numLeaves) - - test "build_empty_execution_payload - Bellatrix": - var cfg = defaultRuntimeConfig - cfg.ALTAIR_FORK_EPOCH = GENESIS_EPOCH - cfg.BELLATRIX_FORK_EPOCH = GENESIS_EPOCH - - let state = newClone(initGenesisState(cfg = cfg).bellatrixData) - - proc testCase(recipient: Eth1Address) = - let payload = build_empty_execution_payload(state[].data, recipient).executionPayload - check payload.fee_recipient == - bellatrix.ExecutionAddress(data: distinctBase(recipient)) - - testCase default(Eth1Address) - testCase Eth1Address.fromHex("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b") diff --git a/tests/testblockutil.nim b/tests/testblockutil.nim index f94b889dd..5e0d10626 100644 --- a/tests/testblockutil.nim +++ b/tests/testblockutil.nim @@ -108,6 +108,42 @@ proc build_empty_merge_execution_payload(state: bellatrix.BeaconState): bellatrix.ExecutionPayloadForSigning(executionPayload: payload, blockValue: Wei.zero) +from eth/common/eth_types import GasInt +from eth/eip1559 import calcEip1599BaseFee +from stew/saturating_arith import saturate + +proc build_empty_execution_payload( + state: bellatrix.BeaconState, + feeRecipient: Eth1Address): bellatrix.ExecutionPayloadForSigning = + ## Assuming a pre-state of the same slot, build a valid ExecutionPayload + ## without any transactions. + let + latest = state.latest_execution_payload_header + timestamp = compute_timestamp_at_slot(state, state.slot) + randao_mix = get_randao_mix(state, get_current_epoch(state)) + base_fee = calcEip1599BaseFee(GasInt.saturate latest.gas_limit, + GasInt.saturate latest.gas_used, + latest.base_fee_per_gas) + + var payload = bellatrix.ExecutionPayloadForSigning( + executionPayload: bellatrix.ExecutionPayload( + parent_hash: latest.block_hash, + fee_recipient: bellatrix.ExecutionAddress(data: distinctBase(feeRecipient)), + state_root: latest.state_root, # no changes to the state + receipts_root: EMPTY_ROOT_HASH, + block_number: latest.block_number + 1, + prev_randao: randao_mix, + gas_limit: latest.gas_limit, # retain same limit + gas_used: 0, # empty block, 0 gas + timestamp: timestamp, + base_fee_per_gas: base_fee), + blockValue: Wei.zero) + + payload.executionPayload.block_hash = + payload.executionPayload.compute_execution_block_hash() + + payload + proc addTestBlock*( state: var ForkedHashedBeaconState, cache: var StateCache,