I'm jotting down some scattered thoughts as I work on proposer changes for EPBS. I want to ensure that any changes I make are sound and forward-compatible with the final product.
For epbs, proposer may build its block under these three options
For now I am working on 1 then 2 then 3. But whatever I do for 1 should be future compatible with 2 and 3.
Proposer will use (1) if
Proposer will use (2) if
Proposer will use (3) if
For self-build, a proposer will request the header separately and sign it. This process adds latency to block construction and shouldn't become the norm, creating a chicken-and-egg problem. The proposer cannot compare (1), (2), and (3) until it receives the local execution payload. However, once it has the local execution payload and determines that (1) should be used, it needs to sign the header before computing the state root.
Here is what I think we should do:
t-250ms
before the start slot, proposer calls GetHeader
, signs the header, and returns the signed header to the beacon node.t
, proposer calls GetBlock
, which will compare (1), (2), and (3) above. It will only compare (1) against (2) or (3) if the signed header exists that the proposer returned earlier.