More frequent, smaller hardforks vs. less frequent, larger ones

Cross-linking this for context based on today’s AllCoreDevs call:

TL;DR:

  • Istanbul testnet upgrades on Sept 4th vs. Aug 14th
  • Istanbul may be split in two upgrades
  • We need to agree on what makes sense for the next fork after that

Proposed this forACD#68.

1 Like

I like the pun on “cheesy hardfork names”, but agreeing on cheese names for forks just shouts bike shedding.

I think this is a good idea.

My personal preference would be to auction off the name, and I have a few ideas for it, but realistically this will take a while to get consensus on, and subsequently implement. Devcon locations is non-contentious, and could easily be made a default in case another scheme failed (i.e. an auction with no bidders).

Starting with the January upgrade I really do think we should split the internal names from the external names.

Internally we should use something very simple and derivative, like numbers. Natural numbers without multiple layers of decimals and rule about compatibility. Specifically the number of forks (or attempted forks) since the beginning, like we number our blocks.

By internally I mean stuff like reference tests, genesis file flags, etc. This way we don’t require people working on the code to keep mental models of where devcon was, what cities were at the entrance to the black sea, what cheese starts with the letter ‘E’, etc. The code and ordering then are obvious when deciding if ETH09ForkBlock comes before ETH10ForkBlock without having to remember if devs met in Berlin before they met in London.

This sequential fork number would be set in the meta-eip when the first testnet fork is set. This provides a hedge against emergency forks like occurred with the shanghai attacks to help ensure natural fork number ordering. Perhaps we could re-edit the other meta-eips to add their associated fork numbers as part of this.

We can still use marketing designations as part of the fork block, but these don’t live in symbols in the code and don’t require lines in testing docs reminding test developers what the order of the blocks is. We can put the name in a comment next to the block table in our code, and use the friendlier marketing name in blog posts, twitter updates, conference talks, and other such collateral. But where the number meets the road it is simply a fork number. A sysadmin adage I heard that applies is “Name your pets, but number your herd.”