Istanbul hard fork
Istanbul hard fork on Ethereum and Aztlan hard fork on Ethereum Classic.
Istanbul feature upgrade contains the following specifications:
EIP-152: Add Blake2 compression function
EIP-1108: Reduce alt_bn128 precompile gas costs
EIP-1344: Add ChainID opcode
EIP-1884: Repricing for trie-size-dependent opcodes
EIP-2028: Calldata gas cost reduction
EIP-2200: Rebalance net-metered SSTORE gas cost with consideration of SLOAD gas cost change
The Ethereum upgrade applied the full Istanbul feature upgrade set. Several considerations were mentioned during this feature upgrade set review:
Consideration on Blake2 precompile parameters. It was under debate whether the
roundparameter would be useful, or would be following the hashing algorithm’s specification. It is later concluded that this may be useful for some applications, so leaving it there does no harm.
Consideration on EIP-1884 backward incompatibility. It is known that EIP-1884 will break some on-chain contracts. See its security review for more details.
The Ethereum Classic upgrade is planning to apply the Istanbul feature upgrade set with EIP-1884 stripped, and it has a separate code-name called Aztlan (Yingchun).
We gathered one review of consideration, and two categorized as design failure.
It is known that the reason to apply EIP-1884 on Ethereum is to fix a potential vulnerability related to trie access underprice. The decision not to apply EIP-1884 on Ethereum Classic effectively leaves the vulnerability open. While we don’t disclose the exact method for the effective attack here in order to protect public interest, you can read this paper to learn about backgrounds of the attack.
In Aztlan, interoperatibility with Ethereum is listed as one of the primary goal of this hard fork. Unfortunately, due to a design failure overlooked in the specification, it accomplishes the exact opposite.
This is primarily due to the new
SELFBALANCE opcode included in
EIP-1884. Aztlan stripped EIP-1884 due to backward compatibility
reasons. However, by doing this, it also stripped
including this opcode means that any smart contracts compiled using
Solidity or Vyper, using the Istanbul hard fork configuration, will
not be able to function correctly on Ethereum Classic Aztlan. Those
who wish to compile to Ethereum Classic must continue to use
Constantinople or Byzantium hard fork configuration, and as a result,
cannot take advantage of any Istanbul features.
Recommendation: Create a specification that applies
opcode standalone, and add it to the hard fork specification list.
Aztlan decided to include EIP-2200 for
SSTORE net gas
metering. However, it did not thoroughly consider the facts that
EIP-2200 is designed with the full context of Istanbul hard fork,
whose pre-conditions that Aztlan does not fulfill.
Net gas metering has a family of EIP specifications, including
EIP-1283, EIP-1706 and EIP-2200. The specifications contain a
parameter of "dirty gas", which is charged when a storage value has
already been modified in the same transaction context. This value, as
in the design intention, is expected to always equal to the value of
SLOAD gas cost. In EIP-2200, this "dirty gas" is set to be
as to accommodate EIP-1884’s gas cost change of
800. However, Aztlan does not include EIP-1884 but only applied
EIP-2200, resulting in inconsistency in the EIP design intention, and
may lead to unknown gas cost issues.
This has also led to confusions in implementations. For example, a contributor previously merged an incorrect version of Aztlan hard fork into Parity Ethereum. This, if left unspotted, will lead to consensus split on the whole Ethereum Classic network.
Recommendation: Remove EIP-2200 from the applied specification list, and add EIP-1283 with EIP-1706 instead.
In this section, we provide several specifications to address currently known review issues.
This section provides a standalone specification for the
This provides a specification as a "fix" to the current Aztlan hard fork. That is, it can be applied after Aztlan to fix the current problems.
HARD_FORK_BLOCK, apply the following changes:
Disable EIP-2200, and enable EIP-1283 with EIP-1706.
This provides a specification that "redo" Aztlan hard fork. This assumes that Aztlan will not go through, and a new specification will take its place.