Skip to content
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
2 changes: 1 addition & 1 deletion x/warp/keeper/logic_collateral.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ func (k *Keeper) RemoteTransferCollateral(ctx sdk.Context, token types.HypToken,
// RemoteReceiveCollateral handles the receipt of collateral from a remote chain.
// It updates the token balance, verifies there is enough collateral, and transfers the funds to the recipient's account.
func (k *Keeper) RemoteReceiveCollateral(ctx context.Context, token types.HypToken, payload types.WarpPayload) error {
account := sdk.AccAddress(payload.Recipient()[12:32])
account := payload.GetCosmosAccount()

amount := math.NewIntFromBigInt(payload.Amount())

Expand Down
71 changes: 71 additions & 0 deletions x/warp/keeper/logic_collateral_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package keeper_test

import (
"bytes"
"fmt"
"math/big"

Expand All @@ -11,6 +12,7 @@ import (
coreTypes "github.com/bcp-innovations/hyperlane-cosmos/x/core/types"
"github.com/bcp-innovations/hyperlane-cosmos/x/warp/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/address"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
Expand All @@ -29,6 +31,7 @@ TEST CASES - logic_collateral.go
* MsgRemoteTransfer (invalid) insufficient funds (Collateral)
* MsgRemoteTransfer & MsgRemoteReceiveCollateral (invalid) not enough collateral (Collateral)
* MsgRemoteTransfer && MsgRemoteReceiveCollateral (valid) (Collateral)
* MsgRemoteTransfer && MsgRemoteReceiveCollateral (valid) 32-byte address (Collateral)

*/

Expand Down Expand Up @@ -366,4 +369,72 @@ var _ = Describe("logic_collateral.go", Ordered, func() {
Expect(err).To(BeNil())
Expect(s.App().BankKeeper.GetBalance(s.Ctx(), sender.AccAddress, denom).Amount).To(Equal(senderBalance.Amount.Add(amount)))
})

It("MsgRemoteTransfer && MsgRemoteReceiveCollateral (valid) 32-byte address (Collateral)", func() {
// Arrange
receiverAddress, _ := util.DecodeHexAddress("0xd7194459d45619d04a5a0f9e78dc9594a0f37fd6da8382fe12ddda6f2f46d647")
remoteRouter := types.RemoteRouter{
ReceiverDomain: 1,
ReceiverContract: "0x934b867052ca9c65e33362112f35fb548f8732c2fe45f07b9c591958e865def0",
Gas: math.NewInt(50000),
}

amount := math.NewInt(100)
maxFee := sdk.NewCoin(denom, math.NewInt(250000))

tokenId, mailboxId, igpId, _ := createToken(s, &remoteRouter, owner.Address, sender.Address, types.HYP_TOKEN_TYPE_COLLATERAL)
err := s.MintBaseCoins(sender.Address, 1_000_000)
Expect(err).To(BeNil())

// Act
_, err = s.RunTx(&types.MsgRemoteTransfer{
Sender: sender.Address,
TokenId: tokenId,
DestinationDomain: remoteRouter.ReceiverDomain,
Recipient: receiverAddress,
Amount: amount,
CustomHookId: &igpId,
GasLimit: math.ZeroInt(),
MaxFee: maxFee,
})
Expect(err).To(BeNil())

receiverContract, err := util.DecodeHexAddress(remoteRouter.ReceiverContract)
Expect(err).To(BeNil())

zeroPaddedPrefix := make([]byte, 12)
warpRecipient := address.Module(types.ModuleName, []byte("collateral-receiver"))
if bytes.HasPrefix(warpRecipient, zeroPaddedPrefix) {
warpRecipient = address.Module(types.ModuleName, []byte("collateral-receiver-2"))
Comment thread
mbreithecker marked this conversation as resolved.
Outdated
}
Expect(len(warpRecipient)).To(Equal(address.Len))
Expect(bytes.HasPrefix(warpRecipient, zeroPaddedPrefix)).To(BeFalse())

warpPayload, err := types.NewWarpPayload(warpRecipient, *big.NewInt(amount.Int64()))
Expect(err).To(BeNil())

message := util.HyperlaneMessage{
Version: 3,
Nonce: 1,
Origin: remoteRouter.ReceiverDomain,
Sender: receiverContract,
Destination: 0,
Recipient: tokenId,
Body: warpPayload.Bytes(),
}

receiverAcc := sdk.AccAddress(warpRecipient)
receiverBalance := s.App().BankKeeper.GetBalance(s.Ctx(), receiverAcc, denom)

_, err = s.RunTx(&coreTypes.MsgProcessMessage{
MailboxId: mailboxId,
Relayer: sender.Address,
Metadata: "",
Message: message.String(),
})

// Assert
Expect(err).To(BeNil())
Expect(s.App().BankKeeper.GetBalance(s.Ctx(), receiverAcc, denom).Amount).To(Equal(receiverBalance.Amount.Add(amount)))
})
})