The Go Ethereum group is excited to reveal the next series release of Geth, the initial version concentrating on establishing the foundation for the forthcoming Metropolis hard forks (Byzantium and Constantinople), comprising 125+ code contributions across various segments of the initiative.
Byzantium fork
The latest version of Geth incorporates all the Byzantium EIPs that have been integrated and also specifies the fork block number 1,700,000 for the Ropsten testnet migration. The block numbers for Rinkeby and the primary Ethereum network will be determined once Ropsten is ascertained to be stable.
You can find information about specific protocol modifications at the following links:
Performance enhancements
In addition to the Byzantium hard fork, the 1.7 release series of Geth mainly aims to target performance enhancements. The initial release of the series already brings significant improvements through two database schema alterations leading to substantial optimizations:
- The transaction and receipt storage was entirely revamped, reducing the data storage demands for a rapidly synced node by half, from 26.3GB to 14.9GB during the time of the implementation (#14801).
- EVM log storage and indexing underwent a complete overhaul, dramatically reducing the filtering time for the entire chain concerning contract events by 2-3 orders of magnitude, from minutes to less than a second (#14522, #14631).
Some ongoing updates that will appear in forthcoming releases include:
- Enhancing the fundamental peer-to-peer protocol utilized by all Ethereum sub-protocols, lowering the bandwidth necessary for a fast sync from 33.6GB to 13.5GB (#15106). This upgrade is expected to enhance the overall bandwidth requirement of the network and light clients as well.
- Implementing a more advanced memory caching system for state tries, significantly diminishing disk IO by several orders of magnitude. Precise figures are pending a concluding implementation (#14952).
Trezor wallets
Around this time last year, we introduced support for the Ledger hardware wallet. In response to high demand, we have now broadened our hardware wallet compatibility to encompass the Trezor (#14885).
Please note that the Trezor is more complex compared to the Ledger since it requires a PIN-unlock sent from the device instead of being input directly by the user. Consequently, when a user connects a Trezor, Geth will display:
New wallet detected, failed to open url=trezor://0003:0007:00 err=”trezor: pin required”
The Geth console can facilitate unlocking the Trezor by using personal.openWallet(url), which will prompt the user to enter the shuffled PIN and relay that to the Trezor for confirmation:
> personal.openWallet("trezor://0003:0007:00") Check the device for number positions 7 | 8 | 9 --+---+-- 4 | 5 | 6 --+---+-- 1 | 2 | 3 Please input current PIN: INFO [08-10|11:58:06] New walletappeared url=trezor://0003:0007:00 status="Trezor v1.5.0 'Hi' online"
For information on how to engage with the Trezor via the JSON-RPC APIs, please refer to the PR description.
Transaction log
In the 1.6.x version series of Geth, we unveiled a new transaction pool to mitigate propagation challenges caused by minimum gas-price stipulations. This new pool accepted all transactions irrespective of their pricing, continually retaining the highest paying 4K, while discarding the less expensive ones.
The new pool incorporates a distinct exemption mechanism for local accounts, ensuring that a user’s own transactions take precedence over external ones, even if they are priced lower than all others. This guarantees that inexpensive transactions do not get excluded from the network during intense usage (e.g., ICO) as long as the originating node stays online.
Geth 1.7.0 advances this protective feature by recording all locally generated transactions to disk and restoring them upon node restart. This ensures that even if the originating node goes offline, lower-cost transactions still have an opportunity to be included when the node reactivates (#14784).
The transaction log can be extremely beneficial for node operators during software updates, alleviating concerns regarding local transactions being lost. Moreover, the log also serves as a fail-safe mechanism against node failures, ensuring that no transaction information is compromised.
Rinkeby enhancements
There has been considerable refinement of Puppeth and Rinkeby throughout this release, including improved ethstats logging to detect harmful reporters and IP address blacklisting to restrict their access.
The Rinkeby testnet was also crucial in identifying and rectifying a transaction pool event race that resulted in numerous issues regarding lost transactions and/or duplicate nonce assignments. All known errors have now been resolved (#15085).
Finally, we are thrilled to announce that Infura has become an active contributor in the Rinkeby test network by supporting the community with their own bootnode and operating an authorized signer node. This development is expected to bolster the Rinkeby network’s robustness and resilience.
Concluding observations and critical note to users
Geth 1.7.0 encompasses numerous bug fixes, and we regard it as our finest release to date; however, we advise everyone to remain vigilant with the upgrade and monitor it closely thereafter, as it includes significant database upgrades.
Additionally, we want to stress that the upgraded database cannot be utilized by earlier versions of Geth. Our suggestion for production users is to sync from the ground up with Geth 1.7.0 and keep the old database backed up until you verify that the new release functions properly for all your use cases.
For a comprehensive overview of the modifications, please refer to the Geth 1.7.0 release milestone.
As always, binaries and mobile libraries are accessible on our download page.
