-
Notifications
You must be signed in to change notification settings - Fork 558
/
proposal_handler.go
44 lines (37 loc) · 1.57 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
package protorev
import (
sdk "github.com/cosmos/cosmos-sdk/types"
govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
errorsmod "cosmossdk.io/errors"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/osmosis-labs/osmosis/v21/x/protorev/keeper"
"github.com/osmosis-labs/osmosis/v21/x/protorev/types"
)
func NewProtoRevProposalHandler(k keeper.Keeper) govtypesv1.Handler {
return func(ctx sdk.Context, content govtypesv1.Content) error {
switch c := content.(type) {
case *types.SetProtoRevAdminAccountProposal:
return HandleSetProtoRevAdminAccount(ctx, k, c)
case *types.SetProtoRevEnabledProposal:
return HandleEnabledProposal(ctx, k, c)
default:
return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized %s proposal content type: %T", types.ModuleName, c)
}
}
}
// handleSetProtoRevAdminAccount handles a proposal to set the admin account. The admin account has the ability to
// update the hot routes, the developer account, and the number of pools that can be iterated over in a single transaction + block.
func HandleSetProtoRevAdminAccount(ctx sdk.Context, k keeper.Keeper, p *types.SetProtoRevAdminAccountProposal) error {
// Validate the account address
account, err := sdk.AccAddressFromBech32(p.Account)
if err != nil {
return err
}
k.SetAdminAccount(ctx, account)
return nil
}
// handleEnabledProposal handles a proposal to enable/disable the protorev module.
func HandleEnabledProposal(ctx sdk.Context, k keeper.Keeper, p *types.SetProtoRevEnabledProposal) error {
k.SetProtoRevEnabled(ctx, p.Enabled)
return nil
}