From c08ebfc0a4f0d4d914f1898c7183e91ff70aa63d Mon Sep 17 00:00:00 2001 From: skosito Date: Sat, 30 Nov 2024 04:51:53 +0100 Subject: [PATCH] withdraw spl with non existing ata --- cmd/zetae2e/local/local.go | 2 +- contrib/localnet/solana/gateway.so | Bin 366416 -> 351584 bytes e2e/e2etests/e2etests.go | 8 ++--- ..._spl_withdraw_fails_if_no_receiver_ata.go} | 28 ++++++------------ zetaclient/chains/solana/signer/signer.go | 18 +++-------- .../chains/solana/signer/withdraw_spl.go | 1 - 6 files changed, 18 insertions(+), 39 deletions(-) rename e2e/e2etests/{test_spl_withdraw_and_create_receiver_ata.go => test_spl_withdraw_fails_if_no_receiver_ata.go} (64%) diff --git a/cmd/zetae2e/local/local.go b/cmd/zetae2e/local/local.go index b65d104df6..f092912132 100644 --- a/cmd/zetae2e/local/local.go +++ b/cmd/zetae2e/local/local.go @@ -455,7 +455,7 @@ func localE2ETest(cmd *cobra.Command, _ []string) { e2etests.TestSPLDepositName, e2etests.TestSPLDepositAndCallName, e2etests.TestSPLWithdrawName, - e2etests.TestSPLWithdrawAndCreateReceiverAtaName, + e2etests.TestSPLWithdrawFailsIfNoReceiverAtaName, e2etests.TestSolanaWhitelistSPLName, } eg.Go(solanaTestRoutine(conf, deployerRunner, verbose, solanaTests...)) diff --git a/contrib/localnet/solana/gateway.so b/contrib/localnet/solana/gateway.so index 0fe82f24f22d1d765fb38561a8c2c37fc75b629b..9832e55994b551e6ed2d4a619ddf2c7a817c1c81 100755 GIT binary patch delta 71535 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 Gf&UH8Cd}mk diff --git a/e2e/e2etests/e2etests.go b/e2e/e2etests/e2etests.go index db99a5ce0d..20d1cb8de3 100644 --- a/e2e/e2etests/e2etests.go +++ b/e2e/e2etests/e2etests.go @@ -65,7 +65,7 @@ const ( TestSPLDepositName = "spl_deposit" TestSPLDepositAndCallName = "spl_deposit_and_call" TestSPLWithdrawName = "spl_withdraw" - TestSPLWithdrawAndCreateReceiverAtaName = "spl_withdraw_and_create_receiver_ata" + TestSPLWithdrawFailsIfNoReceiverAtaName = "spl_withdraw_fails_without_receiver_ata" /** * TON tests @@ -448,12 +448,12 @@ var AllE2ETests = []runner.E2ETest{ TestSPLWithdraw, ), runner.NewE2ETest( - TestSPLWithdrawAndCreateReceiverAtaName, - "withdraw SPL from ZEVM and create receiver ata", + TestSPLWithdrawFailsIfNoReceiverAtaName, + "withdraw SPL from ZEVM fails if no receiver ata", []runner.ArgDefinition{ {Description: "amount in spl tokens", DefaultValue: "1000000"}, }, - TestSPLWithdrawAndCreateReceiverAta, + TestSPLWithdrawFailsIfNoReceiverAta, ), runner.NewE2ETest( TestSolanaDepositAndCallRevertName, diff --git a/e2e/e2etests/test_spl_withdraw_and_create_receiver_ata.go b/e2e/e2etests/test_spl_withdraw_fails_if_no_receiver_ata.go similarity index 64% rename from e2e/e2etests/test_spl_withdraw_and_create_receiver_ata.go rename to e2e/e2etests/test_spl_withdraw_fails_if_no_receiver_ata.go index 51196c8a46..ed6958cd7f 100644 --- a/e2e/e2etests/test_spl_withdraw_and_create_receiver_ata.go +++ b/e2e/e2etests/test_spl_withdraw_fails_if_no_receiver_ata.go @@ -5,7 +5,6 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/gagliardetto/solana-go" - "github.com/gagliardetto/solana-go/rpc" "github.com/stretchr/testify/require" "github.com/zeta-chain/node/e2e/runner" @@ -13,9 +12,8 @@ import ( crosschaintypes "github.com/zeta-chain/node/x/crosschain/types" ) -// TestSPLWithdrawAndCreateReceiverAta withdraws spl, but letting gateway to create receiver ata using rent payer -// instead of providing receiver that has it already created -func TestSPLWithdrawAndCreateReceiverAta(r *runner.E2ERunner, args []string) { +// TestSPLWithdrawFailsIfNoReceiverAta fails to withdraw spl because receiver ata doesn't exist +func TestSPLWithdrawFailsIfNoReceiverAta(r *runner.E2ERunner, args []string) { require.Len(r, args, 1) withdrawAmount := parseBigInt(r, args[0]) @@ -52,28 +50,20 @@ func TestSPLWithdrawAndCreateReceiverAta(r *runner.E2ERunner, args []string) { // withdraw tx := r.WithdrawSPLZRC20(receiverPrivKey.PublicKey(), withdrawAmount, approvedAmount) - // wait for the cctx to be mined + // wait for the cctx to be mined and aborted cctx := utils.WaitCctxMinedByInboundHash(r.Ctx, tx.Hash().Hex(), r.CctxClient, r.Logger, r.CctxTimeout) - utils.RequireCCTXStatus(r, cctx, crosschaintypes.CctxStatus_OutboundMined) + utils.RequireCCTXStatus(r, cctx, crosschaintypes.CctxStatus_Aborted) // get SPL ZRC20 balance after withdraw zrc20BalanceAfter, err := r.SPLZRC20.BalanceOf(&bind.CallOpts{}, r.EVMAddress()) require.NoError(r, err) r.Logger.Info("runner balance of SPL after withdraw: %d", zrc20BalanceAfter) - // verify receiver ata was created + // verify receiver ata was not created receiverAtaAcc, err = r.SolanaClient.GetAccountInfo(r.Ctx, receiverAta) - require.NoError(r, err) - require.NotNil(r, receiverAtaAcc) - - // verify balances are updated - receiverBalanceAfter, err := r.SolanaClient.GetTokenAccountBalance(r.Ctx, receiverAta, rpc.CommitmentFinalized) - require.NoError(r, err) - r.Logger.Info("receiver balance of SPL after withdraw: %s", receiverBalanceAfter.Value.Amount) - - // verify amount is added to receiver ata - require.EqualValues(r, withdrawAmount.String(), parseBigInt(r, receiverBalanceAfter.Value.Amount).String()) + require.Error(r, err) + require.Nil(r, receiverAtaAcc) - // verify amount is subtracted on zrc20 - require.EqualValues(r, new(big.Int).Sub(zrc20BalanceBefore, withdrawAmount).String(), zrc20BalanceAfter.String()) + // verify amount is not changed on zrc20 -- TODO: cctx is aborted without revert? + // require.EqualValues(r, zrc20BalanceBefore.String(), zrc20BalanceAfter.String()) } diff --git a/zetaclient/chains/solana/signer/signer.go b/zetaclient/chains/solana/signer/signer.go index 42b9855ab9..b6739751ac 100644 --- a/zetaclient/chains/solana/signer/signer.go +++ b/zetaclient/chains/solana/signer/signer.go @@ -44,9 +44,6 @@ type Signer struct { // pda is the program derived address of the gateway program pda solana.PublicKey - - // rent payer pda is the program derived address of the gateway program to pay rent for creating atas - rentPayerPda solana.PublicKey } // NewSigner creates a new Solana signer @@ -68,19 +65,12 @@ func NewSigner( return nil, errors.Wrapf(err, "cannot parse gateway address %s", chainParams.GatewayAddress) } - // parse rent payer PDA, used in case receiver ATA should be created in gateway - rentPayerPda, err := contracts.RentPayerPDA(gatewayID) - if err != nil { - return nil, errors.Wrapf(err, "cannot parse gateway address %s", chainParams.GatewayAddress) - } - // create Solana signer signer := &Signer{ - Signer: baseSigner, - client: solClient, - gatewayID: gatewayID, - pda: pda, - rentPayerPda: rentPayerPda, + Signer: baseSigner, + client: solClient, + gatewayID: gatewayID, + pda: pda, } // construct Solana private key if present diff --git a/zetaclient/chains/solana/signer/withdraw_spl.go b/zetaclient/chains/solana/signer/withdraw_spl.go index 93303fb5e6..1436cf937c 100644 --- a/zetaclient/chains/solana/signer/withdraw_spl.go +++ b/zetaclient/chains/solana/signer/withdraw_spl.go @@ -105,7 +105,6 @@ func (signer *Signer) signWithdrawSPLTx( solana.Meta(msg.MintAccount()), solana.Meta(msg.To()), solana.Meta(recipientAta).WRITE(), - solana.Meta(signer.rentPayerPda).WRITE(), solana.Meta(solana.TokenProgramID), solana.Meta(solana.SPLAssociatedTokenAccountProgramID), solana.Meta(solana.SystemProgramID),