/
proposal_handler.go
62 lines (55 loc) · 1.97 KB
/
proposal_handler.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
package plans
import (
"log"
sdkerrors "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
legacyerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
"github.com/lavanet/lava/utils"
"github.com/lavanet/lava/x/plans/keeper"
"github.com/lavanet/lava/x/plans/types"
)
// NewPlanProposalsHandler creates a new governance Handler for a Plan
func NewPlansProposalsHandler(k keeper.Keeper) v1beta1.Handler {
return func(ctx sdk.Context, content v1beta1.Content) error {
switch c := content.(type) {
case *types.PlansAddProposal:
return handlePlansAddProposal(ctx, k, c)
case *types.PlansDelProposal:
return handlePlansDelProposal(ctx, k, c)
default:
log.Println("unrecognized plans proposal content")
return sdkerrors.Wrapf(legacyerrors.ErrUnknownRequest, "unrecognized plans proposal content type: %T", c)
}
}
}
func handlePlansAddProposal(ctx sdk.Context, k keeper.Keeper, p *types.PlansAddProposal) error {
// add the plans to the plan storage
for _, planElem := range p.Plans {
logger := k.Logger(ctx)
err := k.AddPlan(ctx, planElem, p.Modify)
if err != nil {
return utils.LavaFormatError("could not add new plan", err,
utils.Attribute{Key: "planIndex", Value: planElem.Index},
)
}
details := map[string]string{"planDetails": planElem.String()}
utils.LogLavaEvent(ctx, logger, types.PlanAddEventName, details, "Gov Proposal Accepted Plans")
}
return nil
}
func handlePlansDelProposal(ctx sdk.Context, k keeper.Keeper, p *types.PlansDelProposal) error {
// add the plans to the plan storage
for _, index := range p.Plans {
logger := k.Logger(ctx)
err := k.DelPlan(ctx, index)
if err != nil {
return utils.LavaFormatError("could not del existing plan", err,
utils.Attribute{Key: "planIndex", Value: index},
)
}
details := map[string]string{"index": index}
utils.LogLavaEvent(ctx, logger, types.PlanDelEventName, details, "Gov Proposal Accepted Plans")
}
return nil
}