@holiman Yeah. That's one way the forward-compatible EVM can work, and I do think that's a viable method. But just want to provide you an idea that will have even less backward incompatibility impact, and does what 1884 tries to accomplish.
Imagine, in an alternative universe, we decide to apply 1884 after 1702/39-UNGAS/40-UNUSED. The current 1884 specs, we increase certain opcode's gas cost, but note that this is functionally equivalent to decrease other opcode's gas cost. We apply 1884 as follows:
0), we do nothing.
1), we apply 1884 by decreasing other opcode's gas cost.
After this is done, we make sure to inform miners to configure their client to set the block gas limit according to the forward-compatible EVM gas cost config. Note that this is something that has to be done when we re-calibrate gas cost anyway, no matter whether account versioning is in place. When hard fork happens:
Nothing is perfect. This method certainly involves a slight increase in implementation complexity, and sometimes, gas cost analysis might be too complex to adopt this method, and we may be just better off using what you said above. But I just want to note that this is a possibility, and it indeed works for "simple" cases like EIP-1884.
I also want to note that once things move forward to the forward-compatible EVM, we can expect less and less of this when we do gas cost changes. After all, the forward-compatible EVM is forward-compatible in gas cost changes.
Dfor forward-compatible EVM, and we make the gas cost provided to be
g0 / D, and the gas cost calculated to be
g * D, where
gis the actual gas cost, and
g0is the gas limit.
To put it simply, the core architecture of ethereum as we know it today is not finished. If you are going to build a skyscraper(long term maturation of anything) first you build a solid foundation. Immutability on a foundation of sand won’t get anywhere long term. Until ethereum can last on its own for decades untouched we don’t have a foundation stable enough to lock forever.
I can see value in both camps and I am happy to see ETH and ETC working together. The differing values of each community adds value imo, as we will discover solutions otherwise we wouldn’t have. The version system outlined above as an example. That being said, if we don’t accept there are points we see differently and continue to rehash the same principles discussion I see it driving us further apart. Just my two cents.
if (blocknum % 1000 = 0) and (most recent 256 headers time >= FORKTIME). Only occuring at x000 blocks provides some certanty, as well as provides a backward compatible number we can say “the fork was at block x000"
Couple other q's:
@tkstanczak which version of Nethermind should I include in the blog post that points to Istanbul compatibility?
@holiman @Arachnid @cdetrio @jpitts is anyone responsible for http://forkmon.ethdevops.io/?
v4.1.1(introduced beta support for Istanbul) is highly recommended.