diff --git a/bridge/broadcaster/broadcaster.go b/bridge/broadcaster/broadcaster.go index 609f36bc..3660ec6f 100644 --- a/bridge/broadcaster/broadcaster.go +++ b/bridge/broadcaster/broadcaster.go @@ -6,8 +6,8 @@ import ( "sync" "time" + "cosmossdk.io/log" abci "github.com/cometbft/cometbft/abci/types" - "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" clienttx "github.com/cosmos/cosmos-sdk/client/tx" diff --git a/bridge/broadcaster/broadcaster_test.go b/bridge/broadcaster/broadcaster_test.go index d2a0d366..364cc225 100644 --- a/bridge/broadcaster/broadcaster_test.go +++ b/bridge/broadcaster/broadcaster_test.go @@ -101,7 +101,7 @@ func TestBroadcastToHeimdall(t *testing.T) { t.Parallel() viper.Set(helper.CometBFTNodeFlag, dummyCometBFTNodeUrl) - viper.Set("log_level", "info") + viper.Set(helper.LogLevel, "info") srvconf := serverconfig.DefaultConfig() configuration := helper.GetDefaultHeimdallConfig() diff --git a/bridge/cmd/root.go b/bridge/cmd/root.go index a867e8eb..043c6342 100644 --- a/bridge/cmd/root.go +++ b/bridge/cmd/root.go @@ -8,7 +8,7 @@ import ( "path/filepath" "time" - cometbftLogger "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/log" rpcserver "github.com/cometbft/cometbft/rpc/jsonrpc/server" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/spf13/cobra" @@ -53,13 +53,13 @@ var rootCmd = &cobra.Command{ } // BridgeCommands returns command for bridge service -func BridgeCommands(v *viper.Viper, loggerInstance cometbftLogger.Logger, caller string) *cobra.Command { +func BridgeCommands(v *viper.Viper, loggerInstance log.Logger, caller string) *cobra.Command { DecorateWithBridgeRootFlags(rootCmd, v, loggerInstance, caller) return rootCmd } // DecorateWithBridgeRootFlags is called when bridge flags needs to be added to command -func DecorateWithBridgeRootFlags(cmd *cobra.Command, v *viper.Viper, loggerInstance cometbftLogger.Logger, caller string) { +func DecorateWithBridgeRootFlags(cmd *cobra.Command, v *viper.Viper, loggerInstance log.Logger, caller string) { cmd.PersistentFlags().StringP(helper.CometBFTNodeFlag, "n", helper.DefaultCometBFTNode, "Node to connect to") if err := v.BindPFlag(helper.CometBFTNodeFlag, cmd.PersistentFlags().Lookup(helper.CometBFTNodeFlag)); err != nil { diff --git a/bridge/cmd/start.go b/bridge/cmd/start.go index 79207b45..a394d0b4 100644 --- a/bridge/cmd/start.go +++ b/bridge/cmd/start.go @@ -282,13 +282,6 @@ func GetStartCmd() *cobra.Command { }, } - // log level - startCmd.Flags().String(helper.LogLevel, "info", "Log level for bridge") - - if err := viper.BindPFlag(helper.LogLevel, startCmd.Flags().Lookup(helper.LogLevel)); err != nil { - logger.Error("GetStartCmd | BindPFlag | logLevel", "Error", err) - } - startCmd.Flags().Bool("all", false, "Start all bridge services") if err := viper.BindPFlag("all", startCmd.Flags().Lookup("all")); err != nil { diff --git a/bridge/listener/base.go b/bridge/listener/base.go index 0dc767b5..53c33615 100644 --- a/bridge/listener/base.go +++ b/bridge/listener/base.go @@ -5,7 +5,7 @@ import ( "math/big" "time" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/log" rpchttp "github.com/cometbft/cometbft/rpc/client/http" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" diff --git a/bridge/listener/rootchain_log.go b/bridge/listener/rootchain_log.go index fb40ab28..e86e3b2b 100644 --- a/bridge/listener/rootchain_log.go +++ b/bridge/listener/rootchain_log.go @@ -63,7 +63,7 @@ func (rl *RootChainListener) handleStakedLog(vLog types.Log, selectedEvent *abi. rl.Logger.Error("Error while parsing event", "name", selectedEvent.Name, "error", err) } - if !util.IsPubKeyFirstByteValid(pubKey[0:1]) { + if !helper.IsPubKeyFirstByteValid(pubKey[0:1]) { rl.Logger.Error("public key first byte mismatch", "expected", "0x04", "received", pubKey[0:1]) } @@ -107,7 +107,7 @@ func (rl *RootChainListener) handleSignerChangeLog(vLog types.Log, selectedEvent rl.Logger.Error("Error while parsing event", "name", selectedEvent.Name, "error", err) } - if bytes.Equal(event.SignerPubkey, pubKey[1:]) && util.IsPubKeyFirstByteValid(pubKey[0:1]) { + if bytes.Equal(event.SignerPubkey, pubKey[1:]) && helper.IsPubKeyFirstByteValid(pubKey[0:1]) { rl.SendTaskWithDelay("sendSignerChangeToHeimdall", selectedEvent.Name, logBytes, 0, event) } else if isCurrentValidator, delay := util.CalculateTaskDelay(event, rl.cliCtx.Codec); isCurrentValidator { rl.SendTaskWithDelay("sendSignerChangeToHeimdall", selectedEvent.Name, logBytes, delay, event) diff --git a/bridge/listener/service.go b/bridge/listener/service.go index e6bac097..e2187a90 100644 --- a/bridge/listener/service.go +++ b/bridge/listener/service.go @@ -1,12 +1,14 @@ package listener import ( + "os" + + logger "github.com/cometbft/cometbft/libs/log" common "github.com/cometbft/cometbft/libs/service" rpchttp "github.com/cometbft/cometbft/rpc/client/http" "github.com/cosmos/cosmos-sdk/codec" "github.com/0xPolygon/heimdall-v2/bridge/queue" - "github.com/0xPolygon/heimdall-v2/bridge/util" "github.com/0xPolygon/heimdall-v2/helper" ) @@ -30,7 +32,7 @@ func NewListenerService(cdc codec.Codec, queueConnector *queue.QueueConnector, h // creating listener object listenerService := &ListenerService{} - listenerService.BaseService = *common.NewBaseService(util.Logger().With("service", "listener"), listenerServiceStr, listenerService) + listenerService.BaseService = *common.NewBaseService(logger.NewTMLogger(logger.NewSyncWriter(os.Stdout)).With("service", "listener"), listenerServiceStr, listenerService) rootchainListener := NewRootChainListener() rootchainListener.BaseListener = *NewBaseListener(cdc, queueConnector, httpClient, helper.GetMainClient(), rootChainListenerStr, rootchainListener) diff --git a/bridge/processor/base.go b/bridge/processor/base.go index f721cf21..11690f2e 100644 --- a/bridge/processor/base.go +++ b/bridge/processor/base.go @@ -7,7 +7,7 @@ import ( "net/http" "time" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/log" rpchttp "github.com/cometbft/cometbft/rpc/client/http" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" diff --git a/bridge/processor/checkpoint.go b/bridge/processor/checkpoint.go index 9f164f62..52af73c3 100644 --- a/bridge/processor/checkpoint.go +++ b/bridge/processor/checkpoint.go @@ -471,7 +471,7 @@ func (cp *CheckpointProcessor) createAndSendCheckpointToHeimdall(checkpointConte "start", start, "end", end, "root", common.Bytes2Hex(root), - "accountRoot", accountRootHash, + "accountRoot", common.Bytes2Hex(accountRootHash), ) chainParams := checkpointContext.ChainmanagerParams.ChainParams diff --git a/bridge/processor/clerk_test.go b/bridge/processor/clerk_test.go index f2e84220..ab8f5876 100644 --- a/bridge/processor/clerk_test.go +++ b/bridge/processor/clerk_test.go @@ -259,7 +259,7 @@ func prepareClerkProcessor() (*ClerkProcessor, error) { cdc := codec.NewProtoCodec(interfaceRegistry) viper.Set(helper.CometBFTNodeFlag, dummyCometBFTNode) - viper.Set("log_level", "debug") + viper.Set(helper.LogLevel, "debug") helper.InitTestHeimdallConfig("") srvconf := serverconfig.DefaultConfig() @@ -296,7 +296,7 @@ func prepareRootChainListener() (*listener.RootChainListener, func(), error) { cdc := codec.NewProtoCodec(interfaceRegistry) viper.Set(helper.CometBFTNodeFlag, dummyCometBFTNode) - viper.Set("log_level", "debug") + viper.Set(helper.LogLevel, "debug") srvconf := serverconfig.DefaultConfig() configuration := helper.GetDefaultHeimdallConfig() @@ -312,7 +312,6 @@ func prepareRootChainListener() (*listener.RootChainListener, func(), error) { stopFn := func() {} rcl := listener.NewRootChainListener() - rcl.Logger = helper.Logger server, err := getTestServer() if err != nil { diff --git a/bridge/processor/stake.go b/bridge/processor/stake.go index bdc83406..9d984e29 100644 --- a/bridge/processor/stake.go +++ b/bridge/processor/stake.go @@ -14,6 +14,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" authTx "github.com/cosmos/cosmos-sdk/x/auth/tx" "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/0xPolygon/heimdall-v2/bridge/util" @@ -89,7 +90,7 @@ func (sp *StakingProcessor) sendValidatorJoinToHeimdall(eventName string, logByt "nonce", event.Nonce, "amount", event.Amount, "totalAmount", event.Total, - "SignerPubkey", string(signerPubKey[:]), + "SignerPubkey", common.Bytes2Hex(signerPubKey), "txHash", vLog.TxHash.String(), "logIndex", uint64(vLog.Index), "blockNumber", vLog.BlockNumber, @@ -115,7 +116,7 @@ func (sp *StakingProcessor) sendValidatorJoinToHeimdall(eventName string, logByt "nonce", event.Nonce, "amount", event.Amount, "totalAmount", event.Total, - "SignerPubkey", string(signerPubKey[:]), + "SignerPubkey", common.Bytes2Hex(signerPubKey), "txHash", vLog.TxHash.String(), "logIndex", uint64(vLog.Index), "blockNumber", vLog.BlockNumber, @@ -347,7 +348,7 @@ func (sp *StakingProcessor) sendSignerChangeToHeimdall(eventName string, logByte newSignerPubKey = util.AppendPrefix(newSignerPubKey) } - if !util.IsPubKeyFirstByteValid(newSignerPubKey) { + if !helper.IsPubKeyFirstByteValid(newSignerPubKey) { sp.Logger.Error("Invalid signer pubkey", "event", eventName, "newSignerPubKey", newSignerPubKey) return fmt.Errorf("invalid signer pubkey") } @@ -357,7 +358,7 @@ func (sp *StakingProcessor) sendSignerChangeToHeimdall(eventName string, logByte "event", eventName, "validatorID", event.ValidatorId, "nonce", event.Nonce, - "NewSignerPubkey", string(newSignerPubKey[:]), + "NewSignerPubkey", common.Bytes2Hex(newSignerPubKey), "oldSigner", event.OldSigner.Hex(), "newSigner", event.NewSigner.Hex(), "txHash", vLog.TxHash.String(), @@ -386,7 +387,7 @@ func (sp *StakingProcessor) sendSignerChangeToHeimdall(eventName string, logByte "event", eventName, "validatorID", event.ValidatorId, "nonce", event.Nonce, - "NewSignerPubkey", string(newSignerPubKey[:]), + "NewSignerPubkey", common.Bytes2Hex(newSignerPubKey), "oldSigner", event.OldSigner.Hex(), "newSigner", event.NewSigner.Hex(), "txHash", vLog.TxHash.String(), diff --git a/bridge/queue/connector.go b/bridge/queue/connector.go index 47f3e5f4..54a9f20e 100644 --- a/bridge/queue/connector.go +++ b/bridge/queue/connector.go @@ -1,9 +1,9 @@ package queue import ( + "cosmossdk.io/log" "github.com/RichardKnop/machinery/v1" "github.com/RichardKnop/machinery/v1/config" - "github.com/cometbft/cometbft/libs/log" "github.com/streadway/amqp" ) diff --git a/bridge/util/common.go b/bridge/util/common.go index 728620ba..e100d3d4 100644 --- a/bridge/util/common.go +++ b/bridge/util/common.go @@ -9,18 +9,15 @@ import ( "net/http" "net/url" "strconv" - "sync" "time" - mLog "github.com/RichardKnop/machinery/v1/log" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" addressCodec "github.com/cosmos/cosmos-sdk/codec/address" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/pkg/errors" - "github.com/spf13/viper" "github.com/0xPolygon/heimdall-v2/contracts/statesender" "github.com/0xPolygon/heimdall-v2/helper" @@ -87,39 +84,9 @@ const ( BridgeDBFlag = "bridge-db" ) -var ( - logger log.Logger - loggerOnce sync.Once -) - // Logger returns logger singleton instance func Logger() log.Logger { - loggerOnce.Do(func() { - defaultLevel := "info" - logsWriter := helper.GetLogsWriter(helper.GetConfig().LogsWriterFile) - logger = log.NewTMLogger(log.NewSyncWriter(logsWriter)) - option, err := log.AllowLevel(viper.GetString("log_level")) - if err != nil { - // cosmos sdk is using different style of log format - // and levels don't map well, config.toml - // see: https://github.com/cosmos/cosmos-sdk/pull/8072 - logger.Error("Unable to parse logging level", "Error", err) - logger.Info("Using default log level") - option, err = log.AllowLevel(defaultLevel) - if err != nil { - logger.Error("failed to allow default log level", "Level", defaultLevel, "Error", err) - } - } - - logger = log.NewFilter(logger, option) - - // set no-op logger if log level is not debug for machinery - if viper.GetString("log_level") != "debug" { - mLog.SetDebug(NoopLogger{}) - } - }) - - return logger + return helper.Logger.With("module", "bridge") } // IsProposer checks if we are proposer diff --git a/cmd/heimdalld/cmd/commands.go b/cmd/heimdalld/cmd/commands.go index 507cfb66..27480738 100644 --- a/cmd/heimdalld/cmd/commands.go +++ b/cmd/heimdalld/cmd/commands.go @@ -126,6 +126,11 @@ func initAppConfig() (string, interface{}) { customAppTemplate := serverconfig.DefaultConfigTemplate + helper.DefaultConfigTemplate + stringConfgValue := viper.GetViper().GetString(helper.ChainFlag) + if stringConfgValue != "" { + customAppConfig.Custom.Chain = stringConfgValue + } + return customAppTemplate, customAppConfig } diff --git a/cmd/heimdalld/cmd/migration/verify/verify.go b/cmd/heimdalld/cmd/migration/verify/verify.go index e6e5a9e9..260058af 100644 --- a/cmd/heimdalld/cmd/migration/verify/verify.go +++ b/cmd/heimdalld/cmd/migration/verify/verify.go @@ -4,12 +4,10 @@ import ( "encoding/json" "errors" "fmt" - "os" "strconv" "cosmossdk.io/log" "cosmossdk.io/math" - logger "github.com/cometbft/cometbft/libs/log" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" cmttypes "github.com/cometbft/cometbft/types" dbm "github.com/cosmos/cosmos-db" @@ -24,7 +22,7 @@ import ( // VerifyMigration verifies the migration from Heimdall v1 to Heimdall v2 by consuming the migrated genesis file // and verifying balances, validators, bor spans, clerk events, and checkpoints -func VerifyMigration(hv1GenesisPath, hv2GenesisPath string, logger logger.Logger) error { +func VerifyMigration(hv1GenesisPath, hv2GenesisPath string, logger log.Logger) error { logger.Info("Verifying migration") hv1Genesis, err := utils.LoadJSONFromFile(hv1GenesisPath) @@ -37,7 +35,7 @@ func VerifyMigration(hv1GenesisPath, hv2GenesisPath string, logger logger.Logger appOptions := make(simtestutil.AppOptionsMap) appOptions[flags.FlagHome] = heimdallApp.DefaultNodeHome - app := heimdallApp.NewHeimdallApp(log.NewLogger(os.Stderr), db, nil, true, appOptions) + app := heimdallApp.NewHeimdallApp(logger, db, nil, true, appOptions) ctx := app.NewContextLegacy(true, cmtproto.Header{Height: app.LastBlockHeight()}) diff --git a/cmd/heimdalld/cmd/migration/verify/verify_hash.go b/cmd/heimdalld/cmd/migration/verify/verify_hash.go index 7a370b2c..0e3ca337 100644 --- a/cmd/heimdalld/cmd/migration/verify/verify_hash.go +++ b/cmd/heimdalld/cmd/migration/verify/verify_hash.go @@ -10,7 +10,7 @@ import ( "os" "time" - logger "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/log" ) const ( @@ -22,7 +22,7 @@ const ( // VerifyMigratedGenesisHash verifies the SHA256 hash of the migrated genesis file against a remote precomputed hash. // It computes the hash of the local file, fetches the precomputed hash from the remote JSON file, then compares the two hashes. -func VerifyMigratedGenesisHash(migratedGenesisFilePath string, logger logger.Logger) error { +func VerifyMigratedGenesisHash(migratedGenesisFilePath string, logger log.Logger) error { logger.Info("Generating migrated genesis hash...") localHash, err := computeFileHash(migratedGenesisFilePath) diff --git a/cmd/heimdalld/cmd/root.go b/cmd/heimdalld/cmd/root.go index 2cf0a829..24622d69 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -2,22 +2,21 @@ package heimdalld import ( "os" - "path" "cosmossdk.io/log" - "github.com/cometbft/cometbft/libs/cli" - dbm "github.com/cosmos/cosmos-db" + "github.com/cometbft/cometbft/cmd/cometbft/commands" + db "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/cosmos/cosmos-sdk/server" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/tx" txmodule "github.com/cosmos/cosmos-sdk/x/auth/tx/config" "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/rs/zerolog" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -37,17 +36,11 @@ type EncodingConfig struct { // NewRootCmd creates a new root command for heimdalld. It is called once in the // main function. func NewRootCmd() *cobra.Command { - dataDir := path.Join(viper.GetString(cli.HomeFlag), "data") - db, err := dbm.NewDB("application", dbm.GoLevelDBBackend, dataDir) - if err != nil { - panic(err) - } - // we "pre"-instantiate the application for getting the injected/configured encoding configuration // note, this is not necessary when using app wiring, as depinject can be directly used (see root_v2.go) // TODO HV2: https://polygon.atlassian.net/browse/POS-2762 - tempApp := app.NewHeimdallApp(log.NewLogger(os.Stderr), db, nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) + tempApp := app.NewHeimdallApp(logger, db.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) encodingConfig := EncodingConfig{ InterfaceRegistry: tempApp.InterfaceRegistry(), Codec: tempApp.AppCodec(), @@ -112,7 +105,37 @@ func NewRootCmd() *cobra.Command { customAppTemplate, customAppConfig := initAppConfig() customCMTConfig := initCometBFTConfig() - return server.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig, customCMTConfig) + if cmd.Name() != commands.InitFilesCmd.Name() && cmd.Name() != testnetCmdName { + helper.InitHeimdallConfig("") + } + + serverCtx, err := server.InterceptConfigsAndCreateContext(cmd, customAppTemplate, customAppConfig, customCMTConfig) + if err != nil { + return err + } + + // Overwrite default server logger + logger, err := server.CreateSDKLogger(serverCtx, cmd.OutOrStdout()) + if err != nil { + return err + } + serverCtx.Logger = logger.With(log.ModuleKey, "server") + + // Get log_level from from serverCtx.Viper + logLevelStr := serverCtx.Viper.GetString(helper.LogLevel) + + // Set log_level value to viper + viper.Set(helper.LogLevel, logLevelStr) + + // Overwrite default heimdall logger + logLevel, err := zerolog.ParseLevel(logLevelStr) + if err != nil { + return err + } + helper.Logger = log.NewLogger(cmd.OutOrStdout(), log.LevelOption(logLevel)) + + // Set server context + return server.SetCmdServerContext(cmd, serverCtx) }, PersistentPreRun: func(cmd *cobra.Command, _ []string) { // set the default command outputs @@ -133,7 +156,6 @@ func NewRootCmd() *cobra.Command { // add keyring to autocli opts autoCliOpts := tempApp.AutoCliOpts() - autoCliOpts.Keyring, _ = keyring.NewAutoCLIKeyring(initClientCtx.Keyring) autoCliOpts.ClientCtx = initClientCtx if err := autoCliOpts.EnhanceRootCommand(rootCmd); err != nil { diff --git a/cmd/heimdalld/cmd/testnet.go b/cmd/heimdalld/cmd/testnet.go index ee51be5a..fdfec89f 100644 --- a/cmd/heimdalld/cmd/testnet.go +++ b/cmd/heimdalld/cmd/testnet.go @@ -31,10 +31,12 @@ import ( topupTypes "github.com/0xPolygon/heimdall-v2/x/topup/types" ) +var testnetCmdName = "create-testnet" + // testnetCmd initialises files required to start heimdall testnet func testnetCmd(_ *server.Context, cdc *codec.LegacyAmino, mbm module.BasicManager) *cobra.Command { cmd := &cobra.Command{ - Use: "create-testnet", + Use: testnetCmdName, Short: "Initialize files for a Heimdall testnet", Long: `testnet will create "v" + "n" number of directories and populate each with necessary files (private validator, genesis, config, etc.). diff --git a/common/cli/tx.go b/common/cli/tx.go new file mode 100644 index 00000000..dd25fc26 --- /dev/null +++ b/common/cli/tx.go @@ -0,0 +1,106 @@ +package cli + +import ( + "context" + "fmt" + + "cosmossdk.io/log" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/ante" + authsign "github.com/cosmos/cosmos-sdk/x/auth/signing" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + + "github.com/0xPolygon/heimdall-v2/bridge/util" + "github.com/0xPolygon/heimdall-v2/helper" +) + +func BroadcastMsg(clientCtx client.Context, sender string, msg sdk.Msg, logger log.Logger) error { + // create tx factory + txf, err := MakeTxFactory(clientCtx, sender, logger) + if err != nil { + logger.Error("Error creating tx factory", "Error", err) + return err + } + // setting this to true to as the if block in BroadcastTx + // might cause a cancelled transaction. + clientCtx.SkipConfirm = true + account, err := util.GetAccount(clientCtx, sender) + if err != nil { + logger.Error("Error fetching account", "address", sender, "err", err) + return err + } + clientCtx = clientCtx.WithFromAddress(account.GetAddress()) + from := clientCtx.GetFromAddress() + authqueryClient := authtypes.NewQueryClient(clientCtx) + _, err = authqueryClient.Account(context.Background(), &authtypes.QueryAccountRequest{Address: from.String()}) + if err != nil { + logger.Error("Error fetching account", "Error", err) + return err + } + + _, err = txf.AccountRetriever().GetAccount(clientCtx, from) + if err != nil { + logger.Error("Error ensuring account exists", "Error", err) + return err + } + + txResponse, err := helper.BroadcastTx(clientCtx, txf, msg) + if err != nil { + logger.Error("Error broadcasting tx", "Error", err) + return err + } + // Now check if the transaction response is not okay + if txResponse.Code != abci.CodeTypeOK { + logger.Error("Transaction response returned a non-ok code", "txResponseCode", txResponse.Code) + return fmt.Errorf("broadcast succeeded but received non-ok response code: %d", txResponse.Code) + } + + logger.Info(fmt.Sprintf("Tx with hash %s broadcasted successfully.", txResponse.TxHash)) + + return nil +} + +func MakeTxFactory(clictx client.Context, address string, logger log.Logger) (tx.Factory, error) { + account, err := util.GetAccount(clictx, address) + if err != nil { + logger.Error("Error fetching account", "address", address, "err", err) + return tx.Factory{}, err + } + + accNum := account.GetAccountNumber() + accSeq := account.GetSequence() + + signMode, err := authsign.APISignModeToInternal(clictx.TxConfig.SignModeHandler().DefaultMode()) + if err != nil { + logger.Error("Error getting sign mode", "err", err) + return tx.Factory{}, err + } + + authParams, err := util.GetAccountParamsURL(clictx.Codec) + if err != nil { + logger.Error("Error getting account params", "err", err) + return tx.Factory{}, err + } + + chainParam, err := util.GetChainmanagerParams(clictx.Codec) + if err != nil { + return tx.Factory{}, err + } + + txf := tx.Factory{}. + WithTxConfig(clictx.TxConfig). + WithAccountRetriever(clictx.AccountRetriever). + WithChainID(chainParam.ChainParams.HeimdallChainId). + WithSignMode(signMode). + WithAccountNumber(accNum). + WithSequence(accSeq). + WithKeybase(clictx.Keyring). + WithSignMode(signMode). + WithFees(ante.DefaultFeeWantedPerTx.String()). + WithGas(authParams.MaxTxGas) + + return txf, nil +} diff --git a/go.mod b/go.mod index 9f2dd86c..dcbfcb7d 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.23.2 require ( cosmossdk.io/api v0.7.5 - cosmossdk.io/client/v2 v2.0.0-beta.4.0.20240918122632-1879050ca719 + cosmossdk.io/client/v2 v2.0.0-beta.6 cosmossdk.io/collections v0.4.0 cosmossdk.io/core v0.11.1 cosmossdk.io/errors v1.0.1 @@ -32,6 +32,7 @@ require ( github.com/maticnetwork/polyproto v0.0.4 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 + github.com/rs/zerolog v1.33.0 github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 github.com/streadway/amqp v1.1.0 @@ -216,7 +217,6 @@ require ( github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/cors v1.11.1 // indirect - github.com/rs/zerolog v1.33.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect @@ -278,7 +278,7 @@ require ( // HV2 related packages replace ( cosmossdk.io/api => github.com/0xPolygon/cosmos-sdk/api v0.7.5 - cosmossdk.io/client/v2 => github.com/0xPolygon/cosmos-sdk/client/v2 v2.0.0-beta.1 + cosmossdk.io/client/v2 => github.com/0xPolygon/cosmos-sdk/client/v2 v2.0.0-beta.6 cosmossdk.io/collections => github.com/0xPolygon/cosmos-sdk/collections v0.4.0 cosmossdk.io/core => github.com/0xPolygon/cosmos-sdk/core v0.11.3-0.20241126102051-89dc71d02611 cosmossdk.io/errors => github.com/0xPolygon/cosmos-sdk/errors v1.0.0-beta.7.0.20241126102051-89dc71d02611 diff --git a/go.sum b/go.sum index 435b71b0..0ac2f76b 100644 --- a/go.sum +++ b/go.sum @@ -62,8 +62,8 @@ github.com/0xPolygon/cosmos-sdk v0.1.9-beta-polygon h1:HB5knbsZ5d7IkaFL5/jqr5Fia github.com/0xPolygon/cosmos-sdk v0.1.9-beta-polygon/go.mod h1:8CFB8IPqQQf8pmmrOUARIZGQyc97zz0618jFmcpkeIk= github.com/0xPolygon/cosmos-sdk/api v0.7.5 h1:47ceB5Pt9iryYj0W7KEUVYoNNaK6c6E/y5bjaIlQxcw= github.com/0xPolygon/cosmos-sdk/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -github.com/0xPolygon/cosmos-sdk/client/v2 v2.0.0-beta.1 h1:XV7f44uAJ1p1w9j15uzm2S8VOSusHFJ1UWvkUj0EK7g= -github.com/0xPolygon/cosmos-sdk/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= +github.com/0xPolygon/cosmos-sdk/client/v2 v2.0.0-beta.6 h1:+6AxZcMTWHaRHV0HILf/rADWexzB4FJckdO/DnUlk+s= +github.com/0xPolygon/cosmos-sdk/client/v2 v2.0.0-beta.6/go.mod h1:4p0P6o0ro+FizakJUYS9SeM94RNbv0thLmkHRw5o5as= github.com/0xPolygon/cosmos-sdk/collections v0.4.0 h1:4IbbwBQLf9eO1/5OgR/AjJafvpZuwLyheyluAAEoq2A= github.com/0xPolygon/cosmos-sdk/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= github.com/0xPolygon/cosmos-sdk/core v0.11.3-0.20241126102051-89dc71d02611 h1:nwnJiMlk8fOpau94man8IUfsWvbv/7uSW5djVsyrzO4= diff --git a/helper/call_test.go b/helper/call_test.go index 804fe30e..281e9caf 100644 --- a/helper/call_test.go +++ b/helper/call_test.go @@ -29,7 +29,7 @@ func TestCheckpointSigs(t *testing.T) { t.Parallel() viper.Set(CometBFTNodeFlag, testCometBFTNode) - viper.Set("log_level", "info") + viper.Set(LogLevel, "info") InitTestHeimdallConfig("") contractCallerObj, err := NewContractCaller() diff --git a/helper/config.go b/helper/config.go index 82234575..883b1e23 100644 --- a/helper/config.go +++ b/helper/config.go @@ -9,16 +9,16 @@ import ( "strings" "time" + logger "cosmossdk.io/log" cfg "github.com/cometbft/cometbft/config" "github.com/cometbft/cometbft/crypto/secp256k1" - cmtcrypto "github.com/cometbft/cometbft/crypto/secp256k1" - logger "github.com/cometbft/cometbft/libs/log" "github.com/cometbft/cometbft/privval" cmTypes "github.com/cometbft/cometbft/types" addressCodec "github.com/cosmos/cosmos-sdk/codec/address" serverconfig "github.com/cosmos/cosmos-sdk/server/config" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/rpc" + "github.com/rs/zerolog" "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/tendermint/go-amino" @@ -141,7 +141,7 @@ var DefaultNodeHome = os.ExpandEnv("$HOME/var/lib/heimdall") var cdc = amino.NewCodec() func init() { - Logger = logger.NewTMLogger(logger.NewSyncWriter(os.Stdout)) + Logger = logger.NewLogger(os.Stdout, logger.LevelOption(zerolog.InfoLevel)) } // CustomConfig represents heimdall config @@ -249,9 +249,10 @@ func InitHeimdallConfig(homeDir string) { // InitHeimdallConfigWith initializes passed heimdall/tendermint config files func InitHeimdallConfigWith(homeDir string, heimdallConfigFileFromFlag string) { + var err error + if strings.Compare(homeDir, "") == 0 { - Logger.Error("home directory is mentioned") - return + panic("home directory is not specified") } if strings.Compare(conf.Custom.BorRPCUrl, "") != 0 || strings.Compare(conf.Custom.BorGRPCUrl, "") != 0 { @@ -272,12 +273,12 @@ func InitHeimdallConfigWith(homeDir string, heimdallConfigFileFromFlag string) { } // Handle errors reading the config file - if err := heimdallViper.ReadInConfig(); err != nil { + if err = heimdallViper.ReadInConfig(); err != nil { log.Fatal(err) } // unmarshal configuration from the standard configuration file - if err := heimdallViper.UnmarshalExact(&conf); err != nil { + if err = heimdallViper.UnmarshalExact(&conf); err != nil { log.Fatalln("unable to unmarshall config", "Error", err) } @@ -286,7 +287,7 @@ func InitHeimdallConfigWith(homeDir string, heimdallConfigFileFromFlag string) { heimdallViperFromFlag := viper.New() heimdallViperFromFlag.SetConfigFile(heimdallConfigFileFromFlag) // set flag config file explicitly - err := heimdallViperFromFlag.ReadInConfig() + err = heimdallViperFromFlag.ReadInConfig() if err != nil { // Handle errors reading the config file sybmitted as a flag log.Fatalln("unable to read config file submitted via flag", "Error", err) } @@ -301,16 +302,22 @@ func InitHeimdallConfigWith(homeDir string, heimdallConfigFileFromFlag string) { } // update configuration data with submitted flags - if err := conf.UpdateWithFlags(viper.GetViper(), Logger); err != nil { + if err = conf.UpdateWithFlags(viper.GetViper(), Logger); err != nil { log.Fatalln("unable to read flag values. Check log for details.", "Error", err) } // perform check for json logging + logLevelStr := viper.GetString(LogLevel) + logLevel, err := zerolog.ParseLevel(logLevelStr) + if err != nil { + // Default to info in case of error + logLevel = zerolog.InfoLevel + } if conf.Custom.LogsType == "json" { - Logger = logger.NewTMJSONLogger(logger.NewSyncWriter(GetLogsWriter(conf.Custom.LogsWriterFile))) + Logger = logger.NewLogger(GetLogsWriter(conf.Custom.LogsWriterFile), logger.LevelOption(logLevel), logger.OutputJSONOption()) } else { // default fallback - Logger = logger.NewTMLogger(logger.NewSyncWriter(GetLogsWriter(conf.Custom.LogsWriterFile))) + Logger = logger.NewLogger(GetLogsWriter(conf.Custom.LogsWriterFile), logger.LevelOption(logLevel)) } // perform checks for timeout @@ -344,7 +351,6 @@ func InitHeimdallConfigWith(homeDir string, heimdallConfigFileFromFlag string) { conf.Custom.SHMaxDepthDuration = DefaultSHMaxDepthDuration } - var err error if mainRPCClient, err = rpc.Dial(conf.Custom.EthRPCUrl); err != nil { log.Fatalln("Unable to dial via ethClient", "URL", conf.Custom.EthRPCUrl, "chain", "eth", "error", err) } @@ -998,7 +1004,7 @@ func InitTestHeimdallConfig(chain string) { SetTestConfig(customAppConf) - privKeyObject = cmtcrypto.GenPrivKey() + privKeyObject = secp256k1.GenPrivKey() pubKeyObject = privKeyObject.PubKey().(secp256k1.PubKey) } diff --git a/helper/config_test.go b/helper/config_test.go index 82e395d4..4c9683a3 100644 --- a/helper/config_test.go +++ b/helper/config_test.go @@ -15,7 +15,7 @@ func TestHeimdallConfig(t *testing.T) { // cli context cometBFTNode := "tcp://localhost:26657" viper.Set(CometBFTNodeFlag, cometBFTNode) - viper.Set("log_level", "info") + viper.Set(LogLevel, "info") InitTestHeimdallConfig("") diff --git a/x/bor/client/cli/tx.go b/x/bor/client/cli/tx.go index 729d28d0..49a3f980 100644 --- a/x/bor/client/cli/tx.go +++ b/x/bor/client/cli/tx.go @@ -6,15 +6,19 @@ import ( "cosmossdk.io/core/address" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/cosmos/cosmos-sdk/client/flags" codec "github.com/cosmos/cosmos-sdk/codec/address" "github.com/ethereum/go-ethereum/common" "github.com/spf13/cobra" "github.com/spf13/viper" + "github.com/0xPolygon/heimdall-v2/common/cli" + "github.com/0xPolygon/heimdall-v2/helper" "github.com/0xPolygon/heimdall-v2/x/bor/types" ) +var logger = helper.Logger.With("module", "bor/client/cli") + // NewTxCmd returns a root CLI command handler for all x/bor transaction commands. func NewTxCmd() *cobra.Command { txCmd := &cobra.Command{ @@ -100,7 +104,7 @@ func NewSpanProposalCmd(ac address.Codec) *cobra.Command { seed := common.HexToHash(nextSpanSeedResponse.Seed) msg := types.NewMsgProposeSpan(spanID, proposer, startBlock, startBlock+spanDuration-1, borChainID, seed.Bytes(), nextSpanSeedResponse.SeedAuthor) - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + return cli.BroadcastMsg(clientCtx, proposer, msg, logger) }, } @@ -108,6 +112,7 @@ func NewSpanProposalCmd(ac address.Codec) *cobra.Command { cmd.Flags().String(FlagSpanId, "", "--span-id=") cmd.Flags().String(FlagBorChainId, "", "--bor-chain-id=") cmd.Flags().String(FlagStartBlock, "", "--start-block=") + cmd.Flags().String(flags.FlagChainID, "", "--chain-id=") if err := cmd.MarkFlagRequired(FlagBorChainId); err != nil { fmt.Printf("PostSendProposeSpanTx | MarkFlagRequired | FlagBorChainId Error: %v", err) diff --git a/x/chainmanager/module.go b/x/chainmanager/module.go index fa580026..cd5542ad 100644 --- a/x/chainmanager/module.go +++ b/x/chainmanager/module.go @@ -81,6 +81,7 @@ func (am AppModule) IsAppModule() {} // RegisterServices registers module services. func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServer(&am.keeper)) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) } // NewAppModule creates a new AppModule object diff --git a/x/checkpoint/autocli.go b/x/checkpoint/autocli.go index 5175e333..3c748a0a 100644 --- a/x/checkpoint/autocli.go +++ b/x/checkpoint/autocli.go @@ -89,7 +89,8 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { }, }, Tx: &autocliv1.ServiceCommandDescriptor{ - Service: checkpoint.Msg_ServiceDesc.ServiceName, + Service: checkpoint.Msg_ServiceDesc.ServiceName, + EnhanceCustomCommand: true, RpcCommandOptions: []*autocliv1.RpcCommandOptions{ { RpcMethod: "CheckpointNoAck", @@ -99,6 +100,14 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { {ProtoField: "from"}, }, }, + { + RpcMethod: "CheckpointAck", + Skip: true, + }, + { + RpcMethod: "Checkpoint", + Skip: true, + }, }, }, } diff --git a/x/checkpoint/client/cli/tx.go b/x/checkpoint/client/cli/tx.go index 1d7b1073..fb169013 100644 --- a/x/checkpoint/client/cli/tx.go +++ b/x/checkpoint/client/cli/tx.go @@ -2,24 +2,18 @@ package cli import ( "bytes" - "context" "fmt" "strconv" "cosmossdk.io/core/address" - abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" codec "github.com/cosmos/cosmos-sdk/codec/address" - "github.com/cosmos/cosmos-sdk/x/auth/ante" - authsign "github.com/cosmos/cosmos-sdk/x/auth/signing" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/ethereum/go-ethereum/common" "github.com/spf13/cobra" "github.com/spf13/viper" - "github.com/0xPolygon/heimdall-v2/bridge/util" + "github.com/0xPolygon/heimdall-v2/common/cli" "github.com/0xPolygon/heimdall-v2/helper" chainmanagerTypes "github.com/0xPolygon/heimdall-v2/x/chainmanager/types" checkpointTypes "github.com/0xPolygon/heimdall-v2/x/checkpoint/types" @@ -31,7 +25,7 @@ var logger = helper.Logger.With("module", "checkpoint/client/cli") func NewTxCmd() *cobra.Command { txCmd := &cobra.Command{ Use: checkpointTypes.ModuleName, - Short: "Stake transaction subcommands", + Short: "Checkpoint module commands", DisableFlagParsing: true, SuggestionsMinimumDistance: 2, RunE: client.ValidateCmd, @@ -89,7 +83,7 @@ func SendCheckpointCmd(ac address.Codec) *cobra.Command { msg := checkpointTypes.NewMsgCheckpointBlock(proposer.Validator.Signer, nextCheckpoint.Checkpoint.StartBlock, nextCheckpoint.Checkpoint.EndBlock, nextCheckpoint.Checkpoint.RootHash, nextCheckpoint.Checkpoint.AccountRootHash, borChainID) - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + return cli.BroadcastMsg(clientCtx, proposer.Validator.Signer, msg, logger) } // get and check proposer @@ -106,6 +100,7 @@ func SendCheckpointCmd(ac address.Codec) *cobra.Command { if startBlockStr == "" { return fmt.Errorf("start block cannot be empty") } + startBlock, err := strconv.ParseUint(startBlockStr, 10, 64) if err != nil { return err @@ -116,6 +111,7 @@ func SendCheckpointCmd(ac address.Codec) *cobra.Command { if endBlockStr == "" { return fmt.Errorf("end block cannot be empty") } + endBlock, err := strconv.ParseUint(endBlockStr, 10, 64) if err != nil { return err @@ -135,7 +131,7 @@ func SendCheckpointCmd(ac address.Codec) *cobra.Command { msg := checkpointTypes.NewMsgCheckpointBlock(proposer, startBlock, endBlock, common.Hex2Bytes(rootHashStr), common.Hex2Bytes(accountRootHashStr), borChainID) - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + return cli.BroadcastMsg(clientCtx, proposer, msg, logger) }, } @@ -145,20 +141,9 @@ func SendCheckpointCmd(ac address.Codec) *cobra.Command { cmd.Flags().StringP(FlagRootHash, "r", "", "--root-hash=") cmd.Flags().String(FlagAccountRootHash, "", "--account-root=") cmd.Flags().String(FlagBorChainID, "", "--bor-chain-id=") + cmd.Flags().String(flags.FlagChainID, "", "--chain-id=") cmd.Flags().Bool(FlagAutoConfigure, false, "--auto-configure=true/false") - if err := cmd.MarkFlagRequired(FlagRootHash); err != nil { - logger.Error("SendCheckpointTx | MarkFlagRequired | FlagRootHash", "Error", err) - } - - if err := cmd.MarkFlagRequired(FlagAccountRootHash); err != nil { - logger.Error("SendCheckpointTx | MarkFlagRequired | FlagAccountRootHash", "Error", err) - } - - if err := cmd.MarkFlagRequired(FlagBorChainID); err != nil { - logger.Error("SendCheckpointTx | MarkFlagRequired | FlagBorChainID", "Error", err) - } - return cmd } @@ -230,55 +215,7 @@ func SendCheckpointAckCmd() *cobra.Command { msg := checkpointTypes.NewMsgCpAck(proposer, headerBlock, res.Proposer.String(), res.Start.Uint64(), res.End.Uint64(), res.Root[:], txHash.Bytes(), uint64(viper.GetInt64(FlagCheckpointLogIndex))) - // create tx factory - txf, err := MakeTxFactory(clientCtx, proposer) - if err != nil { - logger.Error("Error creating tx factory", "Error", err) - return err - } - - // setting this to true to as the if block in BroadcastTx - // might cause a cancelled transaction. - clientCtx.SkipConfirm = true - - account, err := util.GetAccount(clientCtx, proposer) - if err != nil { - logger.Error("Error fetching account", "address", proposer, "err", err) - return err - } - - clientCtx = clientCtx.WithFromAddress(account.GetAddress()) - from := clientCtx.GetFromAddress() - - authqueryClient := authtypes.NewQueryClient(clientCtx) - - _, err = authqueryClient.Account(context.Background(), &authtypes.QueryAccountRequest{Address: from.String()}) - if err != nil { - logger.Error("Error fetching account", "Error", err) - return err - } - - // err = txf.AccountRetriever().EnsureExists(clientCtx, from) - _, err = txf.AccountRetriever().GetAccount(clientCtx, from) - if err != nil { - logger.Error("Error ensuring account exists", "Error", err) - return err - } - - // err = tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) - txResponse, err := helper.BroadcastTx(clientCtx, txf, &msg) - if err != nil { - logger.Error("Error broadcasting tx", "Error", err) - return err - } - - // Now check if the transaction response is not okay - if txResponse.Code != abci.CodeTypeOK { - logger.Error("Transaction response returned a non-ok code", "txResponseCode", txResponse.Code) - return fmt.Errorf("broadcast succeeded but received non-ok response code: %d", txResponse.Code) - } - - return err + return cli.BroadcastMsg(clientCtx, proposer, &msg, logger) }, } @@ -302,40 +239,3 @@ func SendCheckpointAckCmd() *cobra.Command { return cmd } - -func MakeTxFactory(clictx client.Context, address string) (tx.Factory, error) { - account, err := util.GetAccount(clictx, address) - if err != nil { - logger.Error("Error fetching account", "address", address, "err", err) - return tx.Factory{}, err - } - - accNum := account.GetAccountNumber() - accSeq := account.GetSequence() - - signMode, err := authsign.APISignModeToInternal(clictx.TxConfig.SignModeHandler().DefaultMode()) - if err != nil { - logger.Error("Error getting sign mode", "err", err) - return tx.Factory{}, err - } - - authParams, err := util.GetAccountParamsURL(clictx.Codec) - if err != nil { - logger.Error("Error getting account params", "err", err) - return tx.Factory{}, err - } - - txf := tx.Factory{}. - WithTxConfig(clictx.TxConfig). - WithAccountRetriever(clictx.AccountRetriever). - WithChainID(clictx.ChainID). - WithSignMode(signMode). - WithAccountNumber(accNum). - WithSequence(accSeq). - WithKeybase(clictx.Keyring). - WithSignMode(signMode). - WithFees(ante.DefaultFeeWantedPerTx.String()). - WithGas(authParams.MaxTxGas) - - return txf, nil -} diff --git a/x/checkpoint/keeper/side_msg_server.go b/x/checkpoint/keeper/side_msg_server.go index 66769168..4d72a5b1 100644 --- a/x/checkpoint/keeper/side_msg_server.go +++ b/x/checkpoint/keeper/side_msg_server.go @@ -89,7 +89,7 @@ func (srv *sideMsgServer) SideHandleMsgCheckpoint(ctx sdk.Context, sdkMsg sdk.Ms logger.Error("error validating checkpoint", "startBlock", msg.StartBlock, "endBlock", msg.EndBlock, - "rootHash", msg.RootHash, + "rootHash", common.Bytes2Hex(msg.RootHash), "error", err, ) } else if validCheckpoint { @@ -101,7 +101,7 @@ func (srv *sideMsgServer) SideHandleMsgCheckpoint(ctx sdk.Context, sdkMsg sdk.Ms "rootHash is not valid", "startBlock", msg.StartBlock, "endBlock", msg.EndBlock, - "rootHash", msg.RootHash, + "rootHash", common.Bytes2Hex(msg.RootHash), ) return sidetxs.Vote_VOTE_NO @@ -164,7 +164,7 @@ func (srv *sideMsgServer) SideHandleMsgCheckpointAck(ctx sdk.Context, sdkMsg sdk "rootChain checkpoint end block", end, "message proposer", msg.Proposer, "rootChain checkpoint proposer", proposer, - "message root hash", string(msg.RootHash), + "message root hash", common.Bytes2Hex(msg.RootHash), "rootChain checkpoint root hash", root, "error", err, ) @@ -322,8 +322,8 @@ func (srv *sideMsgServer) PostHandleMsgCheckpointAck(ctx sdk.Context, sdkMsg sdk "startReceived", msg.StartBlock, "endExpected", checkpointObj.EndBlock, "endReceived", msg.StartBlock, - "rootExpected", string(checkpointObj.RootHash), - "rootReceived", string(msg.RootHash), + "rootExpected", common.Bytes2Hex(checkpointObj.RootHash), + "rootReceived", common.Bytes2Hex(msg.RootHash), ) return errors.New("invalid ACK") diff --git a/x/milestone/autocli.go b/x/milestone/autocli.go index 44bcc8cc..4b794558 100644 --- a/x/milestone/autocli.go +++ b/x/milestone/autocli.go @@ -44,6 +44,18 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { Short: "Get milestone proposer", PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "times"}}, }, + { + RpcMethod: "GetLatestNoAckMilestone", + Use: "get-latest-no-ack-milestone", + Short: "Get latest no ack milestone", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{}, + }, + { + RpcMethod: "GetNoAckMilestoneById", + Use: "get-no-ack-milestone-by-id", + Short: "Get no ack milestone by id", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "id"}}, + }, }, }, Tx: &autocliv1.ServiceCommandDescriptor{ diff --git a/x/stake/autocli.go b/x/stake/autocli.go index 05464127..6c88f0fd 100644 --- a/x/stake/autocli.go +++ b/x/stake/autocli.go @@ -55,17 +55,18 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { }, }, Tx: &autocliv1.ServiceCommandDescriptor{ - Service: stake.Msg_ServiceDesc.ServiceName, + Service: stake.Msg_ServiceDesc.ServiceName, + EnhanceCustomCommand: true, RpcCommandOptions: []*autocliv1.RpcCommandOptions{ { RpcMethod: "StakeUpdate", - Use: "stake-update [valAddress] [valId] [txHash] [amount] [logIndex] [blockNumber] [nonce]", + Use: "stake-update [valAddress] [valId] [amount] [txHash] [logIndex] [blockNumber] [nonce]", Short: "Update stake for a validator", PositionalArgs: []*autocliv1.PositionalArgDescriptor{ - {ProtoField: "val_address"}, - {ProtoField: "val_dd"}, + {ProtoField: "from"}, + {ProtoField: "val_id"}, + {ProtoField: "new_amount"}, {ProtoField: "tx_hash"}, - {ProtoField: "amount"}, {ProtoField: "log_index"}, {ProtoField: "block_number"}, {ProtoField: "nonce"}, @@ -73,13 +74,13 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { }, { RpcMethod: "ValidatorExit", - Use: "validator-exit [valAddress] [valId] [txHash] [deactivationEpoch] [logIndex] [blockNumber] [nonce]", + Use: "validator-exit [valAddress] [valId] [deactivationEpoch] [txHash] [logIndex] [blockNumber] [nonce]", Short: "Exit validator", PositionalArgs: []*autocliv1.PositionalArgDescriptor{ - {ProtoField: "val_address"}, + {ProtoField: "from"}, {ProtoField: "val_id"}, - {ProtoField: "tx_hash"}, {ProtoField: "deactivation_epoch"}, + {ProtoField: "tx_hash"}, {ProtoField: "log_index"}, {ProtoField: "block_number"}, {ProtoField: "nonce"}, diff --git a/x/stake/client/cli/tx.go b/x/stake/client/cli/tx.go index 04179f9a..8afe202c 100644 --- a/x/stake/client/cli/tx.go +++ b/x/stake/client/cli/tx.go @@ -7,13 +7,13 @@ import ( "cosmossdk.io/core/address" sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" codec "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/ethereum/go-ethereum/common" "github.com/spf13/cobra" "github.com/spf13/viper" + "github.com/0xPolygon/heimdall-v2/common/cli" "github.com/0xPolygon/heimdall-v2/contracts/stakinginfo" "github.com/0xPolygon/heimdall-v2/helper" chainmanagerTypes "github.com/0xPolygon/heimdall-v2/x/chainmanager/types" @@ -141,7 +141,7 @@ func NewValidatorJoinCmd(ac address.Codec) *cobra.Command { return err } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + return cli.BroadcastMsg(clientCtx, proposer, msg, logger) }, } @@ -207,7 +207,7 @@ func NewSignerUpdateCmd(ac address.Codec) *cobra.Command { return fmt.Errorf("the provided transaction hash is empty, and the field is required") } - pubKeyStr := viper.GetString(FlagSignerPubKey) + pubKeyStr := viper.GetString(FlagNewSignerPubKey) if pubKeyStr == "" { return fmt.Errorf("the provided PubKey is empty, and the field is required") } @@ -229,7 +229,7 @@ func NewSignerUpdateCmd(ac address.Codec) *cobra.Command { return err } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + return cli.BroadcastMsg(clientCtx, proposer, msg, logger) }, } @@ -250,7 +250,7 @@ func NewSignerUpdateCmd(ac address.Codec) *cobra.Command { } if err := cmd.MarkFlagRequired(FlagNewSignerPubKey); err != nil { - logger.Error("SendValidatorUpdateTx | MarkFlagRequired | FlagNewSignerPubkey", "Error", err) + logger.Error("SendValidatorUpdateTx | MarkFlagRequired | FlagNewSignerPubKey", "Error", err) } if err := cmd.MarkFlagRequired(FlagLogIndex); err != nil {