Skip to content

Releases: ethereum/go-ethereum

Nausicaa (v1.10.21)

27 Jul 11:58
Compare
Choose a tag to compare

Geth v1.10.21 is a maintenance release, adding built-in configuration for the merge fork on the Goerli testnet and the mergeNetsplitBlock for the Sepolia testnet.

Specifically, this release

  • defines a terminal total difficulty for Goerli as 10_790_000 (#25324) and
  • defines the mergeNetsplitBlock as 1735371 for Sepolia. (#25372)

Command changes

  • The --netrestrict option is now also applied for discv5. (#25304)
  • DNS discovery is now enabled for the Sepolia testnet. (#25288)
  • puppeth can no longer deploy parity and pyethapp because these clients are unmaintained. (#25329)
  • abigen now has a workaround for parameter names which are also Go keywords. (#25307)
  • A few minor regressions in geth CLI argument handling are fixed. (#25234)

RPC API changes

  • In block-based RPC methods like eth_getBlockByNumber, the safe block specifier can now be used to refer to the "safe" block post-merge. (#25165)
  • The baseFee can now be overridden in block tracing. (#25219)
  • RPC methods returning transaction objects now return the chainId for legacy transactions. (#25244)
  • In eth_sendTransaction, the chainId parameter now verified even for legacy transactions. (#25157)
  • eth_call, eth_estimateGas no longer add tx fees to the coinbase account. (#25214)
  • A new built-in tracer, revertReasonTracer, has been added. (#25265)

Merge changes

  • The engine API can no longer perform block insertion while the client is snap-syncing. (#25210)
  • When trying to set bad blocks retrieved via sync as canon, the API now returns INVALID. (#25190)
  • The engine API endpoint ('authrpc') is now enabled by default. (#25152, #25394)
  • Several other engine API bugs found during #TestingTheMerge are fixed. (#25230, #25136, #25236)

Go Library Changes

  • The snap sync implementation has been updated in preparation for 'path-based state storage'. (#24898)
  • The HTTP RPC server will no longer hang on shutdown even with very busy connections. (#25258)
  • Package signer/core/apitypes now provides a function to calculate the EIP-712 typed data hash. (#25283)

Build changes

  • We have reverted to an older version of goleveldb because recent versions have buggy compaction and manifest handling. (#25413)
  • This release is built with Go 1.18.4 (#25247, #25293)
  • Release tarballs have proper directory timestamps. (#25290)

For a full rundown of the changes please consult the Geth 1.10.21 release milestone


As with all our previous releases, you can find the:

Vectra (v1.10.20)

29 Jun 22:29
@fjl fjl
Compare
Choose a tag to compare

Geth v1.10.20 is a maintenance release, adding built-in configuration for the merge fork on the Sepolia testnet.

Specifically, this release defines a terminal total difficulty for Sepolia (#25179).

Geth command changes

  • Geth and most other command-line tools now use a newer version of the command-line argument/flag handling library. There is one new restriction with this change: flags must now be given before other arguments. Very few of Geth's subcommands take arguments, so this is unlikely to cause issues. (#24751)
  • The geth js subcommand has been removed. (#25000)
  • The new --discovery.port flag allows configuring a separate port for the UDP listener. (#24979)
  • Setting p2p bootstrap nodes in the config file now works even when a pre-defined network is selected on the command-line. (#25174)

RPC API changes

  • eth_chainId now always returns the configured chain ID regardless of sync status. This is a violation of EIP-695, but the previous behavior caused issues with CL clients. (#25166, #25168)
  • Transaction objects returned by RPC (e.g. from eth_getTransactionByHash) now always include the chainId field, even for untyped (legacy) transactions. (#25155)
  • The deprecated RPC method personal_signAndSendTransaction has been removed. (#25111)
  • Handling of certain reorg corner cases is improved in the Engine API. (#25187, #25139)
  • A performance regression in JS tracing is resolved. (#25156)

Build changes

  • Bash and zsh completions are now installed by the geth Ubuntu package. (#25195, #25204)

For a full rundown of the changes please consult the Geth 1.10.20 release milestone


As with all our previous releases, you can find the:

Camaron (v1.10.19)

15 Jun 12:57
23bee16
Compare
Choose a tag to compare

Geth v1.10.19 is yet another feature release.

The release contains the Gray Glacier fork definition. The Gray Glacier fork is a difficulty-bomb postponement, which is expected to go live on Ethereum Mainnet towards the end of June.

In other words: all users are required to upgrade before the Gray Glacier hardfork activates at block 15050000 (#25088)

Changes which may cause incompatibilities:

  • The engine API is now only available with JWT authentication.
  • Geth will refuse to start if legacy receipts are present in the database. The check can be disabled with --ignore-legacy-receipts, but we strongly recommend you run the conversion in this case (#24943).
  • The RPC method debug_traceCall will now reject execution against the pending block (#24871).
  • RPC timer metrics have been changed into histograms (#25044).

Other changes in this release:

  • Updates related to The Merge on Ropsten, which is now a proof-of-stake network (#25018, #24975, #25078)!
  • The debug_traceCall RPC method now also supports block overrides; making fields like timestamp or the block number settable by the caller (#24871).
  • A new diagnostic tool, geth snapshot inspect-account, allows investigations of snapshot data (#24765).
  • Fixes and preparatory work related to The Merge (#24946, #25006, #24955, #24997).
  • Preparatory work for the upcoming path-based trie storage feature (#24750).
  • Introduce eth/67 protocol, dropping support for GetNodeData (#24093).
  • Optimizations related to block processing (#23500, #24958, #24616).
  • Tests/fuzzing improvements (#25033, #25038, #25037, #25036, #25016, #24249 #24928).
  • Many updates to documentation (#25086, #25058, #25057, #25056, #25040, #25032).
  • Nicer format when showing chain config (#24904).

For a full rundown of the changes please consult the Geth 1.10.19 release milestone.


As with all our previous releases, you can find the:

Sharblu (v1.10.18)

25 May 12:46
@fjl fjl
Compare
Choose a tag to compare

After a long train of maintenance releases, we are happy to announce this feature release of Geth!

This release is ready for the Merge transition on the Ropsten testnet, and will activate the Merge on Ropsten when the testnet reaches a total difficulty of 43531756765713534.

Please ensure you have a beacon chain node configured for the transition. You can find more information about preparing for the Merge in our guide: https://geth.ethereum.org/docs/interface/merge.

Note: the Merge transition on Ropsten was unsuccessful because the configured TD was reached earlier than expected. Please run geth with --override.terminaltotaldifficulty 100000000000000000000000 on Ropsten for the time being.

The tracing subsystem has been another focus area of this release cycle. We have replaced the JavaScript interpreter used by the tracing engine with Goja, which offers slightly better performance and implements many ES6 language features. There are minor differences in JS tracing semantics: The built-in functions memory.slice, memory.getUint, stack.peek will now throw an exception and interrupt tracing when accessing out-of-bounds data. They previously returned an empty value for invalid args instead.

This release contains further breaking changes to tracing APIs. Be sure to check the tracing changelog section. Please also report any incompatibilities you encounter.

Changes related to the Merge

  • Ropsten: terminal total difficulty is configured for the Merge. (#24876)
  • In RPC APIs where a block number can be given, you can now use "finalized" to refer to the latest finalized block. (#24282)
  • Geth can now serve CL requests to build a new block with very low latency because new blocks are constructed in the background. (#24866)
  • For CL-induced reorgs to a block with unavailable state, Geth now recomputes the state by re-processing ancestor blocks. (#24613)
  • The "engine" API implementation complies with the latest specification version. (#24802, #24855, #24915)
  • Several annoyances related to sync after the Merge have been fixed. (#24691, #24670, #24610)

Geth changes

  • Geth's default gas limit target is now 30M. (#24680)
  • Geth now prints a warning when launching on the deprecated Rinkeby testnet. (#24884)
  • The free disk space monitor is more aggressive and the critical level at which it will initiate a shutdown is now set to 256 MB by default. (#24781)
  • Geth now prints a small guide when started in --dev mode. (#24759)
  • Geth no longer reports 'Snapshot extension registration failed' as an error. (#24475)
  • The --eth.requiredblocks flag was fixed to work correctly. (#24817)
  • Using geth --dev with a datadir previously initialized by geth init should now work correctly. (#24693)
  • geth init will now complain when creating a Clique-based chain without any configured signers. (#24470)
  • The new geth db check-state-content command checks integrity of trie nodes in the database. (#24840)
  • geth snapshot verify-state now checks for 'dangling' storage entries. (#24643, #24677)
  • evm t8n can now run post-merge state transitions. (#24546)
  • The hex input data of evm run is now verified to have even length. (#24721)
  • Using Clef for clique block signing should be fixed. (#24941)
  • The example code that shows how to use Clef from Python works again. (#24440)

Core changes

  • When generating a state snapshot from the state trie, Geth now ensures that 'dangling' storage entries from previous snapshots are removed from the database. This fixes an issue that could lead to incorrect EVM execution results after snap sync in certain cases. (#24811)
  • The transaction pool now correctly drops the oldest transactions when truncating the queue to stay below the configured global limit. (#24908)
  • The reference tests have been upgraded to version 10.4. (#24899)
  • EVM MSTORE is now 75% faster. (#24847, #24860)
  • The EVM now implements EIP-3855 (PUSH0 instruction). This feature is not yet active in any fork. (#24039)
  • The ancient store ('freezer') implementation is now exported in package ethdb, and can be used independently of the chain database. (#24684)
  • The miner no longer commits the in-progress block to disk when interrupted by a new chain head event. This improves block creation latency. (#24638)
  • The Goerli testnet has new bootstrap nodes. (#24900)
  • An crash in LES ultralight sync is resolved. (#24641)
  • Several data races related to snap sync are fixed in this release. (#24685)
  • The snap protocol server no longer includes superfluous account proofs when a storage response hits the size limit. (#24885)
  • The snap client now de-duplicates trie node heal requests better, sorting them by the requested state trie path. This can slightly reduce the overall amount of data transferred during snap sync. (#24779)
  • The eth block fetcher now disconnects peers that repeatedly fail to reply to header requests. (#24652)
  • The trie implementation can now optionally trace nodes which were deleted/overwritten by state updates. (#24403)

Go library changes

  • common/compiler: The Solidity and Vyper wrappers have been removed. This is a breaking change. (#24936)
  • abigen --sol does not work anymore. (#24936)
  • ethclient: Client now has a PeerCount method. (#24849)
  • ethclient/gethclient: GetProof now also returns storage proofs (#24697)
  • accounts/abi: decoder no longer crashes for invalid struct field names. (#24932)
  • accounts/abi: logs are now decoded correctly when all arguments are indexed. (#24792)
  • accounts/abi: ParseSelector now handles tuple arrays. (#24587)
  • signer/fourbyte: 4byte signatures have been updated. (#22865, #24842)
  • mobile: Receipt.EncodeJSON now actually returns JSON instead of RLP. (#24701)
  • accounts/abi/bind: contract calls on the pending block now correctly return the eth_call RPC error, if any. (#24649)
  • core/types: the miner field is now optional when decoding block headers from JSON (#24666)
  • ethdb/remotedb: it is now possible to attach a chain database via RPC. This feature is meant to be used for debugging. (#24905, #24836)

Tracing changes

  • The JavaScript tracing environment now uses the Goja interpreter instead of Duktape. There should be no noticable differences in semantics resulting from this change. (#23773, #24934)
  • In JS tracers, the log.memory object now has a length method. (#24887)
  • API change: In all tracers (JS, native, structlog), memory content is now captured before the EVM expands it. Previously, tracing would see memory after it had already been affected by the current instruction. (#24867)
  • API change: debug_traceTransaction, in the default structured-logging mode, now returns the refund counter for every EVM executio...
Read more

Ploitari (v1.10.17)

29 Mar 17:20
25c9b49
Compare
Choose a tag to compare

This is a maintenance release. This release contains a lot of work in preparation for The Merge, and work for an upcoming change to the way state is stored in go-ethereum.

This release also adds a new tool to convert 'legacy' receipts into a newer format. During startup, geth will check the database and tell you if you need to perform the conversion. Converting receipts is only needed if geth's ancients database has not been resynced from scratch during the last couple of years. It is recommended to back-up your receipts freezer table (ancients/receipts*) before performing the conversion.

Compatibility note about core/types: For optimization purposes, types.Header and other types in this package now implement the rlp.Encoder interface. This change can cause incompatibilities because the new method is implemented with pointer receiver. Attempting to RLP-encode unadressable (i.e. non-pointer) values of type Header does not work anymore and will result in an error.

Change Log

For a full rundown of the changes please consult the Geth 1.10.17 release milestone.


As with all our previous releases, you can find the:

Osun (v1.10.16)

16 Feb 12:27
20356e5
Compare
Choose a tag to compare

The focus of this release is bugfixes.

Bugfixes

  • Block tracing via debug.traceBlockByHash has sometimes produced inconsistent/corrupt results. Fixed via (#24286).
  • The --whitelist CLI parameter functionality was broken in v1.10.14, and is fixed in this release (#24210).
  • A bug was introduced, and subsequently fixed, which could cause data corruption during mining (#24349).
  • When signing complex datatypes in EIP712-type data, the signing-hash was incorrect. Fixed via (#24220).
  • Evm execution times exported via metrics, were sometimes incorrect. Fixed in (#24304).
  • Range prover edgecases found and fixed (#24266, #24257).
  • Fix an error related to HTTP2 handling (#24292).
  • A lot of spleling-mistkaes and issues related to correctness were fixed (#24194, #24196, #24198, #24205, #24207, #24244, #24270, #24271, #24224, #24372, #24323, #24289, #24263 and #24211).

New features

  • Work on The Merge includes support for RANDOM opcode (#24141) and various other internal refactorings (#24328, #24280, #24236, #23256).
  • The devp2p binary now supports doing snap/v1 protocol testing against a remote node, which can be used for Hive-testing (#24276).
  • New diagnostic command to show database metadata (#23900)
  • ethclient support for CallContractAtHash (#24355).
  • Support chainId for GnosisSafeTx (#24231).

Performance

  • Tracing was improved by making the prestate tracer be a native tracer (#24320, #24268).
  • Potentially reduce database allocations in some cases (#24117).
  • Add a set of cross-client external benchmarks (#24050).
  • Improve transaction indexing performance (#24197).

For a full rundown of the changes please consult the Geth 1.10.16 release milestone.


As with all our previous releases, you can find the:

Faryar (v1.10.15)

05 Jan 16:18
@fjl fjl
Compare
Choose a tag to compare

This release resolves a few regressions introduced by the previous release. Most importantly, it fixes an issue that could cause peer-to-peer 'eth' connections to lock up.

Please upgrade ASAP if you are running geth v1.10.12 / .13 / .14.

  • A hang in ancient data serving caused by double-locking is fixed. (#24189)
  • A crash in the LES server related to reorg handling is resolved. (#24189)
  • The SyncProgress method of ethclient.Client works again. (#24199)
  • Several inconsistencies in the GraphQL API are also fixed in this release. (#24190, #24188, #24191)

For a full rundown of the changes please consult the Geth 1.10.15 release milestone.


As with all our previous releases, you can find the:

Hourglass Nebula (v1.10.14)

23 Dec 10:22
@fjl fjl
Compare
Choose a tag to compare

The focus of this release is bug fixes and performance improvements.

We are especially pleased to announce that this release contains a prototype implementation of the PoW to PoS transition (a.k.a. 'The Merge'). As of this version, Geth is compatible with the Kintsugi testnet spec v3.

We would also like to thank Team Ipsilon for their development of the EVM optimizations included in this release. EVM bytecode evaluation is now ~20% faster.

Geth changes

  • A regression in txpool limit handling is resolved. This affects the --pricelimit option, which has been reverted to work exactly as it did in geth v1.10.12. (#24080)
  • Geth can now handle the transition from PoW to PoS. (#23761)
  • In the JavaScript console, long-running JS computation (i.e. for/while loops) can now be interrupted with Ctrl-C. (#23387)
  • A corner-case issue in the transaction hash indexer is resolved. (#24024)
  • Unclean shutdown markers are now updated regularly and report more accurate geth startup/shutdown times. (#24077)
  • In log messages related to RPC method invocations, the key "t" is now called "duration" to prevent a name clash when using the JSON output format. (#24112)

RPC API changes

  • The engine APIs (enabled in geth --catalyst mode) are now up-to-date for Kintsugi testnet v3. (#23984, #24067, #24075)
  • A panic in the clique_getSigner RPC method is resolved. (#23961)

Go library changes

  • The EVM implementation has been cleaned up and interpreter loop performance is improved. (#24120, #24048, #24085, #24026, #24031, #24040, #23970, #23952, #23974, #23977, #23967, #24066)
  • In preparation for EIP-3670, the EVM now recognizes the INVALID opcode 0xFE. (#24017)
  • Internal opcode names have been modernized to match Solidity: SHA3 is now KECCAK256, SUICIDE is now SELFDESTRUCT. (#23976, #24022, #24016)
  • Generating Go/Java bindings for contracts with struct-typed constructor parameters now works correctly. (#23940)
  • Built-in EVM trace loggers have moved from core/vm to a dedicated package. (#23892)
  • EIP-712 (typed data signing) structs have moved from signer/core to package signer/core/apitypes. (#24029)

Networking

  • The eth protocol implementation now uses request IDs (added by eth/66) internally. (#23576)
  • Hashing of eth response data now uses multiple threads, improving sync performance. (#24032)
  • The now-unused 2GB fast sync bloom filter has been removed. (#24047)
  • Serving ancient headers to other peers has been optimized. (#23105)
  • The discv4 test suite is more robust and logs received packets better. (#23966)
  • There are now fuzz tests for the snap protocol message handler. (#23957)

For a full rundown of the changes please consult the Geth 1.10.14 release milestone.


As with all our previous releases, you can find the:

Far Rim (v1.10.13)

24 Nov 12:15
7a0c19f
Compare
Choose a tag to compare

Geth v1.10.13 is a scheduled maintenance release. It introduces a few polishes, though nothing major. Fixes wise, it does address a few thorns that affect a small portion of our users.

New features:

  • Retrospectively enforce account nonces to be less than 2^64-1 (#23853).
  • Configurable genesis gas limit in dev mode via dev.gaslimit (#23686).
  • Sanitize history config fields in the GPO when using toml (#23886).
  • Add support for custom freezer paths in db inspect (#23946).
  • Create evm b11r to build and seal blocks from json (#23843).
  • Extend evm t8n to support signing unprotected txs (#23937).
  • Polish evm t8n to have more meaningful CLI flags (#23934).
  • Implement the 4byte tracer natively in Go (#23882, #23916).
  • Use faster freezer scanning when reiniting leveldb (#23612).
  • Expose the gasUsed field in the evm command (#23919).
  • Improve error messages in the freezer (#23901).

New fixes:

  • Fix price filtering in tx pool to prevent low price legacy transaction from spamming the pool (#23855).
  • Fix log retrievals for users with very old archive nodes having legacy database formats (#23879).
  • Fix a snap sync issue where a malicious response could crash the syncing node (#23960).
  • Fix a data race in the simulated backed's gas price suggestion (#23898).
  • Fix receiptsRoot field name in the evm command output (#23924).
  • Fix setHead when pointing it back to the genesis (#23949).
  • Fix transaction sender recovery in ethclient (#23877).
  • Fix DNS discovery entry TTLs on Clouflare (#23885).
  • Fix intrinsicGas output in the t9n tool (#23889).

For a full rundown of the changes please consult the Geth 1.10.13 release milestone.


As with all our previous releases, you can find the:

Vallhallan Threshold (v1.10.12)

08 Nov 13:45
6c4dc6c
Compare
Choose a tag to compare

Geth v1.10.12 is a scheduled maintenance release, but also contains some significant features!

The release enables the Arrow Glacier hard-fork, scheduled approximately for the 8th of December. The sole change is to postpone the difficulty-bomb until summer 2022, by which time hopefully The Merge will have happened.

The release also ships support for a new PoW testnet called Sepolia. This testnet was dreamed up during the merge interop in Athens and it's purpose is to replace Ropsten after the merge as the main cross client testnet. You can access it via geth --sepolia. Being a PoW testnet, it's possible to mine it for Ether to use as test funds.

Lastly, the release also contains a brand new call tracer implemented in Go, which should be significantly (2.5x) faster than the one currently used. You can use the new tracer via debug.traceTransaction("0xhash", {tracer: "callTracer"}). The original JavaScript tracer is still available for fallback purposes called callTracerLegacy. The latter will be dropped if nobody reports issues with the native one.

Improvements:

  • Implement the Arrow Glacier hard fork and schedule (#23810).
  • Bake in support for the Sepolia PoW test network (#23730).
  • Switch the call tracer to a fast native Go implementation (#23867, #23708).
  • Optimize nonce handling performance in the txpool (#22231).
  • Support password protected SSH key files in puppeth (#22148).
  • Optimize request/response matching in RPC batch queries (#23856).
  • Support transferring snapshots via geth db export snapshot (#22931).
  • Read chain data atomically from ancients/leveldb, avoiding an extra read (#23566).
  • Improve the hexutil package's big-int encoding performance by 50% (#23780)
  • Remove the xgo cross compiler as docker auto-build limits killed it (#23800).
  • Support invalid RLP blobs (at least fail gracefully) in the state t8n tool (#23771).

Bug-fixes:

  • Fix a crash in LES serving code (#23865).
  • Fix a data race in the miner's receipt copying code (#23835).
  • Fix a missing snapshot error after recovering from a crash (#23496).
  • Fix a memory leak in Clique if the network temporarilly halts (#23861).
  • Fix a crash if the disk gets full during ethash DAG generation (#23799).
  • Fix chain tracing to not go OOM during long running sessions (#23736).
  • Fix the simulated backend to allow running EIP-1559 transactions (#23838, #23840).
  • Fix an RPC crash when getting the signer of an empty Clique chain (#23832).
  • Fix the total difficulty number of nil-diff genesis blocks in the database (#23793).
  • Fix a crash in abigen generated code if backend header retrieval fails (#23781).

For a full rundown of the changes please consult the Geth 1.10.12 release milestone.


As with all our previous releases, you can find the: