Geth v1.12.1 is a maintenance release, albeit a rather large one, since we haven't put out a version since May.
This release is a recommended upgrade for all users and contains security-related fixes.
Here's the list of changes:
Cancun fork
Development for the upcoming Cancun hard fork has been a focus in this release cycle. Do note however, that Geth v1.12.1 is not yet ready for Cancun.
- For EIP-4844 'Shard Blob Transactions', this release contains basic type definitions and state transition logic (#27356, #27382, #27392, #27393, #27470, #27721, #27736, #27743, #27767, #27789, #27791, #27793, #27796, #27797, #27825, #27874)
- We have also implemented an entirely new mempool -- the blobpool -- for EIP-4844 transactions. The new pool is backed by an on-disk database and has an overall simpler design than the txpool we use for regular transactions. The blobpool is not yet used by p2p networking and is still being tested in the Cancun devnets. (#26940, #27429, #27463, #27481, #27790, #27822)
- EIP-6780: 'SELFDESTRUCT only in same transaction' (#27189)
- EIP-5656: 'MCOPY instruction' (#26181)
- EIP-1153: 'Transient storage opcodes' was already implemented and is enabled for Cancun (#27663, #27613)
Geth command changes
- The Rinkeby testnet is no longer supported in Geth (#27406)
geth --dev
now simulates a PoS-based chain (#27327)evm blocktest
can now output structured logs (#27396)- Geth will now configure GOMAXPROCS based on CPU quota settings. This should improve efficiency when running in Docker containers with a CPU core limit applied. (#27506, #27814)
- An IPv6 listening address for can now be configured for HTTP/WS (#27628) (#27635)
RPC/GraphQL API changes
- JSON transactions now have a
yParity
fields, as mandated by the RPC API spec (#27744, #27882) - Legacy transactions now have a
chainID
field in RPC responses, like all other transaction types (#27452) - Block headers returned by RPC no longer report a non-standard
size
field (#27347) eth_estimateGas
now supports state overrides likeeth_call
(#27845)eth_estimateGas
now handles internal chain reorgs more correctly (#27505)eth_getProof
is slight more efficient, and will now return a response in the canonical encoding even for off-spec input parameters (#27309, #27310)eth_getTransactionReceipt
now returnsnull
when the transaction is not available. It used return an error in that case. (#27712)debug_storageRangeAt
now takes a block hash or number as parameter (#27328)- The new
debug_getTrieFlushInterval
method reports the internal state saving interval (#27303) - A crash in the prestate tracer is resolved (#27691)
- Structured EVM logs returned by tracing now contain the
returnData
(#27704) - GraphQL now supports withdrawals (EIP-4895) (#27072)
Go library changes
- The RPC server now enforces limits on batch requests and responses. This is a potentially breaking change.
If you use batch requests with geth, and also use the go-ethereum RPC client library, we strongly recommend updating your go-ethereum library dependency as well. The new client version handles invalid batch responses way better than before. (#26681) - The RPC client has multiple new ways to test whether the transport supports real time subscriptions (#25942)
- fsync is now enabled for pebble database writes (#27615, #27522)
- Function calls timed by metrics will now run even if metrics are disabled (#27724, #27723)
Node.Attach
no longer returns an error. This is a breaking Go API change. (#27450)- The keystore has improved verification of keys loaded from disk (#27432)
- Per-level metrics are now available for LevelDB (#27643)
Core
- All block creation activity is now paused while the node is syncing (#27218)
- Two minor bugs in the transaction pool are resolved in this release (#27404, #27479)
- Geth no longer uses a 'clean cache file' to persist internal caches across restarts. While persistent cache added a small performance boost right after startup, it could cause obscure issues in certain restart scenarios. (#27525)
- A large portion of the new Path-Based State Storage scheme has been implemented. While it isn't active yet, we are planning to make this new storage method available in the next release. (#25963, #27323, #27349, #27428, #27687, #27753, #27815)
- As part of testing the new storage scheme, some inconsistencies in selfdestruct handling were discovered by fuzz tests and had to be fixed (#27376, #27339)
- We have also made significant progress on the integration of Verkle Trees, which required changes to internal state-handling APIs (#27000, #27209, #27464, #27476, #27544, #27853)
Networking
- A serious memory leak related to database writes in snap sync is fixed in this release (#27842)
- Large transactions (> 4kB) are no longer broadcasted to peers. This resolves a potential network congestion issue (#27618)
- The p2p networking layer has learned to announce alternate ports returned by UPnP/NAT-PMP (#26359)
- The p2p server now properly tracks all peer goroutines (#27887)
- Networking initialization now really disables all discovery when
--nodiscover
is used (#27518) - Obsolete parts of the LES protocol implementation, which is currently non-functional, have been removed (#27737)
- Discovery bootstrap nodes will now be filtered by the netrestrict setting, like all other nodes (#27701)
- We now provide additional metrics around p2p dialing, making it possible to measure the efficieny of peer discovery (#27621)
- The downloader no longer accumulates goroutines/memory while processing reorgs (#27397)
- A very rare crash related to peer connection tracking is resolved (#27665)
- It is now possible to configure certain discovery internals for experimentation (#27387)
Build
- This release is built with Go 1.20.7 (#27835, #27708)
- On UNIX-like OSes, package rpc no longer uses cgo (#27447)
- Building go-ethereum no longer fails when .DS_Store files exist in unexpected locations (#27521)
- On macOS, a build warning related to libusb is resolved (#27698)
- An obscure build issue related to the NDEBUG C macro is resolved (#27550)
For a full rundown of the changes please consult the Geth 1.12.1 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.