Skip to content
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

Fork choice spec checklist #1053

Closed
9 of 10 tasks
JustinDrake opened this issue May 6, 2019 · 4 comments
Closed
9 of 10 tasks

Fork choice spec checklist #1053

JustinDrake opened this issue May 6, 2019 · 4 comments
Labels
post-freeze (substantive) Substantive consensus change non-critical for long-lived cross-client testnets scope:fork-choice

Comments

@JustinDrake
Copy link
Collaborator

JustinDrake commented May 6, 2019

  • 1. Executable spec: Make the fork choice spec executable.
  • 2. (post-freeze discussion) Maximum reversions: Enshrine dynamic weak subjectivity reversion period into fork choice rule ("second finality mechanism").
  • 3. Slashed validators: Decide whether slashed validators should be ignored or not. (Current inclination is to not ignore slashed validators.)
  • 4. Eth1 validity: Explicitly require the Eth1 fork pointed to by state. latest_eth1_data to be valid and available.
  • 5. Manual forks: Specify how manual forks are enacted and the corresponding interaction with state.fork.
  • 6. Genesis event: Revisit how the genesis event is defined, especially if Eth2Genesis is removed from the deposit contract (see CHAIN_START_FULL_DEPOSIT_THRESHOLD bypass #1048). Formalise the genesis event in the fork choice rule.
  • 7. (post-freeze discussion) Flip-flop attack hardening: Decide if there is anything actionable regarding flip-flop attacks.
  • 8. (post-freeze discussion) Revisit SECONDS_PER_SLOT: Potentially increase to 8 or 12 seconds.
  • 9. Clocking: Formalise the notion of an "honest clock", e.g. maximum drift from "real" time. Decide if there is anything actionable from this research post.
  • 10. Tie breakers: Make sure the fork choice is always well-defined. In particular, check that all ties are broken. For example, "Let finalized_head be the finalized block with the highest epoch." is not well-defined if there are two finalized heads with the highest epoch.
@djrtwo
Copy link
Contributor

djrtwo commented May 6, 2019

This also needs to be added. In the context of a non-executable spec, it is a one-liner
#768

@JustinDrake
Copy link
Collaborator Author

We also need to be mindful of the DoS where many forks need to be followed through epoch transitions.

@hwwhww hwwhww pinned this issue May 7, 2019
@vbuterin
Copy link
Contributor

  1. Tie breakers: Make sure the fork choice is always well-defined. In particular, check that all ties are broken. For example, "Let finalized_head be the finalized block with the highest epoch." is not well-defined if there are two finalized heads with the highest epoch.

FWIW my current code ( https://github.com/ethereum/eth2.0-specs/pull/1068/files#diff-65ff52fa41121e465ff23d3b53fd0518R205 ) de facto makes the winner be "the first finalized head you discovered", ie. it's a memory-ful fork choice rule. And it has to be memory-ful because that's how weak subjectivity works anyway.....

  1. Flip-flop attack hardening: Decide if there is anything actionable regarding flip-flop attacks.

I have been waiting for Yan to finish a liveness proof to finalize this.

@JustinDrake JustinDrake added the milestone:June 30 freeze 🥶 Phase 0 spec freeze for long-lived cross-client testnet label Jun 15, 2019
@JustinDrake JustinDrake removed the milestone:June 30 freeze 🥶 Phase 0 spec freeze for long-lived cross-client testnet label Jun 28, 2019
@JustinDrake JustinDrake unpinned this issue Jun 28, 2019
@JustinDrake JustinDrake added the post-freeze (substantive) Substantive consensus change non-critical for long-lived cross-client testnets label Jul 5, 2019
@JustinDrake JustinDrake removed this from the Phase 0 Frozen milestone Jul 7, 2019
@djrtwo
Copy link
Contributor

djrtwo commented Dec 12, 2019

all items except (2) are addressed. Closing in favor of #1520

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
post-freeze (substantive) Substantive consensus change non-critical for long-lived cross-client testnets scope:fork-choice
Projects
None yet
Development

No branches or pull requests

3 participants