The Go Ethereum team is proud to announce the next release of the Geth family, the first incarnation focusing on laying the groundwork for the upcoming Metropolis hard forks (Byzantium and Constantinople), consisting of More than 125 code contributions for various parts of the project.
byzantium fork
The current incarnation of Geth contains all implemented Byzantium EIPs and also features the fork block number 1,700,000 for the Ropsten testnet transition. Block numbers for Rinkeby and the Ethereum mainnet will be finalized when Ropsten is deemed stable.
You can find details about individual protocol updates at the following locations:
performance optimizations
Aside from the Byzantium hard fork, the Geth 1.7 release series aims to focus primarily on performance improvements. The first version of the family already packs a punch with two database schema modifications resulting in significant optimizations:
- Transaction and receipt storage has been completely changed, halving the data storage requirements of a Quick Sync node, from 26.3 GB to 14.9 GB at the time of deployment (#14801).
- EVM’s indexing and log storage have been completely overhauled, reducing the full-chain filter time for contract events by 2-3 orders of magnitude, from minutes to less than a second (#14522, #14631).
Some work-in-progress updates appearing in upcoming releases include:
- Upgrading the base peer-to-peer protocol used by all Ethereum subprotocols, reducing the bandwidth required for a fast sync from 33.6 GB to 13.5 GB (#15106). This update will improve the overall bandwidth requirement of the network as well as thin clients.
- Introducing more sophisticated memory caching for state intents, which reduces disk I/O by a couple of orders of magnitude. The exact numbers are pending a final implementation (#14952).
Trezor Wallets
Around this time last year we introduced support for the Ledger hardware wallet. Due to popular demand, we have now expanded hardware wallet support to include Trezor (#14885).
Note that Trezor is more complicated than Ledger, as it requires an unlock PIN sent from the communication machine instead of being entered directly by the user. As such, when a user plugs in a Trezor, Geth will print:
New wallet appeared, could not open url=trezor://0003:0007:00 err=”trezor: pin needed”
The Geth console can be used to unlock the Trezor by summoning personal.openWallet(url)which will prompt the user to enter the scrambled PIN code and send it to Trezor for verification:
> personal.openWallet("trezor://0003:0007:00") Look at the device for number positions 7 | 8 | 9 --+---+-- 4 | 5 | 6 --+---+-- 1 | 2 | 3 Please enter current PIN: INFO (08-10|11:58:06) New wallet appeared url=trezor://0003:0007:00 status="Trezor v1.5.0 'Hi' online"
For details on how to interact with Trezor from the JSON-RPC APIs, see the public relations description.
transaction journal
In the Geth 1.6.x family of releases, we introduced a new transaction set to prevent propagation issues due to minimum gas price requirements. This new group accepted all transactions regardless of price and always kept the highest paying 4Ks, discarding the cheapest.
The new group has a special exemption mechanism for local accounts, so that a user’s own transactions always take precedence over remote ones, even if they are priced lower than others. This ensures that cheap transactions are not removed from the network during heavy usage (eg ICO), as long as the source node remains online.
Geth 1.7.0 takes this protection measure a step further by logging all locally created transactions to disk and reloading them on a node reboot. This ensures that even if the source node goes offline, cheap transactions still have a chance to be included when the node comes back (#14784).
The transaction journal can be of great help to node operators during software upgrades by not having to worry about losing local transactions. In addition, the journal also acts as a resiliency mechanism against node failures, ensuring no transaction data is lost.
Rinkeby Updates
Many tweaks have been made to Puppeth and Rinkeby over the course of this release, such as better ethstats logging to detect malicious informers and IP address blacklisting to deny them access.
Rinkeby’s testnet also proved vital in finding and fixing a transaction pool event race that caused a lot of headaches around lost transactions and/or duplicate nonce allocations. All these known bugs have now been fixed (#15085).
Finally, we are extremely pleased to announce that Infura became an active player on the Rinkeby testnet helping the community both with their own bootstrap node and running an authoritative signing node. This should make the Rinkeby network even more robust and resilient.
Closing words and important note for users
Geth 1.7.0 contains many bug fixes and we consider it our best release yet, however we urge everyone to be careful with the update and monitor it closely afterwards as it contains non-trivial database updates.
Furthermore, we would like to emphasize that the updated database cannot be used by older versions of Geth. Our recommendation for production users is to sync from scratch with Geth 1.7.0 and leave the old database backed up until you confirm that the new version works correctly for all your use cases.
For a full summary of the changes, see the Geth 1.7.0 Release Milestone.
As always, binaries and mobile libraries are available on our download page.