ethereum / execution-apis

Collection of APIs provided by Ethereum execution layer clients
Creative Commons Zero v1.0 Universal
966 stars 380 forks source link

Extend Deneb with Execution layer cross-validation #557

Open dapplion opened 5 months ago

dapplion commented 5 months ago

Add spec for routes introduced by @karalabe in https://gist.github.com/karalabe/47c906f0ab4fdc5b8b791b74f084e5f9

In summary, these routes allow one to request witnesses from an execution client, and submit them to another for stateless execution.

Refer to Peter's doc for more detailed rationale https://gist.github.com/karalabe/47c906f0ab4fdc5b8b791b74f084e5f9#engine-api-specs

karalabe commented 5 months ago

Based on the discussions on discord, I've converted the witness to a fully opaque blob on the engine API. I.e.

This should both make the api diff smaller, as well as more performant by avoiding witness parsing CL side.

mkalinin commented 5 months ago

We used to have src/engine/experimental folder to keep specs of the feature that aren’t yet scoped for any HF. I think it is better to move this spec there, and once we’re ready include it in Prague or another HF.

dapplion commented 5 months ago

We used to have src/engine/experimental folder to keep specs of the feature that aren’t yet scoped for any HF. I think it is better to move this spec there, and once we’re ready include it in Prague or another HF.

This change is not part of any hard-fork, and can be enabled at any time (including before Pectra) by some clients without coordination. Given that where would you place it?

mkalinin commented 5 months ago

This change is not part of any hard-fork, and can be enabled at any time (including before Pectra) by some clients without coordination. Given that where would you place it?

It seems that we would need to update newPayloadWithWitness and executeStatelessPayload every time when the payload struct changes. Can we have newPayload response to be extended with the witness field which is optional? Something like:

PayloadStatusV2:

In this case it can become a part of the API since Prague. If we want to make this functionality parallel to the main payload processing flow (i.e. always be implemented via separate methods) then it can be introduced in Cancun I believe, and updated accordingly in Prague.