11package keeper_test
22
33import (
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