Skip to content
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

Remove redundancy from execution_layer #3118

Closed
paulhauner opened this issue Mar 25, 2022 · 1 comment
Closed

Remove redundancy from execution_layer #3118

paulhauner opened this issue Mar 25, 2022 · 1 comment
Labels
bellatrix Required to support the Bellatrix Upgrade

Comments

@paulhauner
Copy link
Member

Overview

Presently, we have support for multiple EEs in the execution_layer crate. Users specify these EEs via the --execution-engines flag.

I propose that we remove support for multiple EEs and only support a single EE.

Why

I added support for multiple EEs in the early days of merge specification in the interests of providing redundancy like we do with --eth1-endpoints on the BN or --beacon-nodes on the VC. As the spec has evolved, it's that redundancy for EEs isn't going to be the same as it is for BNs or "eth1" nodes.

With redundant BN endpoints or Eth1 endpoints, users can have another endpoint "standing by" that's ready to serve requests should the primary endpoints failed. These "backup" endpoints, in my practical experience, are some third-party service (Infura, Alchemy, etc) or another self-hosted node that's shared between many nodes. Since an EE can only be driven by a single CE, this shared-backup is not feasible. Therefore, if a user has 5x BNs and wants redundancy with EEs, they need to run 5x EEs (rather than just 1x EE with a shared backup). For small-scale setups, there's no option to use centralized services (Infura, at the very least) as backups. For large-scale setups, having redundancy for many EEs is much more expensive that for BNs or Eth1 nodes. It's clear that redundancy for EEs is less appealing economically than for the existing places that we provide redundancy.

So, the benefits of redundancy with EEs is dubious.

Another reason we might use multiple EEs is because we want to compare the results of multiple EE implementations to detect consensus faults. I'd argue this is a taks for developers, not for users.

Proxies

Interestingly, we could support multiple EEs for whatever purposes (redundancy, consensus fault detection, etc) via an external prupose-built proxy. Point Lighthouse at the proxy and the proxy at multiple EEs. This would be suitable for all client implementations and remove the complexity from Lighthouse.

Summary

Since the benefits for multiple EEs isn't as clear as the other reasons we've added multiple endpoints for other services, and we can do the same thing with an external proxy, I propose we just go with the proxy approach. Whether or not we actually implement the proxy (or leave it up to someone else) is another question.

Another point to consider is that we need to add support for MEV solutions (see #3062). This means supporting another type of EE; one that should produce but not verify payloads. Add this complexity to supporting multiple EEs and we've got ourselves quite a lot of complexity.

@paulhauner paulhauner added the bellatrix Required to support the Bellatrix Upgrade label Mar 25, 2022
bors bot pushed a commit that referenced this issue Jun 29, 2022
## Issue Addressed

Resolves #3069 

## Proposed Changes

Unify the `eth1-endpoints` and `execution-endpoints` flags in a backwards compatible way as described in #3069 (comment)

Users have 2 options:
1. Use multiple non auth execution endpoints for deposit processing pre-merge
2. Use a single jwt authenticated execution endpoint for both execution layer and deposit processing post merge

Related #3118

To enable jwt authenticated deposit processing, this PR removes the calls to `net_version` as the `net` namespace is not exposed in the auth server in execution clients. 
Moving away from using `networkId` is a good step in my opinion as it doesn't provide us with any added guarantees over `chainId`. See ethereum/consensus-specs#2163 and #2115


Co-authored-by: Paul Hauner <[email protected]>
@paulhauner
Copy link
Member Author

This has been achieved in #3214. There's still some redundancy code lingering in the background that will be cleaned up by #3284 and similar PRs.

I'm going to close this since I think that restricting this feature from users is the must have task, will the corresponding clean-ups are nice to have (and already underway).

bors bot pushed a commit that referenced this issue Jul 11, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bellatrix Required to support the Bellatrix Upgrade
Projects
None yet
Development

No branches or pull requests

1 participant