Releases: scroll-tech/go-ethereum
scroll-v5.8.72
Overview
This release enables the Feynman upgrade on the Scroll Sepolia testnet at timestamp 1753167600
(Tue July 22 2025 07:00:00 GMT+0000). This upgrade enables a series of important changes including:
- L1-compatible
blockhash
opcode andecPairing
precompile. - Adopt EIP-2935 and EIP-7623 from Ethereum's Pectra upgrade.
- Compression-aware rollup fee, and EIP-1559 congestion-aware base fee.
Additionally, this release also includes various fixes and improvements:
- (Experimental) Direct transaction submission to sequencer (instead of relying on gossip). #1194 #1208
- Remove transaction count limit from block validation. #1215
- Fetch Scroll blobs from an AWS S3 snapshot. #1209
- Fix L1 follower node block hash mismatch. #903
- More stable gas price esimation. #1220
Who should upgrade?
Node operators running on Scroll Sepolia must upgrade to this release.
Node operators running on Scroll mainnet should not upgrade to this release. We will publish a separate release for mainnet soon after the testnet upgrade.
Node Configuration Changes
Mandatory changes:
gpo.congestionthreshold
is removed.
Optional changes (no action item for most node operators):
- New flags allow fine-grained control over node gossip behavior:
gossip.disabletxbroadcast
,gossip.disabletxreceiving
,gossip.enablebroadcasttoall
,gossip.broadcasttoallcap
. --gossip.sequencerhttp https://sepolia-sequencer-proxy.scroll.io
enables additional direct transaction submission directly to the Scroll sequencer endpoint, reducing latency.- A new S3 blob data source can be enabled using
--da.blob.awss3 https://scroll-sepolia-blob-data.s3.us-west-2.amazonaws.com
. This can be used alongside, or as a replacement for other blob data sources (da.blob.beaconnode
,da.blob.blobscan
,da.blob.blocknative
). - If running in L1 follower mode, the node uses the newly added
missingHeaderFieldsSHA256
genesis configuration field to fetch the block data hint. This is configured automatically if used with the--scroll-sepolia
flag.
Compatibility
This release updates the embedded hard fork block timestamp for Scroll Sepolia. Nodes that are not upgraded will be unable to follow the network after the hard fork block. To follow the Feynman upgrade, simply run your node with the --scroll-sepolia
flag.
If you do not use the --scroll-sepolia
flag, then you must update and reimport genesis.json
.
{
"config": {
"chainId": 534351,
...
"euclidTime": 1741680000,
"euclidV2Time": 1741852800,
+ "feynmanTime": 1753167600,
...
"scroll": {
...
"genesisStateRoot": "0x20695989e9038823e35f0e88fbc44659ffdbfa1fe89fbeb2689b43f15fa64cb5",
+ "missingHeaderFieldsSHA256": "0xa02354c12ca0f918bf4768255af9ed13c137db7e56252348f304b17bb4088924"
...
Full genesis.json for l2geth-mpt nodes
{
"config": {
"chainId": 534351,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"archimedesBlock": 0,
"shanghaiBlock": 0,
"bernoulliBlock": 3747132,
"curieBlock": 4740239,
"darwinTime": 1723622400,
"darwinV2Time": 1724832000,
"euclidTime": 1741680000,
"euclidV2Time": 1741852800,
"feynmanTime": 1753167600,
"clique": {
"period": 3,
"epoch": 30000
},
"systemContract": {
"period": 1,
"system_contract_address": "0xC706Ba9fa4fedF4507CB7A898b4766c1bbf9be57",
"system_contract_slot": "0x0000000000000000000000000000000000000000000000000000000000000067"
},
"scroll": {
"useZktrie": false,
"maxTxPerBlock": 100,
"maxTxPayloadBytesPerBlock": 122880,
"feeVaultAddress": "0x5300000000000000000000000000000000000005",
"l1Config": {
"l1ChainId": "11155111",
"l1MessageQueueAddress": "0xF0B2293F5D834eAe920c6974D50957A1732de763",
"l1MessageQueueV2Address": "0xA0673eC0A48aa924f067F1274EcD281A10c5f19F",
"l1MessageQueueV2DeploymentBlock": 7773746,
"scrollChainAddress": "0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0",
"l2SystemConfigAddress": "0xF444cF06A3E3724e20B35c2989d3942ea8b59124",
"numL1MessagesPerBlock": "10"
},
"genesisStateRoot": "0x20695989e9038823e35f0e88fbc44659ffdbfa1fe89fbeb2689b43f15fa64cb5",
"missingHeaderFieldsSHA256": "0xa02354c12ca0f918bf4768255af9ed13c137db7e56252348f304b17bb4088924"
}
},
"nonce": "0x0",
"timestamp": "0x64cfd015",
"extraData": "0x000000000000000000000000000000000000000000000000000000000000000048C3F81f3D998b6652900e1C3183736C238Fe4290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "8000000",
"difficulty": "0x1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"0x18960EEc21b1878C581937a14c5c3C43008F6b6B": {
"balance": "10000000000000000000"
},
"0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d": {
"balance": "226156424291633194186662080095093570025917938800079226629565593765455331328"
},
"0x5300000000000000000000000000000000000000": {
"balance": "0x0",
"code": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c806383cc76601161006657806383cc7660146100fc5780638da5cb5b1461010f578063c4d66de814610122578063d4b9f4fa14610135578063f2fde38b1461013e57600080fd5b806326aad7b7146100985780633cb747bf146100b4578063600a2e77146100df578063715018a6146100f2575b600080fd5b6100a160015481565b6040519081526020015b60405180910390f35b6053546100c7906001600160a01b031681565b6040516001600160a01b0390911681526020016100ab565b6100a16100ed36600461054a565b610151565b6100fa6101f6565b005b6100a161010a36600461054a565b61022c565b6052546100c7906001600160a01b031681565b6100fa610130366004610563565b610243565b6100a160005481565b6100fa61014c366004610563565b6102db565b6053546000906001600160a01b031633146101a45760405162461bcd60e51b815260206004820152600e60248201526d37b7363c9036b2b9b9b2b733b2b960911b60448201526064015b60405180910390fd5b6000806101b084610367565b60408051838152602081018890529294509092507ffaa617c2d8ce12c62637dbce76efcc18dae60574aa95709bdcedce7e76071693910160405180910390a19392505050565b6052546001600160a01b031633146102205760405162461bcd60e51b815260040161019b90610593565b61022a6000610486565b565b602a816028811061023c57600080fd5b0154905081565b6052546001600160a01b0316331461026d5760405162461bcd60e51b815260040161019b90610593565b600154156102b15760405162461bcd60e51b815260206004820152601160248201527063616e6e6f7420696e697469616c697a6560781b604482015260640161019b565b6102b96104d8565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b6052546001600160a01b031633146103055760405162461bcd60e51b815260040161019b90610593565b6001600160a01b03811661035b5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015260640161019b565b61036481610486565b50565b60035460009081906103bb5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c206265666f726520696e697469616c697a6174696f6e000000000000604482015260640161019b565b6001548360005b8215610456576103d36002846105e0565b60000361041f5781602a82602881106103ee576103ee6105ca565b01556104188260028360288110610407576104076105ca565b015460009182526020526040902090565b915061044a565b610447602a8260288110610435576104356105ca565b01548360009182526020526040902090565b91505b600192831c92016103c2565b81602a826028811061046a5761046a6105ca565b0155506000819055600180548082019091559590945092505050565b605280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b60286104e8826001610618565b10156103645761051960028260288110610504576105046105ca565b015460028360288110610407576104076105ca565b6002610526836001610618565b60288110610536576105366105ca565b01558061054281610631565b9150506104db565b60006020828403121561055c57600080fd5b5035919050565b60006020828403121561057557600080fd5b81356001600160a01b038116811461058c57600080fd5b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000826105fd57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b8082018082111561062b5761062b610602565b92915050565b60006001820161064357610643610602565b506001019056fea26469706673582212208fb1cb9933bb17dd0a7c17de7c890919b08d2fd7eb2bede7b41caa32709b30b564736f6c63430008100033",
"storage": {
"0x0000000000000000000000000000000000000000000000000000000000000052": "0x18960EEc21b1878C581937a14c5c3C43008F6b6B"
}
},
"0x5300000000000000000000000000000000000002": {
"balance": "0x0",
"code": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063715018a61161008c578063bede39b5116100665780...
scroll-v5.8.52-fix
Overview
This is a hotfix release for scroll-v5.8.52.
This release fixes an issue where the node might be unable to decode and verify certain previously committed blobs.
This release is mandatory for nodes with rollup verification enabled (--rollup.verify
flag), as well as L1 follower nodes (--da.sync
flag). For nodes that do not use any of these flags, upgrading is optional.
What's Changed
fix(rollup-verifier): update da-codec dependency #1207
Full Changelog: scroll-v5.8.52...scroll-v5.8.52-fix
scroll-v5.8.52
Overview
This release includes various security and stability improvements, and it is recommended for all users.
This release also improves the UX around fees and node configuration. #1189 introduces a new way to update fee parameters automatically from an L2 smart contract.
Compatibility
Deprecated flags
The following flags are no longer recommended and should be removed:
--txpool.pricelimit
--txpool.accountpendinglimit
Other recommended flags should remain unchanged. In particular, we recommend configuring the following flags (not an exhaustive list):
--syncmode full
--gcmode archive
--cache.noprefetch
--cache.snapshot 0
--snapshot false
--gpo.maxprice 500000000
--gpo.congestionthreshold 1000
Genesis configuration
#1189 requires a new address in the node genesis config. Operators who use the --scroll
or --scroll-sepolia
flags do not need to do anything. Operators who provide a genesis.json
file manually will need to change the file and reimport using geth init
.
genesis.mainnet.json
:
{
"config": {
"chainId": 534352,
...
"scroll": {
"useZktrie": false,
...
"l1Config": {
"l1ChainId": "1",
"l1MessageQueueAddress": "0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B",
"l1MessageQueueV2Address": "0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a",
"l1MessageQueueV2DeploymentBlock": 22280397,
"scrollChainAddress": "0xa13BAF47339d63B743e7Da8741db5456DAc1E556",
+ "l2SystemConfigAddress": "0x331A873a2a85219863d80d248F9e2978fE88D0Ea",
"numL1MessagesPerBlock": "10"
...
genesis.sepolia.json
:
{
"config": {
"chainId": 534351,
...
"scroll": {
"useZktrie": false,
...
"l1Config": {
"l1ChainId": "11155111",
"l1MessageQueueAddress": "0xF0B2293F5D834eAe920c6974D50957A1732de763",
"l1MessageQueueV2Address": "0xA0673eC0A48aa924f067F1274EcD281A10c5f19F",
"l1MessageQueueV2DeploymentBlock": 7773746,
"scrollChainAddress": "0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0",
+ "l2SystemConfigAddress": "0xF444cF06A3E3724e20B35c2989d3942ea8b59124",
"numL1MessagesPerBlock": "10"
What's Changed
- feat: update L2 base fee formula by @yiweichi in #1169
- fix: handle empty callstacks in call tracers by @omerfirmak in #1171
- feat(L1Reader): change to NextUnfinalizedL1MessageQueueIndex and add GetFinalizedStateRootByBatchIndex by @jonastheis in #1160
- feat: add debug_db* methods by @Thegaram in #1177
- fix: system config consensus by @yiweichi in #1180
- feat: migrate setcode tx upstream changes by @colinlyguo in #1175
- feat(rollup-verifier): make withdraw root check optional by @Thegaram in #1182
- feat: update base fee via cli by @Thegaram in #1183
- fix: address race condition during EuclidV2 header chain verification by @Thegaram in #1186
- feat: add metrics finalized block by @yiweichi in #1172
- fix: provide parent header during EuclidV2 transition verification by @Thegaram in #1187
- feat: add logs to track tx and block propagation delay by @colinlyguo in #1184
- fix(rollup verifier): nil pointer due to missing
CommittedBatchMeta
by @jonastheis in #1188 - fix: configure default timeout for blob clients by @Thegaram in #1191
- feat: update base fee via contract by @Thegaram in #1189
- fix(blob clients): nil pointer with unexpected blob client response by @jonastheis in #1195
Full Changelog: scroll-v5.8.38...scroll-v5.8.52
scroll-v5.8.38
This is a hotfix release for scroll-v5.8.33.
Note
For instructions on how to upgrade Scroll Euclid, please refer to: https://github.com/scroll-tech/go-ethereum/releases/tag/scroll-v5.8.33
What's Changed
- fix: check ancient header hash after decoding by @omerfirmak in #1162
- fix: ignore key-not-found errors in testWitness by @omerfirmak in #1164
- add non congested gas fee to fee history by @georgehao in #1163
- fix: an attempt at making witness generation more stable by @omerfirmak in #1166
- feat(txpool): more txn tracing logs by @colinlyguo in #1167
- fix(txpool): tracing txn executed status by @colinlyguo in #1168
Full Changelog: scroll-v5.8.33...scroll-v5.8.38
scroll-v5.8.33
Overview
This release enables the upcoming Euclid upgrade on Scroll Mainnet. Euclid consists of two phases (two forks):
- Euclid phase-1 at timestamp
1744815600
(Wed Apr 16 2025 15:00:00 GMT+0000). - Euclid phase-2 at timestamp
1745305200
(Tue Apr 22 2025 07:00:00 GMT+0000).
This upgrade enables a series of important changes including:
- Support for MPT state commitment.
- Disable CCC and transaction skipping.
- Enable EIP-7702 and RIP-7212.
- Support for
DACodecV7
andMessageQueueV2
. - Deprecate Clique and migrate to the new
SystemContract
Proof-of-Authority consensus. - Add tools for permissionless batch submission and recovery.
Who should upgrade?
Node operators running on Scroll Mainnet must upgrade to this release.
Node operators running on Scroll Sepolia do not need to upgrade to this release.
How to upgrade?
DA Sync
From this release on, nodes that fetch rollup data from L1 (nodes running with the --rollup.verify
flag, and L1 follower nodes) must connect to a blob data source.
We recommend directly connecting to a beacon node endpoint:
--da.blob.beaconnode "http://l1geth-cl:5052" // change to your endpoint
Note: The beacon node should store all past Scroll blobs. If the node prunes past blobs, it will not be suitable for syncing. In that case you might see errors like failed to fetch blob from blob client
.
In addition, you can also configure other blob sources:
Mainnet:
--da.blob.blobscan "https://api.blobscan.com/blobs/"
--da.blob.blocknative "https://api.ethernow.xyz/v1/blob/"
Sepolia:
--da.blob.blobscan "https://api.sepolia.blobscan.com/blobs/"
You must configure at least one of these flags. (You can configure all.)
MPT Mode
In the Euclid upgrade Scroll will migrate to a new state commitment scheme (from zktrie to MPT). In this release we continue supporting both modes. From here on we will refer to these as l2geth-zktrie
and l2geth-mpt
nodes. Both types of nodes use the same binary / Docker image, but slightly different configuration.
Existing nodes (l2geth-zktrie
) can be upgraded in place without any changes to the database. These nodes will work just fine prior to the Euclid fork and provide all the functionality they normally provide. After the fork boundary, they will be allowed to stay connected to the network, follow the chain, and take part in the P2P gossip network. But they will stop verifying state roots that come with block headers and they won’t be able to provide state proofs for any of the Euclid blocks.
We recommend that node operators set up new l2geth-mpt
nodes. This requires a full resync:
- Set up a new node. You can use your previous configuration flags, but add
--scroll-mpt
and--gcmode=archive
to enable mpt mode - Wait for the node to fully sync.
- If you maintain a load balancer (e.g. RPC operators), redirect it to the new
l2geth-mpt
nodes during or shortly after Euclid phase-1. This will ensure thateth_getProof
returns correct results. - After Euclid, you can remove all the previous
l2geth-zktrie
nodes.
For faster sync, node operators can use the Scroll Mainnet l2geth-mpt
snapshot: https://scroll-geth-snapshot.s3.us-west-2.amazonaws.com/mpt/latest.tar
Compatibility
This release updates the embedded hard fork block timestamp for Scroll Mainnet. Nodes that are not upgraded will be unable to follow the network after the hard fork block. To follow the Euclid upgrade, simply run your node with the --scroll
flag.
If you do not use the --scroll
flag, then you must update and reimport genesis.json
.
genesis.json for l2geth-zktrie nodes
{
"config": {
"chainId": 534352,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"archimedesBlock": 0,
"shanghaiBlock": 0,
"bernoulliBlock": 5220340,
"curieBlock": 7096836,
"darwinTime": 1724227200,
"darwinV2Time": 1725264000,
"euclidTime": 1744815600,
"euclidV2Time": 1745305200,
"clique": {
"period": 3,
"epoch": 30000
},
"systemContract": {
"period": 3,
"system_contract_address": "0x8432728A257646449245558B8b7Dbe51A16c7a4D",
"system_contract_slot": "0x0000000000000000000000000000000000000000000000000000000000000067"
},
"scroll": {
"useZktrie": true,
"maxTxPerBlock": 100,
"maxTxPayloadBytesPerBlock": 122880,
"feeVaultAddress": "0x5300000000000000000000000000000000000005",
"l1Config": {
"l1ChainId": "1",
"l1MessageQueueAddress": "0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B",
"l1MessageQueueV2Address": "0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a",
"l1MessageQueueV2DeploymentBlock": 22088276,
"scrollChainAddress": "0xa13BAF47339d63B743e7Da8741db5456DAc1E556",
"numL1MessagesPerBlock": "10"
},
"genesisStateRoot": "0x08d535cc60f40af5dd3b31e0998d7567c2d568b224bed2ba26070aeb078d1339"
}
},
"nonce": "0x0",
"timestamp": "0x6524e860",
"extraData": "0x4c61206573746f6e7465636f206573746173206d616c6665726d6974612e0000d2ACF5d16a983DB0d909d9D761B8337Fabd6cBd10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "10000000",
"difficulty": "0x1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"0xF9062b8a30e0d7722960e305049FA50b86ba6253": {
"balance": "2000000000000000000"
},
"0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC": {
"balance": "226156424291633194186662080095093570025917938800079226637565593765455331328"
},
"0x5300000000000000000000000000000000000000": {
"balance": "0x0",
"code": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c806383cc76601161006657806383cc7660146100fc5780638da5cb5b1461010f578063c4d66de814610122578063d4b9f4fa14610135578063f2fde38b1461013e57600080fd5b806326aad7b7146100985780633cb747bf146100b4578063600a2e77146100df578063715018a6146100f2575b600080fd5b6100a160015481565b6040519081526020015b60405180910390f35b6053546100c7906001600160a01b031681565b6040516001600160a01b0390911681526020016100ab565b6100a16100ed36600461054a565b610151565b6100fa6101f6565b005b6100a161010a36600461054a565b61022c565b6052546100c7906001600160a01b031681565b6100fa610130366004610563565b610243565b6100a160005481565b6100fa61014c366004610563565b6102db565b6053546000906001600160a01b031633146101a45760405162461bcd60e51b815260206004820152600e60248201526d37b7363c9036b2b9b9b2b733b2b960911b60448201526064015b60405180910390fd5b6000806101b084610367565b60408051838152602081018890529294509092507ffaa617c2d8ce12c62637dbce76efcc18dae60574aa95709bdcedce7e76071693910160405180910390a19392505050565b6052546001600160a01b031633146102205760405162461bcd60e51b815260040161019b90610593565b61022a6000610486565b565b602a816028811061023c57600080fd5b0154905081565b6052546001600160a01b0316331461026d5760405162461bcd60e51b815260040161019b90610593565b600154156102b15760405162461bcd60e51b815260206004820152601160248201527063616e6e6f7420696e697469616c697a6560781b604482015260640161019b565b6102b96104d8565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b6052546001600160a01b031633146103055760405162461bcd60e51b815260040161019b90610593565b6001600160a01b03811661035b5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015260640161019b565b61036481610486565b50565b60035460009081906103bb5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c206265666f726520696e697469616c697a6174696f6e000000000000604482015260640161019b565b6001548360005b8215610456576103d36002846105e0565b60000361041f5781602a82602881106103ee576103ee6105ca565b01556104188260028360288110610407576104076105ca565b015460009182526020526040902090565b915061044a565b610447602a8260288110610435576104356105ca565b01548360009182526020526040902090565b91505b600192831c92016103c2565b81602a826028811061046a5761046a6105ca565b0155506000819055600180548082019091559590945092505050565b605280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b60286104e8826001610618565b10156103645761051960028260288110610504576105046105ca565b015460028360288110610407576104076105ca565b6002610526836001610618565b60288110610536576105366105ca565b01558061054281610631565b9150506104db565b60006020828403121561055c57600080fd5b5035919050565b60006020828403121561057557600080fd5b81356001600160a01b038116811461058c57600080fd5b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000826105fd57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b8082018082111561062b5761062b610602565b92915050565b60006001820161064357610643610602565b506001019056fea26469706673582212208fb1cb9933bb17dd0a7c17de7c890919b08d2fd7eb2bede7b41caa32709b30b564736f6c63430008100033",
"storage": {
"0x0000000000000000000000000000000000000000000000000000000000000052": "0xF9062b8a30e0d7722960e305049FA50b86ba6253"
}
},
"0x5300000000000000000000000000000000000002": {
"balan...
scroll-v5.8.25
Overview
This is a hotfix release for Scroll Sepolia.
This is a mandatory release for l2geth nodes running on the Scroll Sepolia testnet that have --rollup.verify
enabled. Nodes can be upgraded to the new version in place, without any additional configuration changes, and they should recover automatically.
For other nodes (mainnet ones or ones that do not run with rollup verification) this release is not required.
A batch decoding issue led to l2geth nodes deriving the wrong batch hash and crashing with Batch hash mismatch
. In this release we fix the codec and automatically reset the node's sync height when it encounters the problematic batch. This will make the node re-sync recent batches and derive the correct batch hash.
scroll-v5.8.23
Edit(2025/03/10): Added note about beacon node requirements.
Overview
This release enables the upcoming Euclid upgrade on the Scroll Sepolia testnet. Euclid consists of two phases (two forks):
- Euclid phase-1 at timestamp
1741680000
(Tue Mar 11 2025 08:00:00 GMT+0000). - Euclid phase-2 at timestamp
1741852800
(Thu Mar 13 2025 08:00:00 GMT+0000).
This upgrade enables a series of important changes including:
- Support for MPT state commitment.
- Disable CCC and transaction skipping.
- Enable EIP-7702 and RIP-7212.
- Support for DaCodecV7 and MessageQueueV2.
- Deprecate Clique and migrate to the new
SystemContract
Proof-of-Authority consensus. - Add tools for permissionless batch submission and recovery.
Who should upgrade?
Node operators running on Scroll Sepolia must upgrade to this release.
Node operators running on Scroll mainnet should not upgrade to this release. We will publish a separate release for mainnet around the end of March.
How to upgrade?
DA Sync
From this release on, nodes that fetch rollup data from L1 (nodes running with the --rollup.verify
flag, and L1 follower nodes) must connect to a blob data source.
We recommend directly connecting to a beacon node endpoint:
--da.blob.beaconnode "http://l1geth-cl:5052" // change to your endpoint
Note: The beacon node should store all past Scroll blobs. If the node prunes past blobs, it will not be suitable for syncing. In that case you might see errors like failed to fetch blob from blob client
.
In addition, you can also configure other blob sources:
--da.blob.blobscan "https://api.sepolia.blobscan.com/blobs/"
You must configure at least one of these flags. (You can configure both.)
MPT Mode
In the Euclid upgrade Scroll will migrate to a new state commitment scheme (from zktrie to MPT). In this release we continue supporting both modes. From here on we will refer to these as l2geth-zktrie
and l2geth-mpt
nodes. Both types of nodes use the same binary / Docker image, but slightly different configuration.
Existing nodes (l2geth-zktrie
) can be upgraded in place without any changes to the database. These nodes will work just fine prior to the Euclid fork and provide all the functionality they normally provide. After the fork boundary, they will be allowed to stay connected to the network, follow the chain, and take part in the P2P gossip network. But they will stop verifying state roots that come with block headers and they won’t be able to provide state proofs for any of the Euclid blocks.
We recommend that node operators set up new l2geth-mpt
nodes. This requires a full resync:
- Set up a new node. You can use your previous configuration flags, but add
--scroll-mpt
to enable mpt mode. - Wait for the node to fully sync.
- If you maintain a load balancer (e.g. RPC operators), redirect it to the new
l2geth-mpt
nodes during or shortly after Euclid phase-1. This will ensure thateth_getProof
returns correct results. - After Euclid, you can remove all the previous
l2geth-zktrie
nodes.
For faster sync, node operators can use the Sepolia l2geth-mpt
snapshot: https://scroll-sepolia-l2geth-snapshots.s3.us-west-2.amazonaws.com/scroll-mpt-2025-03-02.tar
Compatibility
This release updates the embedded hard fork block timestamp for Scroll Sepolia. Nodes that are not upgraded will be unable to follow the network after the hard fork block. To follow the Euclid upgrade, simply run your node with the --scroll-sepolia
flag.
If you do not use the --scroll-sepolia
flag, then you must update and reimport genesis.json
.
genesis.json for l2geth-zktrie nodes
{
"config": {
"chainId": 534351,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"archimedesBlock": 0,
"shanghaiBlock": 0,
"bernoulliBlock": 3747132,
"curieBlock": 4740239,
"darwinTime": 1723622400,
"darwinV2Time": 1724832000,
"euclidTime": 1741680000,
"euclidV2Time": 1741852800,
"clique": {
"period": 3,
"epoch": 30000
},
"systemContract": {
"period": 3,
"system_contract_address": "0xC706Ba9fa4fedF4507CB7A898b4766c1bbf9be57",
"system_contract_slot": "0x0000000000000000000000000000000000000000000000000000000000000067"
},
"scroll": {
"useZktrie": true,
"maxTxPerBlock": 100,
"maxTxPayloadBytesPerBlock": 122880,
"feeVaultAddress": "0x5300000000000000000000000000000000000005",
"l1Config": {
"l1ChainId": "11155111",
"l1MessageQueueAddress": "0xF0B2293F5D834eAe920c6974D50957A1732de763",
"l1MessageQueueV2Address": "0xA0673eC0A48aa924f067F1274EcD281A10c5f19F",
"l1MessageQueueV2DeploymentBlock": 7773746,
"scrollChainAddress": "0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0",
"numL1MessagesPerBlock": "10"
},
"genesisStateRoot": "0x20695989e9038823e35f0e88fbc44659ffdbfa1fe89fbeb2689b43f15fa64cb5"
}
},
"nonce": "0x0",
"timestamp": "0x64cfd015",
"extraData": "0x000000000000000000000000000000000000000000000000000000000000000048C3F81f3D998b6652900e1C3183736C238Fe4290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "8000000",
"difficulty": "0x1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"0x18960EEc21b1878C581937a14c5c3C43008F6b6B": {
"balance": "10000000000000000000"
},
"0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d": {
"balance": "226156424291633194186662080095093570025917938800079226629565593765455331328"
},
"0x5300000000000000000000000000000000000000": {
"balance": "0x0",
"code": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c806383cc76601161006657806383cc7660146100fc5780638da5cb5b1461010f578063c4d66de814610122578063d4b9f4fa14610135578063f2fde38b1461013e57600080fd5b806326aad7b7146100985780633cb747bf146100b4578063600a2e77146100df578063715018a6146100f2575b600080fd5b6100a160015481565b6040519081526020015b60405180910390f35b6053546100c7906001600160a01b031681565b6040516001600160a01b0390911681526020016100ab565b6100a16100ed36600461054a565b610151565b6100fa6101f6565b005b6100a161010a36600461054a565b61022c565b6052546100c7906001600160a01b031681565b6100fa610130366004610563565b610243565b6100a160005481565b6100fa61014c366004610563565b6102db565b6053546000906001600160a01b031633146101a45760405162461bcd60e51b815260206004820152600e60248201526d37b7363c9036b2b9b9b2b733b2b960911b60448201526064015b60405180910390fd5b6000806101b084610367565b60408051838152602081018890529294509092507ffaa617c2d8ce12c62637dbce76efcc18dae60574aa95709bdcedce7e76071693910160405180910390a19392505050565b6052546001600160a01b031633146102205760405162461bcd60e51b815260040161019b90610593565b61022a6000610486565b565b602a816028811061023c57600080fd5b0154905081565b6052546001600160a01b0316331461026d5760405162461bcd60e51b815260040161019b90610593565b600154156102b15760405162461bcd60e51b815260206004820152601160248201527063616e6e6f7420696e697469616c697a6560781b604482015260640161019b565b6102b96104d8565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b6052546001600160a01b031633146103055760405162461bcd60e51b815260040161019b90610593565b6001600160a01b03811661035b5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015260640161019b565b61036481610486565b50565b60035460009081906103bb5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c206265666f726520696e697469616c697a6174696f6e000000000000604482015260640161019b565b6001548360005b8215610456576103d36002846105e0565b60000361041f5781602a82602881106103ee576103ee6105ca565b01556104188260028360288110610407576104076105ca565b015460009182526020526040902090565b915061044a565b610447602a8260288110610435576104356105ca565b01548360009182526020526040902090565b91505b600192831c92016103c2565b81602a826028811061046a5761046a6105ca565b0155506000819055600180548082019091559590945092505050565b605280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b60286104e8826001610618565b10156103645761051960028260288110610504576105046105ca565b015460028360288110610407576104076105ca565b6002610526836001610618565b60288110610536576105366105ca565b01558061054281610631565b9150506104db565b60006020828403121561055c57600080fd5b5035919050565b60006020828403121561057557600080fd5b81356001600160a01b038116811461058c57600080fd5b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000826105fd57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b8082018082111561062b5761062b610602565b92915050565b60006001820161064357610643610602565b506001019056fea26469706673582212208fb1cb9933bb17dd0a7c17de7c890919b08d2fd7eb2bede7b41caa32709b30b564736f6c63430008100033",
"storage": {
"0x0000000000000000000000000000000000000000000000000000000000000052": "0x18960EEc21b1878C581937a14c5c3C43008F6b6B"
}
},
"0x5300000000000000000000000000000000000002...
scroll-v5.8.0
Overview
This is a maintenance release that introduces various minor improvements and the new experimental L1 follower mode. Upgrading is optional.
Compatibility
This release is fully backward-compatible.
L1 Follower Mode
#1098 adds experimental support for L1 follower mode in l2geth.
In L1 follower mode, the node syncs the chain directly from L1 DA (consuming events, calldata, and blobs) instead of acquiring the block data from the L2 peer-to-peer network. As such, this is a safer and more censorship-resistant way to sync the ledger, but the current release has important caveats:
- L1 follower mode sync is slower as it relies heavily on L1 EL and CL endpoints and 3rd-party APIs.
- Currently only finalized Ethereum blocks are processed.
- L1 follower nodes are able to reconstruct L2 state. However, their derived L2 chain will have different block hashes compared to other L2 nodes. This will be fixed in a later upgrade.
- L1 follower mode is experimental and it is not considered production ready in this release.
Current node operators can safely upgrade their nodes to scroll-v5.8.0
, but they should not enable L1 follower mode.
For non-production nodes, we invite the community to experiment with L1 follower modes and provide feedback. To run an L1 follower node, simply specify the --da.sync
and --da.blob.beaconnode "<L1 beacon node>"
CLI flags when running l2geth.
For more instructions and details, please refer to the documentation.
Other Notable Changes
#1096 sets the default gas tip returned by the GPO as 100 wei. This should help clients avoid certain types of issues when bumping gas (see the PR description for details). This value is configurable through the newly added --gpo.defaultgastipcap
flag.
#1095 adopts an eth_call
RPC adjustment from upstream geth.
What's Changed
- internal/ethapi: eth_call block parameter is optional (ethereum#28165) by @colinlyguo in #1095
- feat(txpool): add logs to track txns by @georgehao in #1046
- fix(async-ccc): print whole block hash and tx hash when failure by @colinlyguo in #1097
- fix(GPO): make default gas tip configurable by @colinlyguo in #1096
- feat: follower node sync from DA by @jonastheis in #1098
Full Changelog: scroll-v5.7.25...scroll-v5.8.0
scroll-v5.7.25
Overview
This is a maintenance release, including various minor fixes and improvements.
This release also fixes incorrect base fee estimation in various RPC APIs. We recommend that all RPC node operators gradually upgrade their nodes to this version.
Compatibility
This release is fully backward-compatible.
What's Changed
- feat(tx-pool): fast reject known skipped txs by @colinlyguo in #1004
- feat: add more logs to investigate tx broadcast issue by @0xmountaintop in #1005
- feat: add more metrics to investigate tx broadcast issue by @0xmountaintop in #1007
- fix(metrics): fix tx broadcast investigation metrics by @0xmountaintop in #1010
- fix(metrics): fix tx broadcast investigation metrics again by @0xmountaintop in #1012
- feat: implement and integrate counter-based CCC by @omerfirmak in #982
- feat(txpool): add more logs to
runReorg
by @0xmountaintop in #1019 - fix: disable headCCCCheck for follower nodes by @omerfirmak in #1021
- feat: double check ancestor RowConsumption before committing by @omerfirmak in #1022
- feat: add miner idle metric by @omerfirmak in #1023
- fix: nil-check curRc by @omerfirmak in #1024
- fix: skip ccc.ErrUnknown txns immediately by @omerfirmak in #1027
- feat(rpc): add getTxByTxTrace api, used for ccc testing & debugging by @lispc in #1026
- fix: increase keccak usage safety buffer by @omerfirmak in #1028
- fix: ignore RC check if force committing by @omerfirmak in #1029
- fix: properly handle wrapped retryable errors by @omerfirmak in #1030
- fix: reuse timestamp for blocks failing CCC by @omerfirmak in #1031
- refactor: eliminate double re-execution in AsyncChecker by @omerfirmak in #1036
- feat: allow removing txns from pool via CLI/RPC by @omerfirmak in #1041
- feat(scroll-worker): add nil consumption block metrics by @colinlyguo in #1033
- feat: allow triggering one-off CCC on a block by @omerfirmak in #1043
- feat(tx-pool): fast reject transactions that cannot fit into a block by @colinlyguo in #1042
- fix: remove a duplicated cmd in Dockerfile.mockccc by @colinlyguo in #1048
- fix: make reorg mode explicit by @omerfirmak in #1049
- fix: avoid committing empty blocks after the deadline by @omerfirmak in #1051
- fix: initialize pending block with an empty block by @omerfirmak in #1052
- feat: allow changing L1 synced height via admin RPC/CLI by @colinlyguo in #1044
- feat: update L2 base fee formula by @Thegaram in #1053
- fix: account for tx subcircuit confidence factor by @omerfirmak in #1065
- fix: TestValidateTxBlockSize by @omerfirmak in #1067
- add debugging tool to l2geth images by @sbaizet-ledger in #1066
- fix(api): change gas_price to use pending block by @yiweichi in #1082
New Contributors
Full Changelog: scroll-v5.7.0...scroll-v5.7.25
scroll-v5.7.0
Overview
This is a mandatory release for nodes running with rollup verification enabled. For other nodes, this is a recommended release.
This is a small follow-up release after the recent Darwin upgrade. This release embeds the fork timestamps for DarwinV2 for Scroll mainnet and Scroll Sepolia.
- DarwinV2 on Scroll mainnet: timestamp
1725264000
(Mon 02 September 8am UTC). - DarwinV2 on Scroll Sepolia: timestamp
1724832000
(Wed 28 August 8am UTC).
Compatibility
Similar to the previous release, this upgrade does not change Scroll's state transition function, so it is backward compatible. However, the format of the batch data committed to Ethereum changes. As a result, nodes that enabled rollup verification (--rollup.verify
) must upgrade to be able to follow the chain.
To follow the DarwinV2 upgrade, simply upgrade your node and run it with the --scroll
or --scroll-sepolia
flag respectively. If you do not use these flags, then you must update your genesis.json
file and reimport it using geth init genesis.json
:
- Add
"darwinV2Time": 1725264000
for Scroll mainnet. - Add
"darwinV2Time": 1724832000
for Scroll Sepolia.
What's Changed
- fix: enable correct string encoding of new opcodes by @lispc in #815
- refactor: rename CCC package for less repetition by @omerfirmak in #967
- Fix typo README by @oksanaphmn in #979
- refactor: remove unused unconfirmed.go by @omerfirmak in #972
- feat: allow calculating diffs between two row consumptions by @omerfirmak in #980
- calculate tx the lifecycle duration by @georgehao in #839
- feat(metrics): calculate the real pending tx by @georgehao in #983
- feat: add darwinv2 in genesis config by @colinlyguo in #993
- feat(rollup-verifier): codecv4 by @colinlyguo in #991
- feat: backport flatCallTracer by @draganm in #895
- feat: async ccc checker by @omerfirmak in #996
- fix(rollup-verifier): delete committed batch meta when reverting a batch by @colinlyguo in #1000
- feat: schedule DarwinV2 by @Thegaram in #1002
New Contributors
- @oksanaphmn made their first contribution in #979
- @draganm made their first contribution in #895
Full Changelog: scroll-v5.6.0...scroll-v5.7.0