Remove optimistic sync candidate check (#4129)

This commit is contained in:
tersec 2022-09-17 22:45:35 +02:00 committed by GitHub
parent 6ad9b3214d
commit ab3ac64b19
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 4 additions and 44 deletions

View File

@ -190,7 +190,7 @@ proc expectValidForkchoiceUpdated(
from ../consensus_object_pools/attestation_pool import
addForkChoice, selectOptimisticHead, BeaconHead
from ../consensus_object_pools/blockchain_dag import
is_optimistic, loadExecutionBlockRoot, markBlockVerified
is_optimistic, loadExecutionBlockRoot, markBlockInvalid, markBlockVerified
from ../consensus_object_pools/block_dag import shortLog
from ../consensus_object_pools/spec_cache import get_attesting_indices
from ../spec/datatypes/phase0 import TrustedSignedBeaconBlock
@ -481,38 +481,6 @@ proc newExecutionPayload*(
error "newPayload failed", msg = err.msg
return Opt.none PayloadExecutionStatus
from ../consensus_object_pools/blockchain_dag import
getBlockRef, loadExecutionBlockRoot, markBlockInvalid
# https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.1/sync/optimistic.md#helpers
proc is_optimistic_candidate_block(
self: BlockProcessor, blck: ForkedSignedBeaconBlock): bool =
# https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.1/sync/optimistic.md#when-to-optimistically-import-blocks
# The current slot (as per the system clock) is at least
# `SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY` ahead of the slot of the block being
# imported.
if blck.slot + self.safeSlotsToImportOptimistically <=
self.getBeaconTime().slotOrZero:
return true
# Once merge is finalized, always true; in principle, should be caught by
# other checks, but sometimes blocks arrive out of order, triggering some
# spurious false negatives because the parent-block-check does not find a
# parent block. This can also occur under conditions where EL client RPCs
# cause processing delays. Either way, bound this risk to post-merge head
# and pre-merge finalization.
if not self.consensusManager.dag.loadExecutionBlockRoot(
self.consensusManager.dag.finalizedHead.blck).isZero:
return true
let
parentRoot = withBlck(blck): blck.message.parent_root
parentBlck = self.consensusManager.dag.getBlockRef(parentRoot).valueOr:
return false
# The parent of the block has execution enabled.
not self.consensusManager.dag.loadExecutionBlockRoot(parentBlck).isZero
proc runQueueProcessingLoop*(self: ref BlockProcessor) {.async.} =
while true:
# Cooperative concurrency: one block per loop iteration - because
@ -594,14 +562,6 @@ proc runQueueProcessingLoop*(self: ref BlockProcessor) {.async.} =
if not blck.resfut.isNil:
blck.resfut.complete(Result[void, BlockError].err(BlockError.Invalid))
else:
if executionPayloadStatus == PayloadExecutionStatus.valid or
self[].is_optimistic_candidate_block(blck.blck):
self[].processBlock(
blck,
payloadValid = executionPayloadStatus == PayloadExecutionStatus.valid)
else:
debug "runQueueProcessingLoop: block cannot be optimistically imported",
blck = shortLog(blck.blck)
if not blck.resfut.isNil:
blck.resfut.complete(
Result[void, BlockError].err(BlockError.MissingParent))