Skip to content

Process atts and update head before proposing - #10653

Merged
prylabs-bulldozer[bot] merged 14 commits into
developfrom
process-atts-update-head
May 9, 2022
Merged

prylabs-bulldozer[bot] merged 14 commits into
developfrom
process-atts-update-head

Conversation

@terencechain

Copy link
Copy Markdown
Collaborator

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:

  1. Calling it at slot start
  2. Calling it before the proposal

Comment on lines +148 to +150
// Only one process can process attestations and update head at a time.
s.processAttestationsLock.Lock()
defer s.processAttestationsLock.Unlock()

Copy link
Copy Markdown
Collaborator Author

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

}

if err := vs.HeadUpdater.ProcessAttestationsAndUpdateHead(ctx); err != nil {
log.WithError(err).Error("Could not process attestations and update head")

Copy link
Copy Markdown
Collaborator Author

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

@terencechain
terencechain marked this pull request as ready for review May 6, 2022 15:16
@terencechain
terencechain requested a review from a team as a code owner May 6, 2022 15:16
@terencechain
terencechain marked this pull request as draft May 6, 2022 15:16
@terencechain
terencechain marked this pull request as ready for review May 6, 2022 17:50
Comment thread beacon-chain/blockchain/chain_info.go Outdated
// HeadUpdater defines a common interface for methods in blockchain service
// which allow to update the head info
type HeadUpdater interface {
ProcessAttestationsAndUpdateHead(context.Context) error

Copy link
Copy Markdown
Contributor

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 {

Copy link
Copy Markdown
Contributor

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.

Copy link
Copy Markdown
Contributor

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.

@prylabs-bulldozer
prylabs-bulldozer Bot merged commit bbdf19c into develop May 9, 2022
@delete-merged-branch
delete-merged-branch Bot deleted the process-atts-update-head branch May 9, 2022 23:12
rkapka pushed a commit that referenced this pull request May 11, 2022
* 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>
prylabs-bulldozer Bot added a commit that referenced this pull request May 16, 2022
* 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 <preston@prysmaticlabs.com>

* Update beacon-chain/powchain/engine_client.go

Co-authored-by: Preston Van Loon <preston@prysmaticlabs.com>

* Update beacon-chain/powchain/engine_client.go

Co-authored-by: Preston Van Loon <preston@prysmaticlabs.com>

* Update engine_client.go

Co-authored-by: Preston Van Loon <preston@prysmaticlabs.com>

* 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 <raul@prysmaticlabs.com>
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 <potuz@prysmaticlabs.com>
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 <preston@prysmaticlabs.com>
Co-authored-by: terencechain <terence@prysmaticlabs.com>
Co-authored-by: Raul Jordan <raul@prysmaticlabs.com>
Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com>
Co-authored-by: Potuz <potuz@prysmaticlabs.com>

@Dayday10 Dayday10 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?

@Dayday10

Copy link
Copy Markdown

Do not merge this account

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants