-
Notifications
You must be signed in to change notification settings - Fork 40
/
msg_server.go
99 lines (80 loc) · 2.05 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
package keeper
import (
"context"
sdk "github.com/cosmos/cosmos-sdk/types"
hubtypes "github.com/sentinel-official/hub/types"
"github.com/sentinel-official/hub/x/provider/types"
)
var (
_ types.MsgServiceServer = (*msgServer)(nil)
)
type msgServer struct {
Keeper
}
func NewMsgServiceServer(keeper Keeper) types.MsgServiceServer {
return &msgServer{Keeper: keeper}
}
func (k *msgServer) MsgRegister(c context.Context, msg *types.MsgRegisterRequest) (*types.MsgRegisterResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
msgFrom, err := sdk.AccAddressFromBech32(msg.From)
if err != nil {
return nil, err
}
_, found := k.GetProvider(ctx, msgFrom.Bytes())
if found {
return nil, types.ErrorDuplicateProvider
}
deposit := k.Deposit(ctx)
if deposit.IsPositive() {
if err := k.FundCommunityPool(ctx, msgFrom, deposit); err != nil {
return nil, err
}
}
var (
provAddress = hubtypes.ProvAddress(msgFrom.Bytes())
provider = types.Provider{
Address: provAddress.String(),
Name: msg.Name,
Identity: msg.Identity,
Website: msg.Website,
Description: msg.Description,
}
)
k.SetProvider(ctx, provider)
ctx.EventManager().EmitTypedEvent(
&types.EventRegister{
Address: provider.Address,
},
)
return &types.MsgRegisterResponse{}, nil
}
func (k *msgServer) MsgUpdate(c context.Context, msg *types.MsgUpdateRequest) (*types.MsgUpdateResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
msgFrom, err := hubtypes.ProvAddressFromBech32(msg.From)
if err != nil {
return nil, err
}
provider, found := k.GetProvider(ctx, msgFrom)
if !found {
return nil, types.ErrorProviderDoesNotExist
}
if len(msg.Name) > 0 {
provider.Name = msg.Name
}
if len(msg.Identity) > 0 {
provider.Identity = msg.Identity
}
if len(msg.Website) > 0 {
provider.Website = msg.Website
}
if len(msg.Description) > 0 {
provider.Description = msg.Description
}
k.SetProvider(ctx, provider)
ctx.EventManager().EmitTypedEvent(
&types.EventUpdate{
Address: provider.Address,
},
)
return &types.MsgUpdateResponse{}, nil
}