-
Notifications
You must be signed in to change notification settings - Fork 1k
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
Process atts and update head before proposing #10653
Conversation
// Only one process can process attestations and update head at a time. | ||
s.processAttestationsLock.Lock() | ||
defer s.processAttestationsLock.Unlock() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the only addition from the refactor above
@@ -82,6 +82,10 @@ func (vs *Server) buildPhase0BlockData(ctx context.Context, req *ethpb.BlockRequ | |||
return nil, fmt.Errorf("syncing to latest head, not ready to respond") | |||
} | |||
|
|||
if err := vs.HeadUpdater.ProcessAttestationsAndUpdateHead(ctx); err != nil { | |||
log.WithError(err).Error("Could not process attestations and update head") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Opt it to log an error instead of return error. Error from this call should not prevent block proposal
// HeadUpdater defines a common interface for methods in blockchain service | ||
// which allow to update the head info | ||
type HeadUpdater interface { | ||
ProcessAttestationsAndUpdateHead(context.Context) error |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there no way to separate this? Can head updater have two functions?
} | ||
} | ||
}() | ||
} | ||
|
||
// ProcessAttestationsAndUpdateHead processes fork choice attestations from the pool and updates the head. | ||
func (s *Service) ProcessAttestationsAndUpdateHead(ctx context.Context) error { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We're combining multiple concerns here. It feels a lot cleaner to have the caller do update head after forkchoice attestations are processed
} | ||
} | ||
}() | ||
} | ||
|
||
// UpdateHead processes fork choice attestations from the pool and updates the head. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should say that it updates the canonical head of the chain based on information from fork-choice attestations and votes. It requires no external inputs.
* Process atts and updeate head * Fix ctx * New test and old tests * Update validator_test.go * Update validator_test.go * Update service.go * Rename to UpdateHead * Update receive_attestation.go * Update receive_attestation.go Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com>
* SubmitBlockSSZ grpc * SubmitBlockSSZ middleware * test fixes * use VersionedUnmarshaller * use VersionedUnmarshaller (cherry picked from commit 7388eeb) * tests * fuzz: Add fuzz tests for sparse merkle trie (#10662) * Add fuzz tests for sparse merkle trie and change HTR signature to return an error * fix capitalization of error message * Add engine timeout values (#10645) * Add timeout values * Update engine_client.go * Update engine_client.go * Update beacon-chain/powchain/engine_client.go Co-authored-by: Preston Van Loon <[email protected]> * Update beacon-chain/powchain/engine_client.go Co-authored-by: Preston Van Loon <[email protected]> * Update beacon-chain/powchain/engine_client.go Co-authored-by: Preston Van Loon <[email protected]> * Update engine_client.go Co-authored-by: Preston Van Loon <[email protected]> * Cleanup of `stategen` package (#10607) * powchain and stategen * revert powchain changes * rename field to blockRootsOfSavedStates * rename params to blockRoot * review feedback * fix loop Co-authored-by: Raul Jordan <[email protected]> Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> * Process atts and update head before proposing (#10653) * Process atts and updeate head * Fix ctx * New test and old tests * Update validator_test.go * Update validator_test.go * Update service.go * Rename to UpdateHead * Update receive_attestation.go * Update receive_attestation.go Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> * Add link to e2e docs in `README` (#10672) * Improve `ReceiveBlock`'s comment (#10671) Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> * Call fcu on invalid payload (#10565) * Starting * remove finalized root * Just call fcu * Review feedbacks * fix one test * Fix conflicts * Update execution_engine_test.go * Add a test for invalid recursive call * Add comprehensive recursive test * dissallow override empty hash Co-authored-by: Potuz <[email protected]> Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> * Cache and use justified and finalized payload block hash (#10657) * Cache and use justified and finalized payload block hash * Fix tests * Use real byte * Fix conflicts Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> * do not export slotFromBlock * simplify tests * grpc * middleware * extract package-level consts * Simplify SSZ handling * fix tests * test fixes * test hack Co-authored-by: Preston Van Loon <[email protected]> Co-authored-by: terencechain <[email protected]> Co-authored-by: Raul Jordan <[email protected]> Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> Co-authored-by: Potuz <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
?
Do not merge this account |
This implements ethereum/consensus-specs#2878
Joined work with @potuz
This PR refactors out
ProcessAttestationsAndUpdateHead
with a lock to only allow one caller at a time to avoid race between: