|
| 1 | +package e2etests |
| 2 | + |
| 3 | +import ( |
| 4 | + "github.com/ethereum/go-ethereum/accounts/abi/bind" |
| 5 | + "github.com/stretchr/testify/require" |
| 6 | + |
| 7 | + "github.com/zeta-chain/zetacore/e2e/runner" |
| 8 | + "github.com/zeta-chain/zetacore/e2e/txserver" |
| 9 | + "github.com/zeta-chain/zetacore/e2e/utils" |
| 10 | + crosschaintypes "github.com/zeta-chain/zetacore/x/crosschain/types" |
| 11 | +) |
| 12 | + |
| 13 | +// TestPauseERC20Custody tests the pausing and unpausing of ERC20 custody contracts on the EVM chain |
| 14 | +func TestPauseERC20Custody(r *runner.E2ERunner, _ []string) { |
| 15 | + // get EVM chain ID |
| 16 | + chainID, err := r.EVMClient.ChainID(r.Ctx) |
| 17 | + require.NoError(r, err) |
| 18 | + |
| 19 | + // check ERC20 custody contract is not paused |
| 20 | + paused, err := r.ERC20Custody.Paused(&bind.CallOpts{}) |
| 21 | + require.NoError(r, err) |
| 22 | + require.False(r, paused) |
| 23 | + |
| 24 | + // Part 1: Pause ERC20 custody contract |
| 25 | + |
| 26 | + // send command for pausing ERC20 custody contract |
| 27 | + msg := crosschaintypes.NewMsgUpdateERC20CustodyPauseStatus( |
| 28 | + r.ZetaTxServer.MustGetAccountAddressFromName(utils.AdminPolicyName), |
| 29 | + chainID.Int64(), |
| 30 | + true, |
| 31 | + ) |
| 32 | + res, err := r.ZetaTxServer.BroadcastTx(utils.AdminPolicyName, msg) |
| 33 | + require.NoError(r, err) |
| 34 | + |
| 35 | + // fetch cctx index from tx response |
| 36 | + cctxIndex, err := txserver.FetchAttributeFromTxResponse(res, "cctx_index") |
| 37 | + require.NoError(r, err) |
| 38 | + |
| 39 | + cctxRes, err := r.CctxClient.Cctx(r.Ctx, &crosschaintypes.QueryGetCctxRequest{Index: cctxIndex}) |
| 40 | + require.NoError(r, err) |
| 41 | + |
| 42 | + cctx := cctxRes.CrossChainTx |
| 43 | + r.Logger.CCTX(*cctx, "pausing") |
| 44 | + |
| 45 | + // wait for the cctx to be mined |
| 46 | + r.WaitForMinedCCTXFromIndex(cctxIndex) |
| 47 | + |
| 48 | + // check ERC20 custody contract is paused |
| 49 | + paused, err = r.ERC20Custody.Paused(&bind.CallOpts{}) |
| 50 | + require.NoError(r, err) |
| 51 | + require.True(r, paused) |
| 52 | + |
| 53 | + // Part 2: Unpause ERC20 custody contract |
| 54 | + |
| 55 | + // send command for unpausing ERC20 custody contract |
| 56 | + msg = crosschaintypes.NewMsgUpdateERC20CustodyPauseStatus( |
| 57 | + r.ZetaTxServer.MustGetAccountAddressFromName(utils.AdminPolicyName), |
| 58 | + chainID.Int64(), |
| 59 | + false, |
| 60 | + ) |
| 61 | + res, err = r.ZetaTxServer.BroadcastTx(utils.AdminPolicyName, msg) |
| 62 | + require.NoError(r, err) |
| 63 | + |
| 64 | + // fetch cctx index from tx response |
| 65 | + cctxIndex, err = txserver.FetchAttributeFromTxResponse(res, "cctx_index") |
| 66 | + require.NoError(r, err) |
| 67 | + |
| 68 | + cctxRes, err = r.CctxClient.Cctx(r.Ctx, &crosschaintypes.QueryGetCctxRequest{Index: cctxIndex}) |
| 69 | + require.NoError(r, err) |
| 70 | + |
| 71 | + cctx = cctxRes.CrossChainTx |
| 72 | + r.Logger.CCTX(*cctx, "unpausing") |
| 73 | + |
| 74 | + // wait for the cctx to be mined |
| 75 | + r.WaitForMinedCCTXFromIndex(cctxIndex) |
| 76 | + |
| 77 | + // check ERC20 custody contract is unpaused |
| 78 | + paused, err = r.ERC20Custody.Paused(&bind.CallOpts{}) |
| 79 | + require.NoError(r, err) |
| 80 | + require.False(r, paused) |
| 81 | +} |
0 commit comments