/
msg_server_init_provider.go
84 lines (64 loc) · 2.08 KB
/
msg_server_init_provider.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 keeper
import (
"context"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/jackalLabs/canine-chain/v3/x/storage/types"
)
func (k msgServer) InitProvider(goCtx context.Context, msg *types.MsgInitProvider) (*types.MsgInitProviderResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
_, found := k.GetProviders(ctx, msg.Creator)
if found {
return nil, types.ErrProviderExists
}
params := k.GetParams(ctx)
coin := sdk.NewInt64Coin("ujkl", params.CollateralPrice)
coins := sdk.NewCoins(coin)
account, err := sdk.AccAddressFromBech32(msg.Creator)
if err != nil {
return nil, err
}
err = k.bankkeeper.SendCoinsFromAccountToModule(ctx, account, types.CollateralCollectorName, coins)
if err != nil {
return nil, sdkerrors.Wrapf(err, "%s does not have %s", account, coin.String())
}
collat := types.Collateral{
Address: msg.Creator,
Amount: params.CollateralPrice,
}
k.SetCollateral(ctx, collat)
provider := types.Providers{
Address: msg.Creator,
Ip: msg.Ip,
Totalspace: msg.Totalspace,
Creator: msg.Creator,
BurnedContracts: "0",
KeybaseIdentity: msg.Keybase,
AuthClaimers: []string{},
}
k.SetProviders(ctx, provider)
return &types.MsgInitProviderResponse{}, nil
}
func (k msgServer) ShutdownProvider(goCtx context.Context, msg *types.MsgShutdownProvider) (*types.MsgShutdownProviderResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
_, found := k.GetProviders(ctx, msg.Creator)
if !found {
return nil, types.ErrProviderNotFound
}
collateral, found := k.GetCollateral(ctx, msg.Creator)
if found {
coin := sdk.NewInt64Coin("ujkl", collateral.Amount)
coins := sdk.NewCoins(coin)
account, err := sdk.AccAddressFromBech32(msg.Creator)
if err != nil {
return nil, err
}
err = k.bankkeeper.SendCoinsFromModuleToAccount(ctx, types.CollateralCollectorName, account, coins)
if err != nil {
return nil, err
}
k.RemoveCollateral(ctx, msg.Creator)
}
k.RemoveProviders(ctx, msg.Creator)
return &types.MsgShutdownProviderResponse{}, nil
}