Releases: ethereum/go-ethereum
Illium Elite (v1.9.18)
Geth v1.9.18 is a bugfix release, fixing an occasional fast sync hang in the throttling mechanism (among other improvements):
- Memory allocation micro-optimizations to improve raw EVM number crunching by 5% (#21336).
- Fix a regression that made previously persisted
--dev
chains unable to load back up (#21352). - Support configurable developer account (and passphrase) in
--dev
mode (#21301). - Fix downloader throttling that degraded sync and occasionally locked it up (#21263).
- Fix local
gomobile
building and fix iOS framework builds (#21361, #21362). - Fix stale transaction eviction bug, stabilizing pool churn (#21300).
For a full rundown of the changes please consult the Geth 1.9.18 release milestone
As with all our previous releases, you can find the:
- Pre-built binaries for all platforms on our downloads page.
- Docker images published under
ethereum/client-go
. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Mount Milgrom (v1.9.17)
Geth v1.9.17 is a small maintenance release (trying to get back onto the biweekly schedule), though it does pack a few punches as well!
- Enable historical garbage collection for light clients (#19570).
- Apply
--rpc.txfeecap
to a few missed endpoints (#21231). - Drastically reduce allocations in the transaction pool (#21328).
- Drastically reduce allocations on certain EVM opcodes (#21222).
- Raise the default gas limit in
--dev
mode to 12 million (#21323). - Fix ethstats reconnect issue and fix constant Görli drops (#21347).
- Fix gas estimation if
balance / price
overflownuint64
(#21346).
For a full rundown of the changes please consult the Geth 1.9.17 release milestone
As with all our previous releases, you can find the:
- Pre-built binaries for all platforms on our downloads page.
- Docker images published under
ethereum/client-go
. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Ryncol (v1.9.16)
Geth v1.9.16 is another maintenance release containing a couple minor new features, bug fixes, and block processing optimizations.
This release adds the --rpc.txfeecap
geth option, which limits transaction fees to a set value. This limit applies to transactions sent via eth_sendTransaction
. The default limit is 1 ether. (#21212)
The default value for --rpc.gascap
is now 25M gas. It previously defaulted to unlimited gas. This applies to eth_call
and will reject calls which request more gas than the cap. (#21229)
Minor new features:
- You can now run the metrics HTTP server on a separate endpoint. (#21290)
- Protocol message metrics now count the number of messages in addition to bandwidth. (#21256)
- The
geth import
command now exits with status 1 if errors have occurred. (#21244) - The
debug_traceTransaction
RPC method now includes read storage entries in structlog output. (#21204) - cmd/evm: add state transition tool for testing (#20958)
- cmd/devp2p: the devp2p tool now contains a test suite for Discovery v4 (#21163)
- cmd/devp2p: the new
devp2p key
command family provides node key management tools (#21202) - cmd/ethkey: you can now use the
--passwordfile
option with theethkey generate
command (#21183)
Optimizations:
- The EVM now uses the 'uint256' library, improving the performance of math-heavy calls. (#20787, #21206)
- The LES server no longer queries the checkpoint contract for every peer connection, reducing CPU usage. (#21285)
- The gas price oracle now requires significantly less bandwidth when using the light client. (#20409)
- The RLP encoder allocates a lot less, especially for
big.Int
,[N]byte
and list-heavy data structures. (#21291, #21274) - The github.com/golang/snappy dependency has been updated and includes a couple new new optimizations, including an assembly language implementation for arm64. (#21237, #21304)
- crypto, core/types: less allocations when hashing and tx handling (#21265)
- trie: reduce allocations in insertPreimage (#21261)
- crypto/secp256k1: enable 128-bit int code and endomorphism optimization (#21203)
- core/state: avoid escape analysis fault when accessing cached state (#21192)
Bug fixes:
- A long standing bug related to internal fast sync restarts is resolved. (#21260)
- Account management methods no longer crash when the external signer is enabled. (#21279)
eth_call
now defaults to the gas cap value instead of MaxInt64. This avoids warnings for calls with unspecified gas. (#21284)- Geth now builds and runs on DragonflyBSD (#21275, #21241)
- Package ethclient and the accounts/* package tree no longer depend on the RPC API implementation package. (#21319)
- eth/downloader: fixes data race between synchronize and other methods (#21201)
- utils: fix ineffectual miner config flags (#21271)
- eth: returned revert reason in traceTx (#21195)
- core/vm: fix incorrect computation of BLS discount (#21253)
- eth: don't block if transaction broadcast loop fails (#21255)
- core/rawdb: fix high memory usage in freezer (#21243)
- core/rawdb: swap tailId and itemOffset for deleted items in freezer (#21220)
- cmd, node: dump empty value config (#21296)
- internal/web3ext: add missing params to debug.accountRange (#21208)
- accounts/abi: make GetType public again (#21157)
For a full rundown of the changes please consult the Geth 1.9.16 release milestone
As with all our previous releases, you can find the:
- Pre-built binaries for all platforms on our downloads page.
- Docker images published under
ethereum/client-go
. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Dextro Heat Sink (v1.9.15)
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 bygopsutil
. This restores building Geth ondarwin
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:
- Pre-built binaries for all platforms on our downloads page.
- Docker images published under
ethereum/client-go
. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Pink Marble (v1.9.14)
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).
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 supportvoid
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:
- Pre-built binaries for all platforms on our downloads page.
- Docker images published under
ethereum/client-go
. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Drossix Blue (v1.9.13)
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 byRLPx
(#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:
- Pre-built binaries for all platforms on our downloads page.
- Docker images published under
ethereum/client-go
. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Tall Moose (v1.9.12)
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 foreth_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
andunescape
(#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:
- Pre-built binaries for all platforms on our downloads page.
- Docker images published under
ethereum/client-go
. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Weeping Heart (v1.9.11)
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 theeth/64
andeth/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 witheth/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
andbytes32[]
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:
- Pre-built binaries for all platforms on our downloads page.
- Docker images published under
ethereum/client-go
. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Rojo Loco (v1.9.10)
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:
- Pre-built binaries for all platforms on our downloads page.
- Docker images published under
ethereum/client-go
. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Serrice Ice (v1.9.9)
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:
- Pre-built binaries for all platforms on our downloads page.
- Docker images published under
ethereum/client-go
. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.