Repository navigation
[Flow EVM] Upgrade to Ethereum Glamsterdam hard-fork #8553
Description
Upgrade Flow EVM with the upcoming changes included in the Ethereum Glamsterdam hard-fork.
High-level Tasks:
- 1. Update
ethereum/go-ethereumdependency in flow-go to its latest version - 2. Fix breaking changes on types & interfaces from
ethereum/go-ethereumversion updates - 3. Implement new interfaces/methods added from
ethereum/go-ethereumupdates - 4. Implement & verify correctness of all EIPs included in
Glamsterdamhard-fork (https://eips.ethereum.org/EIPS/eip-7773) - 5. Update existing timestamp activation mechanism for hard-forks (Flow EVM testnet & mainnet)
1. Update ethereum/go-ethereum dependency in flow-go to its latest version
Current version in master branch is github.com/ethereum/go-ethereum v1.16.8.
The latest version is github.com/ethereum/go-ethereum v1.17.2, at the time of writing.
2. Fix breaking changes on types & interfaces from ethereum/go-ethereum version updates
Breakdown of breaking changes per version:
v1.16.9
No breaking changes
v1.17.0
PointCache()removed in trie, go.mod: remove all references to go-verkle and go-ipa ethereum/go-ethereum#33461SelfDestruct6780()removed in core: invoke selfdestruct tracer hooks during finalisation ethereum/go-ethereum#32919- Make sure
SelfDestruct()is now called, instead ofSelfDestruct6780() - Remove all occurrences of
SelfDestruct6780()from test cases and types
- Make sure
v1.17.1
No breaking changes
v1.17.2
EmitLogsForBurnAccounts()was added inStateDBinterface- Make sure this is now called from
Geth(it is called indeed) - Add a test-case, utilizing
SelfDestruct()to assert the burn log is emitted
- Make sure this is now called from
GasPooltype change fromuint64toGasPoolstruct- Double check proper initialization for this (
NewGasPoolis the proper constructor)
- Double check proper initialization for this (
TransferFuncnow expects theChainRulesas an extra parameter- Check why the rules are needed (the rules are needed for checking if Amsterdam is enabled, to emit
EthTransferLog)
- Check why the rules are needed (the rules are needed for checking if Amsterdam is enabled, to emit
1.17.3
- Use
uint256in coreMessagefor faster gas calculations (core: use uint256 in core.Message ethereum/go-ethereum#34934) EmitLogsForBurnAccounts()was renamed toLogsForBurnAccounts()and it now returns all the Burn logsTouch()was added inStateDBinterfaceVerkleTimewas renamed toUBTTimeinChainConfigNewContract()expects aGasBudgetstruct type, instead of a plainuint64valueTransactionToMessage()no longer works forDryRunTransaction, since we provide noV,R,Ssignature values- Calldata floor gas cost has increased, the gas limit for certain test transactions was updated to match this
1.17.4
SetTxContext()was added inStateDBinterfaceFinalise()now tracks storage reads/writes and state changes (balance, nonce, code)BlockContextnow accepts a configurableCostPerStateByte, which defines the state creation gas cost increase
3. Implement new interfaces/methods added from ethereum/go-ethereum updates
-
EmitLogsForBurnAccounts()has been implemented and tested -
IsNewContract()was already implemented in our customStateDBinterface implementation -
SelfDestruct()has been updated, to handleEIP-6780. Flow EVM genesis block was already onDencun, so we only supportSelfDestruct()withEIP-6780, not the legacy behavior prior toDencun. -
SLOTNUMinformation is being injected in theEVM.BlockContext, to provide the value for the newly-addedSLOTNUMopcode.
4. Implement & verify correctness of all EIPs included in Glamsterdam hard-fork
The following list contains the EIP-s which are non-applicable on Flow EVM, given that we do not use Ethereum's PoS mechanism/consensus layer:
- EIP-8045: Exclude slashed validators from proposing
- EIP-8061: Increase exit and consolidation churn
- EIP-8080: Let exits use the consolidation queue
- EIP-7688: Forward compatible consensus data structures
- EIP-7732: Enshrined Proposer-Builder Separation
The following list contains the EIP-s which are applicable for Flow EVM, but they are still in draft status, hence they are not yet implemented in Geth, and their inclusion on Glamsterdam hard-fork is not yet decided:
- [DRAFT] EIP-2780: Reduce intrinsic transaction gas
- [DRAFT] EIP-7904: General Repricing
- [DRAFT] EIP-8038: State-access gas cost increase
- [DRAFT] EIP-7997: Deterministic Factory Predeploy
The following list contains the EIPs which are applicable for Flow EVM, they are scheduled for inclusion on Glamsterdam hard-fork, and therefore should be implemented:
- EIP-7708: ETH transfers emit a log
- EVMAddress.deposit
- COA.deposit
- COA.withdraw
- COA.call
- COA.deploy
- EIP-7954: Increase Maximum Contract Size
- EIP-8024: Backward compatible SWAPN, DUPN, EXCHANGE
- EIP-7778: Block Gas Accounting without Refunds
- EIP-7843: SLOTNUM opcode
- EIP-7976: Increase Calldata Floor Cost
- EIP-7981: Increase Access List Cost
- EIP-7928: Block-Level Access Lists
- EIP-8037: State Creation Gas Cost Increase
5. Update existing timestamp activation mechanism for hard-forks (Flow EVM testnet & mainnet)
Activation mechanism for Glamsterdam hard-fork upgrade has been updated.
- For
Emulator/Previewnetnetworks Flow EVM already runs on Glamsterdam - For
Testnet/Mainneta future date has been set. Upon exact date finalization from the Ethereum team, these will be updated to reflect the actual dates.
Activity
github-actions commentedon Sep 22, 2026
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.