package main import ( "encoding/json" "io" "github.com/spf13/cobra" "github.com/spf13/viper" abci "github.com/tendermint/tendermint/abci/types" tmamino "github.com/tendermint/tendermint/crypto/encoding/amino" "github.com/tendermint/tendermint/libs/cli" "github.com/tendermint/tendermint/libs/log" tmtypes "github.com/tendermint/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client/flags" clientkeys "github.com/cosmos/cosmos-sdk/client/keys" "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/cosmos/cosmos-sdk/server" "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/bank" "github.com/cosmos/cosmos-sdk/x/genutil" genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/ethermint/app" "github.com/cosmos/ethermint/client" "github.com/cosmos/ethermint/codec" "github.com/cosmos/ethermint/crypto" ) const flagInvCheckPeriod = "inv-check-period" var invCheckPeriod uint func main() { cobra.EnableCommandSorting = false cdc := codec.MakeCodec(app.ModuleBasics) appCodec := codec.NewAppCodec(cdc) tmamino.RegisterKeyType(crypto.PubKeySecp256k1{}, crypto.PubKeyAminoName) tmamino.RegisterKeyType(crypto.PrivKeySecp256k1{}, crypto.PrivKeyAminoName) keyring.CryptoCdc = cdc genutil.ModuleCdc = cdc genutiltypes.ModuleCdc = cdc clientkeys.KeysCdc = cdc config := sdk.GetConfig() config.SetBech32PrefixForAccount(sdk.Bech32PrefixAccAddr, sdk.Bech32PrefixAccPub) config.SetBech32PrefixForValidator(sdk.Bech32PrefixValAddr, sdk.Bech32PrefixValPub) config.SetBech32PrefixForConsensusNode(sdk.Bech32PrefixConsAddr, sdk.Bech32PrefixConsPub) config.Seal() ctx := server.NewDefaultContext() rootCmd := &cobra.Command{ Use: "emintd", Short: "Ethermint App Daemon (server)", PersistentPreRunE: server.PersistentPreRunEFn(ctx), } // CLI commands to initialize the chain rootCmd.AddCommand( client.ValidateChainID( genutilcli.InitCmd(ctx, cdc, app.ModuleBasics, app.DefaultNodeHome), ), genutilcli.CollectGenTxsCmd(ctx, cdc, bank.GenesisBalancesIterator{}, app.DefaultNodeHome), genutilcli.MigrateGenesisCmd(ctx, cdc), genutilcli.GenTxCmd( ctx, cdc, app.ModuleBasics, staking.AppModuleBasic{}, bank.GenesisBalancesIterator{}, app.DefaultNodeHome, app.DefaultCLIHome, ), genutilcli.ValidateGenesisCmd(ctx, cdc, app.ModuleBasics), client.TestnetCmd(ctx, cdc, app.ModuleBasics, bank.GenesisBalancesIterator{}), // AddGenesisAccountCmd allows users to add accounts to the genesis file AddGenesisAccountCmd(ctx, cdc, appCodec, app.DefaultNodeHome, app.DefaultCLIHome), flags.NewCompletionCmd(rootCmd, true), ) // Tendermint node base commands server.AddCommands(ctx, cdc, rootCmd, newApp, exportAppStateAndTMValidators) // prepare and add flags executor := cli.PrepareBaseCmd(rootCmd, "EM", app.DefaultNodeHome) rootCmd.PersistentFlags().UintVar(&invCheckPeriod, flagInvCheckPeriod, 0, "Assert registered invariants every N blocks") err := executor.Execute() if err != nil { panic(err) } } func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer) abci.Application { return app.NewEthermintApp(logger, db, traceStore, true, 0, baseapp.SetPruning(store.NewPruningOptionsFromString(viper.GetString("pruning")))) } func exportAppStateAndTMValidators( logger log.Logger, db dbm.DB, traceStore io.Writer, height int64, forZeroHeight bool, jailWhiteList []string, ) (json.RawMessage, []tmtypes.GenesisValidator, error) { if height != -1 { emintApp := app.NewEthermintApp(logger, db, traceStore, true, 0) err := emintApp.LoadHeight(height) if err != nil { return nil, nil, err } return emintApp.ExportAppStateAndValidators(forZeroHeight, jailWhiteList) } emintApp := app.NewEthermintApp(logger, db, traceStore, true, 0) return emintApp.ExportAppStateAndValidators(forZeroHeight, jailWhiteList) }