forked from neutron-org/neutron
/
tx.go
84 lines (75 loc) · 2.64 KB
/
tx.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package types
import (
"context"
"github.com/cosmos/ibc-go/v7/modules/apps/transfer/types"
"google.golang.org/grpc"
feerefundertypes "github.com/MonikaCat/neutron/v2/x/feerefunder/types"
sdk "github.com/cosmos/cosmos-sdk/types"
)
func (msg *MsgTransfer) ValidateBasic() error {
if err := msg.Fee.Validate(); err != nil {
return err
}
sdkMsg := types.NewMsgTransfer(msg.SourcePort, msg.SourceChannel, msg.Token, msg.Sender, msg.Receiver, msg.TimeoutHeight, msg.TimeoutTimestamp, msg.Memo)
return sdkMsg.ValidateBasic()
}
func (msg *MsgTransfer) GetSigners() []sdk.AccAddress {
fromAddress, _ := sdk.AccAddressFromBech32(msg.Sender)
return []sdk.AccAddress{fromAddress}
}
// MsgOrigTransferHandler - 1) helps to bind `/neutron.transfer.Msg/Transfer` as a handler for `ibc.applications.transfer.v1.MsgTransfer`
// 2) converts `ibc.applications.transfer.v1.MsgTransfer` into neutron.transfer.MsgTransfer` before processing.
//
//nolint:revive // we cant rearrange arguments since we need to meet the type requirement
func MsgOrigTransferHandler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(types.MsgTransfer)
if err := dec(in); err != nil {
return nil, err
}
conv := &MsgTransfer{
SourcePort: in.SourcePort,
SourceChannel: in.SourceChannel,
Token: in.Token,
Sender: in.Sender,
Receiver: in.Receiver,
TimeoutHeight: in.TimeoutHeight,
TimeoutTimestamp: in.TimeoutTimestamp,
Memo: in.Memo,
Fee: feerefundertypes.Fee{},
}
if interceptor == nil {
return srv.(MsgServer).Transfer(ctx, conv)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/neutron.transfer.Msg/Transfer",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
reqT := req.(*types.MsgTransfer)
convReq := &MsgTransfer{
SourcePort: reqT.SourcePort,
SourceChannel: reqT.SourceChannel,
Token: reqT.Token,
Sender: reqT.Sender,
Receiver: reqT.Receiver,
TimeoutHeight: reqT.TimeoutHeight,
TimeoutTimestamp: reqT.TimeoutTimestamp,
Memo: reqT.Memo,
Fee: feerefundertypes.Fee{},
}
return srv.(MsgServer).Transfer(ctx, convReq)
}
return interceptor(ctx, conv, info, handler)
}
var MsgServiceDescOrig = grpc.ServiceDesc{
ServiceName: "ibc.applications.transfer.v1.Msg",
HandlerType: (*MsgServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "Transfer",
Handler: MsgOrigTransferHandler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "ibc/applications/transfer/v1/tx.proto",
}