Skip to content

Releases: ethereum/go-ethereum

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:

Xathorron (v1.10.11)

20 Oct 12:16
7231b3e
Compare
Choose a tag to compare

Geth v1.10.11 is another bug fix release, fixing an issue with sender not being recovered on pending transactions, and fixing a data corruption issue.

Changes in this release

  • For pending transactions returned by RPC, the sender address is again reported correctly. This was broken in the previous release. (#23765)
  • The rlpdump command can now turn structured text into RLP. (#23745)
  • A database corruption issue caused by the snapshot system is resolved. (#23635)
  • The evm tool's t9n mode performs even stricter transaction validation. (#23743)
  • You can now use line editing at the puppeth prompt. (#23718)
  • The geth db subcommands now accept (non-hex) string keys. (#23744)

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


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

Sytau (v1.10.10)

15 Oct 11:37
@fjl fjl
Compare
Choose a tag to compare

Geth v1.10.10 is another bug fix release.

Geth changes

  • Geth is much less likely to crash during shutdown, especially when mining is active. (#23435, #21992, #22853)
  • The new --rpc.evmtimeout flag allows setting the internal timeout for eth_call. The default timeout is still 5s. (#23645)
  • The geth console supports some ECMAScript 6 features like arrow functions, typed arrays and let bindings (#23721)
  • The console no longer crashes when trying to complete on properties with value 'null' or 'undefined'. (#23701)
  • The evm debugging/testing tool now validates transaction gas limits in 't9n' mode. (#23694)

RPC API changes

  • A regression in the JS-based call tracer is resolved. (#23667)
  • The new debug_getAccessibleState RPC method finds a block number at which full state is available. (#23646)
  • The new debug_getHeaderRlp RPC method fetches RLP-encoded headers from the database. (#23670, #23677)
  • The sender address is once again returned correctly for very old Frontier-era transactions. (#23683)

Go library changes

  • For contract calls using accounts/abi/bind, a regression that could lead to incorrect gas estimation is fixed. (#23719)
  • Package accounts/abi now has basic support for Solidity error types. (#23161)
  • Miner stress test tools work again (they were broken in the previous release) (#23699)
  • The transaction recipient address stored in types.Transaction is now truly independent of the address pointer passed to the constructor. (#23376)
  • The Receipt type now implements encoding.BinaryMarshaler, like Transaction (#22806)
  • TxPool.Pending no longer returns an error (#23720)

Build

  • As a workaround for tracing issues on Alpine Linux, we now set the C stack size to 8MB for release builds. (#23676)
  • Go module vendoring issues related to github.com/karalable/usb are finally resolved. (#23684)
  • This release is built with Go 1.17.2. (#23698)

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


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

Attican Beta (v1.10.9)

29 Sep 18:01
@fjl fjl
Compare
Choose a tag to compare

Geth v1.10.9 is a maintenance release containing mostly bug fixes.

Chain tracing has received quite a bit of attention during this release cycle. JS-based tracing now supports additional callbacks for entry and exit of contract calls, improving performance if processing individual opcodes is not needed.

Geth command changes

  • The 'evm' command has a new subcommand for testing tx decoding. (#23494)
  • 'evm t8n' now calculates and returns block difficulty. (#23353, #23507)
  • Legacy flags --rpc, --rpcaddr, --rpcport, etc. are no longer supported. (#23358)
  • Legacy debugging flags --pprofport, --pprofaddr, etc. are also no longer supported. (#23368)
  • When initializing Clique-based private networks, zero-length extradata in genesis.json now prints an error message instead of crashing. (#23538)

Go library changes

  • Contract bindings created by accounts/abi/bind now validate log event signatures. This prevents accidentally decoding events with the wrong signature. (#23230)
  • A crash in accounts/abi when decoding struct-typed Solidity return values is resolved. (#23573)
  • Writes to the ancient database are now batched internally for improved performance. (#23462)
  • Multiple data races in transaction pool code are fixed. (#23474)
  • Comprehensive benchmarks for RLP encoding/decoding of consensus types have been added. (#23190)
  • RLP encoding of slices and arrays is slightly faster. (#23467)
  • rpc.BlockNumber now implements encoding.TextMarshaler. (#23324)
  • The Account type has been moved from package core/state to core/types. (#23567)
  • For crypto/cloudflare/bn256 EC curve, in-place addition and unmarshalling now works correctly. (#23419)
  • A very rare crash in the background 'bloombits' indexer is resolved. (#23437)

RPC/GraphQL changes

  • JS tracing of EVM execution now provides additional callbacks for call entry/exit. Using these callbacks instead of 'step' can yield a 10-100x tracing speedup if you don't need to process every VM opcode. (#23087)
  • The '4byte' built-in tracer now uses enter/exit. (#23622)
  • A state database corruption bug caused by tracer re-execution of old blocks is resolved. (#23632)
  • The new debug_intermediateRoots method computes per-transaction state roots of a block. (#23594)
  • EVM memory and return data are no longer captured by default when tracing. (#23558)
  • EVM execution is now aborted on the server side when tracing is interrupted. (#23580)
  • Broken WebSocket connections are now detected better and their subscriptions report an error instead of hanging indefinitely. (#23556)
  • personal_sendTransaction now supports both "input" and "data" arguments, just like eth_sendTransaction. (#23476)
  • Log filtering performance is improved. (#23147)
  • Transaction access lists returned by GraphQL are now correct. (#23650)
  • The debug_stacks method now supports an optional filter expression. (#23605)
  • For clique blocks returned by RPC, the "miner" field once again contains the actual block coinbase field instead of the derived block signer. This fixes a regression where clients would no longer be able to verify the block seal signature. (#23466)

Networking

  • The eth/65 peer-to-peer protocol is no longer supported. Geth only supports eth/66 as of this release. (#23456)
  • The cross-client eth protocol tests suite better distinguishes eth/65 and eth/66. (#23568)
  • ENR sequence numbers are now initialized as a timestamp. This prevents issues when the p2p nodes database is dropped/re-created while keeping the nodekey the same. (#19903)
  • Several data races are resolved in packages p2p and p2p/enode. (#23434)
  • Note: to simplify the ongoing rewrite of eth/downloader, the package has been duplicated temporarily. The additional copy will be removed later. (#23561)

Build

  • This release is built with Go 1.17. (#23464, #23465, #23468)
  • 32 bit builds of Geth should be fully functional again. (#23543, #23542)
  • We no longer publish .deb packages for Ubuntu 20.10 Gorilla because this version is not supported by Launchpad anymore. (#23470)
  • The 'node' package no longer depends on wallet backends. Specifically, this removes the dependencies on libusb for contract bindings and other uses of the go-ethereum library. If you are using package node, you must now register required account manager backends individually. (#23019)
  • The 'metrics' package, and many packages that depend on it can now be compiled for WebAssembly. (#23449)
  • EVM performance tests no longer run on CI. (#23304)

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


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

Hades Gamma (v1.10.8)

24 Aug 07:07
2667545
Compare
Choose a tag to compare

Geth v1.10.8 is a pre-announced hotfix release to patch a vulnerability in the EVM (CVE-2021-39137).

The exact attack vector will be provided at a later date to give node operators and dependent downstream projects time to update their nodes and software. All Geth versions supporting the London hard fork are vulnerable (the bug is older than London), so all users should update.

Credits for the discovery go to @guidovranken (working for Sentnl during an audit of the Telos EVM) and reported via [email protected].

Beside the fix, we're merged in a few tiny polishes and fixes. For a rundown, please consult the Geth 1.10.8 release milestone.


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

Styx Theta (v1.10.7)

12 Aug 07:16
12f0ff4
Compare
Choose a tag to compare

Geth v1.10.7 is a maintenance release, mostly focusing on a few post-London polishes.

A few important notes to keep in mind:

  • The return type for oldestBlock in eth_feeHistory was changed from decimal to hex. This is to conform to the updated spec that was released after Geth's London hard-fork release was already made. The input blockCount parameter was also updated, but there Geth will accept both hex and decimal to keep backward compatibility.
  • The -miner.gastarget CLI flag was deprecated and is a noop. This flag is already a noop for networks running the London hard-fork, since it London miners only take into account the -miner.gaslimit flag. For non-London private networks and Geth forks, this might result in a gas bump depending on how the miners are configured.
  • Docker builds were changed from DockerHub Automated Builds to offsite builds and manual pushes to DockerHub. At the same time, we've added support for multi-arch images, the original tags being the metadata image, linking a -amd64 and a -arm64 tags together. No changes are needed for docker users, but keep us posted if something strange happens. On the upside, Geth now has official arm64 docker images too.

Changes made:

  • Change the oldestBlock return type in eth_feeHistory to hex, accept both decimal and hex as the block count (#23239, #23363).
  • Cap max usable gas in eth_estimateGas better for 1559 transactions (#23309).
  • When deploying multiple contracts via abigen, only parse the ABI once (#22583).
  • Return maxFeePerGas for the gasPrice of pending transactions (#23345).
  • Check cached blocks too when attempting to retrieve a header (#23299).
  • Reject transactions imitated from non EOA accounts (#23303).
  • Reduce allocations a bit while CPU mining ethash (#23199).
  • Deprecate the -miner.gastarget CLI flag (#23213).
  • Switch over to manual docker pushes (#23373).

Bugs fixed:

  • Fix a nil pointer panic for certain abigen generated code due to missing context initialization (#23188).
  • Fix nil pointer panic in certain automatic access list generation RPC API calls (#23225).
  • Fix a regression that prevented clef from signing a legacy transaction (#23274).
  • Fix a permission error during snapshot based pruning on Windows (#23370).
  • Fix the marshaling of errors from the tracers (#23292).

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


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

Terra Nova (v1.10.6)

22 Jul 14:53
@fjl fjl
Compare
Choose a tag to compare

Geth v1.10.6 is a hotfix release. This resolves a consensus failure on the Ropsten testnet.

Users of Geth on the Ethereum mainnet must upgrade to this release before the London hard-fork activates to remain in consensus. Reminder: the London hard fork is scheduled to occur at block #12965000 on mainnet (~ August 4th, 2021).

More information about the Ropsten incident

During testing of the London hardfork on Ropsten, a consensus failure occurred in block 10679538, leading to a network split between OpenEthereum/Besu and Geth/Nethermind. The block contained a transaction from an account with enough funds to cover the effective fee, but too little funds for the transaction's maximum gas price. EIP-1559 mandates that such transactions should be rejected. Geth's implementation of EIP-1559 did not perform the check correctly and accepted the transaction.

For more information see PR #23244 and the post-mortem writeup.

Other changes in this release

  • Compatibility with old receipt formats stored in the database is restored. This fixes a regression introduced in Geth v1.10.4 for people with very old chain databases. (#23247)
  • A regression for eth_sendTransaction in light client mode is fixed. (#23215)
  • The Go API function Node.Close() has been fixed to stop the WebSocket server correctly (#23211)

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


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

Exodus Cluster (v1.10.5)

14 Jul 08:06
33ca98e
Compare
Choose a tag to compare

Geth v1.10.5 enables the London hard fork for the Ethereum mainnet at block #12965000, estimated for the 4th of August, 2021. Reiterating the London hardfork summary from our previous release (note, extended):

London Fork EIPs

  • [EIP-1559]: Fee market change for ETH 1.0 chain (#22837, #22888, #22970)
  • [EIP-3198]: BASEFEE opcode (included in EIP-1559 changes)
  • [EIP-3529]: Reduction in refunds (#22733)
  • [EIP-3541]: Reject new contracts starting with the 0xEF byte (#22809)
  • [EIP-3554]: Difficulty Bomb Delay to December 1st 2021 (#22840, #22870)

Additional notes about the London changes

  • This release contains mainnet activation block number for the London hard fork. (#23176)

  • As with all previous fork-related releases, we have added an override flag which can be used to set the activation block. This flag is temporary and will be removed some time after the fork has successfully activated on mainnet. (#22822, #22972)

  • The Geth transaction pool has been redesigned in order to handle the new fee market created by EIP-1559. Our new pool design attempts to cater to the demands of users—timely inclusion of transactions—as well as allowing efficient ordering of transactions by their effective mining reward. You can read more about how the new pool functions in the [transaction pool design document]. (#22898)

  • For miners: The transaction selection algorithm provided by Geth specifically picks transactions with the highest effective reward. If a minimum price is configured using the --miner.gasprice command-line flag, transactions providing less miner tips will not be included in blocks. (#22896, #22995)

    EIP-1559 also changes the gas limit voting system. After the London fork, the block gas amount available for transactions is adjusted based on demand. The block capacity is called the gas target, and EIP-1559 defines this target as half the gas limit.

    To ensure that the gas available for transactions is the same as before the fork, the gas limit is doubled at the fork block. If you are using the --miner.gaslimit flag to participate in voting, you need to double the value of this flag to keep voting for the same value as before. You can use the miner_setGasLimit RPC API to update the target without downtime, but be aware that this does not survive a restart. The previous --miner.gastarget flag is deprecated post London and its value will be ignored.

    Example: You are using --miner.gaslimit to vote for a limit of 20M, and the actual block gas limit is 20M. When London activates, the block gas limit will adjust to 40M, but you will still be voting it down towards to 20M if you keep using the same --miner.gaslimit setting. So at some point after the fork, you need to double your --miner.gaslimit value to ensure the gas limit stays at 40M gas.

  • For wallet providers: The default transaction price calculation algorithm for EIP-1559 (eth_maxPriorityFeePerGas) follows the old mechanism, setting the max priority fee to the effective price paid on the network minus the current base fee; and setting the max fee to the priority fee + 2x base fee. This ensures that the total price paid per gas remains the same after the London transition if no explicit user involvement has been made.

    Alternatively, Geth exposes a new eth_feeHistory(blocks, head, percentiles) API endpoint which allows the user to query recent statistical infos about the amount of tips paid to miners and fees burned by transactions. Wallets are recommended to use this endpoint to give users multiple fee options to choose from (#23033).

  • Note for JSON-RPC users: eth_sendTransaction and eth_fillTransaction will create EIP-1559 transactions by default after the fork has activated.

  • Note for users of Go/Java/ObjC contract bindings: accounts/abi/bind will create EIP-1559 transactions automatically after the fork. To take advantage of EIP-1559 in Go applications, please remember to update the go-ethereum module dependency to v1.10.4 or newer in your application's go.mod file. (#23038)

  • Note for users of ethclient: If you send transactions using the ethclient package and want to take advantage of the new fee model provided by EIP-1559, you must adapt your code to create transactions using types.NewTx(&types.DynamicFeeTx{...}). In order to know whether the fork has activated and the new transaction type can be used yet, simply check whether the BaseFee field of the latest block header is non-nil.

Other changes in this release:

  • Expose contextual infos (block/tx hash, tx index) into the transaction tracer (#23104, #23108).
  • Implement fee history API for better 1559 transaction price suggestions (#23033, #23178).
  • Implement clique_getSinger API for deriving the miner on Clique neworks (#22987).
  • Implement txpool_contentFrom API for retrieving txs of a single account (#22992).
  • Implement miner_setGasPrice API modify the mining gas limit on the fly (#23134).
  • Create new gethclient package for accessing Geth specific RPC APIs. (#22977).
  • Increase the downloader's scratch space to better saturate fast links (#23074).
  • Introduce a mechanism to deprecate config file fields without errors (#23118).
  • Remove the notions of a block hash from the state db (#23126).
  • Improve opcode tracing speed by around 80% (#23016).
  • Sanity check the length of the baseFee field (#23171).
  • Shorter shutdown time for the trie syncer (#23020).
  • Avoid some memory allocations in Clique (#23149).
  • Better build constraints for the fuzzers (#23089, #23137).
  • Alternate builders for docker images (#23069, #23078, #23082, #23083).
  • Remove make as a Dockerfile dependency (#23167).
  • Remove the deprecated LogforStorage type (#23173).

And of course, the various fixes:

  • Fix a panic in the access list creation RPC API (#23133).
  • Fix transaction queries in GraphQL when backed by a light client (#23052).
  • Fix the tracer to correctly decide if a contract is a precompile or not (#23097).
  • Fix transaction submission for the personal namespace post 1559 (#23179).
  • Fix an ethstats regression that caused transaction counts to not report (#23159).
  • Fix a compatibility issue between old Geth nodes and new abigen code (#23102).
  • Fix a light client hang if the chain is reverted to before the trusted CHT (#23162).
  • Fix incorrect file permissions for the transaction pool local journal (#23090).
  • Fix a context error when calling certain APIs with invalid params (#23062).
  • Fix puppeth dashboard caused by an updated base image (#23168).
  • Fix a shutdown hang in light client mode (#23139).

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


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

Read more

Voyager Cluster (v1.10.4)

17 Jun 10:37
@fjl fjl
Compare
Choose a tag to compare

Geth v1.10.4 is a feature release and adds compatibility with the upcoming London hard fork. For more information about the content and scheduling of the fork, please check the [London specification document].

After a long R&D process, and extensive testing, we are pleased to announce that Geth v1.10.4 enables [snap sync] by default. At the time of this release, geth is able to fully synchronize the Ethereum mainnet in approximately 7 hours (using AWS i3.2xlarge with NVMe SSD).

London Fork EIPs

  • [EIP-1559]: Fee market change for ETH 1.0 chain (#22837, #22888, #22970)
  • [EIP-3198]: BASEFEE opcode (included in EIP-1559 changes)
  • [EIP-3529]: Reduction in refunds (#22733)
  • [EIP-3541]: Reject new contracts starting with the 0xEF byte (#22809)
  • [EIP-3554]: Difficulty Bomb Delay to December 1st 2021 (#22840, #22870)

Additional notes about the London changes

  • This release contains testnet activation block numbers for the London hard fork. The numbers are: Ropsten - 10499401, Goerli - 5062605, Rinkeby - 8897988. (#23041)

  • This release does not contain automatic activation of the fork on mainnet. A release containing the mainnet activation block will be provided later, following the ACD decision.

  • As with all previous fork-related releases, we have added an override flag which can be used to set the activation block. This flag is temporary and will be removed some time after the fork has successfully activated on mainnet. (#22822, #22972)

  • The Geth transaction pool has been redesigned in order to handle the new fee market created by EIP-1559. Our new pool design attempts to cater to the demands of users—timely inclusion of transactions—as well as allowing efficient ordering of transactions by their effective mining reward. You can read more about how the new pool functions in the [transaction pool design document]. (#22898)

  • For miners: The transaction selection algorithm provided by geth specifically picks transactions with the highest effective reward. If a minimum price is configured using the --miner.gasprice command-line flag, transactions providing less fees will not be included in blocks. (#22896, #22995)

    EIP-1559 also changes the gas limit voting system. After the London fork, the block gas amount available for transactions is adjusted based on demand. The block capacity is called the gas target, and EIP-1559 defines this target as half the gas limit.

    To ensure that the gas available for transactions is the same as before the fork, the gas limit is doubled at the fork block. If you are using the --miner.gaslimit flag to participate in voting, you need to double the value of this flag to keep voting for the same value as before.

    Example: You are using --miner.gaslimit to vote for a limit of 20M, and the actual block gas limit is 20M. When London activates, the block gas limit will adjust to 40M, but you will still be voting it down towards to 20M if you keep using the same --miner.gaslimit setting. So at some point after the fork, you need to double your --miner.gaslimit value to ensure the gas limit stays at 40M gas.

  • Note for JSON-RPC users: eth_sendTransaction and eth_fillTransaction will create EIP-1559 transactions by default after the fork has activated.

  • Note for users of Go/Java/ObjC contract bindings: accounts/abi/bind will create EIP-1559 transactions automatically after the fork. To take advantage of EIP-1559 in Go applications, please remember to update the go-ethereum module dependency to v1.10.4 in your application's go.mod file. (#23038)

  • Note for users of ethclient: If you send transactions using the ethclient package and want to take advantage of the new fee model provided by EIP-1559, you must adapt your code to create transactions using types.NewTx(&types.DynamicFeeTx{...}). In order to know whether the fork has activated and the new transaction type can be used yet, simply check whether the BaseFee field of the latest block header is non-nil.

Command changes

  • For private networks and future public testnets, the initial EIP-1559 basefee can also be set in genesis.json using the baseFeePerGas key. (#23013, #23039)
  • The Clef tool also supports signing EIP-1559 transactions. (#22966)
  • geth --dev no longer allocates excessive amounts of memory on startup. (#22949)
  • The geth --ethstats option now supports special characters such as @ in the node name portion of the URL, specifically so you can put your Twitter handle in there. (#21640)
  • geth db inspect now properly counts internal config data stored in leveldb instead of warning about it being 'unaccounted'. (#22978)
  • There is a new geth snapshot dump command for debugging purposes. (#22795)
  • Geth can no longer read databases created before April 2019. (#22852)
  • The --jspath flag can now expand ~ to the home directory. (#22900)
  • Puppeth can no longer deploy the wallet web page for you. (#22940)
  • The evm tool now exits in error if JSON data provided on stdin is invalid. (#22871)

RPC/GraphQL changes

  • JSON-RPC and GraphQL APIs have been extended for EIP-1559, following the [official OpenRPC specification]. (#22964, #23010, #23028, #23027, #23050)
  • You can now configure the lower bound of gas prices returned by eth_gasPrice using the new --gpo.ignoreprice command-line flag of geth. (#22752)
  • JS tracing via debug_traceTransaction and debug_traceBlockByNumber will no longer crash geth if the tracer function result object exceeds duktape's JSON object limits. (#22857)
  • The internal argument object representations of eth_call, eth_sendTransaction, eth_estimateGas have been unified because their fields are very similar. This change should not lead to any differences in behavior, but do let us know via GitHub issues if you find any new argument handling bugs in those methods. (#22718, #22942)
  • The 'catalyst' API handler now properly reverts the effects of failed transactions when creating a block. (#22989)

Networking

  • Snap sync is enabled by default! (#22973)
  • Snap sync now tracks peer latency/capacity and adjusts request sizes accordingly.
    (#22876, #22943)
  • The RLPx wire protocol implementation has been optimized, reducing memory allocations and system call load. (#22899)
  • The eth protocol cross-client test suite has been further extended and is more reliable. (#22843, #22535, #22957)
  • Spurious warning logs about failure to 'unregister' eth peers are gone now. (#22908)
  • DNS discovery no longer crashes when geth is started and immediately shut down again. (#22906)
  • A long-standing issue in the validation of eth/64 fork IDs is resolved. (#22879)

Go library changes

  • Package rlp now supports optional struct fields. This feature was added to simplify the EIP-1559 implementation, but is also generally useful in other contexts. (#22832, #22842)
  • RLP encoding/decoding has been optimized for reduced memory allocations and better performance under high concurrency. (#22858, #22902, #22924, #22927, #22841)
  • On shutdown, the database now waits for background ancient store writes to finish, f...
Read more

Maroon Sea (v1.10.3)

05 May 11:22
@fjl fjl
Compare
Choose a tag to compare

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 like eth_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: