-
Notifications
You must be signed in to change notification settings - Fork 169
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
Add fee recip. to GET validator/blocks #187
Comments
Could this be solved by requiring a validator client to call The call to |
Load balancing makes that a bit more complex - the validator client may have called Currently Teku does require |
I would suggest that a simple load balancer is not really suitable for multiple beacon nodes. Calls like Would there be complicated logic in the validator client to handle this? Would it not just be a case of a rough flow of "fetch proposer duties, send At first glance it seems that enforcing the requirement to call |
Subscriptions have been handled in the past by using options like
Then you have to handle beacon node restarts, validators being added mid-epoch, potentially right before they are due to propose a block. It's not overly common to hit situations where prepare wasn't called so a specific error code that lets the vc know it has to call prepare, then create block again is probably ok but still more complex than just making the info required available on the first call. It's not that it's impossible to handle, just that it's going to wind up looking an awful lot like the code we already have in the BN to ensure prepare is called. I do understand your concerns about providing the information in two calls but that seems like it could be easily resolved by being explicit that the fee recipient from the get block call is only used if prepare wasn't previously called. And really as long as the BN used one of the two values it shouldn't really matter which one. The cognitive dissonance I'm having here is that we created |
I also see the desire to avoid duplicate information, however it does prevent missed blocks in circumstances that users are likely to (infrequently) encounter on mainnet. In my opinion, the benefits outweigh the costs. Whilst it does add some complexity to the API, it also removes a big ugly problem that
With |
I meant that to be in support of this change - the VC can still just call get block and is fully insulated for managing prepare. Without this change the VC is still insulated from a bunch of details of the EL but is back to having the burden of guaranteeing prepare is called in all cases. |
In this proposal, if a fee recipient is not already known then a block will be returned only after an execution payload has been built, which could take a significant amount of time (an additional half a second? second? not sure here, but it already takes long enough to receive pure consensus blocks). I get that the idea the BN should reject the request, force the VC to send a If, for example, there was a bug in a validator client's implementation of I agree that having the fee recipient in the |
It might be "good enough for generating blocks", but it's far from optimal. The purpose of Taking it a step back, I would say that @mcdee wants a
I want a
Perhaps something that meets all of these requirements is:
On a side note, I also propose that BNs should be making scary logs if they produce a block with a fee recipient that wasn't already known via |
My apologies @paulhauner just realised I haven't replied to this. I think that your suggestion gives us the best of all worlds. It gives validator clients flexibility to follow either route, and the information they need if they think they're supplying fee recipient information but not actually. The only thing I'm wondering about is if the response metadata should be expanded to include the additional situation where |
Assuming that #178 merges, there is a race-condition regarding the VC communicating the
suggested_fee_recipient
(SFR) to the BN.If the VC has not been able to call the
prepare_beacon_proposer
endpoint prior to block production (i.e.,GET validator/blocks
), the BN won't know the SFR to pass to the execution node. In such a case, the BN must choose to either:This means that diligent users should have some "catch all" SFR address provided to the BN to cover this edge-case.
A more robust and user-friendly alternative is to add an optional
suggested_fee_recipient
query parameter to theGET validator/blocks
endpoint. This ensures that a properly configured VC will always communicate the appropriate SFR to the BN. A diligent user no longer requires the "catch all" SFR on the BN.The text was updated successfully, but these errors were encountered: