package evm import ( "encoding/json" "github.com/gorilla/mux" "github.com/spf13/cobra" abci "github.com/tendermint/tendermint/abci/types" "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/ethermint/x/evm/client/cli" "github.com/cosmos/ethermint/x/evm/keeper" "github.com/cosmos/ethermint/x/evm/types" ) var _ module.AppModuleBasic = AppModuleBasic{} var _ module.AppModule = AppModule{} // AppModuleBasic struct type AppModuleBasic struct{} // Name for app module basic func (AppModuleBasic) Name() string { return types.ModuleName } // RegisterCodec registers types for module func (AppModuleBasic) RegisterCodec(cdc *codec.Codec) { types.RegisterCodec(cdc) } // DefaultGenesis is json default structure func (AppModuleBasic) DefaultGenesis() json.RawMessage { return types.ModuleCdc.MustMarshalJSON(types.DefaultGenesisState()) } // ValidateGenesis is the validation check of the Genesis func (AppModuleBasic) ValidateGenesis(bz json.RawMessage) error { var genesisState types.GenesisState err := types.ModuleCdc.UnmarshalJSON(bz, &genesisState) if err != nil { return err } return genesisState.Validate() } // RegisterRESTRoutes Registers rest routes func (AppModuleBasic) RegisterRESTRoutes(ctx context.CLIContext, rtr *mux.Router) { } // GetQueryCmd Gets the root query command of this module func (AppModuleBasic) GetQueryCmd(cdc *codec.Codec) *cobra.Command { return cli.GetQueryCmd(types.ModuleName, cdc) } // GetTxCmd Gets the root tx command of this module func (AppModuleBasic) GetTxCmd(cdc *codec.Codec) *cobra.Command { return nil } //____________________________________________________________________________ // AppModule implements an application module for the evm module. type AppModule struct { AppModuleBasic keeper Keeper ak types.AccountKeeper } // NewAppModule creates a new AppModule Object func NewAppModule(k Keeper, ak types.AccountKeeper) AppModule { return AppModule{ AppModuleBasic: AppModuleBasic{}, keeper: k, ak: ak, } } // Name is module name func (AppModule) Name() string { return types.ModuleName } // RegisterInvariants interface for registering invariants func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { keeper.RegisterInvariants(ir, am.keeper) } // Route specifies path for transactions func (am AppModule) Route() string { return types.RouterKey } // NewHandler sets up a new handler for module func (am AppModule) NewHandler() sdk.Handler { return NewHandler(am.keeper) } // QuerierRoute sets up path for queries func (am AppModule) QuerierRoute() string { return types.ModuleName } // NewQuerierHandler sets up new querier handler for module func (am AppModule) NewQuerierHandler() sdk.Querier { return keeper.NewQuerier(am.keeper) } // BeginBlock function for module at start of each block func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { am.keeper.BeginBlock(ctx, req) } // EndBlock function for module at end of block func (am AppModule) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.ValidatorUpdate { return am.keeper.EndBlock(ctx, req) } // InitGenesis instantiates the genesis state func (am AppModule) InitGenesis(ctx sdk.Context, data json.RawMessage) []abci.ValidatorUpdate { var genesisState types.GenesisState types.ModuleCdc.MustUnmarshalJSON(data, &genesisState) return InitGenesis(ctx, am.keeper, am.ak, genesisState) } // ExportGenesis exports the genesis state to be used by daemon func (am AppModule) ExportGenesis(ctx sdk.Context) json.RawMessage { gs := ExportGenesis(ctx, am.keeper, am.ak) return types.ModuleCdc.MustMarshalJSON(gs) }