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 theminer_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 themax priority fee
to theeffective price
paid on the network minus the currentbase fee
; and setting themax fee
to thepriority 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
andeth_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'sgo.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 theBaseFee
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:
- 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.