Voyager Cluster (v1.10.4)
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.gaspricecommand-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.gaslimitflag 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.gaslimitto 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.gaslimitsetting. So at some point after the fork, you need to double your--miner.gaslimitvalue to ensure the gas limit stays at 40M gas. -
Note for JSON-RPC users:
eth_sendTransactionandeth_fillTransactionwill create EIP-1559 transactions by default after the fork has activated. -
Note for users of Go/Java/ObjC contract bindings:
accounts/abi/bindwill 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'sgo.modfile. (#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 theBaseFeefield 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
baseFeePerGaskey. (#23013, #23039) - The Clef tool also supports signing EIP-1559 transactions. (#22966)
geth --devno longer allocates excessive amounts of memory on startup. (#22949)- The geth
--ethstatsoption 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 inspectnow properly counts internal config data stored in leveldb instead of warning about it being 'unaccounted'. (#22978)- There is a new
geth snapshot dumpcommand for debugging purposes. (#22795) - Geth can no longer read databases created before April 2019. (#22852)
- The
--jspathflag 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_gasPriceusing the new--gpo.ignorepricecommand-line flag of geth. (#22752) - JS tracing via
debug_traceTransactionanddebug_traceBlockByNumberwill 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_estimateGashave 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, fixing database corruption issues related to a gap in the chain between ancients and leveldb. (#22878)
- The consensus test runner and ethereum/tests submodule reference have been updated for London. (#22976, #23047)
- Mining stress tests have been fixed up and extended for EIP-1559. (#22919, #22930)
- The
elliptic.Curveimplementation provided by crypto/secp256k1 is now more correct regarding the point at infinity. This change is not relevant for go-ethereum itself because the affected curve operations are not used, but may be an improvement for alternative/experimental uses of the secp256k1 package. (#22621) - Users of
SimulatedBackendin package accounts/abi/bind/backends can now simulate blockchain reorgs using the newForkmethod. (#22624) - A minor correctness issue in transaction pool size accounting is resolved. (#22933)
- The
Compactmethod of database tables created byrawdb.NewTablenow applies the key prefix of the table correctly. (#22911) Commitoftrie.Databasewould no longer writes state key preimages twice. (#23001)- The clique consensus engine now checks common invariants on block headers, matching ethash engine behavior. (#22836)
- Errors are now checked when creating the state root of a genesis block. (#22780)
- The core/asm EVM assembler no longer treats numbers starting with
00as hexadecimal. (#22883)
For a full rundown of the changes please consult the Geth 1.10.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.