Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
prover/
.git/
.claude/
contracts/node_modules/
gas-oracle/app/target/
node/build/
Expand Down
24 changes: 17 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
################## update dependencies ####################
ETHEREUM_SUBMODULE_COMMIT_OR_TAG := morph-v2.2.6
ETHEREUM_TARGET_VERSION := morph-v2.2.6
TENDERMINT_TARGET_VERSION := v0.3.9
ETHEREUM_SUBMODULE_COMMIT_OR_TAG := 4012f174b967153a31926f370d77af389b2968c8
ETHEREUM_TARGET_VERSION := v1.10.14-0.20260908092055-4012f174b967
TENDERMINT_TARGET_VERSION := v0.3.10-0.20260916055518-560fb469b16d


ETHEREUM_MODULE_NAME := github.com/morph-l2/go-ethereum
Expand Down Expand Up @@ -161,12 +161,25 @@ export MORPH_RETH_RUSTFLAGS
export MORPH_RETH_DOCKER_TARGET
export MORPH_RETH_ENTRYPOINT
DEVNET_COMPOSE_FILES := -f docker-compose-devnet.yml
DEVNET_CLEAN_COMPOSE_FILES := -f docker-compose-devnet.yml -f docker-compose-reth.yml -f docker-compose-cluster.yml
DEVNET_CLEAN_COMPOSE_FILES := -f docker-compose-devnet.yml -f docker-compose-cluster.yml -f docker-compose-reth.yml -f docker-compose-cluster-reth.yml

# The cluster topology is layered before the execution-client override, so that
# the reth files have the last word on the ha-el-* image, entrypoint and
# command. Swapping these two leaves the cluster nodes running geth even when
# reth was asked for, because later -f files win.
ifneq ($(DEVNET_CLUSTER_ENABLED),)
DEVNET_COMPOSE_FILES += -f docker-compose-cluster.yml
endif

ifeq ($(EXECUTION_CLIENT),geth)
DEVNET_EXECUTION_DEPS := submodules
else ifeq ($(EXECUTION_CLIENT),reth)
DEVNET_COMPOSE_FILES += -f docker-compose-reth.yml
# The ha-el-* reth overrides are kept out of docker-compose-reth.yml because
# compose starts any service a later -f file introduces, cluster or not.
ifneq ($(DEVNET_CLUSTER_ENABLED),)
DEVNET_COMPOSE_FILES += -f docker-compose-cluster-reth.yml
endif
ifeq ($(MORPH_RETH_BUILD_FROM_SOURCE),true)
DEVNET_EXECUTION_DEPS := reth
else
Expand All @@ -175,9 +188,6 @@ endif
else
$(error unsupported EXECUTION_CLIENT "$(EXECUTION_CLIENT)", expected "geth" or "reth")
endif
ifneq ($(DEVNET_CLUSTER_ENABLED),)
DEVNET_COMPOSE_FILES += -f docker-compose-cluster.yml
endif

devnet-up: $(DEVNET_EXECUTION_DEPS) go-ubuntu-builder
python3 ops/devnet-morph/main.py --polyrepo-dir=. --execution-client=$(EXECUTION_CLIENT) \
Expand Down
4 changes: 2 additions & 2 deletions bindings/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ module morph-l2/bindings

go 1.24.0

replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.9
replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.10-0.20260916055518-560fb469b16d

require github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4
require github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967

