/
ibc.go
37 lines (32 loc) · 1 KB
/
ibc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package keeper
import (
"time"
sdk "github.com/cosmos/cosmos-sdk/types"
transfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types"
ibcclienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types"
)
// TransferToTargetZone transfers user's asset to target zone(Host chain)
// using IBC transfer.
func (k Keeper) TransferToTargetZone(ctx sdk.Context,
sourcePort, sourceChannel, depositor, icaController string, amt sdk.Coin) error {
goCtx := sdk.WrapSDKContext(ctx)
depositorAddr, err := sdk.AccAddressFromBech32(depositor)
if err != nil {
return err
}
_, err = k.ibcTransferKeeper.Transfer(goCtx,
&transfertypes.MsgTransfer{
SourcePort: sourcePort,
SourceChannel: sourceChannel,
Token: amt,
Sender: depositorAddr.String(),
Receiver: icaController,
TimeoutHeight: ibcclienttypes.Height{
RevisionHeight: 0,
RevisionNumber: 0,
},
TimeoutTimestamp: uint64(ctx.BlockTime().UnixNano() + 5*time.Minute.Nanoseconds()),
},
)
return err
}