Pangaea Expanse (v1.10.0)
After three months of development, we are proud to announce the Geth 1.10.0 release, which is the first release in the 1.10 series.
There are a lot of new features in this release. While we review the highlights and list individual changes in this overview, we also invite you to read the Geth 1.10 release blog post, which explains the changes in more detail.
State snapshot system
In this release, the new snapshot mechanism is enabled by default. Snapshots provide O(1) access to state during EVM execution and also serve as the backbone of the snap sync and state pruning features. Note: should you run into any issues with snapshots, they can still be disabled using the --snapshot=false
command-line flag. (#22280, #22177, #22288)
Snap sync
This is a new sync mode, which is a replacement for 'fast sync'. In snap sync, the node downloads Ethereum state data much more efficiently than fast sync ever could. With snap sync, we can also finally provide a progress indicator for the state download. Since this is a new feature, and few peers will support snap sync initially, snap sync is not yet enabled by default. We will make it the default in a couple of weeks. (#21482, #22171, #22235, #22272, #22334)
Berlin fork support
As of Geth 1.10.0, all EIPs scheduled for the Berlin hard fork are supported in Geth. However, due to ongoing debates about the content and timing of the fork, this release does not activate Berlin at any block number.
The following Berlin EIPs were already implemented in Geth 1.9.x:
- EIP-2929: gas cost increases for state access opcodes
- EIP-2315: simple subroutines for the EVM
In Geth 1.10.0, support for the following EIPs has been added:
- EIP-2565: modexp precompile gas cost changes (#22213)
- EIP-2718: typed transaction envelope (#21502)
- EIP-2930: access list transactions (#21502)
We have also updated to the latest consensus tests. (#22009, #22290)
Offline state pruning
We have finally added a way to remove old state from the database. Using the geth snapshot prune-state
command, you can instruct geth to rebuild the database from the stored snapshot while discarding any data that isn't part of the snapshot window of 128 blocks. Note that this feature is experimental. The pruning process takes a lot of time and geth cannot be used while it is running. We hope to improve this in future releases. (#21724, #22386, #22291, #22294)
Database changes
Geth 1.10.0 contains some changes which remove unnecessary data in the blockchain database. In particular, Geth no longer keeps transaction inclusion info for all transactions, and instead limits the storage of inclusion records to one year. For application developers, this change means that very old transactions can no longer be accessed by hash. Note: if you would like to
disable this behavior and keep inclusion information for all historical transactions, you can re-enable indexing using the --txlookuplimit=0
command-line flag. (#22293, #22419)
Storing trie key preimages is now disabled by default. This data is mostly used for contract debugging, e.g. in remix. You can re-enable storing preimages using the --cache.preimages
flag. (#22350)
eth/66 protocol
Geth now supports eth protocol version 66, which adds request IDs. While the new protocol version is supported on the server side, Geth does not use request IDs yet. (#22241)
We have also added a cross-client test suite for the new protocol version in the devp2p
tool. (#22363)
les/4 protocol
Geth 1.10.0 updates the light client protocol to version 4. The new protocol version uses the eth2 Discovery v5 DHT, has better support for servers which can't serve old transactions, and adds support for EIP-2364 ForkID in the handshake. (#21909, #22321, #22357, #22343, #22125, #22347, #21940, #22349, #21930)
Geth command changes
- We have fully removed many deprecated command-line flags. (#22263)
- Geth will now terminate gracefully when the disk is almost full, to avoid database corruption. (#22103)
- Geth now tracks unclean shutdowns and warns you about them when starting back up. (#21893)
- Whisper-related flags have been removed. (#22421)
- USB hardware wallet support is now off by default in geth. It can be enabled using the
--usb
flag. (#21984, #22130) - Using the new
--log.json
flag, you can instruct geth to output machine-readable logs. (#22207) - Geth now provides some low-level leveldb commands for debugging. (#22014)
- Geth now has a
--mainnet
flag, which is useful for scripting. (#21932) - Geth has a new flag
--light.nosyncserve
to enable serving light clients before sync completes. This is meant to be used for testing. (#22250)
RPC changes
- Non-EIP155 transactions (i.e. transactions which are not replay-protected) are now rejected by the RPC API. Note: you can disable this restriction using the
--rpc.allow-unprotected-txs
command-line flag. (#22339) - More transaction details are logged when submitting through RPC. (#22170)
- It is now possible to configure the JSON-RPC server on a custom path prefix. (#22184)
eth_chainID
now returns an error when the chain has not activated EIP-155 yet. (#21686)- The WebSocket transport now limits RPC messages to 15MB. They were previously limited to 5MB. (#22385)
- The 'bad blocks' tracker now persists some recently seen bad blocks, so they can still
be accessed after a restart. (#21827)
GraphQL changes
We have made several backwards-incompatible changes to GraphQL APIs to better match the specification. In cases where the specification was vague, we have coordinated with the Besu development team to match their implementation.
- Receipt
status
is now returned as an integer instead of a hex string. (#22187) estimateGas
andcumulativeGas
queries now return an integer instead of a hex string. (#22126)- The
gasLimit
andgasUsed
fields in responses are now integers instead of hex strings. (#21883) - Retrieving blocks by number now works correctly. (#22153)
Go API changes
- We have added new constructor functions for transactions in package core/types:
types.NewTx
andtypes.SignNewTx
. These functions allow creating EIP-2930 access list transactions from Go code. (#21502) - The
eth.Config
type has moved to a new package eth/ethconfig. (#22205) ethconfig.Config
has a new fieldSyncFromCheckpoint
, which instructs geth to start syncing at an arbitrary checkpoint (#22123)- The event package provides a new helper,
event.ResubscribeErr
for improved logging of subscription errors. (#22191) - The
consensus.Engine
interface no longer provides theVerifySeal
method. (#22274) - The
rpc.Client.ShhSubscribe
method is now deprecated. (#22239) - Package accounts/keystore now uses github.com/google/uuid to generate key UUIDs. This affects the type definition of
keystore.Key
because the type of theId
field is now different. We believe this change won't cause any issues because key UUIDs are not used often. (#22217)
Build changes
- We have updated many external dependencies to newer versions. (#22216, #22227, #22134)
- go-ethereum no longer depends on github.com/wsddn/go-ecdh (#22212)
- go-ethereum no longer depends on github.com/aristanetworks/goarista (#22211)
- Automated builds now use Go 1.16 (#22351)
- Linux builders now use Ubuntu 18.04 Bionic (#22369)
- The mobile framework is now built against NDK version r21e. (#22368, #22373)
Optimizations
This section lists miscellaneous optimizations which were applied during the 1.10.0 development cycle.
- core: speed up header import (#21967)
- core/state: convert prefetcher to concurrent per-trie loader (#21047)
- core: switch to github.com/holiman/bloomfilter/v2 (#22044)
- core/state/snapshot: write snapshot generator in batch (#22163)
- core/state/snapshot: merge loops for better performance (#22160)
- eth/downloader: optimize to avoid a copy in state sync hashing (#22035)
- eth/protocols/snap: speed up hash checks (#22023)
- eth: optimize tx broadcast mechanism (#22176)
- consensus/ethash: implement faster difficulty calculators (#21976)
- core/txpool: remove "local" notion from the txpool price heap (#21478)
- eth, core: speed up some tests (#22000)
Bug fixes
This section lists miscellaneous bug fixes and changes which were applied during the 1.10.0 development cycle.
- accounts/abi/bind: fixed unpacking error (#22230)
- accounts/abi/bind: fix error-handling in wrappers for functions returning structs (#22005)
- cmd/abigen: clarify abigen alias flag usage (#21875)
- cmd/clef: don't check file permissions on windows (#22251)
- cmd/devp2p: fix documentation for eth-test (#22298)
- cmd/faucet: fix nonce-gap problem (#22145)
- cmd/faucet: fix websocket race regression after switching to gorilla (#22136)
- cmd/faucet: sort requests by newest first (#22018)
- cmd/faucet: support v1.1 Twitter API in faucet, fix puppeth (#22107)
- cmd/faucet: switch Facebook auth over to mobile site (#22137)
- cmd/faucet: update the embedded website asset (#22169)
- cmd/faucet: use Twitter API instead of scraping webpage (#21850)
- cmd/geth: CLI help fixes (#22220)
- cmd/geth: dump config for metrics (#22083)
- cmd/geth: fix js unclean shutdown (#22302)
- cmd/utils: add workaround for FreeBSD statfs quirk (#22310)
- cmd/utils: avoid making console preloads absolute (#22109)
- common/compiler: fix parsing of solc output with solidity v.0.8.0 (#22092)
- consensus: refactor FinalizeAndAssemble to use Finalize (#21993)
- core/state/snapshot: ensure Cap retains a min number of layers (#22331)
- core/state: copy the snap when copying the state (#22340)
- core/state: fix panic in state dumping (#22225)
- core: fix temp memory blowup caused by defers holding on to state (#22319)
- core: reset to genesis when middle block is missing (#22135)
- core: reset txpool state on sethead (#22247)
- ethclient: better test suite for ethclient package (#22127)
- eth/downloader: enhanced test cases for downloader queue (#22114)
- eth/filters: fix potential deadlock in filter timeout loop (#22178)
- eth/protocols/eth: fix slice resize flaw (#22181)
- eth/protocols/snap: track reverts when peer rejects request (#22016)
- eth/tracers: fix unigram tracer (#22248)
- eth/tracers: include intrinsic gas in calltracer, expose for all tracers (#22038)
- eth: improve transaction broadcaset log messages (#22146)
- internal/ethapi: restore net_version RPC method (#22061)
- les: don't drop sentTo for normal cases (#22048)
- metrics: fix cast omission in cpu_syscall.go (#22262)
- miner, test: fix potential goroutine leak (#21989)
- miner: avoid sleeping in miner (#22108)
- node: always show websocket url in logs (#22307)
- p2p/dnsdisc: fix hot-spin when all trees are empty (#22313)
- rlp: handle case of normal EOF in Stream.readFull (#22336)
- tests/fuzzers/abi: better test generation (#22158)
- tests/fuzzers/abi: fixed one-off panic with int.Min64 value (#22233)
- tests/fuzzers/les: add fuzzer for les server handler (#22282)
- tests/fuzzers: added consensys/gurvy library to bn256 differential fuzzer (#21812)
- tests/fuzzers: fix abi fuzzer (#22199)
- tests/fuzzers: fix false positive in bitutil fuzzer (#22076)
- trie: fix bloom crash on fast sync restart (#22332)
- trie: fix range prover (#22210)
For a full rundown of the changes please consult the Geth 1.10.0 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.