Skip to content

Commit cd52612

Browse files
committed
fix: support 32 byte addresses in remote recv collateral
1 parent 76b0807 commit cd52612

2 files changed

Lines changed: 72 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: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package keeper_test
22

33
import (
4+
"bytes"
45
"fmt"
56
"math/big"
67

@@ -11,6 +12,7 @@ import (
1112
coreTypes "github.com/bcp-innovations/hyperlane-cosmos/x/core/types"
1213
"github.com/bcp-innovations/hyperlane-cosmos/x/warp/types"
1314
sdk "github.com/cosmos/cosmos-sdk/types"
15+
"github.com/cosmos/cosmos-sdk/types/address"
1416
. "github.com/onsi/ginkgo/v2"
1517
. "github.com/onsi/gomega"
1618
)
@@ -29,6 +31,7 @@ TEST CASES - logic_collateral.go
2931
* MsgRemoteTransfer (invalid) insufficient funds (Collateral)
3032
* MsgRemoteTransfer & MsgRemoteReceiveCollateral (invalid) not enough collateral (Collateral)
3133
* MsgRemoteTransfer && MsgRemoteReceiveCollateral (valid) (Collateral)
34+
* MsgRemoteTransfer && MsgRemoteReceiveCollateral (valid) 32-byte address (Collateral)
3235
3336
*/
3437

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

0 commit comments

Comments
 (0)