mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-11-10 10:05:18 +00:00
remove shutdown module
This commit is contained in:
parent
4298564096
commit
98a044d7af
18
app/app.go
18
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()
|
||||
|
@ -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)
|
||||
}
|
@ -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
|
||||
}
|
@ -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
|
||||
}
|
@ -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)
|
@ -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
|
||||
)
|
Loading…
Reference in New Issue
Block a user