github.com/leovct/zkevm-bridge-service@v0.4.4/test/e2e/edge_test.go (about) 1 //go:build edge 2 // +build edge 3 4 package e2e 5 6 import ( 7 "context" 8 "math/big" 9 "testing" 10 "time" 11 12 "github.com/0xPolygonHermez/zkevm-bridge-service/bridgectrl" 13 "github.com/0xPolygonHermez/zkevm-bridge-service/db" 14 "github.com/0xPolygonHermez/zkevm-bridge-service/server" 15 "github.com/0xPolygonHermez/zkevm-bridge-service/test/operations" 16 "github.com/ethereum/go-ethereum/common" 17 "github.com/stretchr/testify/require" 18 ) 19 20 func depositFromL1(ctx context.Context, opsman *operations.Manager, t *testing.T) { 21 amount := new(big.Int).SetUint64(250000000000000000) 22 tokenAddr := common.Address{} // This means is eth 23 destAddr := common.HexToAddress("0xc949254d682d8c9ad5682521675b8f43b102aec4") 24 var destNetwork uint32 = 1 25 // L1 Deposit 26 err := opsman.SendL1Deposit(ctx, tokenAddr, amount, destNetwork, &destAddr) 27 require.NoError(t, err) 28 29 deposits, err := opsman.GetBridgeInfoByDestAddr(ctx, &destAddr) 30 require.NoError(t, err) 31 // Check a L2 claim tx 32 err = opsman.CheckL2Claim(ctx, uint(deposits[0].DestNet), uint(deposits[0].DepositCnt)) 33 require.NoError(t, err) 34 } 35 36 func depositFromL2(ctx context.Context, opsman *operations.Manager, t *testing.T) { 37 // Send L2 Deposit to withdraw the some funds 38 var destNetwork uint32 = 0 39 amount := new(big.Int).SetUint64(100000000000000000) 40 tokenAddr := common.Address{} // This means is eth 41 destAddr := common.HexToAddress("0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC") 42 err := opsman.SendL2Deposit(ctx, tokenAddr, amount, destNetwork, &destAddr) 43 require.NoError(t, err) 44 45 // Get Bridge Info By DestAddr 46 deposits, err := opsman.GetBridgeInfoByDestAddr(ctx, &destAddr) 47 require.NoError(t, err) 48 // Check globalExitRoot 49 // Get the claim data 50 smtProof, smtRollupProof, globalExitRoot, err := opsman.GetClaimData(ctx, uint(deposits[0].NetworkId), uint(deposits[0].DepositCnt)) 51 require.NoError(t, err) 52 // Claim funds in L1 53 err = opsman.SendL1Claim(ctx, deposits[0], smtProof, smtRollupProof, globalExitRoot) 54 require.NoError(t, err) 55 } 56 57 func TestEdgeCase(t *testing.T) { 58 if testing.Short() { 59 t.Skip() 60 } 61 62 ctx := context.Background() 63 opsCfg := &operations.Config{ 64 Storage: db.Config{ 65 Database: "postgres", 66 Name: "test_db", 67 User: "test_user", 68 Password: "test_password", 69 Host: "localhost", 70 Port: "5435", 71 MaxConns: 10, 72 }, 73 BT: bridgectrl.Config{ 74 Store: "postgres", 75 Height: uint8(32), 76 }, 77 BS: server.Config{ 78 GRPCPort: "9090", 79 HTTPPort: "8080", 80 CacheSize: 100000, 81 DefaultPageLimit: 25, 82 MaxPageLimit: 100, 83 BridgeVersion: "v1", 84 DB: db.Config{ 85 Database: "postgres", 86 Name: "test_db", 87 User: "test_user", 88 Password: "test_password", 89 Host: "localhost", 90 Port: "5435", 91 MaxConns: 10, 92 }, 93 }, 94 } 95 96 opsman, err := operations.NewManager(ctx, opsCfg) 97 require.NoError(t, err) 98 require.NoError(t, opsman.StartBridge()) 99 const st time.Duration = 20 // wait until the syncing is finished 100 time.Sleep(st * time.Second) 101 102 t.Run("Test a case of restart with reorg.", func(t *testing.T) { 103 depositFromL1(ctx, opsman, t) 104 depositFromL2(ctx, opsman, t) 105 // Stop the bridge service. 106 require.NoError(t, operations.StopBridge()) 107 // Modify the L1 blocks for L1 reorg 108 require.NoError(t, opsman.UpdateBlocksForTesting(ctx, 0, 1)) 109 // Restart the bridge service. 110 require.NoError(t, opsman.StartBridge()) 111 time.Sleep(st * time.Second) 112 113 depositFromL2(ctx, opsman, t) 114 depositFromL1(ctx, opsman, t) 115 }) 116 }