Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: handle gmp message for leverage messages #2479

Merged
merged 8 commits into from
Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 10 additions & 43 deletions x/uibc/gmp/gmp_middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import (
"encoding/json"
"fmt"

sdk "github.com/cosmos/cosmos-sdk/types"
)
Expand All @@ -13,62 +14,28 @@
return &Handler{}
}

func (h Handler) OnRecvPacket(ctx sdk.Context, coinReceived sdk.Coin, memo string, receiver sdk.AccAddress,
) error {
if len(memo) == 0 {
return nil
func (h Handler) OnRecvPacket(ctx sdk.Context, coinReceived sdk.Coin, memoStr string, receiver sdk.AccAddress,
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
) (Message, error) {
if len(memoStr) == 0 {
return Message{}, nil

Check warning on line 20 in x/uibc/gmp/gmp_middleware.go

View check run for this annotation

Codecov / codecov/patch

x/uibc/gmp/gmp_middleware.go#L20

Added line #L20 was not covered by tests
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
}

logger := ctx.Logger().With("handler", "gmp_handler")
var msg Message
var err error

if err = json.Unmarshal([]byte(memo), &msg); err != nil {
if err = json.Unmarshal([]byte(memoStr), &msg); err != nil {
logger.Error("cannot unmarshal memo", "err", err)
return err
return Message{}, err
}

switch msg.Type {
case TypeGeneralMessage:
err := h.HandleGeneralMessage(ctx, msg.SourceAddress, msg.SourceAddress, receiver, msg.Payload)
if err != nil {
logger.Error("err at HandleGeneralMessage", err)
}
return msg, fmt.Errorf("we are not supporting general message: %d", msg.Type)
case TypeGeneralMessageWithToken:
err := h.HandleGeneralMessageWithToken(
ctx, msg.SourceAddress, msg.SourceAddress, receiver, msg.Payload, coinReceived)
if err != nil {
logger.Error("err at HandleGeneralMessageWithToken", err)
}
return msg, nil
default:
logger.Error("unrecognized gmp message type: %d", msg.Type)
return msg, fmt.Errorf("unrecognized gmp message type: %d", msg.Type)

Check warning on line 39 in x/uibc/gmp/gmp_middleware.go

View check run for this annotation

Codecov / codecov/patch

x/uibc/gmp/gmp_middleware.go#L39

Added line #L39 was not covered by tests
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
}

return err
}

func (h Handler) HandleGeneralMessage(ctx sdk.Context, srcChain, srcAddress string, receiver sdk.AccAddress,
payload []byte) error {
ctx.Logger().Info("HandleGeneralMessage called",
"srcChain", srcChain,
"srcAddress", srcAddress,
"receiver", receiver,
"payload", payload,
"handler", "gmp-handler",
)
return nil
}

func (h Handler) HandleGeneralMessageWithToken(ctx sdk.Context, srcChain, srcAddress string,
receiver sdk.AccAddress, payload []byte, coin sdk.Coin) error {

ctx.Logger().Info("HandleGeneralMessageWithToken called",
"srcChain", srcChain,
"srcAddress", srcAddress,
"receiver", receiver,
"payload", payload,
"coin", coin,
"handler", "gmp-token-handler",
)
return nil
}
19 changes: 17 additions & 2 deletions x/uibc/gmp/gmp_middleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func TestGmpMemoHandler(t *testing.T) {
errMsg: "invalid character",
},
{
name: "valid memo",
name: "not supporting the msg",
memo: func() string {
validMemo := Message{
SourceChain: "source_chain",
Expand All @@ -40,13 +40,28 @@ func TestGmpMemoHandler(t *testing.T) {
assert.NilError(t, err)
return string(m)
},
errMsg: "we are not supporting general message",
},
{
name: "valid memo",
memo: func() string {
validMemo := Message{
SourceChain: "source_chain",
SourceAddress: "source_addr",
Payload: nil,
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
Type: int64(2),
}
m, err := json.Marshal(validMemo)
assert.NilError(t, err)
return string(m)
},
errMsg: "",
},
}

for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
err := gmpHandler.OnRecvPacket(ctx, sdk.Coin{}, tc.memo(), nil)
_, err := gmpHandler.OnRecvPacket(ctx, sdk.Coin{}, tc.memo(), nil)
if len(tc.errMsg) != 0 {
assert.ErrorContains(t, err, tc.errMsg)
} else {
Expand Down
21 changes: 14 additions & 7 deletions x/uibc/uics20/memo_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,20 @@
return nil, sdkerrors.Wrap(err, "can't parse ftData.Receiver bech32 address")
}

var memoPayload []byte
if strings.EqualFold(ftData.Sender, gmp.DefaultGMPAddress) {
events = append(events, "axelar GMP transaction")
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
mh.isGMP = true
return events, nil
gh := gmp.NewHandler()
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
gmpMessage, err := gh.OnRecvPacket(*ctx, mh.received, mh.memo, mh.receiver)
if err != nil {
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
return events, err

Check warning on line 68 in x/uibc/uics20/memo_handler.go

View check run for this annotation

Codecov / codecov/patch

x/uibc/uics20/memo_handler.go#L65-L68

Added lines #L65 - L68 were not covered by tests
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
}
memoPayload = gmpMessage.Payload

Check warning on line 70 in x/uibc/uics20/memo_handler.go

View check run for this annotation

Codecov / codecov/patch

x/uibc/uics20/memo_handler.go#L70

Added line #L70 was not covered by tests
} else {
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
memoPayload = []byte(ftData.Memo)
}

memo, err := deserializeMemo(mh.cdc, []byte(ftData.Memo))
memo, err := deserializeMemo(mh.cdc, memoPayload)
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
recvPacketLogger(ctx).Debug("Not recognized ICS20 memo, ignoring hook execution", "err", err)
return nil, nil
Expand Down Expand Up @@ -105,10 +112,10 @@
}

logger := recvPacketLogger(ctx)
if mh.isGMP {
gh := gmp.NewHandler()
return gh.OnRecvPacket(*ctx, mh.received, mh.memo, mh.receiver)
}
// if mh.isGMP {
gsk967 marked this conversation as resolved.
Show resolved Hide resolved
// gh := gmp.NewHandler(mh.cdc)
// return gh.OnRecvPacket(ctx, mh.received, mh.memo, mh.receiver)
// }
gsk967 marked this conversation as resolved.
Show resolved Hide resolved

if len(mh.msgs) == 0 {
return nil // quick return - we have nothing to handle
Expand Down
Loading