Skip to content

Releases: ethereum/go-ethereum

Megara (v1.7.0)

14 Sep 14:08
6c6c7b2
Compare
Choose a tag to compare

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:

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)

12 Jul 09:37
@fjl fjl
Compare
Choose a tag to compare

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)

23 Jun 10:02
@fjl fjl
Compare
Choose a tag to compare

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)

01 Jun 18:55
cf87713
Compare
Choose a tag to compare

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)

01 Jun 14:45
9c2882b
Compare
Choose a tag to compare

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:alpine image 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_importRawKey RPC 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)

01 Jun 09:52
99cba96
Compare
Choose a tag to compare

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:alpine image 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)

31 May 09:01
@fjl fjl
Compare
Choose a tag to compare

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_importRawKey RPC 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.

Deripors of Ohratuu (v1.6.1)

04 May 11:57
021c3c2
Compare
Choose a tag to compare

Geth 1.6.1 is mostly a bugfix release adding various polishes throughout the codebase.

Highlights of the release are the capability to iterate over a contract's storage entries via the RPC; transitioning Whisper to protocol v5 along with bundled diagnostics tools; and shorthand connectivity to the Rinkeby test network.

For a detailed rundown, please consult the 1.6.1 milestone.

New features:

  • debug_storageRangeAt RPC supports iterating over contract storage entries (#14350).
  • Switch Whisper to protocol v5 (#14387), ship diagnostic tool (#14414).
  • Add --rinkeby flag to quickly connect to the Rinkeby testnet (#14418).
  • Support disabling USB hardware wallet lookups (#14357).
  • GitHub faucet bot protection (#14339) and funding tiers (#14402).
  • Add explicit SSH server key management for puppeth (#14398).
  • geth init and geth removedb operate on both full and light chains (#14412).

Bugfixes and annoyances:

  • Forbid leading zeroes in RPC block numbers (#13886).
  • Friendly error if the user tries to reinit its chain with an incompatible genesis (#14358).
  • Return [] instead of null when listing accounts but none can be found (#14374).
  • When generating bootnode keys, print and exit, don't start up node (#14372).
  • Make network IDs uniform uint64 everywhere (#14377).
  • Fix data race in during native dapp node restarts (#14379).
  • Support setting flags after sub-commands too (#14388, #14413).
  • Fix clique miner ugly error log when starting a new network (#14411).

Binaries and mobile libraries are available on our download page.

Puppeth Master (v1.6.0)

14 Apr 10:54
facc47c
Compare
Choose a tag to compare

We are delighted to announce the first release in the 1.6 series! Below is a condensed version of everything we've been working on and you can also find a friendly write up on our blog!

Breaking Changes

  • The --fast and --light flags are deprecated (still usable) in favor of --syncmode=fast and --syncmode=light.
  • The default sync mode is --syncmode=fast, for full sync please use --syncmode=full.
  • If --datadir is specified in conjunction with --testnet, it will no longer create a testnet folder within the given data directory, rather will use the one requested directly.

New Features

  • The 'clique' Proof of Authority consensus engine can be used for private networks (#3753).
  • The new puppeth command can be used to deploy private networks (#13854).
  • geth --config can be used to configure geth using a TOML file (#13875).
  • Swarm manifests can be mounted as a directory through FUSE (#3690, #13872).
  • Swarm manifests can be listed using the swarm ls command (#3742).
  • The swarm command accepts file uploads through stdin (#3744).
  • The evm command can disassemble contracts. This replaces the disasm command (#3729).
  • The evm command supports creation of contracts written in EVM assembly language (#3686)
  • For geth --dev chains, Ethereum protocol upgrades (Homestead, etc.) are enabled at block 0 (#3697).
  • The new debug_getBadBlocks RPC method returns recently seen 'bad blocks'.
  • The geth bug command can be used to open bug reports (#3684).
  • JS tracing can use contract.caller, contract.address, contract.value, contract.calldata to inspect the current call context (#14311).
  • rlpdump can stop decoding after the first value with the --single flag (#14320).

Removed Features

  • The eth_compileSolidity RPC method is removed (#3740). See ethereum/EIPs#209 for more information.
  • cmd/gethrpctest, cmd/ethtest are gone (#3705).
  • geth upgradedb is gone. It's no longer feasible to reimport all blocks given the length of the mainnet chain. (#3705)

Internal Improvements

  • Building go-ethereum now requires Go 1.7 or later (#3808). This enables use of the standard-library package "context", which is now used instead of "golang.org/x/net/context" (#3809).
  • go-ethereum has preliminary support for pluggable consensus engines. (#3817)
  • core/vm uses 64bit integers to represent the gas counter and memory size (#3674)
  • Fast sync auto-resumes after deep chain reorganisations (#3743)
  • Genesis block JSON handling is stricter and safer. Notably, most JSON fields now require the "0x" prefix. (#3794)
  • Log messages are enhanced with contextual, machine-readable information (#3696)
  • The newHeads subscription returns blocks hashes in addition to other header fields (#13868).
  • Package trie contains new union and difference iterators (#3637, #14312)
  • Package rlp supports the rlp:"-" struct tag to skip fields.
  • The new swarm/api/client package wraps the Swarm HTTP API (#3742).
  • make devtools installs commands required for go generate
  • Package core can be built without cgo (#3680, #3750).
  • Ethash verification caches are memory-mapped, improving startup time (#3750).
  • Contract calls made through Go bindings can use a custom sender address (#3782).
  • The gas price oracle is now less complicated (#13853).

Squashed Bugs

  • Hardware wallet support is improved. Ledger integration should now work on Windows and macOS. (#3681)
  • The logsBloom field is now set for pending blocks returned through RPC (#3717)
  • HTTP CORS check allows arbitrary other headers (#3783)
  • The light client answers RPC requests during sync (#3660).
  • Light client servers will no longer refuse to talk to other light client servers (#13889).
  • geth --ethstats plays nicer with some quirks of the ethstats server (#3812, #13856).
  • The current head is announced to peers when sync completes (#13883).
  • Transactions are accepted as soon as CPU mining starts. This fixes transaction inclusion issues for small private networks (#13882).
  • Discovery bootstrap nodes are used as a last-resort dial target (#13874).
  • cmd/swarm doesn't crash if --ethapi is empty or invalid (#3754).
  • The RPC server delivers all pending responses before closing the connection (#3814).

Binaries and mobile libraries are available on our download page.

Davy Jones' Locker (v1.5.9)

13 Feb 17:30
Compare
Choose a tag to compare

"Roses are red, Violets are blue, Geth now supports Hardware wallets too!"

Geth v1.5.9 is a feature release working towards hardware and HD (hierarchical deterministic) wallets. The first step consists of support for the Ledger Nano S and Ledger Blue (USB only) HD hardware wallets (#3592), also laying the groundwork for supporting subsequent hardware and software HD wallets.

Other notable changes:

  • Genesis JSON additions and polishes for black box testing #3635, #3656
  • Split off Android builds into Linux build jobs #3662
  • Swarm manifest manipulation commands #3645
  • Slim down versioned Alpine Docker images #3670

Bugfixes:

  • Fix data race in transaction pool nonce retrieval #3625
  • Support swarm in-process restarts #3651
  • Fix abigen contract parsing for solc v1.4.8+ #3648
  • Fix shutdown issue for swarm running in a docker container #3649

For a full rundown, please see the v1.5.9 milestone.

Binaries and mobile libraries are available on our download page.

Ledger ProTips

  • Signing EIP155 transactions requires at least v1.0.3 of the Ethereum app on the Ledger.
    • You may sign non-EIP155 transactions using the go-ethereum library directly.
  • Contract interactions or deploys need to enable Contract data from the Ethereum app Settings.
  • Browser support needs to be turned off from the Ethereum app Settings (different protocol).
  • Windows support requires a USB driver (official Red Hat): https://github.com/daynix/UsbDk/releases
    • May be bundled into our installer later, we're curious how well it holds up in the wild first.
  • Linux support might require granting the user write access to the Ledger
  • Accounts are automatically derived, searching for non zero balance or non zero nonce.
    • First empty account is always listed (sending it funds will derive the next empty account).
  • Mist doesn't know about Ledger, if asked for a password, enter empty and confirm tx on device.
  • If in doubt, unplug and replug :P

Go API changes

Just to emphasize, the section below is about the Go API (i.e. go-ethereum library) changes. The RPC did not incur any backwards incompatible changes. If you do find something, it's a bug, please report it.

Until now the go-ethereum codebase assumed that accounts are equivalent to individual private keys stored on disk inside a keystore. To support hardware and HD wallets however, this invariant breaks, requiring a new API with different constructs and mechanisms. We've tried our best to introduce this new API in such a way that it's trivial to transition to it for anyone already using go-ethereum as a library from Go or Java/ObjC/Swift.

The first breaking change is that while previously the accounts.Manager (or AccountManager on mobile) was a glorified keystore, now it changed its scope to handle Wallet objects, which may contain multiple accounts, as well as may be backed by different backends (keystore or hardware). The previous keystore is kept intact, just renamed to Keystore within the keystore package (arguably a better name and location). If you used the account manager in your own code, a simple swap to the keystore should more or less just work™.

The other breaking change you need to be aware of is that while previously transaction signing in the keystore only required a hash of the transaction, the new code requires the entire transaction object. This is needed to support hardware wallets which require the transaction details for user confirmation UI elements.