Skip to content

Commit

Permalink
integrate new contracts for the aggoracle (wip)
Browse files Browse the repository at this point in the history
  • Loading branch information
Stefan-Ethernal committed Dec 12, 2024
1 parent aab06f8 commit 973741e
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 48 deletions.
15 changes: 8 additions & 7 deletions aggoracle/chaingersender/evm.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand All @@ -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
}
Expand All @@ -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
}
Expand Down
6 changes: 4 additions & 2 deletions aggoracle/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -22,14 +22,16 @@ 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,
) {
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()
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -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=
Expand Down
6 changes: 3 additions & 3 deletions lastgersync/evmdownloader.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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
Expand All @@ -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
}
Expand Down
51 changes: 26 additions & 25 deletions test/helpers/e2e.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -24,7 +23,7 @@ import (
)

const (
NetworkIDL2 = uint32(1)
rollupID = uint32(1)
syncBlockChunkSize = 10
retries = 3
periodRetry = time.Millisecond * 100
Expand All @@ -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
Expand Down Expand Up @@ -101,15 +100,15 @@ func NewE2EEnvWithEVML2(t *testing.T) *AggoracleWithEVMChainEnv {
BridgeL2Addr: bridgeL2Addr,
BridgeL2Sync: bridgeL2Sync,

NetworkIDL2: NetworkIDL2,
NetworkIDL2: rollupID,
EthTxManMockL2: ethTxManMockL2,
}
}

func CommonSetup(t *testing.T) (
*simulated.Backend,
*l1infotreesync.L1InfoTreeSync,
*gerContractL1.Globalexitrootnopush0,
*polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2,
common.Address,
*polygonzkevmbridgev2.Polygonzkevmbridgev2,
common.Address,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -227,7 +226,7 @@ func newSimulatedL1(t *testing.T) (
*simulated.Backend,
*bind.TransactOpts,
common.Address,
*gerContractL1.Globalexitrootnopush0,
*polygonzkevmglobalexitrootv2.Polygonzkevmglobalexitrootv2,
common.Address,
*polygonzkevmbridgev2.Polygonzkevmbridgev2,
) {
Expand All @@ -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()
Expand All @@ -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
}
19 changes: 9 additions & 10 deletions test/helpers/simulated.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
}
Expand All @@ -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()

Expand Down Expand Up @@ -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

Expand All @@ -96,7 +97,7 @@ func SimulatedBackend(
require.NotNil(t, bridgeABI)

dataCallProxy, err := bridgeABI.Pack("initialize",
ebZkevmBridgeNetwork,
rollupID,
common.Address{}, // gasTokenAddressMainnet
uint32(0), // gasTokenNetworkMainnet
precalculatedAddr,
Expand Down Expand Up @@ -127,8 +128,6 @@ func SimulatedBackend(
return client, &SimulatedBackendSetup{
UserAuth: userAuth,
DeployerAuth: deployerAuth,
BridgeAddr: bridgeAddr,
BridgeContract: bridgeContract,
BridgeProxyAddr: bridgeProxyAddr,
BridgeProxyContract: bridgeProxyContract,
}
Expand Down

0 comments on commit 973741e

Please sign in to comment.