Releases: ethereum/go-ethereum
Krogam DMZ (v1.12.0)
Geth v1.12.0 is a potentially breaking change, hence it was deemed to deserve version bump, to 1.12
.
The v1.12 release family drops support for proof-of-work, and thus can not be used any more on PoW-based private chains, or as an upstream library for projects depending on ethash
PoW (#27178, #27147).
In our GraphQL API, a breaking change is that all numeric values are now encoded as hex strings (#26894). The internal GraphQL UI was updated to version 2.0. (#27294).
Regarding our move from leveldb
to pebble
, Geth now defaults to use Pebble as a backend if no existing database is found (#27136). If a previous LevelDB database exists Geth will keep using that, and if you must have LevelDB for some compatibility reasons, you can force it in Geth with the --db.engine=leveldb
flag.
We have made progress on "EIP-4844: Shard Blob Transactions" (#27257, #27256, #27155, #27049), beacon light sync (#27292), and path-based state storage (#27176, #26813) but neither is finished as of yet.
Other improvements:
Assorted bugfixes:
- Do not ignore
null
address while iterative dump (#27320) - Fix flatCallTracer crasher (#27304)
- Prevent pebble shutdown-panic (#27238)
- Make websocket use default "HTTP_PROXY" by default (#27264)
- Make
eth_estimateGas
uselatest
block by default (#24363) - Add
txHash
field on txTraceResult (#27183) - Fix crash on querying finalized block (#27162)
For a full rundown of the changes please consult the Geth 1.12.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.
Azimir (v1.11.6)
Geth v1.11.6 is a maintenance release, fixing some minor issues and adding some log management features.
Log management
Log rotation has landed in geth
, via (#26843). Log rotation can be activated using the flag --log.rotate
. Additional parameters that can be given are:
--log.maxsize
to set maximum size before files are rotated,--log.maxbackups
to set how many files are retailed,--log.maxage
to configure max age of rotated files,--log.compress
whether to compress rotated files
The location the logfile(s) can be configured as previously, using the --log.logfile
parameter.
A new log output format, logfmt
was added (#27001, #26970). It can be enabled using --log.format
, which currently supports the options json
, logfmt
or terminal
. (Thus, the --log.json
option is now deprecated).
And finally, the flag --vmodule
was renamed to --log.vmodule
(#27071).
Assorted
- New sepolia bootnodes managed by EF devops are added (#27099)
- Converting the codebase to use
atomic
types (#27068, #27031, #27030, #27013,#27014, #27011, #26992, #26993, #26951, #26935, #27121) - Bugfixes to make tracers more correct avoid crashes (#27029, #26848)
- Fix race-conditions in
graphql
(#26965) - New CPU counter-typed metrics (#26796)
For a full rundown of the changes please consult the Geth 1.11.6 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.
Erszbat (v1.11.5)
Geth v1.11.5 enables the Shanghai upgrade on Wednesday, April 12, 2023 10:27:35 PM UTC
The Shanghai upgrade contains the following EIPs:
- EIP-3651: Warm COINBASE
- EIP-3855: PUSH0 instruction
- EIP-3860: Limit and meter initcode
- EIP-4895: Beacon chain push withdrawals as operations
- EIP-6049: Deprecate SELFDESTRUCT
Notable changes:
Minor changes and bugfixes
- Preparatory changes for path-based storage (#26763)
- Changes needed use overlay protocols in discv5 (#26699)
- Add support for encoding uint256.Int in RLP (#26898)
- Fixed a bug where local transaction would be rejected with
-32000, future transaction tries to replace pending
when send out of order (#26930) - Reject keywords
safe
orpending
over RPC pre merge (#26862 - Fix file permissions on
admin_exportChain
(#26912)
For a full rundown of the changes please consult the Geth 1.11.5 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.
Vana (v1.11.4)
This is a security release of Geth, improving resilience of the transaction pool against certain kinds of DoS attacks. These attacks have recently been observed in testnets.
Notable changes:
- TxPool validation rules have been tightened to defend against certain DoS attacks. The new checks are based on research by @dwn1998, @wangyibo0308, @ZhouYuxuan97, @tristartom, @fs3l. Thank you for your report and cooperation! (#26648)
- EIP-712 signing in Clef now recognizes all primitive types of Solidity. (#26770)
- EF bootstrap nodes on MS Azure have been removed because they will be decommissioned soon. (#26828)
- The
core.Message
type has been changed from interface to struct andtypes.Message
(in core/types) has been removed. This is a breaking API change in core/types. We believe the removal should not cause additional disruption for downstream projects becausetypes.Messages
had no meaningful use outside of package core. (#25977) core.BlockGen
has a newTimestamp
method. (#26844)
For a full rundown of the changes please consult the Geth 1.11.4 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.
Spekilas (v1.11.3)
This is a minor release, fixing a couple of issues and enabling the Shanghai upgrade on Goerli at block timestamp 1678832736 (#26795).
Minimum Go version
In accordance with our policy to only support the newest two versions of Go, we have changed the minimum required compiler version to Go 1.19 (#26803).
Pebble
In v1.11.0 we released Pebble support (guarded by the --db.engine=pebble
flag). Thanks to everyone testing it! We found and fixed a few issues:
- You can now set more than 4 GB in
--cache
when using Pebble. (#26776) - Range compaction now works correctly for Pebble. (#26771)
- Pebble support is disabled on OpenBSD to resolve a compilation error. (#26801)
RPC changes
- Add support for Parity-style flat traces with the new built-in
flatCallTracer
. (#26377) - The
callTracer
now reports anull
address for failed contract creation operations. (#26779) head
anddifficulty
have been removed inadmin_peerInfo
responses. (#26804)
Other fixes
types.Receipt
now contains theEffectiveGasPrice
of the transaction, so you can get the true gas price using theTransactionReceipt
method of ethclient. (#26713)- ethclient no longer panics when requesting missing blocks. This fixes a regression introduced in v1.11.2. (#26817)
- ethclient now returns block withdrawals, if present. (#26778)
- During building of new blocks, failed transactions no longer count towards used block gas, improving block space utilization. (#26799)
- Faster crawling time for the DNS crawler (#26685)
- Use the last announced finalized block instead of LES CHT for the ancient limit (#26685)
- CPU usage metrics (
geth.system/cpu/*
) are more accurate (#26793)
For a full rundown of the changes please consult the Geth 1.11.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.
Kite's Nest (v1.11.2)
Geth 1.11.2 (Kite's Nest) is a patch-release, fixing a couple of issues with the 1.11 release family.
- Fix a few small engine API discordances with the spec post-Shanghai (#26696, #26722).
- Fix unmarshalling JSON
null
values as a proper result instead ofnil
(#26723). - Fix
dumpgenesis
which failed due to a bad database key write (#26747). - Fix pending tx filter to return hashes, not full txs by default (#26757).
- Fix
eth_feeHistory
to accept decimal blocks again (#26758). - Fix Ubuntu PPA builds after the Go 1.20 fallout.
Feature wise there's one change in this release: the downloader's chain sync messages are aggregated into periodic (8s) outputs instead of a log line for every batch of data imported (#26676).
For a full rundown of the changes please consult the Geth 1.11.2 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.
Saradril (v1.11.1)
This is a patch-release, fixing a couple of issues with the major release yesterday:
- Make our MacOS-builds work again (26653),
- Fix some flaws related to withdrawals (Shanghai), which were detected on
zhejiang
testnet (#26704 [#26707],(#26707)). - Fix an issue where geth refused to start following a partial datadir wipe 26703
This version is ready for the Shanghai upgrade on Sepolia.
If have not already upgraded to v1.11.0
, then you should also read the release notes for that version.
If you have already upgraded to v1.11.0
, there is no urgency in upgrading to v1.11.1
, unless you are directly affected by the issues; e.g. want to use of Sepolia.
For a full rundown of the changes please consult the Geth 1.11.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.
Annos Basin (v1.11.0)
This is a major release, containing over 300 PRs. Our original intention was to release 1.11 with path-based storage, but eventually we decided it was time to make the release without waiting for PBSS to be merged, so we can get back to a steady release schedule.
We hope to soon follow up the 1.11 release with 1.12, including PBSS.
Shanghai Upgrade Support
Most of the code for the Shanghai fork is merged into 1.11, but activation of the fork is not configured. The Shanghai protocol upgrade will contain the ability to make withdrawals from the consensus-layer (beacon chain). Withdrawals are specified in EIP-4895: Beacon chain push withdrawals as operations.
Other features included are EIP-3855: PUSH0 instruction, EIP-3860: Limit and meter initcode and EIP-3651: Warm COINBASE.
A New Database Backend
Pebble
was added as a database backend to replace good old LevelDB
.
LevelDB has served us very well over the years, alas, it is a one-person project where the maintainer has signaled that the project is not a priority. We have been forced to consider three options:
- Stick with goleveldb as long as we can, don't worry about it,
- Fork goleveldb (or some other database), and maintain it ourselves.
- Pick a different database, actively maintained by a dedicated team.
Since option one is not really a long-term solution, the choice was between two and three. Maintaining a database is a huge effort, and is not a burden we want to carry. Hence, we have been aiming for option 3, and eventually settled on Pebble.
Pebble is actively maintained by a dedicated team, and is used by other projects. We hope that this is a good long-term bet. It has performed well in our benchmark tests, we are very interested in getting feedback from actual production systems. In order to use pebble
,
- You need to be on a 64-bit system,
- You also need to resync from scratch (with or without ancients) -- there is no migration functionality,
- And you need to specify
--db.engine=pebble
initially. For subsequent runs, geth should discoverpebble
automatically.
Removed Features
We have removed support for the ropsten
and kiln
test networks. We have also removed libraries for mobile development and the puppeth
tool.
The personal
RPC namespace is now deprecated. In order to interact with personal
APIs, you need to specifically allow it via the --rpc.enabledeprecatedpersonal
command-line flag.
Support for certain legacy files configuration files was dropped. geth
now will ignore these datadir files:
static-nodes.json
trusted-nodes.json
If any these are found, an error will be printed to the log. Setups using such files should use to the TOML configuration-file instead.
Backwards-Incompatible Changes
When using geth for mining or as a clique sealer, the --miner.etherbase
flag now has to be be set explicitly. Previously, Geth would use the 'first' local account as etherbase automatically, but this possibility has been removed in Geth 1.11.
This change does not affect proof-of-stake networks because the fee recipient address is provided by the consenus-layer and not configured in Geth anymore.
Geth's JSON-RPC server has become more strict; the JSON-RPC
spec requires the version field to be exactly "jsonrpc": "2.0"
. This is now verified by the server -- a change which is not backwards-compatible with non-conforming client implementations.
If you are building from source, go-ethereum now requires Go version 1.18
or later (#26160).
The callTracer
includes intentional breaking changes. Please refer to the Tracing section of the release notes.
New Features
#26149 added an option to direct log output to a file. This feature has been requested a lot. It's sometimes useful to have this available when running geth in an environment that doesn't easily allow redirecting the output.
We have added a method debug_setTrieFlushInterval
to make it possible to set the trie flush interval via RPC (#24785). Essentially, this makes it possible to configure the node to be more or less "archive:ish", and without restarting the node while reconfiguring it.
Geth can now set custom HTTP headers, in particular for two scenarios:
geth attach
geth
commands which can use--remotedb
, e.ggeth db inspect
The ability to use custom headers is typically useful for connecting to cloud-apis, e.g. providing an infura- or alchemy key, or for that matter access-keys for environments behind cloudflare.
Tracing
callTracer
fields gasUsed
and value
have changed in the following cases:
gasUsed
of the top call frame now accounts for intrinsic gas and refunds. (#26048)- In case of a DELEGATECALL frame, the value which was previously null is set to the parent call's value. This is done to match EVM semantics. (#26632)
For tracing, it is sometimes desirable to capture logs triggered by a trace, when using the callTracer
. For example: call USDT.transfer
will trigger a Transfer(from, to, value)
event. By specifying {"withLog": true}
, these events will be collected. Some bugs related to tracing and gasUsed
was fixed.
For prestateTracer
, the result will from now on omit empty fields instead of including a zero value (e.g. no more balance: '0x'
). The prestateTracer now takes an option diffMode: bool
. In this mode the tracer will output the pre state and post data for the modified parts of state.
#26241 should make it easier to sign EIP-712 typed data via the accounts.Wallet API, by using the mimetype for typed data.
It is now possible to get the result for multiple tracers in one go via the muxTracer
.
Filter System
Via the filter subscriptions to newPendingTransactions
, one can now subscribe to the full pending transactions, as opposed to just being notified about hashes.
The keywords safe
and finalized
can now also be used as block range specifiers when requesting logs.
All Changes
Larger changes
- Added
pebble
as a new database backend. (#26517, #26650) - Make use of golang generics (#26290 #26194, #26162, #26159)
- Prepare for upcoming Shanghai hardfork (#26645, #26624, #26554, #26548,#26232, #26591, #26565, #26563, #26555, #26549, #26484, #26474, #26475, #23847, #26458)
- Remove Ropsten support (#26644)
- Prepare for path-based-storage (#26637, #26603, #26324, #25532, #25896)
- Remove mobile packages (#26599)
- Deprecate
personal
namespace (#26390) - internal/debug: add --log.file option (#26149)
- eth/tracers: add multiplexing tracer (#26086)
- eth/tracers: add diffMode to prestateTracer (#25422)
Minor changes and features
- rpc: remove DecimalOrHex type (#26629)
- Make abi codec more strict (#26568)
- core/vm: improve EVM instance reusability (#26341)
- core: improve ambiguous block validation message (#26582)
- log: better sanitation (#26556, #26630)
- p2p/discover: add more packet information in logs (#26307)
- common/mclock: add Alarm ([#26333](https://github.com/ethereum/go-ethereum/...
Paravin (v1.10.26)
Geth v1.10.26 contains backports of bug-fixes from the main branch.
- The JSON-RPC client no longer hangs when invalid batch results are returned by the server. (#26064)
- A corner-case issue in the filter system is resolved. (#26054)
- Various improvements to snap sync are included in this release. (#25831, #25694, #25666, #25651)
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.
Nemata (v1.10.25)
Geth v1.10.25 is a tiny update to flip the mainnet chain configuration to be post-merge. This disables legacy sync and will prevent Geth from even starting sync until a consensus client is attached and sends forkchoice updates. The update prevents bad PoW actors from trying to get the node to - temporarily, but annoyingly - download bad state data.
This release is optional and only affects initial sync. The release was made mostly for completeness' sake rather than out of necessity.
For a full rundown of the changes please consult the Geth 1.10.25 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.