On October 16th (block 4,370,000), Ethereum will hard fork to Byzantium, the first half of the larger Metropolis update. Unlike the Bitcoin hard fork, the Byzantium update is not expected to create another Ethereum coin. Although this update doesn’t introduce the much anticipated anonymous transactions and proof of stake, there are still some interesting changes to be aware of.
Reduction in Mining Reward
The mining reward will be reduced from 5 ETH to 3 ETH. This change is made in preparation for proof of stake, where mining will be phased out all together. Although the reward was reduced, the previous plan to exponentially increase block times (the ice age) has been delayed. The ice age was originally put in place to incentivize the adoption of new chains when hard forks are introduced.
Preparation for Private Transactions
Four native contracts have been added that allow for certain computationally expensive operations to be executed directly on the CPU that the Ethereum virtual machine runs on. These four functions (big mod exponentiation, elliptic curve addition, elliptic curve scalar multiplication, and elliptic curve pairing) are crucial to the implementation of zk-snarks, the cryptography that will one day allow for private transactions.
When contracts are executed on the EVM, they are allowed to run until they consume all of their gas. This gas limitation was put in place to prevent infinite loops. With the introduction of these four native contracts, the four operations can be accessed by a smart contract address; however, when these contracts are called, the logic doesn’t execute on the EVM. Instead it runs on the CPU of the machine running the Ethereum client, making future implementations of zk-snarks much less gas intensive.
TLDR: Some of the underlying computations necessary for private transactions now require less gas and run outside of the EVM.
Faster Transaction Processing
Previously, each transaction’s receipt included the root of the transaction state tree. That is, the root of the Merkel tree immediately after that transaction was added to the tree. The state tree root, is one of the only dependencies one transaction has to other transactions in the block. By removing this dependency and adding several optional parameters, transactions can now be processed in parallel.
The “root” parameter will still be kept in the transaction receipt, but it’s value will be replaced by a binary digit: 0x0 for a failed transactions, and 0x1 for a successeful transaction.
TLDR: Transactions can now be processed in parallel.
Smart Contract Improvements
Previously, for a smart contract to prematurely terminate its operations, the developer could use the ‘throw’ keyword. This effectively runs an infinite loop until all gas is used, and the contract terminates. There are two downsides to this:
- You lose any left-over gas in the contract termination process.
- Without left-over gas, the contract can’t return an error message.
Not only do you loose your gas, but you also don’t know why the contract failed and terminated. With the addition of the REVERT op code in Byzantium, developers now have the ability to halt execution without burning through the remaining gas. This allows the contract to potentially return an error message.
TLDR: Smart contract just got a little smarter.
While there are other minor adjustments and updates, these are the ones that I found to be most important. For a more technical and thorough run-down of the updates, checkout the Ethereum Improvement Proposals.