Try   HackMD

epbs proposer changes thoughts

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

  1. Self build
  2. Get a bid from p2p
  3. Get a bid from RPC

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

  • Censorship oracle is set or (1) has higher value than (2) or (3)

Proposer will use (2) if

  • Censorship oracle is not set or (2) has higher value than (1) or (3)

Proposer will use (3) if

  • Censorship oracle is not set or (3) has higher value than (1) or (2)

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:

  • At t-250ms before the start slot, proposer calls GetHeader, signs the header, and returns the signed header to the beacon node.
  • At 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.