diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7057d6fc0..f81000f2e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -62,6 +62,8 @@ jobs: - name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly-f625d0fa7c51e65b4bf1e8f7931cd1c6e2e285e9 - name: Build run: pnpm build diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e7a26b9c6..14f9daeed 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -49,6 +49,8 @@ jobs: - name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly-f625d0fa7c51e65b4bf1e8f7931cd1c6e2e285e9 - name: Build run: pnpm build diff --git a/go.mod b/go.mod index faf24a55f..a7705de82 100644 --- a/go.mod +++ b/go.mod @@ -207,4 +207,4 @@ require ( replace github.com/ethereum-optimism/optimism v1.7.2 => ./ -replace github.com/ethereum/go-ethereum v1.13.8 => github.com/kroma-network/go-ethereum v1.101308.3-0.20240404110507-91d2527c70f5 +replace github.com/ethereum/go-ethereum v1.13.8 => github.com/kroma-network/go-ethereum v0.5.0-rc.4 diff --git a/go.sum b/go.sum index f848d438d..4b22efd94 100644 --- a/go.sum +++ b/go.sum @@ -395,8 +395,8 @@ github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kroma-network/go-ethereum v1.101308.3-0.20240404110507-91d2527c70f5 h1:syp9hMBoqHbU6GssANAa4hVe6Z9tILCbwyWLTHmjVog= -github.com/kroma-network/go-ethereum v1.101308.3-0.20240404110507-91d2527c70f5/go.mod h1:SEk7AN/4FrDNJZg2pE1ja6xtPxLIJjfsbVVTweOafyk= +github.com/kroma-network/go-ethereum v0.5.0-rc.4 h1:2WDcv1z7ln5XptUrzPU6mwAp3TBZZ1Z/G2K9zK/EEfU= +github.com/kroma-network/go-ethereum v0.5.0-rc.4/go.mod h1:SEk7AN/4FrDNJZg2pE1ja6xtPxLIJjfsbVVTweOafyk= github.com/kroma-network/zktrie v0.5.1-0.20230420142222-950ce7a8ce84 h1:VpLCQx+tFV6Nk0hbs3Noyxma/q9wIDdyacKpGQWUMI8= github.com/kroma-network/zktrie v0.5.1-0.20230420142222-950ce7a8ce84/go.mod h1:w54LrYo5rJEV503BgMPRNONsLTOEQv5V87q+uYaw9sM= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= diff --git a/op-chain-ops/cmd/check-ecotone/main.go b/op-chain-ops/cmd/check-ecotone/main.go index 221360d34..8dbab30e2 100644 --- a/op-chain-ops/cmd/check-ecotone/main.go +++ b/op-chain-ops/cmd/check-ecotone/main.go @@ -26,8 +26,6 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" op_service "github.com/ethereum-optimism/optimism/op-service" "github.com/ethereum-optimism/optimism/op-service/cliapp" @@ -39,6 +37,8 @@ import ( "github.com/ethereum-optimism/optimism/op-service/retry" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/txmgr" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) func main() { @@ -59,10 +59,13 @@ func main() { makeCommand("eip-4844-blobhash", checkBlobDataHash), makeCommand("eip-4844-precompile", check4844Precompile), makeCommand("eip-5656-mcopy", checkMcopy), + /* [Kroma: START] makeCommand("eip-6780-selfdestruct", checkSelfdestruct), + [Kroma: END] */ makeCommand("eip-4844-blobtx", checkBlobTxDenial), makeCommand("eip-4788-root", checkBeaconBlockRoot), makeCommand("eip-4788-contract", check4788Contract), + makeCommand("multicall3-contract", checkMulticall3Contract), makeCommand("all", checkAllCancun), }, Flags: makeFlags(), @@ -372,6 +375,26 @@ func check4788Contract(ctx context.Context, env *actionEnv) error { return nil } +// [Kroma: START] +func checkMulticall3Contract(ctx context.Context, env *actionEnv) error { + multicall3Address := common.HexToAddress("0xcA11bde05977b3631167028862bE2a173976CA11") + multicall3Code := common.Hex2Bytes("6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c0033") + multicall3CodeHash := crypto.Keccak256Hash(multicall3Code) + + multicall3Contract, err := env.l2.CodeAt(ctx, multicall3Address, nil) + if err != nil { + return fmt.Errorf("failed to retrieve multicall3 contract code: %w", err) + } + codeHash := crypto.Keccak256Hash(multicall3Contract) + if codeHash != multicall3CodeHash { + return fmt.Errorf("unexpected multiucall3 contract code: %v", err) + } + env.log.Info("multicall3 contract test: success") + return nil +} + +// [Kroma: END] + func checkMcopy(ctx context.Context, env *actionEnv) error { input := conditionalCode([]byte{ // push info & mstore it @@ -637,9 +660,11 @@ func checkAllCancun(ctx context.Context, env *actionEnv) error { if err := checkMcopy(ctx, env); err != nil { return fmt.Errorf("eip-5656 mcopy error: %w", err) } + /* [Kroma: START] if err := checkSelfdestruct(ctx, env); err != nil { return fmt.Errorf("eip-6780 selfdestruct error: %w", err) } + [Kroma: END] */ if err := checkBlobTxDenial(ctx, env); err != nil { return fmt.Errorf("eip-4844 blob-tx denial error: %w", err) } @@ -649,6 +674,9 @@ func checkAllCancun(ctx context.Context, env *actionEnv) error { if err := check4788Contract(ctx, env); err != nil { return fmt.Errorf("eip-4788 contract check error: %w", err) } + if err := checkMulticall3Contract(ctx, env); err != nil { + return fmt.Errorf("multicall3 contract check error: %w", err) + } env.log.Info("completed Cancun feature tests successfully") return nil } diff --git a/op-e2e/e2eutils/setup.go b/op-e2e/e2eutils/setup.go index f88e7f6f7..8c5845d2c 100644 --- a/op-e2e/e2eutils/setup.go +++ b/op-e2e/e2eutils/setup.go @@ -65,8 +65,8 @@ func MakeDeployParams(t require.TestingT, tp *TestParams) *DeployParams { deployConfig.UsePlasma = tp.UsePlasma // [Kroma: START] //genesisTimeOffset := hexutil.Uint64(0) - //deployConfig.L2GenesisDeltaTimeOffset = &genesisTimeOffset - //deployConfig.L2GenesisEcotoneTimeOffset = &genesisTimeOffset + deployConfig.L2GenesisDeltaTimeOffset = nil + deployConfig.L2GenesisEcotoneTimeOffset = nil deployConfig.ValidatorPoolRoundDuration = deployConfig.L2OutputOracleSubmissionInterval * deployConfig.L2BlockTime / 2 // [Kroma: END] ApplyDeployConfigForks(deployConfig) diff --git a/op-e2e/setup.go b/op-e2e/setup.go index ab23123b7..987960a8f 100644 --- a/op-e2e/setup.go +++ b/op-e2e/setup.go @@ -101,6 +101,8 @@ func DefaultSystemConfig(t *testing.T) SystemConfig { deployConfig.L1GenesisBlockTimestamp = hexutil.Uint64(time.Now().Unix()) e2eutils.ApplyDeployConfigForks(deployConfig) // [Kroma: START] + deployConfig.L2GenesisDeltaTimeOffset = nil + deployConfig.L2GenesisEcotoneTimeOffset = nil deployConfig.ValidatorPoolRoundDuration = deployConfig.L2OutputOracleSubmissionInterval * deployConfig.L2BlockTime / 2 // [Kroma: END] require.NoError(t, deployConfig.Check(), "Deploy config is invalid, do you need to run make devnet-allocs?") diff --git a/ops-devnet/docker-compose.yml b/ops-devnet/docker-compose.yml index 8f39b98ac..5c49d1208 100644 --- a/ops-devnet/docker-compose.yml +++ b/ops-devnet/docker-compose.yml @@ -107,7 +107,7 @@ services: l2: pid: host # allow debugging - image: kromanetwork/geth:upstream + image: kromanetwork/geth:v0.5.0-rc.4 ports: - "9545:8545" - "9546:8546" @@ -255,6 +255,8 @@ services: BATCHER_L2_ETH_RPC: http://l2:8545 BATCHER_ROLLUP_RPC: http://kroma-node:8545 BATCHER_MAX_L1_TX_SIZE_BYTES: 120000 + BATCHER_MAX_CHANNEL_DURATION: 20 + BATCHER_DATA_AVAILABILITY_TYPE: blobs BATCHER_BATCH_TYPE: 1 # 0 for SingularBatch and 1 for SpanBatch BATCHER_TARGET_NUM_FRAMES: 1 BATCHER_APPROX_COMPR_RATIO: 1.0 diff --git a/packages/contracts/deploy-config/devnetL1-template.json b/packages/contracts/deploy-config/devnetL1-template.json index cb0b219d9..7bb41b3ef 100644 --- a/packages/contracts/deploy-config/devnetL1-template.json +++ b/packages/contracts/deploy-config/devnetL1-template.json @@ -34,8 +34,8 @@ "l1GenesisBlockTimestamp": "0x64c811bf", "l2GenesisRegolithTimeOffset": "0x0", "l2GenesisCanyonTimeOffset": "0x0", - "l2GenesisDeltaTimeOffset": null, - "l2GenesisEcotoneTimeOffset": null, + "l2GenesisDeltaTimeOffset": "0x0", + "l2GenesisEcotoneTimeOffset": "0x2", "systemConfigStartBlock": 0, "validatorRewardScalar": 5000,