diff --git a/app/app.go b/app/app.go index 18ebdb7f..d1da18b4 100644 --- a/app/app.go +++ b/app/app.go @@ -337,7 +337,6 @@ func NewApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest bool, // initialize the app app.SetInitChainer(app.InitChainer) app.SetBeginBlocker(app.BeginBlocker) - // TODO app.SetAnteHandler(NewAnteHandler(app.accountKeeper, app.supplyKeeper, app.shutdownKeeper, auth.DefaultSigVerificationGasConsumer)) app.SetAnteHandler(auth.NewAnteHandler(app.accountKeeper, app.supplyKeeper, auth.DefaultSigVerificationGasConsumer)) app.SetEndBlocker(app.EndBlocker) @@ -352,23 +351,6 @@ func NewApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest bool, return app } -// func NewAnteHandler(ak auth.AccountKeeper, supplyKeeper supply.Keeper, shutdownKeeper shutdown.Keeper, sigGasConsumer SignatureVerificationGasConsumer) sdk.AnteHandler { -// return sdk.ChainAnteDecorators( -// auth.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first -// shutdownAnte.NewDisableMsgDecorator(shutdownKeeper), -// auth.NewMempoolFeeDecorator(), -// auth.NewValidateBasicDecorator(), -// auth.NewValidateMemoDecorator(ak), -// auth.NewConsumeGasForTxSizeDecorator(ak), -// auth.NewSetPubKeyDecorator(ak), // SetPubKeyDecorator must be called before all signature verification decorators -// auth.NewValidateSigCountDecorator(ak), -// auth.NewDeductFeeDecorator(ak, supplyKeeper), -// auth.NewSigGasConsumeDecorator(ak, sigGasConsumer), -// auth.NewSigVerificationDecorator(ak), -// auth.NewIncrementSequenceDecorator(ak), // innermost AnteDecorator -// ) -// } - // custom tx codec func MakeCodec() *codec.Codec { var cdc = codec.New() diff --git a/x/shutdown/ante/ante.go b/x/shutdown/ante/ante.go deleted file mode 100644 index a19da955..00000000 --- a/x/shutdown/ante/ante.go +++ /dev/null @@ -1,35 +0,0 @@ -package ante - -import ( - "fmt" - - "github.com/kava-labs/kava/x/shutdown/keeper" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -// DisableMsgDecorator errors if a tx contains a disallowed msg type and calls the next AnteHandler if all msgs are allowed -type DisableMsgDecorator struct { - shutdownKeeper keeper.Keeper -} - -func NewDisableMsgDecorator(shutdownKeeper keeper.Keeper) DisableMsgDecorator { - return DisableMsgDecorator{ - shutdownKeeper: shutdownKeeper, - } -} - -func (dmd DisableMsgDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { - - // get msg route, error if not allowed - disallowedRoutes := dmd.shutdownKeeper.GetMsgRoutes(ctx) - for _, m := range tx.GetMsgs() { - for _, r := range disallowedRoutes { - if r.Route == m.Route() && r.Msg == m.Type() { - return ctx, fmt.Errorf("route %s has been disabled, tx rejected", r) - } - } - } - // otherwise continue to next antehandler decorator - return next(ctx, tx, simulate) -} diff --git a/x/shutdown/keeper/keeper.go b/x/shutdown/keeper/keeper.go deleted file mode 100644 index 50118606..00000000 --- a/x/shutdown/keeper/keeper.go +++ /dev/null @@ -1,19 +0,0 @@ -package keeper - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/kava-labs/kava/x/shutdown/types" -) - -// Keeper stores routes that have been "broken" -type Keeper struct { -} - -func (k Keeper) GetMsgRoutes(ctx sdk.Context) []types.MsgRoute { - // TODO - return []types.MsgRoute{} -} - -func (k Keeper) SetMsgRoutes(ctx sdk.Context, routes []types.MsgRoute) { - // TODO -} diff --git a/x/shutdown/proposal_handler.go b/x/shutdown/proposal_handler.go deleted file mode 100644 index 97d2a251..00000000 --- a/x/shutdown/proposal_handler.go +++ /dev/null @@ -1,30 +0,0 @@ -package shutdown - -import ( - "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/gov" - - "github.com/kava-labs/kava/x/shutdown/keeper" - "github.com/kava-labs/kava/x/shutdown/types" -) - -func NewShutdownProposalHandler(k keeper.Keeper) gov.Handler { - return func(ctx sdk.Context, content gov.Content) sdk.Error { - switch c := content.(type) { - case types.ShutdownProposal: - return handleShutdownProposal(ctx, k, c) - - default: - errMsg := fmt.Sprintf("unrecognized %s proposal content type: %T", types.ModuleName, c) - return sdk.ErrUnknownRequest(errMsg) - } - } -} - -func handleShutdownProposal(ctx sdk.Context, k keeper.Keeper, c types.ShutdownProposal) sdk.Error { - // TODO validate proposal - k.SetMsgRoutes(ctx, c.MsgRoutes) - return nil -} diff --git a/x/shutdown/spec/README.md b/x/shutdown/spec/README.md deleted file mode 100644 index 2bfe0107..00000000 --- a/x/shutdown/spec/README.md +++ /dev/null @@ -1,18 +0,0 @@ - -# `shutdown` - -## Table of Contents - -## Overview - -The `x/shutdown` module allows certain message types to be disabled based on governance votes. - -Msgs and routes are disabled via an antehandler decorator. The decorator checks incoming all txs and rejects them if they contain a disallowed msg type. -Disallowed msg types are stored in a circuit breaker keeper. - -The list of disallowed msg types is updated via a custom governance proposal and handler. - -Design Alternatives: - -- store list of disallowed msg types in params, then we don't need the custom gov proposal -- replace the app Router with a custom one to avoid using the antehandler - can't be done with current baseapp, but v0.38.x enables this. (https://github.com/cosmos/cosmos-sdk/issues/5455) \ No newline at end of file diff --git a/x/shutdown/types/types.go b/x/shutdown/types/types.go deleted file mode 100644 index 110b5349..00000000 --- a/x/shutdown/types/types.go +++ /dev/null @@ -1,62 +0,0 @@ -package types - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" -) - -type MsgRoute struct { - Route string - Msg string // how best to store a Msg type? -} - -const ( - ProposalTypeShutdown = "Shutdown" -) - -// Assert ShutdownProposal implements govtypes.Content at compile-time -var _ govtypes.Content = ShutdownProposal{} - -type ShutdownProposal struct { - Title string - Description string - MsgRoutes []MsgRoute -} - -// GetTitle returns the title of a community pool spend proposal. -func (sp ShutdownProposal) GetTitle() string { return sp.Title } - -// GetDescription returns the description of a community pool spend proposal. -func (sp ShutdownProposal) GetDescription() string { return sp.Description } - -// GetDescription returns the routing key of a community pool spend proposal. -func (sp ShutdownProposal) ProposalRoute() string { return RouterKey } - -// ProposalType returns the type of a community pool spend proposal. -func (sp ShutdownProposal) ProposalType() string { return ProposalTypeShutdown } - -// ValidateBasic runs basic stateless validity checks -func (sp ShutdownProposal) ValidateBasic() sdk.Error { - err := govtypes.ValidateAbstract(DefaultCodespace, sp) - if err != nil { - return err - } - // TODO - return nil -} - -// String implements the Stringer interface. -func (sp ShutdownProposal) String() string { - // TODO - return "" -} - -const ( - DefaultCodespace sdk.CodespaceType = ModuleName - - // ModuleName is the module name constant used in many places - ModuleName = "shutdown" - - // RouterKey is the message route for distribution - RouterKey = ModuleName -)