From e9e7eb872f6fc3d8128c744f1fa173b67465842c Mon Sep 17 00:00:00 2001 From: Tei Im Date: Wed, 7 Aug 2024 17:46:42 -0600 Subject: [PATCH 1/4] Update superchain registry --- go.mod | 13 +++++++------ go.sum | 23 ++++++++++++++--------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index a2f14e238dd..6cde0e8de8b 100644 --- a/go.mod +++ b/go.mod @@ -32,14 +32,14 @@ require ( github.com/consensys/gnark-crypto v0.12.1 github.com/crate-crypto/go-ipa v0.0.0-20221111143132-9aa5d42120bc github.com/crate-crypto/go-kzg-4844 v0.7.0 - github.com/davecgh/go-spew v1.1.1 + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/deckarep/golang-set v1.8.0 github.com/deckarep/golang-set/v2 v2.3.1 github.com/docker/docker v26.1.0+incompatible github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf github.com/edsrzf/mmap-go v1.1.0 github.com/emicklei/dot v1.6.1 - github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240603085035-9c8f6081266e + github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240803025447-c92ef420eec2 github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c github.com/gballet/go-verkle v0.0.0-20221121182333-31427a1f2d35 github.com/gfx-labs/sse v0.0.0-20231226060816-f747e26a9baa @@ -97,11 +97,11 @@ require ( github.com/xsleonard/go-merkle v1.1.0 go.uber.org/mock v0.4.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.22.0 + golang.org/x/crypto v0.23.0 golang.org/x/exp v0.0.0-20231226003508-02704c960a9b golang.org/x/net v0.24.0 golang.org/x/sync v0.7.0 - golang.org/x/sys v0.19.0 + golang.org/x/sys v0.20.0 golang.org/x/time v0.5.0 google.golang.org/grpc v1.63.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 @@ -123,6 +123,7 @@ require ( ) require ( + github.com/BurntSushi/toml v1.4.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/agnivade/levenshtein v1.1.1 // indirect @@ -245,7 +246,7 @@ require ( github.com/pion/turn/v2 v2.0.8 // indirect github.com/pion/udp v0.1.4 // indirect github.com/pion/webrtc/v3 v3.1.42 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/prometheus/client_golang v1.19.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect @@ -279,7 +280,7 @@ require ( go.uber.org/fx v1.20.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/mod v0.17.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/text v0.15.0 // indirect golang.org/x/tools v0.20.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect diff --git a/go.sum b/go.sum index ffb6fae1a72..48dee3ab7a9 100644 --- a/go.sum +++ b/go.sum @@ -52,6 +52,8 @@ git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGy github.com/99designs/gqlgen v0.17.40 h1:/l8JcEVQ93wqIfmH9VS1jsAkwm6eAF1NwQn3N+SDqBY= github.com/99designs/gqlgen v0.17.40/go.mod h1:b62q1USk82GYIVjC60h02YguAZLqYZtvWml8KkhJps4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Giulio2002/bls v0.0.0-20240315151443-652e18a3d188 h1:X+7WswmEBD7DVOlAIXQiU4hok5pPcXFM7JgULHHdD/4= github.com/Giulio2002/bls v0.0.0-20240315151443-652e18a3d188/go.mod h1:nCQrFU6/QsJtLS+SBLWRn9UG2nds1f3hQKfWHCrtUqw= @@ -223,8 +225,9 @@ github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBS github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= @@ -274,8 +277,8 @@ github.com/erigontech/silkworm-go v0.18.0 h1:j56p61xZHBFhZGH1OixlGU8KcfjHzcw9pjA github.com/erigontech/silkworm-go v0.18.0/go.mod h1:O50ux0apICEVEGyRWiE488K8qz8lc3PA/SXbQQAc8SU= github.com/erigontech/torrent v1.54.2-alpha-8 h1:MQobu6sUZCFbmWpsB7GqAh0IWs7VAZ370POaVxlApIk= github.com/erigontech/torrent v1.54.2-alpha-8/go.mod h1:nYNeuR4xPlEl4CturFD9/KRXBRJEcJGqjegDNWakwG4= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240603085035-9c8f6081266e h1:PJWaF/45dMhO7xdzSwuZmwIIBwnqnPr84oFNmmnpGNs= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240603085035-9c8f6081266e/go.mod h1:7xh2awFQqsiZxFrHKTgEd+InVfDRrkKVUIuK8SAFHp0= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240803025447-c92ef420eec2 h1:ySJykDUyb8RbcfLL3pz0Cs5Ji6NMVT7kmAY634DOCoE= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240803025447-c92ef420eec2/go.mod h1:zy9f3TNPS7pwW4msMitF83fp0Wf452tZ6+Fg6d4JyXM= github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -740,8 +743,9 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -993,8 +997,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1201,8 +1205,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1223,8 +1227,9 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 4499000e8c202362315e12a96bd661d34c8a5273 Mon Sep 17 00:00:00 2001 From: Tei Im Date: Wed, 7 Aug 2024 17:47:57 -0600 Subject: [PATCH 2/4] Add Granite time config and override flag --- cmd/utils/flags.go | 9 ++++++++- core/genesis_test.go | 6 +++--- core/genesis_write.go | 11 +++++++---- erigon-lib/chain/chain_config.go | 14 +++++++++++++- eth/backend.go | 5 ++++- eth/ethconfig/config.go | 1 + params/superchain.go | 4 ++++ turbo/cli/default_flags.go | 1 + 8 files changed, 41 insertions(+), 10 deletions(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index beb5d048913..d4d65bf3cc4 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -141,7 +141,11 @@ var ( } OverrideOptimismFjordFlag = flags.BigFlag{ Name: "override.fjord", - Usage: "Manually specify the Optimism Ecotone fork time, overriding the bundled setting", + Usage: "Manually specify the Optimism Fjord fork time, overriding the bundled setting", + } + OverrideOptimismGraniteFlag = flags.BigFlag{ + Name: "override.granite", + Usage: "Manually specify the Optimism Granite fork time, overriding the bundled setting", } // Ethash settings EthashCachesInMemoryFlag = cli.IntFlag{ @@ -2020,6 +2024,9 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C if ctx.IsSet(OverrideOptimismFjordFlag.Name) { cfg.OverrideOptimismFjordTime = flags.GlobalBig(ctx, OverrideOptimismFjordFlag.Name) } + if ctx.IsSet(OverrideOptimismGraniteFlag.Name) { + cfg.OverrideOptimismGraniteTime = flags.GlobalBig(ctx, OverrideOptimismGraniteFlag.Name) + } if ctx.IsSet(InternalConsensusFlag.Name) && clparams.EmbeddedSupported(cfg.NetworkID) { cfg.InternalCL = ctx.Bool(InternalConsensusFlag.Name) } diff --git a/core/genesis_test.go b/core/genesis_test.go index 412c4fc99ea..b30c9da2e95 100644 --- a/core/genesis_test.go +++ b/core/genesis_test.go @@ -36,7 +36,7 @@ func TestGenesisBlockHashes(t *testing.T) { t.Fatal(err) } defer tx.Rollback() - _, block, err := core.WriteGenesisBlock(tx, genesis, nil, nil, nil, nil, nil, nil, "", logger) + _, block, err := core.WriteGenesisBlock(tx, genesis, nil, nil, nil, nil, nil, nil, nil, "", logger) require.NoError(t, err) expect := params.GenesisHashByChainName(network) require.NotNil(t, expect, network) @@ -85,13 +85,13 @@ func TestCommitGenesisIdempotency(t *testing.T) { defer tx.Rollback() genesis := core.GenesisBlockByChainName(networkname.MainnetChainName) - _, _, err = core.WriteGenesisBlock(tx, genesis, nil, nil, nil, nil, nil, nil, "", logger) + _, _, err = core.WriteGenesisBlock(tx, genesis, nil, nil, nil, nil, nil, nil, nil, "", logger) require.NoError(t, err) seq, err := tx.ReadSequence(kv.EthTx) require.NoError(t, err) require.Equal(t, uint64(2), seq) - _, _, err = core.WriteGenesisBlock(tx, genesis, nil, nil, nil, nil, nil, nil, "", logger) + _, _, err = core.WriteGenesisBlock(tx, genesis, nil, nil, nil, nil, nil, nil, nil, "", logger) require.NoError(t, err) seq, err = tx.ReadSequence(kv.EthTx) require.NoError(t, err) diff --git a/core/genesis_write.go b/core/genesis_write.go index 008e3074202..632e5470170 100644 --- a/core/genesis_write.go +++ b/core/genesis_write.go @@ -68,16 +68,16 @@ import ( // // The returned chain configuration is never nil. func CommitGenesisBlock(db kv.RwDB, genesis *types.Genesis, tmpDir string, logger log.Logger) (*chain.Config, *types.Block, error) { - return CommitGenesisBlockWithOverride(db, genesis, nil, nil, nil, nil, nil, nil, tmpDir, logger) + return CommitGenesisBlockWithOverride(db, genesis, nil, nil, nil, nil, nil, nil, nil, tmpDir, logger) } -func CommitGenesisBlockWithOverride(db kv.RwDB, genesis *types.Genesis, overrideCancunTime, overrideShanghaiTime, overrideOptimismCanyonTime, overrideOptimismEcotoneTime, overrideOptimismFjordTime, overridePragueTime *big.Int, tmpDir string, logger log.Logger) (*chain.Config, *types.Block, error) { +func CommitGenesisBlockWithOverride(db kv.RwDB, genesis *types.Genesis, overrideCancunTime, overrideShanghaiTime, overrideOptimismCanyonTime, overrideOptimismEcotoneTime, overrideOptimismFjordTime, overrideOptimismGraniteTime, overridePragueTime *big.Int, tmpDir string, logger log.Logger) (*chain.Config, *types.Block, error) { tx, err := db.BeginRw(context.Background()) if err != nil { return nil, nil, err } defer tx.Rollback() - c, b, err := WriteGenesisBlock(tx, genesis, overrideCancunTime, overrideShanghaiTime, overrideOptimismCanyonTime, overrideOptimismEcotoneTime, overrideOptimismFjordTime, overridePragueTime, tmpDir, logger) + c, b, err := WriteGenesisBlock(tx, genesis, overrideCancunTime, overrideShanghaiTime, overrideOptimismCanyonTime, overrideOptimismEcotoneTime, overrideOptimismFjordTime, overrideOptimismGraniteTime, overridePragueTime, tmpDir, logger) if err != nil { return c, b, err } @@ -88,7 +88,7 @@ func CommitGenesisBlockWithOverride(db kv.RwDB, genesis *types.Genesis, override return c, b, nil } -func WriteGenesisBlock(tx kv.RwTx, genesis *types.Genesis, overrideCancunTime, overrideShanghaiTime, overrideOptimismCanyonTime, overrideOptimismEcotoneTime, overrideOptimismFjordTime, overridePragueTime *big.Int, tmpDir string, logger log.Logger) (*chain.Config, *types.Block, error) { +func WriteGenesisBlock(tx kv.RwTx, genesis *types.Genesis, overrideCancunTime, overrideShanghaiTime, overrideOptimismCanyonTime, overrideOptimismEcotoneTime, overrideOptimismFjordTime, overrideOptimismGraniteTime, overridePragueTime *big.Int, tmpDir string, logger log.Logger) (*chain.Config, *types.Block, error) { var storedBlock *types.Block if genesis != nil && genesis.Config == nil { return params.AllProtocolChanges, nil, types.ErrGenesisNoConfig @@ -138,6 +138,9 @@ func WriteGenesisBlock(tx kv.RwTx, genesis *types.Genesis, overrideCancunTime, o if config.IsOptimism() && overrideOptimismFjordTime != nil { config.FjordTime = overrideOptimismFjordTime } + if config.IsOptimism() && overrideOptimismGraniteTime != nil { + config.GraniteTime = overrideOptimismGraniteTime + } } if (storedHash == libcommon.Hash{}) { diff --git a/erigon-lib/chain/chain_config.go b/erigon-lib/chain/chain_config.go index e1bb8133b54..dc0bbb313ad 100644 --- a/erigon-lib/chain/chain_config.go +++ b/erigon-lib/chain/chain_config.go @@ -75,6 +75,7 @@ type Config struct { // Delta: the Delta upgrade does not affect the execution-layer, and is thus not configurable in the chain config. EcotoneTime *big.Int `json:"ecotoneTime,omitempty"` // Ecotone switch time (nil = no fork, 0 = already on optimism ecotone) FjordTime *big.Int `json:"fjordTime,omitempty"` // Fjord switch time (nil = no fork, 0 = already on optimism fjord) + GraniteTime *big.Int `json:"graniteTime,omitempty"` // Granite switch time (nil = no fork, 0 = already on optimism granite) // Optional EIP-4844 parameters MinBlobGasPrice *uint64 `json:"minBlobGasPrice,omitempty"` @@ -149,12 +150,13 @@ func (c *Config) String() string { c.NoPruneContracts, ) if c.IsOptimism() { - configString += fmt.Sprintf("{Bedrock: %v, Regolith: %v, Canyon: %v, Ecotone: %v, Fjord: %v}", + configString += fmt.Sprintf("{Bedrock: %v, Regolith: %v, Canyon: %v, Ecotone: %v, Fjord: %v, Granite: %v}", c.BedrockBlock, c.RegolithTime, c.CanyonTime, c.EcotoneTime, c.FjordTime, + c.GraniteTime, ) } return configString @@ -336,6 +338,10 @@ func (c *Config) IsFjord(time uint64) bool { return isForked(c.FjordTime, time) } +func (c *Config) IsGranite(time uint64) bool { + return isForked(c.GraniteTime, time) +} + // IsOptimism returns whether the node is an optimism node or not. func (c *Config) IsOptimism() bool { return c.Optimism != nil @@ -362,6 +368,10 @@ func (c *Config) IsOptimismFjord(time uint64) bool { return c.IsOptimism() && c.IsFjord(time) } +func (c *Config) IsOptimismGranite(time uint64) bool { + return c.IsOptimism() && c.IsGranite(time) +} + // IsOptimismPreBedrock returns true iff this is an optimism node & bedrock is not yet active func (c *Config) IsOptimismPreBedrock(num uint64) bool { return c.IsOptimism() && !c.IsBedrock(num) @@ -615,6 +625,7 @@ type Rules struct { IsAura bool IsOptimismBedrock, IsOptimismRegolith bool IsOptimismCanyon, IsOptimismEcotone, IsOptimismFjord bool + IsOptimismGranite bool } // Rules ensures c's ChainID is not nil and returns a new Rules instance @@ -646,6 +657,7 @@ func (c *Config) Rules(num uint64, time uint64) *Rules { IsOptimismCanyon: c.IsOptimismCanyon(time), IsOptimismEcotone: c.IsOptimismEcotone(time), IsOptimismFjord: c.IsOptimismFjord(time), + IsOptimismGranite: c.IsOptimismGranite(time), } } diff --git a/eth/backend.go b/eth/backend.go index 607d99521c0..2474c37543c 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -304,7 +304,7 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger genesisSpec = nil } var genesisErr error - chainConfig, genesis, genesisErr = core.WriteGenesisBlock(tx, genesisSpec, config.OverrideCancunTime, config.OverrideShanghaiTime, config.OverrideOptimismCanyonTime, config.OverrideOptimismEcotoneTime, config.OverrideOptimismFjordTime, config.OverridePragueTime, tmpdir, logger) + chainConfig, genesis, genesisErr = core.WriteGenesisBlock(tx, genesisSpec, config.OverrideCancunTime, config.OverrideShanghaiTime, config.OverrideOptimismCanyonTime, config.OverrideOptimismEcotoneTime, config.OverrideOptimismFjordTime, config.OverrideOptimismGraniteTime, config.OverridePragueTime, tmpdir, logger) if _, ok := genesisErr.(*chain.ConfigCompatError); genesisErr != nil && !ok { return genesisErr } @@ -330,6 +330,9 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger if chainConfig.FjordTime == nil { log.Warn("Optimism FjordTime has not been set") } + if chainConfig.GraniteTime == nil { + log.Warn("Optimism GraniteTime has not been set") + } } setBorDefaultMinerGasPrice(chainConfig, config, logger) diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go index 7eb8cbeeba3..d11a9d737b2 100644 --- a/eth/ethconfig/config.go +++ b/eth/ethconfig/config.go @@ -257,6 +257,7 @@ type Config struct { OverrideOptimismCanyonTime *big.Int `toml:",omitempty"` OverrideOptimismEcotoneTime *big.Int `toml:",omitempty"` OverrideOptimismFjordTime *big.Int `toml:",omitempty"` + OverrideOptimismGraniteTime *big.Int `toml:",omitempty"` OverridePragueTime *big.Int `toml:",omitempty"` diff --git a/params/superchain.go b/params/superchain.go index 41bd6a32cea..eb3883c5c08 100644 --- a/params/superchain.go +++ b/params/superchain.go @@ -114,6 +114,7 @@ func LoadSuperChainConfig(opStackChainCfg *superchain.ChainConfig) *chain.Config CanyonTime: nil, EcotoneTime: nil, FjordTime: nil, + GraniteTime: nil, TerminalTotalDifficulty: common.Big0, TerminalTotalDifficultyPassed: true, Ethash: nil, @@ -136,6 +137,9 @@ func LoadSuperChainConfig(opStackChainCfg *superchain.ChainConfig) *chain.Config if chConfig.FjordTime != nil { out.FjordTime = new(big.Int).SetUint64(*chConfig.FjordTime) } + if chConfig.GraniteTime != nil { + out.GraniteTime = new(big.Int).SetUint64(*chConfig.GraniteTime) + } // special overrides for OP-Stack chains with pre-Regolith upgrade history switch opStackChainCfg.ChainID { diff --git a/turbo/cli/default_flags.go b/turbo/cli/default_flags.go index 20e5a5ff306..dd10732b204 100644 --- a/turbo/cli/default_flags.go +++ b/turbo/cli/default_flags.go @@ -165,6 +165,7 @@ var DefaultFlags = []cli.Flag{ &utils.OverrideOptimismCanyonFlag, &utils.OverrideOptimismEcotoneFlag, &utils.OverrideOptimismFjordFlag, + &utils.OverrideOptimismGraniteFlag, &utils.RollupSequencerHTTPFlag, &utils.RollupHistoricalRPCFlag, &utils.RollupHistoricalRPCTimeoutFlag, From 04a678fa97c63383669a322ebb76f0e5c4bfb7c0 Mon Sep 17 00:00:00 2001 From: Tei Im Date: Wed, 7 Aug 2024 17:59:47 -0600 Subject: [PATCH 3/4] Set Bn256PairingMaxInputSizeGranite --- core/vm/contracts.go | 41 +++++++++++++++++++++++++++++++++++++++ core/vm/contracts_test.go | 12 +++++++++++- core/vm/evm.go | 2 ++ params/protocol_params.go | 2 ++ 4 files changed, 56 insertions(+), 1 deletion(-) diff --git a/core/vm/contracts.go b/core/vm/contracts.go index ce38a949ee5..6ae99544348 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -131,6 +131,22 @@ var PrecompiledContractsFjord = map[libcommon.Address]PrecompiledContract{ libcommon.BytesToAddress([]byte{0x01, 0x00}): &p256Verify{}, } +// PrecompiledContractsGranite contains the default set of pre-compiled Ethereum +// contracts used in the Granite release. +var PrecompiledContractsGranite = map[libcommon.Address]PrecompiledContract{ + libcommon.BytesToAddress([]byte{1}): &ecrecover{}, + libcommon.BytesToAddress([]byte{2}): &sha256hash{}, + libcommon.BytesToAddress([]byte{3}): &ripemd160hash{}, + libcommon.BytesToAddress([]byte{4}): &dataCopy{}, + libcommon.BytesToAddress([]byte{5}): &bigModExp{eip2565: true}, + libcommon.BytesToAddress([]byte{6}): &bn256AddIstanbul{}, + libcommon.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{}, + libcommon.BytesToAddress([]byte{8}): &bn256PairingGranite{}, + libcommon.BytesToAddress([]byte{9}): &blake2F{}, + libcommon.BytesToAddress([]byte{0x0a}): &pointEvaluation{}, + libcommon.BytesToAddress([]byte{0x01, 0x00}): &p256Verify{}, +} + var PrecompiledContractsNapoli = map[libcommon.Address]PrecompiledContract{ libcommon.BytesToAddress([]byte{0x01}): &ecrecover{}, libcommon.BytesToAddress([]byte{0x02}): &sha256hash{}, @@ -167,6 +183,7 @@ var PrecompiledContractsPrague = map[libcommon.Address]PrecompiledContract{ } var ( + PrecompiledAddressesGranite []libcommon.Address PrecompiledAddressesFjord []libcommon.Address PrecompiledAddressesPrague []libcommon.Address PrecompiledAddressesNapoli []libcommon.Address @@ -196,6 +213,9 @@ func init() { for k := range PrecompiledContractsFjord { PrecompiledAddressesFjord = append(PrecompiledAddressesFjord, k) } + for k := range PrecompiledContractsGranite { + PrecompiledAddressesGranite = append(PrecompiledAddressesGranite, k) + } for k := range PrecompiledContractsNapoli { PrecompiledAddressesNapoli = append(PrecompiledAddressesNapoli, k) } @@ -207,6 +227,8 @@ func init() { // ActivePrecompiles returns the precompiles enabled with the current configuration. func ActivePrecompiles(rules *chain.Rules) []libcommon.Address { switch { + case rules.IsOptimismGranite: + return PrecompiledAddressesGranite case rules.IsOptimismFjord: return PrecompiledAddressesFjord case rules.IsPrague: @@ -595,6 +617,9 @@ var ( // errBadPairingInput is returned if the bn256 pairing input is invalid. errBadPairingInput = errors.New("bad elliptic curve pairing size") + + // errBadPairingInputSize is returned if the bn256 pairing input size is invalid. + errBadPairingInputSize = errors.New("bad elliptic curve pairing input size") ) // runBn256Pairing implements the Bn256Pairing precompile, referenced by both @@ -628,6 +653,22 @@ func runBn256Pairing(input []byte) ([]byte, error) { return false32Byte, nil } +// bn256PairingGranite implements a pairing pre-compile for the bn256 curve +// conforming to Granite consensus rules. +type bn256PairingGranite struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bn256PairingGranite) RequiredGas(input []byte) uint64 { + return new(bn256PairingIstanbul).RequiredGas(input) +} + +func (c *bn256PairingGranite) Run(input []byte) ([]byte, error) { + if len(input) > int(params.Bn256PairingMaxInputSizeGranite) { + return nil, errBadPairingInputSize + } + return runBn256Pairing(input) +} + // bn256PairingIstanbul implements a pairing pre-compile for the bn256 curve // conforming to Istanbul consensus rules. type bn256PairingIstanbul struct{} diff --git a/core/vm/contracts_test.go b/core/vm/contracts_test.go index 34d7f4e8098..773aac30c53 100644 --- a/core/vm/contracts_test.go +++ b/core/vm/contracts_test.go @@ -27,6 +27,7 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/common" + "github.com/ledgerwatch/erigon/params" ) // precompiledTest defines the input/output pairs for precompiled contract tests. @@ -56,7 +57,7 @@ var allPrecompiles = map[libcommon.Address]PrecompiledContract{ libcommon.BytesToAddress([]byte{0xf5}): &bigModExp{eip2565: true}, libcommon.BytesToAddress([]byte{6}): &bn256AddIstanbul{}, libcommon.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{}, - libcommon.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, + libcommon.BytesToAddress([]byte{8}): &bn256PairingGranite{}, libcommon.BytesToAddress([]byte{9}): &blake2F{}, libcommon.BytesToAddress([]byte{10}): &bls12381G1Add{}, libcommon.BytesToAddress([]byte{11}): &bls12381G1Mul{}, @@ -420,3 +421,12 @@ func TestPrecompiledP256Verify(t *testing.T) { // test case from OP Stack Fjord geth testJson("p256Verify2", "100", t) } + +func TestPrecompileBn256PairingTooLargeInput(t *testing.T) { + big := make([]byte, params.Bn256PairingMaxInputSizeGranite+1) + testPrecompiledFailure("08", precompiledFailureTest{ + Input: common.Bytes2Hex(big), + ExpectedError: "bad elliptic curve pairing input size", + Name: "bn256Pairing_input_too_big", + }, t) +} diff --git a/core/vm/evm.go b/core/vm/evm.go index 46fbb72bf40..14e54cd8af2 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -37,6 +37,8 @@ var emptyCodeHash = crypto.Keccak256Hash(nil) func (evm *EVM) precompile(addr libcommon.Address) (PrecompiledContract, bool) { var precompiles map[libcommon.Address]PrecompiledContract switch { + case evm.chainRules.IsOptimismGranite: + precompiles = PrecompiledContractsGranite case evm.chainRules.IsOptimismFjord: precompiles = PrecompiledContractsFjord case evm.chainRules.IsPrague: diff --git a/params/protocol_params.go b/params/protocol_params.go index 0da59d47f40..53adab6f126 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -161,6 +161,8 @@ const ( Bn256PairingPerPointGasByzantium uint64 = 80000 // Byzantium per-point price for an elliptic curve pairing check Bn256PairingPerPointGasIstanbul uint64 = 34000 // Per-point price for an elliptic curve pairing check + Bn256PairingMaxInputSizeGranite uint64 = 112687 // Maximum input size for an elliptic curve pairing check + Bls12381G1AddGas uint64 = 500 // Price for BLS12-381 elliptic curve G1 point addition Bls12381G1MulGas uint64 = 12000 // Price for BLS12-381 elliptic curve G1 point scalar multiplication Bls12381G2AddGas uint64 = 800 // Price for BLS12-381 elliptic curve G2 point addition From 417dee1a4aec6e0a496bf269ccc0e0305824f825 Mon Sep 17 00:00:00 2001 From: Tei Im Date: Wed, 7 Aug 2024 18:05:20 -0600 Subject: [PATCH 4/4] Update OPStackSupport version --- params/superchain.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/params/superchain.go b/params/superchain.go index eb3883c5c08..c0bff6b237d 100644 --- a/params/superchain.go +++ b/params/superchain.go @@ -36,7 +36,7 @@ var ( chaosnetRegolithTime = big.NewInt(1692156862) ) -var OPStackSupport = ProtocolVersionV0{Build: [8]byte{}, Major: 7, Minor: 0, Patch: 0, PreRelease: 0}.Encode() +var OPStackSupport = ProtocolVersionV0{Build: [8]byte{}, Major: 8, Minor: 0, Patch: 0, PreRelease: 1}.Encode() // OPStackChainConfigByName loads chain config corresponding to the chain name from superchain registry. // This implementation is based on optimism monorepo(https://github.com/ethereum-optimism/optimism/blob/op-node/v1.4.1/op-node/chaincfg/chains.go#L59)