Skip to content

Commit ccb6647

Browse files
authored
fix: support 32 byte addresses in remote recv collateral (#151)
1 parent aad1c11 commit ccb6647

2 files changed

Lines changed: 66 additions & 1 deletion

File tree

x/warp/keeper/logic_collateral.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func (k *Keeper) RemoteTransferCollateral(ctx sdk.Context, token types.HypToken,
8888
// RemoteReceiveCollateral handles the receipt of collateral from a remote chain.
8989
// It updates the token balance, verifies there is enough collateral, and transfers the funds to the recipient's account.
9090
func (k *Keeper) RemoteReceiveCollateral(ctx context.Context, token types.HypToken, payload types.WarpPayload) error {
91-
account := sdk.AccAddress(payload.Recipient()[12:32])
91+
account := payload.GetCosmosAccount()
9292

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

x/warp/keeper/logic_collateral_test.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
coreTypes "github.com/bcp-innovations/hyperlane-cosmos/x/core/types"
1212
"github.com/bcp-innovations/hyperlane-cosmos/x/warp/types"
1313
sdk "github.com/cosmos/cosmos-sdk/types"
14+
"github.com/cosmos/cosmos-sdk/types/address"
1415
. "github.com/onsi/ginkgo/v2"
1516
. "github.com/onsi/gomega"
1617
)
@@ -29,6 +30,7 @@ TEST CASES - logic_collateral.go
2930
* MsgRemoteTransfer (invalid) insufficient funds (Collateral)
3031
* MsgRemoteTransfer & MsgRemoteReceiveCollateral (invalid) not enough collateral (Collateral)
3132
* MsgRemoteTransfer && MsgRemoteReceiveCollateral (valid) (Collateral)
33+
* MsgRemoteTransfer && MsgRemoteReceiveCollateral (valid) 32-byte address (Collateral)
3234
3335
*/
3436

@@ -366,4 +368,67 @@ var _ = Describe("logic_collateral.go", Ordered, func() {
366368
Expect(err).To(BeNil())
367369
Expect(s.App().BankKeeper.GetBalance(s.Ctx(), sender.AccAddress, denom).Amount).To(Equal(senderBalance.Amount.Add(amount)))
368370
})
371+
372+
It("MsgRemoteTransfer && MsgRemoteReceiveCollateral (valid) 32-byte address (Collateral)", func() {
373+
// Arrange
374+
receiverAddress, _ := util.DecodeHexAddress("0xd7194459d45619d04a5a0f9e78dc9594a0f37fd6da8382fe12ddda6f2f46d647")
375+
remoteRouter := types.RemoteRouter{
376+
ReceiverDomain: 1,
377+
ReceiverContract: "0x934b867052ca9c65e33362112f35fb548f8732c2fe45f07b9c591958e865def0",
378+
Gas: math.NewInt(50000),
379+
}
380+
381+
amount := math.NewInt(100)
382+
maxFee := sdk.NewCoin(denom, math.NewInt(250000))
383+
384+
tokenId, mailboxId, igpId, _ := createToken(s, &remoteRouter, owner.Address, sender.Address, types.HYP_TOKEN_TYPE_COLLATERAL)
385+
err := s.MintBaseCoins(sender.Address, 1_000_000)
386+
Expect(err).To(BeNil())
387+
388+
// Act
389+
_, err = s.RunTx(&types.MsgRemoteTransfer{
390+
Sender: sender.Address,
391+
TokenId: tokenId,
392+
DestinationDomain: remoteRouter.ReceiverDomain,
393+
Recipient: receiverAddress,
394+
Amount: amount,
395+
CustomHookId: &igpId,
396+
GasLimit: math.ZeroInt(),
397+
MaxFee: maxFee,
398+
})
399+
Expect(err).To(BeNil())
400+
401+
receiverContract, err := util.DecodeHexAddress(remoteRouter.ReceiverContract)
402+
Expect(err).To(BeNil())
403+
404+
warpRecipient := address.Module(types.ModuleName, []byte("collateral-receiver"))
405+
Expect(len(warpRecipient)).To(Equal(address.Len))
406+
407+
warpPayload, err := types.NewWarpPayload(warpRecipient, *big.NewInt(amount.Int64()))
408+
Expect(err).To(BeNil())
409+
410+
message := util.HyperlaneMessage{
411+
Version: 3,
412+
Nonce: 1,
413+
Origin: remoteRouter.ReceiverDomain,
414+
Sender: receiverContract,
415+
Destination: 0,
416+
Recipient: tokenId,
417+
Body: warpPayload.Bytes(),
418+
}
419+
420+
receiverAcc := sdk.AccAddress(warpRecipient)
421+
receiverBalance := s.App().BankKeeper.GetBalance(s.Ctx(), receiverAcc, denom)
422+
423+
_, err = s.RunTx(&coreTypes.MsgProcessMessage{
424+
MailboxId: mailboxId,
425+
Relayer: sender.Address,
426+
Metadata: "",
427+
Message: message.String(),
428+
})
429+
430+
// Assert
431+
Expect(err).To(BeNil())
432+
Expect(s.App().BankKeeper.GetBalance(s.Ctx(), receiverAcc, denom).Amount).To(Equal(receiverBalance.Amount.Add(amount)))
433+
})
369434
})

0 commit comments

Comments
 (0)