-
Notifications
You must be signed in to change notification settings - Fork 380
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC] Engine API: Add block value in response to engine_getPayload #307
Comments
Suggested approach is to add |
|
Can't we simply compare balances? Balance value with respect to the diff has lower proving complexity. For instance, to prove the diff we would have to have merkle proofs linked to pre and post block state roots. Proving the value does require only the latter. |
A bit of additional context: #150 |
I see there is a parallel discussion on proving external builder payments here: ethereum/builder-specs#51 Proving external builder's bids seems useful, but do we need to be concerned with proving in the execution API or can we assume honesty there? If we can assume honesty from the execution API then it seems simpler to provide the balance delta ("bid") directly to the CL so it can compare it against any builders bid's (which may or may not have been proved through a separate builder flow). I can see it working either way though. |
From the proposed change:
So, we actually need the post balance to compare local payload with external one |
Correct ✔️ It would be good to bundle As the EL<>CL connection is already trusted, so no merkle proof required for The post balance from here can directly be compared with the builder's balance (+ extra merkle proof verification for builder balance) and the greater one can be simply picked (since one will have both |
Interesting thought. Could a builder software leverage the proof obtained from |
Thinking about starting to work on PR for this. @potuz mentioned an idea which I think could make implementation a lot cheaper... We could leave the existing methods/data structures alone and add a new method which just retrieves the value/post balance of a given We can use the value cached at the time of the last This way all the existing tests etc don't have to be touched. Any thoughts on this? |
yes they can directly pass it in the |
tbh a proof would be so much better and would like to have it bundled in the same response to save round trip time and random api error changes, and as @mkalinin observed, builders can use it directly |
With introduction of |
Fair enough, I can see the value in both approaches and don't have a good enough view into all the CL/EL codebases to feel strongly about creating a standalone value retrieval method, so I'll draft up a @g11tech can you elaborate a bit on why a proof is valuable here? If the only value is for builders, I'd lean towards putting that complexity on the builders, who are likely already heavily modifying the block building code to generate their blocks, and keeping as much complexity out of the core EL implementations as possible. ETA: Just re-read the comments on the builder API adding payment proof and it sounds like relay is already validating the scores of the builder blocks and they can just generate the proof there, so builders won't even necessarily need to implement a proof. |
if we assume the el<>cl link to be 100% trusted (which we already do as per the architecture of el/cl coupling), yes we do not require a proof, if thats too much of a burden. as per my understanding most ELs have getProof implemented so should not really be difficult to add this step (for the mev builders to add to their implementaions) So i am ok with this just being a value that can be directly compared against other engine/builder candidates 👍 |
ethereum/go-ethereum#25998 Geth has started implementing this with the total of the transaction fees (i.e. |
Yes I think the fees paid out, i.e. balance diff of ONLY fees make sense as well and will be in line with the "payment transaction scoring" of the builder blocks |
|
Block value (and withdrawals) added to spec with |
Currently the CL is blind to the value of the locally built block and therefore, if configured with a builder, will always propose the remotely built block.
In order to allow the CL to intelligently decide between using the local or remote block, the EL could provide the value of its block in its response to engine_getPayload. The EL can be free to determine the value of its block as it sees fit (summing tx fees, checking
feeRecipient
balance pre/post execution, etc..).The change will help to ensure validators propose the highest paying block in general, but more importantly will increase the cost of censorship by builders.
The text was updated successfully, but these errors were encountered: