pending_queue
in the beacon state
block.body.deposits
and block.body.execution_payload.deposits
in parallel instead of queuing the latter and waiting for the former to fill the gap (proposed by Peter Davies)(pubkey, index)
cache: confirm that CL client devs are fine with taking this engineering complexity in favour of complexity related to pending_queue
pending_queue
while all top ups for the same validator are accumulated in a single record in the validator registrypending_deposits
queue in the beacon stateEL looks for transaction receipts supplied by the deposit contract to get a list of deposits made in a given block. The list is included into execution payload and then verified by EL clients.
CL processes a list of deposit operations supplied by EL in a way similar to existing process_deposit
functionality except for merkle proof verification. The verification is no longer required as EL takes this responsibility.
Note: Number of deposits per block is limited by EL block's gas limit. See analysis of potential DoS vectors in security considerations of EIP-6110 and description to PR#3177.
Once the fork is activated EL starts to surface deposits on chain and checking their validity with respect to transaction execution. Transition period doesn't affect EL anyhow.
The reason for transition period to exist is Eth1Data
poll lagging behind the head by several hours. Thus, there will be a gap between deposits processed with existing machinery and the first deposit included on chain upon the fork activation.
The proposed solution for filling the gap is pending_deposits
queue which keeps on chain deposits in the beacon state unprocessed until the old deposits flow (based on Eth1Data
poll) starts overlapping with the beginning of the queue.
Once this happens, CL may start to process on chain deposits instantly with no fallback to pending_deposits
queue. At this point Eth1Data
poll has no longer an impact on deposit processing and can be removed by CL clients without coordination. The queue can be removed in the next hard fork.
Reasons to keep using the queue outside of transition window:
(pubkey, index)
cache entries on chain re-orgs.For more details and analysis see rationale and security considerations of EIP-6110 and description to consensus-specs#3177.