diff --git a/aggoracle/chaingersender/evm.go b/aggoracle/chaingersender/evm.go index 30f12c9c..c004208d 100644 --- a/aggoracle/chaingersender/evm.go +++ b/aggoracle/chaingersender/evm.go @@ -6,7 +6,7 @@ import ( "math/big" "time" - "github.com/0xPolygon/cdk-contracts-tooling/contracts/manual/pessimisticglobalexitroot" + "github.com/0xPolygon/cdk-contracts-tooling/contracts/l2-sovereign-chain-paris/polygonzkevmglobalexitrootv2" cfgTypes "github.com/0xPolygon/cdk/config/types" "github.com/0xPolygon/cdk/log" "github.com/0xPolygon/zkevm-ethtx-manager/ethtxmanager" @@ -41,7 +41,7 @@ type EthTxManager interface { type EVMChainGERSender struct { logger *log.Logger - gerContract *pessimisticglobalexitroot.Pessimisticglobalexitroot + gerContract *polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2 gerAddr common.Address client EthClienter ethTxMan EthTxManager @@ -66,7 +66,7 @@ func NewEVMChainGERSender( gasOffset uint64, waitPeriodMonitorTx time.Duration, ) (*EVMChainGERSender, error) { - gerContract, err := pessimisticglobalexitroot.NewPessimisticglobalexitroot(l2GlobalExitRoot, l2Client) + gerContract, err := polygonzkevmglobalexitrootv2.NewPolygonzkevmglobalexitrootv2(l2GlobalExitRoot, l2Client) if err != nil { return nil, err } @@ -83,24 +83,25 @@ func NewEVMChainGERSender( } func (c *EVMChainGERSender) IsGERInjected(ger common.Hash) (bool, error) { - timestamp, err := c.gerContract.GlobalExitRootMap(&bind.CallOpts{Pending: false}, ger) + blockHashBigInt, err := c.gerContract.GlobalExitRootMap(&bind.CallOpts{Pending: false}, ger) if err != nil { return false, fmt.Errorf("error calling gerContract.GlobalExitRootMap: %w", err) } - return timestamp.Cmp(common.Big0) != 0, nil + return common.BigToHash(blockHashBigInt) != common.Hash{}, nil } func (c *EVMChainGERSender) InjectGER(ctx context.Context, ger common.Hash) error { ticker := time.NewTicker(c.waitPeriodMonitorTx) defer ticker.Stop() - gerABI, err := pessimisticglobalexitroot.PessimisticglobalexitrootMetaData.GetAbi() + gerABI, err := polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2MetaData.GetAbi() if err != nil { return err } - updateGERTxInput, err := gerABI.Pack("updateGlobalExitRoot", ger) + // TODO: @Stefan-Ethernal should we invoke the PolygonZkEVMBridgeV2.updateGlobalExitRoot? + updateGERTxInput, err := gerABI.Pack("updateExitRoot", ger) if err != nil { return err } diff --git a/aggoracle/e2e_test.go b/aggoracle/e2e_test.go index 090bd57c..c5cd3c8a 100644 --- a/aggoracle/e2e_test.go +++ b/aggoracle/e2e_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - gerContractL1 "github.com/0xPolygon/cdk-contracts-tooling/contracts/manual/globalexitrootnopush0" + gerContractL1 "github.com/0xPolygon/cdk-contracts-tooling/contracts/l2-sovereign-chain-paris/polygonzkevmglobalexitrootv2" "github.com/0xPolygon/cdk/aggoracle" "github.com/0xPolygon/cdk/test/helpers" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -22,7 +22,7 @@ func TestEVM(t *testing.T) { func runTest( t *testing.T, - gerL1Contract *gerContractL1.Globalexitrootnopush0, + gerL1Contract *gerContractL1.Polygonzkevmglobalexitrootv2, sender aggoracle.ChainSender, l1Client *simulated.Backend, authL1 *bind.TransactOpts, @@ -30,6 +30,8 @@ func runTest( t.Helper() for i := 0; i < 10; i++ { + // TODO: @Stefan-Ethernal this should be invoked either from rollup manager or bridge + // https://github.com/0xPolygonHermez/zkevm-contracts/blob/2b279bbe712e3d396dcafad4be63b663dd647476/contracts/v2/PolygonZkEVMGlobalExitRootV2.sol#L85-L95 _, err := gerL1Contract.UpdateExitRoot(authL1, common.HexToHash(strconv.Itoa(i))) require.NoError(t, err) l1Client.Commit() diff --git a/go.mod b/go.mod index 367f163a..6b048247 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/0xPolygon/cdk go 1.22.4 require ( - github.com/0xPolygon/cdk-contracts-tooling v0.0.0-20240826154954-f6182d2b17a2 + github.com/0xPolygon/cdk-contracts-tooling v0.0.0-20241211191239-915ad3f37c3b github.com/0xPolygon/cdk-data-availability v0.0.10 github.com/0xPolygon/cdk-rpc v0.0.0-20241004114257-6c3cb6eebfb6 github.com/0xPolygon/zkevm-ethtx-manager v0.2.1 diff --git a/go.sum b/go.sum index ccf812c4..29fb5733 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/0xPolygon/cdk-contracts-tooling v0.0.0-20240826154954-f6182d2b17a2 h1:N5qvWG4amhUt6d1F4Kf8AdJZs4z7/xZfE3v/Im2afNM= github.com/0xPolygon/cdk-contracts-tooling v0.0.0-20240826154954-f6182d2b17a2/go.mod h1:mFlcEjsm2YBBsu8atHJ3zyVnwM+Z/fMXpVmIJge+WVU= +github.com/0xPolygon/cdk-contracts-tooling v0.0.0-20241211191239-915ad3f37c3b h1:IvCbb1Pl6W0Ty7GFyq71O0KGOtSg82nqn5zi6UVGivk= +github.com/0xPolygon/cdk-contracts-tooling v0.0.0-20241211191239-915ad3f37c3b/go.mod h1:mFlcEjsm2YBBsu8atHJ3zyVnwM+Z/fMXpVmIJge+WVU= github.com/0xPolygon/cdk-data-availability v0.0.10 h1:pVcke2I7GuPH7JeRLKokEOHffPMwEHmJd9yDXHqh9B4= github.com/0xPolygon/cdk-data-availability v0.0.10/go.mod h1:nn5RmnkzOiugAxizSbaYnA+em79YLLLoR25i0UlKc5Q= github.com/0xPolygon/cdk-rpc v0.0.0-20241004114257-6c3cb6eebfb6 h1:FXL/rcO7/GtZ3kRFw+C7J6vmGnl8gcazg+Gh/NVmnas= diff --git a/lastgersync/evmdownloader.go b/lastgersync/evmdownloader.go index bf9a236f..7a695faa 100644 --- a/lastgersync/evmdownloader.go +++ b/lastgersync/evmdownloader.go @@ -7,7 +7,7 @@ import ( "math/big" "time" - "github.com/0xPolygon/cdk-contracts-tooling/contracts/manual/pessimisticglobalexitroot" + "github.com/0xPolygon/cdk-contracts-tooling/contracts/l2-sovereign-chain-paris/polygonzkevmglobalexitrootv2" "github.com/0xPolygon/cdk/db" "github.com/0xPolygon/cdk/l1infotreesync" "github.com/0xPolygon/cdk/log" @@ -27,7 +27,7 @@ type EthClienter interface { type downloader struct { *sync.EVMDownloaderImplementation l2Client EthClienter - gerContract *pessimisticglobalexitroot.Pessimisticglobalexitroot + gerContract *polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2 l1InfoTreesync *l1infotreesync.L1InfoTreeSync processor *processor rh *sync.RetryHandler @@ -42,7 +42,7 @@ func newDownloader( blockFinality *big.Int, waitForNewBlocksPeriod time.Duration, ) (*downloader, error) { - gerContract, err := pessimisticglobalexitroot.NewPessimisticglobalexitroot(globalExitRootL2, l2Client) + gerContract, err := polygonzkevmglobalexitrootv2.NewPolygonzkevmglobalexitrootv2(globalExitRootL2, l2Client) if err != nil { return nil, err } diff --git a/test/helpers/e2e.go b/test/helpers/e2e.go index 6b3b0c86..d77b6e26 100644 --- a/test/helpers/e2e.go +++ b/test/helpers/e2e.go @@ -6,9 +6,8 @@ import ( "testing" "time" - "github.com/0xPolygon/cdk-contracts-tooling/contracts/elderberry-paris/polygonzkevmbridgev2" - gerContractL1 "github.com/0xPolygon/cdk-contracts-tooling/contracts/manual/globalexitrootnopush0" - gerContractEVMChain "github.com/0xPolygon/cdk-contracts-tooling/contracts/manual/pessimisticglobalexitrootnopush0" + "github.com/0xPolygon/cdk-contracts-tooling/contracts/l2-sovereign-chain-paris/polygonzkevmbridgev2" + "github.com/0xPolygon/cdk-contracts-tooling/contracts/l2-sovereign-chain-paris/polygonzkevmglobalexitrootv2" "github.com/0xPolygon/cdk/aggoracle" "github.com/0xPolygon/cdk/aggoracle/chaingersender" "github.com/0xPolygon/cdk/bridgesync" @@ -24,7 +23,7 @@ import ( ) const ( - NetworkIDL2 = uint32(1) + rollupID = uint32(1) syncBlockChunkSize = 10 retries = 3 periodRetry = time.Millisecond * 100 @@ -34,9 +33,9 @@ type AggoracleWithEVMChainEnv struct { L1Client *simulated.Backend L2Client *simulated.Backend L1InfoTreeSync *l1infotreesync.L1InfoTreeSync - GERL1Contract *gerContractL1.Globalexitrootnopush0 + GERL1Contract *polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2 GERL1Addr common.Address - GERL2Contract *gerContractEVMChain.Pessimisticglobalexitrootnopush0 + GERL2Contract *polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2 GERL2Addr common.Address AuthL1 *bind.TransactOpts AuthL2 *bind.TransactOpts @@ -101,7 +100,7 @@ func NewE2EEnvWithEVML2(t *testing.T) *AggoracleWithEVMChainEnv { BridgeL2Addr: bridgeL2Addr, BridgeL2Sync: bridgeL2Sync, - NetworkIDL2: NetworkIDL2, + NetworkIDL2: rollupID, EthTxManMockL2: ethTxManMockL2, } } @@ -109,7 +108,7 @@ func NewE2EEnvWithEVML2(t *testing.T) *AggoracleWithEVMChainEnv { func CommonSetup(t *testing.T) ( *simulated.Backend, *l1infotreesync.L1InfoTreeSync, - *gerContractL1.Globalexitrootnopush0, + *polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2, common.Address, *polygonzkevmbridgev2.Polygonzkevmbridgev2, common.Address, @@ -172,7 +171,7 @@ func CommonSetup(t *testing.T) ( func L2SetupEVM(t *testing.T) ( aggoracle.ChainSender, *simulated.Backend, - *gerContractEVMChain.Pessimisticglobalexitrootnopush0, + *polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2, common.Address, *polygonzkevmbridgev2.Polygonzkevmbridgev2, common.Address, @@ -227,7 +226,7 @@ func newSimulatedL1(t *testing.T) ( *simulated.Backend, *bind.TransactOpts, common.Address, - *gerContractL1.Globalexitrootnopush0, + *polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2, common.Address, *polygonzkevmbridgev2.Polygonzkevmbridgev2, ) { @@ -237,7 +236,8 @@ func newSimulatedL1(t *testing.T) ( precalculatedAddr := crypto.CreateAddress(setup.DeployerAuth.From, 2) //nolint:mnd - gerAddr, _, gerContract, err := gerContractL1.DeployGlobalexitrootnopush0(setup.DeployerAuth, client.Client(), + gerAddr, _, gerContract, err := polygonzkevmglobalexitrootv2.DeployPolygonzkevmglobalexitrootv2( + setup.DeployerAuth, client.Client(), setup.UserAuth.From, setup.BridgeProxyAddr) require.NoError(t, err) client.Commit() @@ -251,30 +251,31 @@ func newSimulatedEVMAggSovereignChain(t *testing.T) ( *simulated.Backend, *bind.TransactOpts, common.Address, - *gerContractEVMChain.Pessimisticglobalexitrootnopush0, + *polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2, common.Address, *polygonzkevmbridgev2.Polygonzkevmbridgev2, ) { t.Helper() - client, setup := SimulatedBackend(t, nil, NetworkIDL2) + client, setup := SimulatedBackend(t, nil, rollupID) - precalculatedAddr := crypto.CreateAddress(setup.DeployerAuth.From, 2) //nolint:mnd - - gerAddr, _, gerContract, err := gerContractEVMChain.DeployPessimisticglobalexitrootnopush0( - setup.DeployerAuth, client.Client(), setup.UserAuth.From, - ) + // TODO: @Stefan-Ethernal deploy the GlobalExitRootManagerL2SovereignChain here instead? + // https://github.com/0xPolygonHermez/zkevm-contracts/blob/feature/audit-remediations/contracts/v2/sovereignChains/GlobalExitRootManagerL2SovereignChain.sol + gerAddr, _, gerContract, err := polygonzkevmglobalexitrootv2.DeployPolygonzkevmglobalexitrootv2( + setup.DeployerAuth, client.Client(), setup.UserAuth.From, setup.BridgeProxyAddr) require.NoError(t, err) client.Commit() - globalExitRootSetterRole := common.HexToHash("0x7b95520991dfda409891be0afa2635b63540f92ee996fda0bf695a166e5c5176") - _, err = gerContract.GrantRole(setup.DeployerAuth, globalExitRootSetterRole, setup.UserAuth.From) - require.NoError(t, err) - client.Commit() + // TODO: @Stefan-Ethernal Remove? + // globalExitRootSetterRole := common.HexToHash("0x7b95520991dfda409891be0afa2635b63540f92ee996fda0bf695a166e5c5176") + // _, err = gerContract.GrantRole(setup.DeployerAuth, globalExitRootSetterRole, setup.UserAuth.From) + // require.NoError(t, err) + // client.Commit() - hasRole, _ := gerContract.HasRole(&bind.CallOpts{Pending: false}, globalExitRootSetterRole, setup.UserAuth.From) - require.True(t, hasRole) - require.Equal(t, precalculatedAddr, gerAddr) + // precalculatedAddr := crypto.CreateAddress(setup.DeployerAuth.From, 2) //nolint:mnd + // hasRole, _ := gerContract.HasRole(&bind.CallOpts{Pending: false}, globalExitRootSetterRole, setup.UserAuth.From) + // require.True(t, hasRole) + // require.Equal(t, precalculatedAddr, gerAddr) return client, setup.UserAuth, gerAddr, gerContract, setup.BridgeProxyAddr, setup.BridgeProxyContract } diff --git a/test/helpers/simulated.go b/test/helpers/simulated.go index 08f01394..31d609d1 100644 --- a/test/helpers/simulated.go +++ b/test/helpers/simulated.go @@ -4,7 +4,7 @@ import ( "math/big" "testing" - "github.com/0xPolygon/cdk-contracts-tooling/contracts/elderberry-paris/polygonzkevmbridgev2" + "github.com/0xPolygon/cdk-contracts-tooling/contracts/l2-sovereign-chain-paris/polygonzkevmbridgev2" "github.com/0xPolygon/cdk/test/contracts/transparentupgradableproxy" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -35,8 +35,6 @@ func (tc TestClient) Client() *rpc.Client { type SimulatedBackendSetup struct { UserAuth *bind.TransactOpts DeployerAuth *bind.TransactOpts - BridgeAddr common.Address - BridgeContract *polygonzkevmbridgev2.Polygonzkevmbridgev2 BridgeProxyAddr common.Address BridgeProxyContract *polygonzkevmbridgev2.Polygonzkevmbridgev2 } @@ -45,7 +43,7 @@ type SimulatedBackendSetup struct { func SimulatedBackend( t *testing.T, balances map[common.Address]types.Account, - ebZkevmBridgeNetwork uint32, + rollupID uint32, ) (*simulated.Backend, *SimulatedBackendSetup) { t.Helper() @@ -81,13 +79,16 @@ func SimulatedBackend( // MUST BE DEPLOYED FIRST // Deploy zkevm bridge contract - bridgeAddr, _, bridgeContract, err := polygonzkevmbridgev2.DeployPolygonzkevmbridgev2(deployerAuth, client.Client()) + bridgeAddr, _, _, err := polygonzkevmbridgev2.DeployPolygonzkevmbridgev2(deployerAuth, client.Client()) require.NoError(t, err) client.Commit() // Create proxy contract for the bridge - var bridgeProxyAddr common.Address - var bridgeProxyContract *polygonzkevmbridgev2.Polygonzkevmbridgev2 + var ( + bridgeProxyAddr common.Address + bridgeProxyContract *polygonzkevmbridgev2.Polygonzkevmbridgev2 + ) + { precalculatedAddr := crypto.CreateAddress(deployerAuth.From, 2) //nolint:mnd @@ -96,7 +97,7 @@ func SimulatedBackend( require.NotNil(t, bridgeABI) dataCallProxy, err := bridgeABI.Pack("initialize", - ebZkevmBridgeNetwork, + rollupID, common.Address{}, // gasTokenAddressMainnet uint32(0), // gasTokenNetworkMainnet precalculatedAddr, @@ -127,8 +128,6 @@ func SimulatedBackend( return client, &SimulatedBackendSetup{ UserAuth: userAuth, DeployerAuth: deployerAuth, - BridgeAddr: bridgeAddr, - BridgeContract: bridgeContract, BridgeProxyAddr: bridgeProxyAddr, BridgeProxyContract: bridgeProxyContract, }