Geth v1.10.3 is a maintenance release, containing bug fixes and performance improvements.
The performance of the snapshot system has been a big focus in this release cycle.
Generating a snapshot after a snap sync is approximately 10 times faster.
Geth command changes
- Several race conditions in database access are resolved, reducing the potential of database corruption (#22739, #22728)
- Large numbers in log messages now have thousands separators (#22665, #22679)
- Geth no longer warns about database upgrades when starting with an empty database (#22803)
- The new
geth db freezer-index
debugging command prints the contents of a freezer table (#22633) geth --dev --datadir ...
works again (#22738)- Geth now includes the experimental
--catalyst
mode for eth2 merge testing (#22641, #22697, #22770) - Puppeth now supports using ssh-agent for authentication (#22634)
Go library changes
- State snapshot generator performance is much improved in this release (#22667, #22470, #22504)
- It is no longer possible to upgrade snapshot databases generated by pre-Berlin geth (#22663)
- The RPC client now returns non-2xx HTTP responses as
rpc.HTTPError
(#22677) - The ethash engine now performs less database lookups when verifying uncle headers (#21467)
trie.StackTrie
has been refactored to improve API semantics. StackTrie methods previously took ownership of key/value byte slices passed to it, which was unintuitive for calling code (#22673, #22686, #22685)
RPC/GraphQL API changes
- The gas price oracle deals much better with blocks containing transactions of very low price. Such transactions are typically generated by miners using MEV techniques (#22722)
eth_hashrate
works again (#22765)debug_traceCall
now supports state overrides likeeth_call
(#22245)- EVM Tracing now reports correct gas costs for EIP-2929 state access (#22702)
- Clef and the external signer account backend now support signing of EIP-2930 access list transactions (#22585)
Networking
- Support for eth/64 has been removed. The minimum protocol version is now eth/65 (#22636)
- The core of snap sync has been re-architected to allow for dynamic request sizes (#22668, #22777)
- Several other correctness issues in the snap sync client are resolved (#22678, #22789, #22760, #22762, #22761)
- DNS discovery for the snap protocol now uses the eth protocol node list. The snap-specific node list will be retired later. This is possible because more than 75% of all eth nodes support serving snap (#22808)
- For eth and snap, the protocol handlers now report additional metrics about response latency (#22608, #22751, #22753). A Grafana dashboard incorporating the new metrics is available here.
- Several new tests have been added in the cross-client eth protocol test suite. The tests are now more reliable and run as part of pull request CI on Travis (#22698, #22630, #22757, #22749, #22754, #22801)
- The discv5 message handler now reflects IPv4-in-IPv6 addresses correctly when handling PING (#22703)
- The DNS node list tools in cmd/devp2p now support setting a size limit for node lists. This was added because the list of mainnet snap protocol nodes overflowed our AWS Route53 account (#22694, #22695)
Build
- The Windows build environment has been cleaned up and updated to use GCC 10 (#22811, #22788, #22804, #22821)
- The crypto/bn256 and crypto/bls12381 packages are now fuzz-tested against gnark-crypto (#22755)
- go-ethereum now builds correctly on OpenBSD/arm64 (#22693)
For a full rundown of the changes please consult the Geth 1.10.3 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.