/
msg_server.go
110 lines (94 loc) · 2.62 KB
/
msg_server.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package keeper
import (
"context"
"encoding/hex"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/komodoplatform/nucleus/x/htlc/types"
)
type msgServer struct {
Keeper
}
var _ types.MsgServer = msgServer{}
// NewMsgServerImpl returns an implementation of the HTLC MsgServer interface
// for the provided Keeper.
func NewMsgServerImpl(keeper Keeper) types.MsgServer {
return &msgServer{Keeper: keeper}
}
// CreateHTLC creates an HTLC
func (m msgServer) CreateHTLC(goCtx context.Context, msg *types.MsgCreateHTLC) (*types.MsgCreateHTLCResponse, error) {
sender, err := sdk.AccAddressFromBech32(msg.Sender)
if err != nil {
return nil, err
}
to, err := sdk.AccAddressFromBech32(msg.To)
if err != nil {
return nil, err
}
hashLock, err := hex.DecodeString(msg.HashLock)
if err != nil {
return nil, err
}
if m.Keeper.blockedAddrs[msg.To] {
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is a module account", msg.To)
}
ctx := sdk.UnwrapSDKContext(goCtx)
id, err := m.Keeper.CreateHTLC(
ctx,
sender,
to,
msg.Amount,
hashLock,
msg.Timestamp,
msg.TimeLock,
)
if err != nil {
return nil, err
}
ctx.EventManager().EmitEvents(sdk.Events{
sdk.NewEvent(
types.EventTypeCreateHTLC,
sdk.NewAttribute(types.AttributeKeyID, id.String()),
sdk.NewAttribute(types.AttributeKeySender, msg.Sender),
sdk.NewAttribute(types.AttributeKeyReceiver, msg.To),
),
sdk.NewEvent(
sdk.EventTypeMessage,
sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),
sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender),
),
})
return &types.MsgCreateHTLCResponse{
Id: id.String(),
}, nil
}
func (m msgServer) ClaimHTLC(goCtx context.Context, msg *types.MsgClaimHTLC) (*types.MsgClaimHTLCResponse, error) {
id, err := hex.DecodeString(msg.Id)
if err != nil {
return nil, err
}
secret, err := hex.DecodeString(msg.Secret)
if err != nil {
return nil, err
}
ctx := sdk.UnwrapSDKContext(goCtx)
hashLock, err := m.Keeper.ClaimHTLC(ctx, id, secret)
if err != nil {
return nil, err
}
ctx.EventManager().EmitEvents(sdk.Events{
sdk.NewEvent(
types.EventTypeClaimHTLC,
sdk.NewAttribute(types.AttributeKeyID, msg.Id),
sdk.NewAttribute(types.AttributeKeyHashLock, hashLock),
sdk.NewAttribute(types.AttributeKeySender, msg.Sender),
sdk.NewAttribute(types.AttributeKeySecret, msg.Secret),
),
sdk.NewEvent(
sdk.EventTypeMessage,
sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),
sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender),
),
})
return &types.MsgClaimHTLCResponse{}, nil
}