Releases: ethereum/go-ethereum
Weir (v1.7.3)
Geth v1.7.3 (Weir) is a maintenance release to address various issues in our previous releases, most importantly along log filtering and replacement transaction propagation. The release also contains a few developer niceties. Please see compatibility section below!
New features:
- Roll out v2 of the
leslight client protocol (#14970, #15367, #15391). - Insta-mining, zero CPU, clique based PoA developer mode
--dev(#15323). - Add API endpoint to list modified accounts between two blocks (#15512).
- Gas estimation returns error instead of maxgas if transaction cannot be executed (#15477).
- Improve EVM jump destination analysis for worst case scenarios (#14582).
- Enforce
application/jsonfor HTTP RPC requests (#15220, #15496). - Private network faucet support Facebook, Twitter and Google+ authentication (#15313).
- Support encrypted SSH keys in the Puppeth network manager (#15443).
- Introduce docker images containing all Ethereum tools (#15467).
- Start shipping Ubuntu Artful Aardvark launchpad packages (#15344).
Squashed bugs:
- Fix log filtering when specifying non-8-multiple starting block number (#15489).
- Fix replacement transaction propagation (#15343).
- Reduce disk overhead on keystore startup (#15526, #15527, #15529).
- Fix occasional Rinkeby chain split by additional fork selection logic (#15470).
- Fix JavaScript tracing to permit working with
Addresstypes (#15297). - Fix missing commit hash in docker image versions (#15458, #15464).
Compatibility caveats:
- All HTTP RPC requests from now on need to have the
Content-Type: application/jsonheader set on them. Geth v1.7.3 will refuse to service requests with no content type headers set (or headers with different content types). This is a security measure to counter a browser CORS circumvention technique. - Geth v1.7.3 ships with
les/2light client support, which might have harder time finding light servers initially until the server providers upgrade to v1.7.3 too.
For a full rundown of changes, please see the v1.7.3 milestone.
As always, binaries and mobile libraries are available on our download page.
Urgent Update (v1.7.2)
Geth 1.7.2 is a hotfix release to address a DOS vulnerability in the EVM starting at Byzantium. Please upgrade before block 4_370_000!
Pre-built binaries should be available shortly at https://geth.ethereum.org/downloads/.
Ptolemy (v1.7.1)
This is a maintenance release that fixes regressions in the 1.7.0 release.
This release enables the Byzantium hard fork transition at block number 4370000 (~17th October) on the mainnet and block number 1035301 (~9th October) on the Rinkeby test network. Please update well before these dates to ensure a smooth transition.
Noteworthy changes:
- Log queries handle the null topic correctly. (#15195)
- Ledger Nano S and Trezor hardware wallets should once again be detected on macOS. (#15232)
- p2p: messages are compressed using Snappy. See EIP706 for more information. (#15106)
- ethclient: The new
TransactionSendermethod can be used to derive the sender address
of a transaction at the time of inclusion. (#15127).
For a full rundown of changes, please see the v1.7.1 milestone.
As always, binaries and mobile libraries are available on our download page.
Megara (v1.7.0)
The Go Ethereum team is proud to announce the next release family of Geth, the first incarnation of which focuses on laying the groundwork for the upcoming Metropolis hard forks (Byzantium and Constantinople) and consists of 125+ code contributions to various parts of the project.
Byzantium fork
The current incarnation of Geth contains all the Byzantium EIPs implemented and also features the fork block number 1,700,000 for the Ropsten testnet transition. The block numbers for Rinkeby and the main Ethereum network will be finalized when Ropsten is deemed stable.
You can find details about individual protocol updates at the following locations:
- EIP 98: Removal of intermediate state roots from receipts (#14750).
- Expanded by EIP 658: Embedding transaction return data in receipts (#15014).
- EIP 100: Change difficulty adjustment to target mean block time including uncles (#14733).
- EIP 198, EIP 212 (197) and EIP 213 (196): Precompiled contracts for modular exponentiation; elliptic curve addition, scalar multiplication and pairing (#14959, #14993).
- EIP 214 (116): Expanding the EVM with static contract calls (#14978).
- EIP 211: Expanding the EVM with dynamically sized return data (#14981).
- EIP 206 (140): Expanding the EVM with cheap state revertals (#14983).
- EIP 649: Delaying the difficulty bomb and reducing the block reward (#15028).
- EIP 684: Preventing overwriting contracts (Byzantium prep) (#15039).
Performance optimizations
The 1.7 release series of Geth is aimed to focus primarily on performance improvements (beside the Byzantium hard fork). The first release of the family already packs a heavy punch with two database schema modifications resulting in significant optimizations:
- Transaction and receipt storage was completely reworked, cutting the data storage requirements of a fast synced node in half, from 26.3GB to 14.9GB at the time of the implementation (#14801).
- EVM log storage and indexing was completely reworked, cutting the filtering time of the entire chain for contract events by 2-3 orders of magnitude, from minutes to under a second (#14522, #14631).
Some work-in-progress updates that will land in the next releases are:
- Upgrading the base peer-to-peer protocol used by all Ethereum sub-protocols, cutting the bandwidth needed for a fast sync from 33.6GB to 13.5GB (#15106). This upgrade will improve the general bandwidth requirement of the network as well as light clients too.
- Introducing a more sophisticated memory caching for state tries, reducing disk IO by a couple orders of magnitude. Exact number are pending a final implementation (#14952).
Trezor wallets
About this time last year we've introduced support for the Ledger hardware wallet. Due to popular demand, we've now expanded on our hardware wallet offering by also rolling out support for the Trezor (#14885).
Opposed to the Ledger however, the Trezor is a bit more complicated as it requires a PIN-unlock sent from the communicating machine instead of directly input by the user. As such, when a user plugs in a Trezor, Geth will print:
New wallet appeared, failed to open url=trezor://0003:0007:00 err="trezor: pin needed"
The Geth console can be used to unlock the Trezor by invoking personal.openWallet(url), which will request the user to enter the shuffled PIN code and send that over to the 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 the Trezor from the JSON-RPC APIs, please consult the PR description.
Transaction journal
In the 1.6.x release family of Geth we've introduced a new transaction pool to avoid propagation issues due to minimum gas-price requirements. This new pool accepted all transactions irrelevant of pricing, and always kept the best paying 4K of them, discarding the cheaper ones.
The new pool features a special exemption mechanism for local accounts so that a user's own transactions are always prioritized over remote ones, even if they are under-priced compared to everyone else's. This ensures that cheap transactions don't get flushed out of the network during heavy usage (e.g. ICO) as long as the originating node remains online.
Geth 1.7.0 takes this protective measure a step forward by journaling all locally created transactions to disk, and loading them back up on a node restart. This ensures that even if the originating node goes offline, cheap transactions still have a chance to be included when the node comes back (#14784).
The transaction journal can be an enormous help for node operators during software upgrades by not having to worry about local transactions going missing. Furthermore, the journal also acts as a resiliency mechanism against node crashes, ensuring that no transaction data is lost.
Rinkeby updates
There have been a lot of subtle tunings made to Puppeth and Rinkeby over the course of this release, such as better ethstats logging to detect malicious reporters and IP address blacklisting to deny access for them.
The Rinkeby testnet also proved vital in finding and and fixing a transaction pool event race that caused a lot of headache around lost transactions and/or duplicate nonce assignments. All such known errors have now been fixed (#15085).
Lastly we're extremely happy to announce that Infura became an active player in the Rinkeby test network by aiding the community both with their own bootnode as well as running an authorized signer node. This should make the Rinkeby network even more robust and resilient.
Closing remarks
Geth 1.7.0 contains a lot of bug fixes and we consider it our best release until now, however we urge everyone to take care with the upgrade and monitor it closely afterwards as it does contain non-trivial database upgrades.
Furthermore, we'd like to emphasize that the upgraded database cannot be used by previous versions of Geth. Our recommendation for production users it to sync from scratch with Geth 1.7.0, and leave the old database backed up until you confirm that the new release works correctly for all your use cases.
For a full rundown of the changes please consult the Geth 1.7.0 release milestone.
As always, binaries and mobile libraries are available on our download page.
AYTABTU (v1.6.7)
Geth v1.6.7 (All Your Transaction Are Belong To Us) is another fine maintenance release:
- The transaction pool now tracks 'local' transactions based on sender address (#14737).
- Transactions sent by local addresses are exempt from gas pricing- and overall queue size limits.
- Docker images are smaller because consensus tests are no longer included (#14734, #14792).
- Extend RPC formatting error messages with field details to better describe the failure (#14686).
- Add Whisper v5 CLI flags to Geth and add a Whisper Go client library (#14540).
Important notice to projects running public nodes (MyEtherWallet, Etherscan, Infura, etc): The sender address of any transaction submitted via RPC will be considered a local address, and all transactions from such addresses will be exempt of the gas price and pool size enforcement. To avoid DOS attacks due to the exemption algorithm, please run with --txpool.nolocals to disable special exemptions for local accounts.
For other minor changes in this release, see the 1.6.7 milestone.
Binaries and mobile libraries are available on our download page.
lgtm on mobile (v1.6.6)
This is another maintenance release:
- Fast sync should be more reliable with magnetic disks (#14460)
- A transaction pool inconsistency regarding tracking of pending transactions is resolved (#14673)
- ethclient: TransactionByHash now actually returns pending = false for mined transactions (#14663)
For other minor changes in this release, see the 1.6.6 milestone.
Binaries and mobile libraries are available on our download page.
Hat Trick (v1.6.5)
Geth v1.6.5 is a security release to counter on ongoing attack on mainnet!
- Use a bitmap instead of a hashmap to store the results of jumpdest analysis, and optimise analysis process (#14570).
Binaries and mobile libraries are available on our download page.
Coverage (v1.6.4)
Geth v1.6.4 is a hotfix release to patch a transaction signing regression introduced by 1.6.2:
- Properly initialize account nonce mutex in the API (#14568).
Previous (v1.6.3) version of Geth included the following hotfixes:
- Fix a quadratic overhead when adding new transactions to the pool (#14561).
- Reduce egress network traffic sent to ethstats to avoid overloads (#14563).
- Fix our
ethereum/client-go:alpineimage to point to the 1.6 branch (#14564). - Fix an account handling regression with badly encoded legacy keyfiles (#14565).
Original (v1.6.2) version of Geth being hotfixed included:
- Server-side tx nonce assignment works for concurrent RPC calls to sendTransaction (#14516).
- The transaction pool accepts transactions with any gas price (#14442).
- (potentially breaking change) Key imports enforce private key length of 32 bytes (#14502). This affects the
personal_importRawKeyRPC method.
Previously hidden transaction pool defaults can now be set:
--txpool.pricelimit value Minimum gas price limit to enforce for acceptance into the pool (default: 1)
--txpool.pricebump value Price bump percentage to replace an already existing transaction (default: 10)
--txpool.accountslots value Minimum number of executable transaction slots guaranteed per account (default: 16)
--txpool.globalslots value Maximum number of executable transaction slots for all accounts (default: 4096)
--txpool.accountqueue value Maximum number of non-executable transaction slots permitted per account (default: 64)
--txpool.globalqueue value Maximum number of non-executable transaction slots for all accounts (default: 1024)
--txpool.lifetime value Maximum amount of time non-executable transaction are queued (default: 3h0m0s)
Binaries and mobile libraries are available on our download page.
Covfefe (v1.6.3)
Nuked: Please see https://github.com/ethereum/go-ethereum/releases/tag/v1.6.4.
Geth v1.6.3 is a hotfix release to address some issues discovered during yesterday's crazy transaction volume:
- Fix a quadratic overhead when adding new transactions to the pool (#14561).
- Reduce egress network traffic sent to ethstats to avoid overloads (#14563).
- Fix our
ethereum/client-go:alpineimage to point to the 1.6 branch (#14564). - Fix an account handling regression with badly encoded legacy keyfiles (#14565).
Binaries and mobile libraries are available on our download page.
Nonce, Inc. (v1.6.2)
Nuked: Please see https://github.com/ethereum/go-ethereum/releases/tag/v1.6.4.
This is mostly a maintenance release with new features added around transaction handling:
- Server-side tx nonce assignment works for concurrent RPC calls to sendTransaction (#14516).
- The transaction pool accepts transactions with any gas price (#14442).
- (potentially breaking change) Key imports enforce private key length of 32 bytes (#14502). This affects the
personal_importRawKeyRPC method.
Previously hidden transaction pool defaults can now be set:
--txpool.pricelimit value Minimum gas price limit to enforce for acceptance into the pool (default: 1)
--txpool.pricebump value Price bump percentage to replace an already existing transaction (default: 10)
--txpool.accountslots value Minimum number of executable transaction slots guaranteed per account (default: 16)
--txpool.globalslots value Maximum number of executable transaction slots for all accounts (default: 4096)
--txpool.accountqueue value Maximum number of non-executable transaction slots permitted per account (default: 64)
--txpool.globalqueue value Maximum number of non-executable transaction slots for all accounts (default: 1024)
--txpool.lifetime value Maximum amount of time non-executable transaction are queued (default: 3h0m0s)
For other minor changes in this release, see the 1.6.2 milestone.
Binaries and mobile libraries are available on our download page.