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

feat(sidecar): support large staking operations #541

Open
merklefruit opened this issue Dec 9, 2024 · 1 comment
Open

feat(sidecar): support large staking operations #541

merklefruit opened this issue Dec 9, 2024 · 1 comment
Labels
A: meta Area: meta

Comments

@merklefruit
Copy link
Collaborator

Some professional node operators rely on custom setups that look quite different from solo stakers. Some of the differences are:

  • validator clients connected to N EL/CL pairs, non-sticky (i.e. these can rotate as need be, and as servers go down)
  • rotating validator keys between different validator clients and EL/CL pairs, non-sticky
  • stateless MEV-boost MUXers used interchangeably depending on availability (or custom criteria like specific validator pubkeys)

Bolt works under the assumption that commitments rely on a single source of truth, which in our case is the bolt-sidecar.
-> It's not possible to run 2 bolt-sidecars with the same validator key as that could lead to safety faults.

This does constrain the flexibility of some of the setups described above, where for instance MUXers are stateless (e.g. get_header and get_payload calls could be made from different machines). This doesn't work for us since we need to be able to ship local blocks to beacon clients in case of locally built fallback blocks.

-> On first analysis, it looks to me like the "stickiness" of the bolt-sidecar<->beacon<->validator_key link is limited to 1 epoch.

Another point is allowing bolt-sidecar to use fallback EL/CL URLs as to have built-in redundancy for these types of setups.
This could be added as an optional flag or env variable.

@thedevbirb
Copy link
Contributor

thedevbirb commented Dec 11, 2024

Thanks for these notes, really interesting!
Along this reasoning, I've noticed that the constraint submission logic + proof verification on MEV-Boost makes it lose it's statelessness property: the get_header call that we proxy into a get_header_with_proofs is stateful, because of the constraints that are stored in local memory and sent by the bolt sidecar.
As you suggested for scaling the bolt sidecar horizontally, a good solution might be saving those constraints in a Redis cluster inside MEV-Boost.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A: meta Area: meta
Projects
None yet
Development

No branches or pull requests

2 participants