-
Notifications
You must be signed in to change notification settings - Fork 742
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
Re-org feature does not work with Vouch blinded proposals #4802
Comments
I'm not entirely sure if it's related but I saw another logical path leading to the same symptoms (i.e. proposing an empty block) with Vouch. The problem is that Lighthouse seems to pass an incorrect parentHash to Vouch in a request to build a block that's to be proposed. There's a re-org happening right before this (it's caused by extraneous circumstances) that I think might be the triggering it. Here are the logs:
On the Vouch side:
Vouch's The question is: Is what we're seeing here a race between Lighthouse's different subsystems' view of the current head? PS. This happens with |
Interesting find @adaszko! What's happening here is a race between what Vouch thinks the head should be, and what it actually is according to Lighthouse. Lighthouse has more up to date info, and Vouch's info is stale.
Lighthouse is trying to build a block on top of the block at slot 8012889 which has:
You mixed up the CL block root & the execution block hash, which is why you thought the values Lighthouse sent were inconsistent. Lighthouse wants to build on 8012889, because it's the true head according to fork choice. Vouch refuses to play along with this choice of head, likely due to it not knowing that this is the head because of the late-in-the-slot reorg. I don't know how Vouch updates its view of the head, maybe @mcdee could shed some light on this. I suspect this race is hard to avoid perfectly, because if there's a reorg late enough in the slot, then the BN can always choose a different head to what Vouch expects. Jim and I have talked before about Vouch supporting building blinded blocks on multiple heads (for the re-org feature), and that would help here. The other thing that helps is block v3. At the moment Vouch rejects any blinded block that doesn't match its choice of builder payload. With v3 the BN will no longer return bogus blinded blocks and will just return a full block, which Vouch should accept regardless of the head it builds on (else it is vulnerable to racing as above, and incompatibile with the reorg feature). We're putting the finishing touches on block v3 and ironing out kinks in the spec, so it should be ready for testing (on testnets, and then maybe mainnet) after our next release. Tracking PR: #5015. The other thing that's a bit suspicious is that your local Geth built such a bad payload. It should have had plenty of time to pack some transactions between when it was told about the reorg at 09:38:22.601 and when the payload was requested at 09:38:23.982 (1.3s later). Is your Geth completely starved of peers or running with its mempool turned off or something? Anyway, nice find! This bug has probably existed for ages without anyone reporting it. I think the best workaround for now would be to try to get the EL to build better blocks on short notice. It won't be ideal going through the pipeline of Vouch rejecting the blinded block and then requesting a full block, but it should still work. New releases in a few months should solve the issue once and for all. |
Thank you for checking this, @michaelsproul! I totally missed that Lighthouse logs EL hashes rather then CL ones. I will check get's mempool setting and logs. Eagerly awaiting new Lighthouse releases too! |
Hi 👋 Has there been any movement with this issue? |
Yes, the various client teams have been tidying up their implementations of the V3 blocks endpoint, and once they are all confirmed compliant with the spec I'll look to release a new version of Vouch that uses this endpoint. It won't be until after dencun, though, because we want to ensure a stable release with the existing endpoints first. |
Great, thank you for the update @mcdee! |
Description
Vouch is currently not compatible with Lighthouse's late block re-org feature when proposing a blinded block. The only workaround is to either disable blinded block proposals, or disable the re-org feature with
--disable-proposer-reorgs
.Detail
We've seen this issue occur in the wild, where it results in the re-orging block being rejected by Vouch, and a block with 0 transactions being signed instead:
Version
v4.5.0
Steps to resolve
This issue will disappear once we support the v3 block endpoint, and Vouch makes use of it: #4629
The reason being that (I think) Vouch will no longer expect Lighthouse to use a specific payload that it has selected, so Lighthouse will be free to fetch one from mev-boost directly, or can build a local payload and return that immediately to Vouch (which can be accepted or rejected depending on its policy and other available blocks).
The text was updated successfully, but these errors were encountered: