Go implementation of the Ethereum protocol
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:
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.
geth --dev
now simulates a PoS-based chain (#27327)evm blocktest
can now output structured logs (#27396)yParity
fields, as mandated by the RPC API spec (#27744, #27882)chainID
field in RPC responses, like all other transaction types (#27452)size
field (#27347)eth_estimateGas
now supports state overrides like eth_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 returns null
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)debug_getTrieFlushInterval
method reports the internal state saving interval (#27303)returnData
(#27704)Node.Attach
no longer returns an error. This is a breaking Go API change. (#27450)--nodiscover
is used (#27518)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:
ethereum/client-go
.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:
null
address while iterative dump (#27320)eth_estimateGas
use latest
block by default (#24363)txHash
field on txTraceResult (#27183)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:
ethereum/client-go
.Geth v1.11.6 is a maintenance release, fixing some minor issues and adding some log management features.
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 filesThe 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).
atomic
types (#27068, #27031, #27030, #27013,#27014, #27011, #26992, #26993, #26951, #26935, #27121)graphql
(#26965)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:
ethereum/client-go
.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:
:warning: In order to be able to follow the chain through the upgrade on Wednesday, April 12, 2023 10:27:35 PM UTC, this upgrade is required. :warning:
-32000, future transaction tries to replace pending
when send out of order (#26930)safe
or pending
over RPC pre merge (#26862
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:
ethereum/client-go
.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:
core.Message
type has been changed from interface to struct and types.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 because types.Messages
had no meaningful use outside of package core. (#25977)core.BlockGen
has a new Timestamp
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:
ethereum/client-go
.This is a minor release, fixing a couple of issues and enabling the Shanghai upgrade on Goerli at block timestamp 1678832736 (#26795).
:warning: If you are running Goerli, this is a required update.
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).
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:
--cache
when using Pebble. (#26776)flatCallTracer
. (#26377)callTracer
now reports a null
address for failed contract creation operations. (#26779)head
and difficulty
have been removed in admin_peerInfo
responses. (#26804)types.Receipt
now contains the EffectiveGasPrice
of the transaction, so you can get the true gas price using the TransactionReceipt
method of ethclient. (#26713)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:
ethereum/client-go
.Geth 1.11.2 (Kite's Nest) is a patch-release, fixing a couple of issues with the 1.11 release family.
null
values as a proper result instead of nil
(#26723).dumpgenesis
which failed due to a bad database key write (#26747).eth_feeHistory
to accept decimal blocks again (#26758).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:
ethereum/client-go
.This is a patch-release, fixing a couple of issues with the major release yesterday:
zhejiang
testnet (#26704 [#26707],(https://github.com/ethereum/go-ethereum/pull/26707)).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:
ethereum/client-go
.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.
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.
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:
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
,
--db.engine=pebble
initially. For subsequent runs, geth should discover pebble
automatically.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.
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.
#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.g geth 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.
callTracer
fields gasUsed
and value
have changed in the following cases:
gasUsed
of the top call frame now accounts for intrinsic gas and refunds. (https://github.com/ethereum/go-ethereum/pull/26048)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
.
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.
pebble
as a new database backend. (#26517, #26650)personal
namespace (#26390)60s
timeout to graphql queries(#26116)Address.Big
(#26132)fsync
on close (#26485, #26490). More fixes to the freezer were implemented in (#26245) and (#26251)For a full rundown of the changes please consult the Geth 1.11.0 release milestone.
As with all our previous releases, you can find the:
ethereum/client-go
.Geth v1.10.26 contains backports of bug-fixes from the main branch.
As with all our previous releases, you can find the:
ethereum/client-go
.