Skip to content

Releases: ethereum/go-ethereum

Weeping Heart (v1.9.11)

18 Feb 11:51
6a62fe3

Choose a tag to compare

Geth v1.9.11 was planned to be our next regular maintenance release, but enough niceties have piled up for it to become a feature release. This is also the reason why we delayed it by two weeks compared to our regular schedule.

The release ships three important new features:

  • DNS-based peer discovery is now enabled in Geth (#20592, #20660). From now on Geth nodes have two independent mechanisms to find peers. The DNS lists serve as a fallback mechanism when peers cannot be found through the DHT.

    DNS-based discovery is a centralized mechanism, but we have tried to make the operation of this mechanism as transparent and permissionless as possible. The public lists used by default are generated by crawling the discovery DHT. At this time, there are ~1150 publicly routed Ethereum mainnet nodes in the default list. Our public lists also serve the Ropsten, Goerli and Rinkeby test networks. Nodes running any Ethereum client which implements EIP-868 and EIP-2124 will appear in the public lists automatically.

    You can disable the use of DNS-based discovery using the --discovery.dns "" flag combination.

    If you want to create a DNS-based node list for your private or public network, please check out our DNS Discovery Setup guide. We hope that organizations other than Ethereum Foundation will provide public lists in the future and will happily integrate those lists into the default one using the 'link' feature of EIP-1459.

  • Transaction announcements via eth/65 (EIP 2464) is now implemented and Geth<->Geth connections should use significantly less bandwidth (#20234) for exchanging transactions. Final numbers are anybody's guess though, as we need to wait for widespread network deployment. This feature depends on the eth/64 and eth/65 protocol updates, which are not yet supported in all Ethereum client implementations. While connections between compatible clients will use the new protocol, geth will remain compatible with eth/63 until the new protocol versions are sufficiently adopted by the public network.

  • The JavaScript engine underlying the Geth console and Clef rule engine was switched from Otto to Goja, which should bring it up to ECMAScript 5.1+ compliance. Not your latest and greatest .js environment of course, but significantly better and faster than before (#20470, #20599).

Minor features and fixes contained in the release:

  • Shave a few milliseconds off of each block via internal trie optimizations (#20481, #20488).
  • Optimize EVM BLOCKHASH opcode execution to handle the worst case better (#20589).
  • Check for RPC API namespace availability to detect typos in --rpcapi &co (#20597).
  • Add geth dumpgenesis to print the full genesis and chain config of a node (#20191).
  • Revert pending block number reporting during block retrieval (#20616).
  • Fix a JavaScript tracer panic when accessing illegal memory (#20612).
  • Fix an RPC connectivity issue around flaky connections (#20414).
  • Clean up C++ mainnet and Geth Görli bootnodes (#20610).
  • Fix bytes32 and bytes32[] support in Clef (#20609).

For a full rundown of the changes please consult the Geth 1.9.11 release milestone.


As with all our previous releases, you can find the:

Rojo Loco (v1.9.10)

20 Jan 10:36
58cf568

Choose a tag to compare

Geth v1.9.10 is one of our usual maintenance releases. To make the first release of 2020 a bit more special though, we've also enabled the light client checkpoint oracle on mainnet (been running on all test nets for over 6 months now)!

Among the various tiny tweaks, more notable ones are:

  • Integrate DNS discovery, don't activate yet (#20437, #20524).
  • Bump the propagated transaction cap to 64KB (#20352, #20555).
  • Add propagated block integrity check before forwarding (#20546).
  • Continued removing deprecated types from the codebase (#20312).
  • Optimize memory allocations during trie traversal in hashing (#20529).
  • Handle an ABI ambiguity between Solidity and Vyper outputs (#20419).
  • Support WebSocket dialing from Go with custom HTTP configs (#20471).
  • Extend the ABI decoder to handle Solidity 6 view/pure modifiers (#20482).
  • Reorganize chain database writes to be less vulnerable to crashes (#20287).
  • Support exporting a block interval via RPC too, not just through the CLI (#20107).

And of course, fixes:

  • Fix issue where light servers disconnected each other (#20453).
  • Fix a goroutine leak in whisper v6 implementation. (#20520).
  • Fix discovery bootnode-fallback on blocked UDP (#20573).
  • Fix an RPC incompatibility for pending blocks (#20460).

For a full rundown of the changes please consult the Geth 1.9.10 release milestone.


As with all our previous releases, you can find the:

Serrice Ice (v1.9.9)

06 Dec 10:26
0174499

Choose a tag to compare

Geth v1.9.9 is yet another hard fork release! Don't worry, it's not a hotfix for Istanbul. v1.9.9 ships and enables the next hard fork, Muir Glacier, scheduled for block #9200000, expected around the 6th of January, 2020 (and block #7117117 on Ropsten, expected more or less around the same time).

Apart from Muir Glacier, the release:

  • Simplifies and cleans up the internals of the miner package (#20335, #19396).
  • Fixes a regression in restoring a deleted chain from the freezer (#20403).
  • Fixes a data race in the new iterator based discovery code (#20421).
  • Fixes a pointer reference issue in ABI big.Int decoding (#20412).
  • Fixes the help message of certain geth subcommands (#20203).

For a full rundown of the changes please consult the Geth 1.9.9 release milestone.


As with all our previous releases, you can find the:

Thessian Temple (v1.9.8)

26 Nov 10:26
d62e9b2

Choose a tag to compare

Geth v1.9.8 is yet another biweekly maintenance release, but that does mean it only contains fixes! Two highlights of the release are switching the entire code base over to Go modules (#20311); and replacing the trie cacher, slashing memory consumption on mainnet - using default configs - by 1GB (#19971).

Note: Go modules were introduced in Go 1.11 and greatly polished throughout Go 1.13. Although Geth builds fine with Go 1.11 and Go 1.12 too, we recommend running at least Go 1.13 as it is more flexible in handling various circumstances. If you are using go-ethereum as a library, converting your project to Go modules via go mod init will make dependency management a lot less of a hassle than the vendor approach. Be aware, however, that Go modules require network access if the dependencies aren't yet cached locally.

Other notable changes:

  • Switch the deprecated web socket library to github.com/gorilla/websocket (#20283, #20289).
  • Deprecate the gometalinter in favor of golangci-lint (#20295 + dozens of linter fixes).
  • Support aliases to manually resolve name clashes in abigen generated code (#20244).
  • Add clique_status API to quickly glance the health of Clique networks (#20103).
  • Initial version of a light server priority API to allow incentivized services (#20070).
  • Make puppeth SSH key confirmation friendlier with bad user input (#20350).
  • Support loading transaction input from files in the evm utility (#20273).
  • Allow digits inside of labels for the internal assembler (#20362).

For a full rundown of the changes please consult the Geth 1.9.8 release milestone.


As with all our previous releases, you can find the:

Quad Kicker (v1.9.7)

07 Nov 08:18
a718daa

Choose a tag to compare

Geth v1.9.7 is our almost-usual biweekly maintenance release (one release skipped due to Devcon).

This release is a bit more special, however, as it finally initializes the Ethereum mainnet Istanbul fork block 9069000, targeted to arrive around the 4th of December! Please update your mainnet Geth nodes to v1.9.7 (or newer) as soon as possible to avoid surprises!

Beside hard-coding Istanbul, we've shipped:

  • Enforce proper fork orders to avoid partially initialized private networks (#20169).
  • Deploy eth/64, extending the protocol handshake with a forkid field (#20140).
  • Integrate Istanbul configuration support into puppeth for private networks (#19926).
  • Small tweaks to the ABI to Go binding generator to correctly handle more types (#20179).
  • Various internal light client capacity accounting optimizations for fairer servicing (#20077).
  • Remove some unnecessary redundancy from internal state sync data structures (#19929).
  • Avoid some unnecessary memory copying in the EVM, speeding up certain opcodes (#20177).
  • Extend the forkid validation to catch two more corner cases, courtesy of @ritzdorf (#20220).
  • Continue work towards the DNS and ENR based secondary discovery protocol (#20168, #20132).
  • Rework the PPA dependency management, supporting the latest Go releases from now on (#20240).

And fixed:

  • Fix a tiny data race in the downloader (#20204).
  • Fix some parsing issues in the EVM assembly parser (#20210).
  • Fix IPC paths in Clef on Windows to use proper Windows pipes and not Unix pipes (#20166).
  • Fix an issue where 2 config file fields were always overwritten by the CLI, even if unset (#20167).
  • Fix the evm binary so that it gracefully ignores useless whitespace around code snippets (#20211).
  • Fix a gas estimation issue for contracts that check tx.gasprice when using the Go bindings (#20189).

There is also an ongoing effort of porting over all our documentations from the GitHub Wiki pages, cleaning out stale information, getting relevant things up to date (#20229). It's a lot of work and we don't even know where to start, so contributions are more than welcome!

For a full rundown of the changes please consult the Geth 1.9.7 release milestone.


As with all our previous releases, you can find the:

Elasa (v1.9.6)

03 Oct 09:43
@fjl fjl

Choose a tag to compare

Geth v1.9.6 is a bug fix release, which improves light client sync to not start from zero when a CHT checkpoint is available (#20120).

This release also adds support for EIP-1898: all state-related RPC methods now support specifying block hashes as well as block numbers. This affects eth_getBalance, eth_getStorageAt, eth_getTransactionCount, eth_getCode, eth_call and eth_getProof (#19491).

Minor changes:

  • LES servers now advertise the les capability via ENR (#20145)
  • New metrics for p2p bandwidth per protocol message (#20133)
  • LevelDB seek compaction is disabled, reducing disk I/O (#20130)
  • Handling of invalid future blocks is improved (#19763)

For a full rundown of the changes please consult the Geth 1.9.6 release milestone.


As with all our previous releases, you can find the:

Memory Stealer (v1.9.5)

20 Sep 11:47
@fjl fjl

Choose a tag to compare

This is a security-critical release that fixes a regression in v1.9.4 where blocks
with invalid state were created by the miner component.


As with all our previous releases, you can find the:

Frozen Pyjak (v1.9.4)

19 Sep 09:11
46891c1

Choose a tag to compare

Geth v1.9.4 is a special maintenance release, that besides fixing issues as usual, also locks in the Istanbul hard fork block numbers for the Ropsten, Rinkeby and Görli test networks:

  • Ropsten: 6485846, scheduled October 2, 2019 (ref).
  • Rinkeby: 5435345, scheduled November 13, 2019 (ref).
  • Görli: 1561651, scheduled October 30, 2019 (ref).

Please update your nodes on the above test networks before the deadlines, otherwise you will end up either on a wrong chain (Ropsten), or stuck altogether (Rinkeby and Görli). The --override.istanbul CLI flag can be used to bail out of the fork even last minute if things go sour.


Improvements:

  • Accumulate state writes post-Byzantium and only push into the trie at block end (#19953).
  • Smarter locking in the transaction pool to avoid some contention (#20080, #20081, #20085).

Bugfixes:

  • Fix a USB HID discovery regression on Windows (#20092).
  • Various stability and balancing fixes for light servers (#20079).
  • Fix some RLP decoding issues around nils for discv5 (#20064).
  • Expose the GraphQL port (8547) from our docker images (#20033).
  • Fix GraphQL UI serving regression caused by gzip encoding (#20046).
  • Fix GraphQL address type decoding to reject invalid strings (#20046).
  • Fix P2P metric types so they work properly with Influx/Grafana (#20047).

For a full rundown of the changes please consult the Geth 1.9.4 release milestone.


As with all our previous releases, you can find the:

Tasty Tankard (v1.9.3)

03 Sep 09:15
cfbb969

Choose a tag to compare

Geth v1.9.3 is a regular maintenance release, highlights being finalization of the Istanbul EIPs.

New Features:

  • Add eth.fillTransaction to create-but-not-sign a transaction (#19915).
  • Support DNS names in enode URLs during admin.addPeer (#18524).
  • Enable gzip compression on the HTTP RPC API endpoint (#19997).
  • Reduce light client default peer count from 100 to 10 (#19933).
  • Align CLI flags and descriptions a bit better (#19956).

Istanbul changes (progress tracker):

  • Implement EIP-152: Blake2B F compression function precompile (#19972).
  • Implement EIP-2028: Transaction data gas cost reduction (#19931).
  • Implement EIP-2200: Net SSTORE optimizations (#19964).
  • Add --override.istanbul flag as a failsafe (#20004).
  • Enable Istanbul EIPs in the EVM jumptable (#19993).

Fixed Bugs:

  • Update README with the latest fork configs for private networks (#19983, #20002).
  • Separate light client and light server P2P handlers internally (#19639, #20010).
  • Fix an import crash caused by a data loss from a previous crash (#19986).
  • Deprecate Ubuntu Cosmic and enable builders for Ubuntu Eoan (#19955).
  • Fix an annoying log in geth attach about cache sanitation (#19911).
  • Fix admin.exportChain to forbid overwriting existing file (#20019).
  • Update Clef's 4byte database to the most recent version (#19957).
  • Add more verbose logging to even small chain reorgs (#18950).
  • Fix iOS builds broken from a gomobile update (#19995).

For a full rundown of the changes please consult the Geth 1.9.3 release milestone.


As with all our previous releases, you can find the:

Blue Thessia (v1.9.2)

13 Aug 10:51
e76047e

Choose a tag to compare

Geth v1.9.2 is a small maintenance release. It introduces some minor features, fixes some minor bugs and starts to lay the groundwork for the Istanbul hard fork.

Features added:

  • Rework client tracking for light servers to better prioritize requests, making it fairer for everyone (#19745).
  • Avoid retrieving full blocks for GraphQL queries on light clients if the query relies on headers (#19886).
  • Support closing a simulated backends, avoiding a goroutine leak during log running tests (#19902).
  • Support eth_call overriding chain state before execution, see API docs for details (#19917).
  • Replace all user facing passphrase labels with password to avoid confusion (#19932).

Bugs fixed:

  • Fix an RPC annoyance where inclusion info for pending transactions was 0, not null (#19901).
  • Fix an RPC regression from v1.9.1 where the block size was not hex encoded (#19885).
  • Fix the builder to extract commit hashes from detached git branches too (#18315).
  • Fix storage trie value encoding when running geth dump (#19943).
  • Fix console output coloring for Clef on Windows (#19889).

Istanbul changes (progress tracker):

  • Refactor the internal chain configuration to allow enabling EIPs individually in tests (#19735).
  • Implement EIP-1884: Repricing for trie-size-dependent opcodes (#19743).
  • Implement EIP-1108: Reduce alt_bn128 precompile gas costs (#19904).
  • Implement EIP-1344: ChainID opcode (#19921).

For a full rundown of the changes please consult the Geth 1.9.2 release milestone.


As with all our previous releases, you can find the: