Skip to content

Commit

Permalink
fix: use the ZEVM address pulled from memo as Receiver in MsgVoteInbo…
Browse files Browse the repository at this point in the history
…und (#3242)

* use the ZEVM address decoded from memo as Receiver in MsgVoteInbound

* add Receiver check in unit test

* add changelog entry

* fix unit test
  • Loading branch information
ws4charlie authored and skosito committed Dec 10, 2024
1 parent ff5d8e3 commit 0f85e3d
Show file tree
Hide file tree
Showing 6 changed files with 12 additions and 6 deletions.
1 change: 1 addition & 0 deletions e2e/e2etests/test_solana_deposit.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ func TestSolanaDeposit(r *runner.E2ERunner, args []string) {
cctx := utils.WaitCctxMinedByInboundHash(r.Ctx, sig.String(), r.CctxClient, r.Logger, r.CctxTimeout)
r.Logger.CCTX(*cctx, "solana_deposit")
utils.RequireCCTXStatus(r, cctx, crosschaintypes.CctxStatus_OutboundMined)
require.Equal(r, cctx.GetCurrentOutboundParam().Receiver, r.EVMAddress().Hex())

// get ERC20 SOL balance after deposit
balanceAfter, err := r.SOLZRC20.BalanceOf(&bind.CallOpts{}, r.EVMAddress())
Expand Down
1 change: 1 addition & 0 deletions e2e/e2etests/test_solana_deposit_call.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ func TestSolanaDepositAndCall(r *runner.E2ERunner, args []string) {
cctx := utils.WaitCctxMinedByInboundHash(r.Ctx, sig.String(), r.CctxClient, r.Logger, r.CctxTimeout)
r.Logger.CCTX(*cctx, "solana_deposit_and_call")
utils.RequireCCTXStatus(r, cctx, crosschaintypes.CctxStatus_OutboundMined)
require.Equal(r, cctx.GetCurrentOutboundParam().Receiver, contractAddr.Hex())

// check if example contract has been called, bar value should be set to amount
utils.MustHaveCalledExampleContractWithMsg(r, contract, depositAmount, data)
Expand Down
1 change: 1 addition & 0 deletions e2e/e2etests/test_spl_deposit.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ func TestSPLDeposit(r *runner.E2ERunner, args []string) {
cctx := utils.WaitCctxMinedByInboundHash(r.Ctx, sig.String(), r.CctxClient, r.Logger, r.CctxTimeout)
r.Logger.CCTX(*cctx, "solana_deposit_spl")
utils.RequireCCTXStatus(r, cctx, crosschaintypes.CctxStatus_OutboundMined)
require.Equal(r, cctx.GetCurrentOutboundParam().Receiver, r.EVMAddress().Hex())

// verify balances are updated
pdaBalanceAfter, err := r.SolanaClient.GetTokenAccountBalance(r.Ctx, pdaAta, rpc.CommitmentFinalized)
Expand Down
1 change: 1 addition & 0 deletions e2e/e2etests/test_spl_deposit_and_call.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ func TestSPLDepositAndCall(r *runner.E2ERunner, args []string) {
cctx := utils.WaitCctxMinedByInboundHash(r.Ctx, sig.String(), r.CctxClient, r.Logger, r.CctxTimeout)
r.Logger.CCTX(*cctx, "solana_deposit_spl_and_call")
utils.RequireCCTXStatus(r, cctx, crosschaintypes.CctxStatus_OutboundMined)
require.Equal(r, cctx.GetCurrentOutboundParam().Receiver, contractAddr.Hex())

// check if example contract has been called, bar value should be set to amount
utils.MustHaveCalledExampleContractWithMsg(r, contract, big.NewInt(int64(amount)), data)
Expand Down
6 changes: 3 additions & 3 deletions zetaclient/chains/solana/observer/inbound.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ func (ob *Observer) FilterInboundEvents(txResult *rpc.GetTransactionResult) ([]*
events = append(events, &clienttypes.InboundEvent{
SenderChainID: ob.Chain().ChainId,
Sender: deposit.Sender,
Receiver: deposit.Sender, // receiver is pulled out from memo
Receiver: "", // receiver will be pulled out from memo later
TxOrigin: deposit.Sender,
Amount: deposit.Amount,
Memo: deposit.Memo,
Expand Down Expand Up @@ -241,7 +241,7 @@ func (ob *Observer) FilterInboundEvents(txResult *rpc.GetTransactionResult) ([]*
events = append(events, &clienttypes.InboundEvent{
SenderChainID: ob.Chain().ChainId,
Sender: deposit.Sender,
Receiver: deposit.Sender, // receiver is pulled out from memo
Receiver: "", // receiver will be pulled out from memo later
TxOrigin: deposit.Sender,
Amount: deposit.Amount,
Memo: deposit.Memo,
Expand Down Expand Up @@ -281,7 +281,7 @@ func (ob *Observer) BuildInboundVoteMsgFromEvent(event *clienttypes.InboundEvent
event.Sender,
event.SenderChainID,
event.Sender,
event.Sender,
event.Receiver,
ob.ZetacoreClient().Chain().ChainId,
cosmosmath.NewUint(event.Amount),
hex.EncodeToString(event.Memo),
Expand Down
8 changes: 5 additions & 3 deletions zetaclient/chains/solana/observer/inbound_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ func Test_FilterInboundEvents(t *testing.T) {
eventExpected := &clienttypes.InboundEvent{
SenderChainID: chain.ChainId,
Sender: sender,
Receiver: sender,
Receiver: "",
TxOrigin: sender,
Amount: 100000000,
Memo: expectedMemo,
Expand Down Expand Up @@ -124,11 +124,13 @@ func Test_BuildInboundVoteMsgFromEvent(t *testing.T) {

t.Run("should return vote msg for valid event", func(t *testing.T) {
sender := sample.SolanaAddress(t)
memo := sample.EthAddress().Bytes()
event := sample.InboundEvent(chain.ChainId, sender, sender, 1280, []byte(memo))
receiver := sample.EthAddress()
event := sample.InboundEvent(chain.ChainId, sender, "", 1280, receiver.Bytes())

msg := ob.BuildInboundVoteMsgFromEvent(event)
require.NotNil(t, msg)
require.Equal(t, sender, msg.Sender)
require.Equal(t, receiver.Hex(), msg.Receiver)
})
t.Run("should return nil msg if sender is restricted", func(t *testing.T) {
sender := sample.SolanaAddress(t)
Expand Down

0 comments on commit 0f85e3d

Please sign in to comment.