chore(abci): Add FATAL errors for app#2581
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #2581 +/- ##
==========================================
+ Coverage 58.61% 58.97% +0.36%
==========================================
Files 340 337 -3
Lines 15272 15178 -94
Branches 20 0 -20
==========================================
Hits 8951 8951
+ Misses 5652 5558 -94
Partials 669 669
🚀 New features to boost your workflow:
|
rezzmah
left a comment
There was a problem hiding this comment.
It'll look bad if validators have a higher occurrance of their beacon node crashing with the new release (something we faced with the lockstep EL/CL changes).
Is there anything we can do to put the validators at ease as to why their beacon node crashed - e.g. excessive logging?
There was a problem hiding this comment.
I think payload builders should still be able to send an empty block if their EL went fatal. Something to discuss further
There was a problem hiding this comment.
An empty proposed block would get broadcasted, rejected by validators, and then prevoted nil. Whereas a missed proposed would timeout and get prevoted nil**. The behavior at consensus level is the same, but we're adding extra network congestion by broadcasting empty proposal. Why would we do that if we don't have to?
**From comet spec:
Else, if the proposal is invalid or wasn’t received on time, it prevotes
<nil>.
I'm not sure this results in a higher occurrence of beacon node crashing. If a Fatal error happens during ProcessProposal (and gets glossed over because we don't crash immediately in process proposal), then it is extremely likely that the same Fatal error happens again during FinalizeBlock. For example, if my EL crashes, the engine api is going to keep returning the Fatal Definitely can do with more logging and I see your point. |
This adds FATAL errors to the ABCI app. This makes the response to Fatal Engine API errors consistent across
PrepareProposal,ProcessProposal, andFinalizeBlock. This is particularly important when handling fatal errors such asconnection refusedfrom the EL.Currently, if the CL receives a
connection refused:PrepareProposalwill submit an empty proposal and return no error.ProcessProposalwill REJECT the block and return no error.FinalizeBlockwill return error and panic.This needs to be made consistent, and IMO we should not be voting for blocks or responding with null proposals if we have a FATAL error.