Currently Ethereum blocks are gossiped on the consensus layer (CL) peer to peer network. These blocks are encoded as objects of the type SignedBeaconBlock. Within them, we find an ExecutionPayload. This execution payload is validated in the execution layer (EL) and is otherwise useless for the cl.
The high level flow diagram on how Ethereum nodes sync a block received over gossip is as follows:
This leads to the following problem when syncing a node from scratch. Typically the CL will bootstrap syncing from a finalized checkpoint. It will send that blockhash to the EL to sync on the EL P2P network up to that checkpoint. At the same time, the CL requests all the full blocks from peers. This raises two problems:
The node that is syncing from a checkpoint, receives batches of blocks. The CL performs the full consensus validation, but the EL cannot execute the transactions just yet. The following are all the checks that are performed on the execution payload
The EL saves the blocks until it can actually execute them later on when it catches up. The question we raise is:
Can we sync a node by requesting only blinded blocks, that is blocks that instead of the execution payload, have an identifying hash.
We make the following assumption:
Everything that is needed by the CL to process the block is in the non-blinded part
This means for example that some information would have to be kept twice, like withdrawals, blockhash and parent blockhash. These should be part of the execution payload. How would sync work in this scenario:
Gossiping continues as-is: that is, blocks are gossiped in the CL layer in full, attesters can only attest to fully validated blocks, so that a blockroot that commits to a payload root gives cryptoeconomic security that the blinded block on the CL has matching withdrawals in the EL payload.