require (
github.com/VictoriaMetrics/fastcache v1.12.2 // indirect
Expand Down
4 changes: 2 additions & 2 deletions bindings/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky
github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4 h1:HCXegM088SPDt3wITDEBM+Osx06I0CDLv2jmsaPA/LU=
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4/go.mod h1:nkVzHjQWCOjvukQW8ittlwX+Xz9gmVHrP7mUi7zoHTs=
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967 h1:lgAgQYT34XY/l7+auFRHdqt7HsnCcAMNBGxd5DKiiHw=
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967/go.mod h1:nkVzHjQWCOjvukQW8ittlwX+Xz9gmVHrP7mUi7zoHTs=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
Expand Down
4 changes: 2 additions & 2 deletions common/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ module morph-l2/common

go 1.24.0

replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.9
replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.10-0.20260916055518-560fb469b16d

require (
github.com/holiman/uint256 v1.2.4
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967
github.com/morph-l2/morph-da-codec/bindings/codec v0.0.0-20260727095527-681727561e38
github.com/stretchr/testify v1.10.0
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a
Expand Down
4 changes: 2 additions & 2 deletions common/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,8 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky
github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4 h1:HCXegM088SPDt3wITDEBM+Osx06I0CDLv2jmsaPA/LU=
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4/go.mod h1:nkVzHjQWCOjvukQW8ittlwX+Xz9gmVHrP7mUi7zoHTs=
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967 h1:lgAgQYT34XY/l7+auFRHdqt7HsnCcAMNBGxd5DKiiHw=
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967/go.mod h1:nkVzHjQWCOjvukQW8ittlwX+Xz9gmVHrP7mUi7zoHTs=
github.com/morph-l2/morph-da-codec/bindings/codec v0.0.0-20260727095527-681727561e38 h1:2OIgRP51TPMlpw9E82toxu/SQzN1hlYcxpJKC9jB0cs=
github.com/morph-l2/morph-da-codec/bindings/codec v0.0.0-20260727095527-681727561e38/go.mod h1:f6+BHrrHbRmEYplC1nmNjGdatQtMSa2CIK7CX8T1Nfc=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
Expand Down
53 changes: 53 additions & 0 deletions contracts/deploy/022-SequencerInit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,59 @@ export const SequencerInit = async (

console.log('L1SequencerProxy upgrade success')
}

return ''
}

// SetFirstSequencer must run *after* the proxy admin has been handed over to
// ProxyAdmin. While the deployer is still the proxy admin, any call that falls
// through to the implementation reverts with
// "TransparentUpgradeableProxy: admin cannot fallback to proxy target".
export const SetFirstSequencer = async (
hre: HardhatRuntimeEnvironment,
path: string,
deployer: any,
configTmp: any
): Promise<string> => {
const L1SequencerProxyAddress = getContractAddressByName(path, ProxyStorageName.L1SequencerProxyStorageName)
const L1SequencerFactory = await hre.ethers.getContractFactory(ContractFactoryName.L1Sequencer)

const L1Sequencer = new ethers.Contract(
L1SequencerProxyAddress,
L1SequencerFactory.interface,
deployer,
)

// deployConfig is a Proxy that throws on unknown keys, so probe with `in`
// before reading.
const firstSequencer: string = process.env.firstSequencerAddress ||
('firstSequencerAddress' in configTmp ? configTmp.firstSequencerAddress : '')
if (!firstSequencer) {
// Networks that register the first sequencer out-of-band (devnet does it
// from ops/devnet-morph) leave this unset.
console.log('firstSequencerAddress not configured, skipping setFirstSequencer')
return ''
}
if (!ethers.utils.isAddress(firstSequencer)) {
return `invalid firstSequencerAddress: ${firstSequencer}`
}

if ((await L1Sequencer.getSequencerHistoryLength()).gt(0)) {
console.log('First sequencer already set:', await L1Sequencer.getSequencer())
return ''
}

console.log('Setting first sequencer:', firstSequencer)
const tx = await L1Sequencer.setFirstSequencer(firstSequencer)
await tx.wait()

await assertContractVariable(
L1Sequencer,
'getSequencer',
firstSequencer,
)

console.log('setFirstSequencer success')
return ''
}

Expand Down
5 changes: 3 additions & 2 deletions contracts/deploy/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import GatewayInit from './017-GatewayInit'
import {AdminTransfer,AdminTransferByProxyStorageName, AdminTransferConcurrently} from './019-AdminTransfer'
import ContractInit from './020-ContractInit'
import SubmitterRegister from './021-SubmitterRegister'
import SequencerInit from './022-SequencerInit'
import SequencerInit, { SetFirstSequencer } from './022-SequencerInit'


export {
Expand All @@ -30,5 +30,6 @@ export {
AdminTransferConcurrently,
ContractInit,
SubmitterRegister,
SequencerInit
SequencerInit,
SetFirstSequencer
}
4 changes: 2 additions & 2 deletions contracts/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ module morph-l2/contract

go 1.24.0

replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.9
replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.10-0.20260916055518-560fb469b16d

require (
github.com/iden3/go-iden3-crypto v0.0.16
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967
github.com/stretchr/testify v1.10.0
)

Expand Down
4 changes: 2 additions & 2 deletions contracts/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,8 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky
github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4 h1:HCXegM088SPDt3wITDEBM+Osx06I0CDLv2jmsaPA/LU=
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4/go.mod h1:nkVzHjQWCOjvukQW8ittlwX+Xz9gmVHrP7mUi7zoHTs=
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967 h1:lgAgQYT34XY/l7+auFRHdqt7HsnCcAMNBGxd5DKiiHw=
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967/go.mod h1:nkVzHjQWCOjvukQW8ittlwX+Xz9gmVHrP7mUi7zoHTs=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
Expand Down
5 changes: 5 additions & 0 deletions contracts/src/deploy-config/qanetl1.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ const config = {
submitterChallengeDeposit: 1, // 1 ether
submitterMinimumStake: 1, // 1 ether
submitterRewardPercentage: 50,
// L1Sequencer initialize config
// First single-mode sequencer, active from L2 block 0. Leave empty to skip
// setFirstSequencer; can also be overridden by the firstSequencerAddress env var.
firstSequencerAddress: '',

// register sequencers
l2SequencerAddresses: [
"0x25d36d94b64165f72a817ae0ff9bad2ce6914c70",
Expand Down
10 changes: 9 additions & 1 deletion contracts/tasks/deploy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
ContractInit,
SubmitterRegister,
SequencerInit,
SetFirstSequencer,
} from '../deploy/index'
import { ethers } from "ethers";

Expand Down Expand Up @@ -140,7 +141,14 @@ task("initialize")
return
}


// Must come after AdminTransfer: while the deployer is still the proxy
// admin, calls that fall through to the implementation revert.
console.log('\n---------------------------------- Set first sequencer ----------------------------------')
err = await SetFirstSequencer(hre, storagePath, deployer, config)
if (err != '') {
console.log('SetFirstSequencer failed, err: ', err)
return
}

console.log('\n---------------------------------- Contract Init ----------------------------------')
err = await ContractInit(hre, storagePath, deployer, config)
Expand Down
8 changes: 8 additions & 0 deletions node/cmd/node/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,14 @@ func L2NodeMain(ctx *cli.Context) error {
return fmt.Errorf("failed to init L1 sequencer components: %w", err)
}

// Nodes that can produce blocks must fail fast on a stuck geth. Set before the
// executor and derivation clients are built, since both read this at construction.
if signer != nil {
types.GethRetryMaxElapsedTime = types.GethRetryMaxElapsedTimeSequencer
}
nodeConfig.Logger.Info("geth retry window configured",
"maxElapsed", types.GethRetryMaxElapsedTime, "isSequencer", signer != nil)

// ========== Executor + sequencer / mock ==========
tmCfg, err := sequencer.LoadTmConfig(ctx, home)
if err != nil {
Expand Down
4 changes: 3 additions & 1 deletion node/core/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"errors"
"fmt"
"math/big"
"strings"
syncos "sync"

"github.com/morph-l2/go-ethereum/accounts/abi/bind"
Expand Down Expand Up @@ -475,7 +476,8 @@ func (e *Executor) ApplyBlockV2(block *l2node.BlockV2) (applied bool, err error)
}
}

if _, err := e.l2Client.NewL2BlockV2(context.Background(), execBlock); err != nil {
if _, err := e.l2Client.NewL2BlockV2(context.Background(), execBlock); err != nil &&
!strings.Contains(err.Error(), types.BlockAlreadyKnownError) {
e.logger.Error("failed to apply block v2",
"number", execBlock.Number,
"hash", execBlock.Hash.Hex(),
Expand Down
4 changes: 2 additions & 2 deletions node/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module morph-l2/node

go 1.24.0

replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.9
replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.10-0.20260916055518-560fb469b16d

require (
github.com/cenkalti/backoff/v4 v4.1.3
Expand All @@ -13,7 +13,7 @@ require (
github.com/hashicorp/raft v1.7.3
github.com/hashicorp/raft-boltdb/v2 v2.3.1
github.com/mdlayher/vsock v1.2.1
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.17.0
github.com/spf13/viper v1.13.0
Expand Down
8 changes: 4 additions & 4 deletions node/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -414,10 +414,10 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4 h1:HCXegM088SPDt3wITDEBM+Osx06I0CDLv2jmsaPA/LU=
github.com/morph-l2/go-ethereum v1.10.14-0.20260824023452-5744b8f66ec4/go.mod h1:nkVzHjQWCOjvukQW8ittlwX+Xz9gmVHrP7mUi7zoHTs=
github.com/morph-l2/tendermint v0.3.9 h1:0jiFtMpVmVImCAFrMFTIvTX7jfJwzaQFyLQoLccP5A8=
github.com/morph-l2/tendermint v0.3.9/go.mod h1:qpiwqfcCB89dBYfqVJOc/HjGxDp3OdDlthgttJJYyRs=
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967 h1:lgAgQYT34XY/l7+auFRHdqt7HsnCcAMNBGxd5DKiiHw=
github.com/morph-l2/go-ethereum v1.10.14-0.20260908092055-4012f174b967/go.mod h1:nkVzHjQWCOjvukQW8ittlwX+Xz9gmVHrP7mUi7zoHTs=
github.com/morph-l2/tendermint v0.3.10-0.20260916055518-560fb469b16d h1:7vfVAK5eeHgdLxXG/1hMJLvgvE5QiYIfRA2nNYj6jPU=
github.com/morph-l2/tendermint v0.3.10-0.20260916055518-560fb469b16d/go.mod h1:qpiwqfcCB89dBYfqVJOc/HjGxDp3OdDlthgttJJYyRs=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
Expand Down
4 changes: 2 additions & 2 deletions node/hakeeper/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ func DefaultConfig() *Config {
ListenPort: 9400,
},
Snapshot: SnapshotConfig{
Interval: 120 * time.Second,
Threshold: 8192,
Interval: 30 * time.Second,
Threshold: 200,
TrailingLogs: 1200,
},
Timeout: TimeoutConfig{
Expand Down
20 changes: 16 additions & 4 deletions node/types/retryable_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,24 @@ const (
// always fail and only delay error surfacing to the consensus layer.
BlockHashMismatchError = "block hash mismatch"
InvalidNextL1MsgIndexError = "invalid block.NextL1MsgIndex"
BlockAlreadyKnownError = "block already known"

// Geth connection retry settings
GethRetryAttempts = 60 // max retry attempts
GethRetryInterval = 5 * time.Second // interval between retries
GethRetryMaxElapsedTime = 30 * time.Minute
GethRetryAttempts = 60 // max retry attempts
GethRetryInterval = 5 * time.Second // interval between retries
)

// GethRetryMaxElapsedTime bounds how long a geth call is retried before giving up.
// Sequencer nodes lower it to GethRetryMaxElapsedTimeSequencer at boot (see
// cmd/node/main.go) so a stuck geth surfaces to consensus quickly instead of
// stalling block production; fullnodes keep the long window because they only
// need to catch up eventually.
var GethRetryMaxElapsedTime = 30 * time.Minute

// GethRetryMaxElapsedTimeSequencer is the window used by nodes that can produce
// blocks (i.e. a signer is configured).
const GethRetryMaxElapsedTimeSequencer = 1 * time.Minute

type RetryableClient struct {
authClient *authclient.Client
ethClient *ethclient.Client
Expand Down Expand Up @@ -296,7 +307,8 @@ func retryableError(err error) bool {
!strings.Contains(msg, WrongBlockNumberError) &&
!strings.Contains(msg, ParentNotFoundError) &&
!strings.Contains(msg, BlockHashMismatchError) &&
!strings.Contains(msg, InvalidNextL1MsgIndexError)
!strings.Contains(msg, InvalidNextL1MsgIndexError) &&
!strings.Contains(msg, BlockAlreadyKnownError)
}

// ============================================================================
Expand Down
Loading
Loading