Skip to content

Releases: ethereum/go-ethereum

Dextro Heat Sink (v1.9.15)

08 Jun 09:01
@fjl fjl
Compare
Choose a tag to compare

Geth v1.9.15 is a maintenance release containing bug fixes as well as implementations of all EIPs currently scheduled for the upcoming Berlin fork. A temporary test network for these EIPs has also been launched at https://yolonet.xyz/ and can be joined via Geth with --yolov1 flag.

The minimum Go version required to build go-ethereum is now Go 1.13.

The eth_call, eth_estimateGas and eth_sendTransaction RPC methods now return the revert reason as a JSON-RPC error when the contract executes REVERT. The returned error includes the decoded reason string in the error message, and also makes the raw REVERT data available in the error's "data" field:

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": 3,
    "message": "execution reverted: some error",
    "data": "0x08c379a000000000000000000..."
  }
}

Other improvements and fixes in this release:

  • The LES 'server pool' was rewritten and can now use DNS discovery to find light servers (#20758).
  • Argument checking for natively-implemented console functions is improved (#21081, #21160).
  • Geth no longer hangs during shutdown while waiting for synced blocks to import (#21114).
  • The RPC client now sends WebSocket ping frames when connection is idle (#21142).
  • Uses of the gosigar library have been replaced by gopsutil. This restores building Geth on darwin without cgo and makes automatic database cache size selection work on OpenBSD (#21041).
  • Prometheus metrics exporting no longer sends duplicate type definitions (#21068).
  • Password input prompts in Clef now work when stdin is not a TTY (#20960).
  • Internal sync error reporting has been made more detailed (#21067).
  • EVM JUMPDEST checks are a bit faster in certain cases (#21123).
  • Fix the puppeth faucet's tweet retrieval endpoint (#21172).

The following core EIPs are implemented in this release:

  • EIP-2537: Precompile for BLS12-381 curve operations (#21018).
  • EIP-2315: JUMPSUB for the EVM (#20619).

Please note that the EIP implementations are not yet scheduled to activate and will receive further testing and development before the fork.

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


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

Pink Marble (v1.9.14)

13 May 09:36
6d74d1e
Compare
Choose a tag to compare

Geth v1.9.14 is a regular maintenance release, but is also packs a punch with some interesting new features!

Ethereum mainnet currently contains over 700M transactions. Each full node maintains a search index, stating that transactions with hash H is stored in block B. This allows you to look up an arbitrary transaction from the past (at a significant storage cost). But how often do you look up transactions from years ago?

Geth v1.9.14 ships a --txlookuplimit flag, which specifies the number of recent blocks you want to maintain the search index for (by default it's 0 = since genesis). At its most extreme, you can set it to 1, to prune all past indexes. At the time of release, this reduces your LevelDB SSD footprint by 32GB! You can modify this flag at will, Geth will unindex/reindex in the background based on the current setting. If you unindex a lot of transactions, you might need to compact your database to reclaim the space immediately via debug.chaindbCompact().

Deleting transaction indexes locally is fine since they are not used in consensus nor in synchronization, so network health is unaffected. Light servers for now do need to maintain the full index since light clients rely on them. Huge props to @rjl493456442 and @holiman for this work (#20302).

txlookuplimit

In the current release, we've reworked gas estimation so that reverting transactions will give you a proper error, bubbling up the EVM revert reason (#20830). The release also renamed most of the RPC API related flags to make them consistent with our namespace style, but don't worry, the deprecated flags will keep working for the foreseeable future (#20935).

A rundown of shipped features:

  • Implement background transaction indexing and transaction index deletion (#20302).
  • Improve gas estimation to return the failure/revert reason too if available (#20830).
  • Make light client chain selection logic similar to full nodes on Clique PoA (#20931).
  • Drop the --override.istanbul and --override.muirglacier flags (#20942).
  • Rename a significant number of flags to have consistent namespaces (#20935).
  • Optimize the ABI decoder to only calculate method IDs once (#20895).
  • Remove legacy v5 discovery bootnodes used by LES (#20949).
  • Various ABI package refactors and cleanups (#21009, #21022).
  • Support overloaded struct fields in the ABI parser (#21060).
  • Implement account and storage trie range proofs (#20908).
  • Implement snapshot storage iteration (#20971).

A rundown of fixed bugs:

  • In case of a corrupted database, fail block processing, don't report bad block (#21039).
  • Fix a fast sync regression that didn't properly abort on premature shutdown (#20988).
  • Fix the logger to properly escape all special characters in context fields (#20987).
  • Fix the snapshot journal reloading to not lose deleted account markers (#21003).
  • Fix a trie data race when accessing preimages through the RPC APIs (#20923).
  • Fix the TCP P2P dialer to reject enode IDs that advertise TCP port 0 (#21008).
  • Fix gas estimation to cap max attempted usage at account balance (#21043).
  • Fix the Java abigen code generator to support void return types (#21002).
  • Fix the memory capper to be more aggressive on 32bit platforms (#21028).
  • Fix a data race in key import if the same is imported concurrently (#20915).
  • Fix a data race in the snapshot iteration (upcoming protocol) (#20948).
  • Fix a freezer termination annoyance that printed warnings (#21010).
  • Fix the state dumper to also include the zero address (#21038).
  • Fix an ethstats regression that was leaking tickers (#21071).
  • Fix receipt loss in empty Clique blocks after a crash (#21045).
  • Fix a memory leak in the snapshot storage iteration (#21036).
  • Fix accidental snapshot creation on archive nodes (#21025).
  • Fix startup parameters of Windows .lnk files (#21055).

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


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

Drossix Blue (v1.9.13)

16 Apr 07:43
cbc4ac2
Compare
Choose a tag to compare

Geth v1.9.13 is a scheduled maintenance release, focusing on polishes and fixes. The highlight of the release is that we've finally merged support for dynamic state snapshots, something we've been working on for over half a year. For now it's not yet enabled by default, but we're hoping for big things to be built on top of this.

This release also switches over to Go 1.14.2 (the first version in the 1.14.x family that is stable for Ethereum), resulting in about 10% block processing speedup.

A summary of the features we've been working on:

  • Implement dynamic state snapshots (behind --snapshot for now) (#20152).
  • Bump the propagated transaction size limit to 128KB, up from 64KB (#20835).
  • Support running the HTTP and WebSocket RPC on the same port (#20810).
  • Support keeping the ethash caches and DAG forcefully in RAM (#20484).
  • Deprecate --testnet in favor of --ropsten, but keep it for now (#20852).
  • Add a newaccount command to Clef, mostly for tutorial purposes (#20782).
  • Expose individual metrics for every RPC method call type (#20847).
  • Add support for exposing/exporting metrics from geth import runs (#20738).
  • Add debug_accountRange RPC API to iterate over the accounts (#19645).
  • Write up the documentation for the checkpoint-admin command (#20697).
  • Change DNS discovery record TTLs to saner values (#20801, #20819, #20820).
  • General cleanups in the ecies crypto package used by RLPx(#20836).

And a summary of the bugs we've been fixing:

  • Improve node shutdown, avoiding a crash in fast sync (#20695).
  • Fix filtering for event topics consisting of negative integers (#20865).
  • Fix and clean up database iteration with prefixes and start keys (#20808).
  • Fix an issue in eth_call that changed the balance of the caller (#20783).
  • Fix a crash in initial fast sync when also mining at the same time (#20780).
  • Fix the RPC startup logs to display the actual port if requested 0 (#20789).
  • Fix a light client deadlock that caused the testnet faucets to freeze up (#20828).
  • Fix a data race in the ancient database between retrieval and shutdown (#20919).
  • Fix an annoying duktape build warning that many believed was an error (#20777).
  • Fix an iteration issue in rawdb tables that returned wrong keys (unused code) (#20703).
  • Fix an RPC regression in the clique namespace that broke default arguments (#20781).
  • Fix an annoyance that rejected --rpcapi=rpc (not that you would need to use this) (#20776).
  • Fix an iOS build issue caused by CPU metrics relying on an unavailable kernel header (#20816).

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


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

Tall Moose (v1.9.12)

16 Mar 11:47
b6f1c8d
Compare
Choose a tag to compare

Geth v1.9.12 is a small bugfix release, mostly to keep a semi-regular schedule.

One small breaking change in the release is that eth_call will not default to your first account any more if you don't explicitly specify a sender. This was done to avoid the same input behaving differently in different environments. You should never do eth_call without explicitly setting a sender in the first place.

Changes:

  • Default to the zero (0x00...0) account for eth_call sender if none was specified (#20702).
  • Add missing CallOpts.SetFrom for mobile to permit setting a sender on calls (#20721).
  • Decouple constants in two EIPs applied together in Istanbul (#20646).

Fixes:

  • Fix a console regression that lost support for escape and unescape (#20700).
  • Fix failing CI runs due to randomness in tx fetcher scenario tests (#20712).
  • Fix a goroutine leak in transaction propagation (#20762).
  • Fix a possible data race in the downloader (#20690).

The release also includes a few changes towards supporting Go 1.14, but the switch-over is postponed until Go 1.14.1 is released due to an issue in Go around faulty Linux kernel detection.

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


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

Weeping Heart (v1.9.11)

18 Feb 11:51
6a62fe3
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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: