Byzantium hard fork
Mainnet 2017-10-16
Zero-knowledge proof verification precompiles and REVERT were added, and the block reward was cut to 3 ETH.
What changed
- Users
- Transactions that fail now return the remaining gas. Previously, if a contract halted a transaction that did not meet its conditions, all the gas sent was lost, but after Byzantium, for contracts that use REVERT, everything except what was spent on execution is returned. The failure reason is also returned, which laid the groundwork for wallet screens to show why a transaction was reverted. The block reward was reduced, so the amount of newly issued ETH also decreased accordingly.
- Wallet & app developers
- The REVERT instruction was introduced, which lets a contract stop execution, roll back state and return the remaining gas. Previously the only way to stop was with an invalid instruction, which consumed all the gas and could not carry a failure reason. Solidity's require and revert later came to use this instruction. In addition, the addition, multiplication and pairing operations on the alt_bn128 elliptic curve were added as precompiles, making it possible to verify zero-knowledge proofs (zk-SNARKs) on-chain at a realistic gas cost.
- L2
- There were no rollups at the time of the fork, but the alt_bn128 pairing precompile added then became the basic operation that zero-knowledge-proof-based rollups later use to verify proofs on mainnet. Writing proof verification in ordinary EVM code cost too much gas, whereas a precompile is processed at a fixed gas price.
- Node operators
- The difficulty bomb was delayed, preventing block times from continuing to grow longer. The mining reward was reduced from 5 ETH to 3 ETH per block, and the uncle block reward was adjusted by the same ratio. At the time, before the move to proof of stake, miners rather than validators received this reward. Node software had to be updated before the fork block, and nothing else changed in how nodes were operated.