From a68cf8224a009f53db6b36892c5394ceafaf5ada Mon Sep 17 00:00:00 2001 From: kamuikatsurgi Date: Wed, 5 Feb 2025 19:58:05 +0530 Subject: [PATCH 01/22] fix: heimdalld logger to use log_level flag --- cmd/heimdalld/cmd/migration/verify/verify.go | 3 ++- cmd/heimdalld/cmd/root.go | 2 +- helper/config.go | 28 ++++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/cmd/heimdalld/cmd/migration/verify/verify.go b/cmd/heimdalld/cmd/migration/verify/verify.go index e6e5a9e9..b0bfc7d0 100644 --- a/cmd/heimdalld/cmd/migration/verify/verify.go +++ b/cmd/heimdalld/cmd/migration/verify/verify.go @@ -19,6 +19,7 @@ import ( heimdallApp "github.com/0xPolygon/heimdall-v2/app" "github.com/0xPolygon/heimdall-v2/cmd/heimdalld/cmd/migration/utils" + "github.com/0xPolygon/heimdall-v2/helper" hmTypes "github.com/0xPolygon/heimdall-v2/x/stake/types" ) @@ -37,7 +38,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(log.NewLogger(os.Stderr, log.LevelOption(helper.GetLogLevel())), db, nil, true, appOptions) ctx := app.NewContextLegacy(true, cmtproto.Header{Height: app.LastBlockHeight()}) diff --git a/cmd/heimdalld/cmd/root.go b/cmd/heimdalld/cmd/root.go index 2cf0a829..dc7b02ea 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -47,7 +47,7 @@ func NewRootCmd() *cobra.Command { // 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(log.NewLogger(os.Stderr, log.LevelOption(helper.GetLogLevel())), db, nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) encodingConfig := EncodingConfig{ InterfaceRegistry: tempApp.InterfaceRegistry(), Codec: tempApp.AppCodec(), diff --git a/helper/config.go b/helper/config.go index 82234575..11ff29c7 100644 --- a/helper/config.go +++ b/helper/config.go @@ -19,6 +19,7 @@ import ( 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" @@ -1017,3 +1018,30 @@ func SetTestPrivPubKey(privKey secp256k1.PrivKey) { } pubKeyObject = pubKey } + +// GetLogLevel returns the zerolog level based on the configured log level string +func GetLogLevel() zerolog.Level { + logLevel := strings.ToLower(viper.GetString(LogLevel)) + + switch logLevel { + case "trace": + return zerolog.TraceLevel + case "debug": + return zerolog.DebugLevel + case "info": + return zerolog.InfoLevel + case "warn", "warning": + return zerolog.WarnLevel + case "error": + return zerolog.ErrorLevel + case "fatal": + return zerolog.FatalLevel + case "panic": + return zerolog.PanicLevel + case "disabled": + return zerolog.Disabled + default: + // Default to info level if invalid or not specified + return zerolog.InfoLevel + } +} From 0c98c51b01955f54967513b5d944944080c6dfcc Mon Sep 17 00:00:00 2001 From: kamuikatsurgi Date: Wed, 5 Feb 2025 20:47:12 +0530 Subject: [PATCH 02/22] chore: nit --- helper/config.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/helper/config.go b/helper/config.go index 11ff29c7..5671e4eb 100644 --- a/helper/config.go +++ b/helper/config.go @@ -11,7 +11,6 @@ import ( 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" @@ -999,7 +998,7 @@ func InitTestHeimdallConfig(chain string) { SetTestConfig(customAppConf) - privKeyObject = cmtcrypto.GenPrivKey() + privKeyObject = secp256k1.GenPrivKey() pubKeyObject = privKeyObject.PubKey().(secp256k1.PubKey) } @@ -1030,7 +1029,7 @@ func GetLogLevel() zerolog.Level { return zerolog.DebugLevel case "info": return zerolog.InfoLevel - case "warn", "warning": + case "warn": return zerolog.WarnLevel case "error": return zerolog.ErrorLevel From 9f297c5ba2091f6e66c46dd0526c0654bd2c547d Mon Sep 17 00:00:00 2001 From: Angel Valkov Date: Mon, 3 Feb 2025 10:25:10 +0200 Subject: [PATCH 03/22] Fix checkpoint broadcasting from cli --- cmd/heimdalld/cmd/root.go | 5 ++ cmd/heimdalld/cmd/testnet.go | 4 +- common/cli/tx.go | 102 ++++++++++++++++++++++ helper/config.go | 3 +- x/bor/client/cli/tx.go | 7 +- x/checkpoint/client/cli/tx.go | 116 ++----------------------- x/checkpoint/keeper/side_msg_server.go | 10 +-- x/stake/client/cli/tx.go | 6 +- 8 files changed, 132 insertions(+), 121 deletions(-) create mode 100644 common/cli/tx.go diff --git a/cmd/heimdalld/cmd/root.go b/cmd/heimdalld/cmd/root.go index 2cf0a829..1d9a3e6d 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -5,6 +5,7 @@ import ( "path" "cosmossdk.io/log" + "github.com/cometbft/cometbft/cmd/cometbft/commands" "github.com/cometbft/cometbft/libs/cli" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" @@ -112,6 +113,10 @@ func NewRootCmd() *cobra.Command { customAppTemplate, customAppConfig := initAppConfig() customCMTConfig := initCometBFTConfig() + if cmd.Name() != commands.InitFilesCmd.Name() && cmd.Name() != testnetCmdName { + helper.InitHeimdallConfig("") + } + return server.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig, customCMTConfig) }, PersistentPreRun: func(cmd *cobra.Command, _ []string) { diff --git a/cmd/heimdalld/cmd/testnet.go b/cmd/heimdalld/cmd/testnet.go index 768c5e46..af519beb 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..887ac8b4 --- /dev/null +++ b/common/cli/tx.go @@ -0,0 +1,102 @@ +package cli + +import ( + "context" + "fmt" + + abci "github.com/cometbft/cometbft/abci/types" + logger "github.com/cometbft/cometbft/libs/log" + + "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 logger.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 logger.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 + } + + 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/helper/config.go b/helper/config.go index 82234575..22ab7609 100644 --- a/helper/config.go +++ b/helper/config.go @@ -250,8 +250,7 @@ func InitHeimdallConfig(homeDir string) { // InitHeimdallConfigWith initializes passed heimdall/tendermint config files func InitHeimdallConfigWith(homeDir string, heimdallConfigFileFromFlag string) { 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 { diff --git a/x/bor/client/cli/tx.go b/x/bor/client/cli/tx.go index 729d28d0..90d70212 100644 --- a/x/bor/client/cli/tx.go +++ b/x/bor/client/cli/tx.go @@ -6,15 +6,18 @@ import ( "cosmossdk.io/core/address" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" 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 +103,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) }, } 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/stake/client/cli/tx.go b/x/stake/client/cli/tx.go index 04179f9a..eb903002 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) }, } @@ -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) }, } From 4252ceccdcfac5bc2f8fc853797543f8ef28d2ee Mon Sep 17 00:00:00 2001 From: Angel Valkov Date: Thu, 6 Feb 2025 12:09:35 +0200 Subject: [PATCH 04/22] Fix lint --- common/cli/tx.go | 1 - 1 file changed, 1 deletion(-) diff --git a/common/cli/tx.go b/common/cli/tx.go index 887ac8b4..f4fd23ed 100644 --- a/common/cli/tx.go +++ b/common/cli/tx.go @@ -6,7 +6,6 @@ import ( abci "github.com/cometbft/cometbft/abci/types" logger "github.com/cometbft/cometbft/libs/log" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" From c24028431d6d770fd16f5753e9401c7976accaf3 Mon Sep 17 00:00:00 2001 From: kamuikatsurgi Date: Thu, 6 Feb 2025 16:26:49 +0530 Subject: [PATCH 05/22] chore: use helper.LogLevel instead of log_level --- bridge/broadcaster/broadcaster_test.go | 2 +- bridge/processor/clerk_test.go | 4 ++-- bridge/util/common.go | 4 ++-- helper/call_test.go | 2 +- helper/config_test.go | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bridge/broadcaster/broadcaster_test.go b/bridge/broadcaster/broadcaster_test.go index d2a0d366..714285f0 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/processor/clerk_test.go b/bridge/processor/clerk_test.go index f2e84220..4bf50f14 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() diff --git a/bridge/util/common.go b/bridge/util/common.go index 728620ba..77c3410e 100644 --- a/bridge/util/common.go +++ b/bridge/util/common.go @@ -98,7 +98,7 @@ func Logger() log.Logger { defaultLevel := "info" logsWriter := helper.GetLogsWriter(helper.GetConfig().LogsWriterFile) logger = log.NewTMLogger(log.NewSyncWriter(logsWriter)) - option, err := log.AllowLevel(viper.GetString("log_level")) + option, err := log.AllowLevel(viper.GetString(helper.LogLevel)) if err != nil { // cosmos sdk is using different style of log format // and levels don't map well, config.toml @@ -114,7 +114,7 @@ func Logger() log.Logger { logger = log.NewFilter(logger, option) // set no-op logger if log level is not debug for machinery - if viper.GetString("log_level") != "debug" { + if viper.GetString(helper.LogLevel) != "debug" { mLog.SetDebug(NoopLogger{}) } }) diff --git a/helper/call_test.go b/helper/call_test.go index 804fe30e..06737ba5 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("helper.LogLevel", "info") InitTestHeimdallConfig("") contractCallerObj, err := NewContractCaller() diff --git a/helper/config_test.go b/helper/config_test.go index 82e395d4..4025507e 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("helper.LogLevel", "info") InitTestHeimdallConfig("") From c6998c2684c31bd1556f5160e7fc47e62c629fab Mon Sep 17 00:00:00 2001 From: Angel Valkov Date: Thu, 6 Feb 2025 13:18:44 +0200 Subject: [PATCH 06/22] Use memdb for tempApp in rootCmd --- cmd/heimdalld/cmd/root.go | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/cmd/heimdalld/cmd/root.go b/cmd/heimdalld/cmd/root.go index 1d9a3e6d..bace1fe4 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -2,12 +2,10 @@ package heimdalld import ( "os" - "path" "cosmossdk.io/log" "github.com/cometbft/cometbft/cmd/cometbft/commands" - "github.com/cometbft/cometbft/libs/cli" - dbm "github.com/cosmos/cosmos-db" + 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" @@ -38,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(log.NewLogger(os.Stderr), db.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) encodingConfig := EncodingConfig{ InterfaceRegistry: tempApp.InterfaceRegistry(), Codec: tempApp.AppCodec(), From 7352b2df821b2a728ed224d03d67ed8edd49a2f0 Mon Sep 17 00:00:00 2001 From: Angel Valkov Date: Thu, 6 Feb 2025 15:43:43 +0200 Subject: [PATCH 07/22] Fix autocli --- cmd/heimdalld/cmd/root.go | 2 -- go.mod | 4 ++-- go.sum | 4 ++-- x/checkpoint/autocli.go | 11 ++++++++++- x/stake/autocli.go | 17 +++++++++-------- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/cmd/heimdalld/cmd/root.go b/cmd/heimdalld/cmd/root.go index bace1fe4..3e96bb84 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -10,7 +10,6 @@ import ( "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" @@ -130,7 +129,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/go.mod b/go.mod index 9f2dd86c..d0e66bab 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 @@ -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/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/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"}, From b78703c5404cc33449106dc51f11aba08321c1f7 Mon Sep 17 00:00:00 2001 From: Angel Valkov Date: Fri, 7 Feb 2025 09:26:41 +0200 Subject: [PATCH 08/22] Add bor cli missing flag --- x/bor/client/cli/tx.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x/bor/client/cli/tx.go b/x/bor/client/cli/tx.go index 90d70212..49a3f980 100644 --- a/x/bor/client/cli/tx.go +++ b/x/bor/client/cli/tx.go @@ -6,6 +6,7 @@ import ( "cosmossdk.io/core/address" "github.com/cosmos/cosmos-sdk/client" + "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" @@ -111,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) From 795ec14659fc8b0fb3c57ff3cfac08e6f67b5650 Mon Sep 17 00:00:00 2001 From: Angel Valkov Date: Fri, 7 Feb 2025 11:43:47 +0200 Subject: [PATCH 09/22] Add missing milestone query methods to the cli --- x/milestone/autocli.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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{ From 16197e8666d92adf67e6ec5eacf0e98b60431459 Mon Sep 17 00:00:00 2001 From: Krishang Shah <109511742+kamuikatsurgi@users.noreply.github.com> Date: Sat, 8 Feb 2025 15:33:03 +0530 Subject: [PATCH 10/22] chore: use `cosmos-sdk` logger instead of `cometbft` (#142) * chore: use cosmos-sdk logger instead of cometbft * chore: nits * chore: nits --- bridge/broadcaster/broadcaster.go | 2 +- bridge/broadcaster/broadcaster_test.go | 2 +- bridge/cmd/root.go | 6 ++-- bridge/listener/base.go | 2 +- bridge/listener/service.go | 4 +-- bridge/processor/base.go | 2 +- bridge/processor/clerk_test.go | 5 ++- bridge/queue/connector.go | 2 +- bridge/util/common.go | 20 ++--------- cmd/heimdalld/cmd/migration/verify/verify.go | 7 ++-- .../cmd/migration/verify/verify_hash.go | 4 +-- cmd/heimdalld/cmd/root.go | 3 +- helper/call_test.go | 2 +- helper/config.go | 36 +++---------------- helper/config_test.go | 2 +- 15 files changed, 26 insertions(+), 73 deletions(-) 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 714285f0..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("helper.LogLevel", "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/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/service.go b/bridge/listener/service.go index e6bac097..0aab9da0 100644 --- a/bridge/listener/service.go +++ b/bridge/listener/service.go @@ -1,12 +1,12 @@ package listener import ( + 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 +30,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.NewNopLogger(), 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/clerk_test.go b/bridge/processor/clerk_test.go index 4bf50f14..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("helper.LogLevel", "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("helper.LogLevel", "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/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 77c3410e..df374f11 100644 --- a/bridge/util/common.go +++ b/bridge/util/common.go @@ -12,14 +12,15 @@ import ( "sync" "time" + "cosmossdk.io/log" mLog "github.com/RichardKnop/machinery/v1/log" - "github.com/cometbft/cometbft/libs/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/rs/zerolog" "github.com/spf13/viper" "github.com/0xPolygon/heimdall-v2/contracts/statesender" @@ -95,23 +96,8 @@ var ( // 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(helper.LogLevel)) - 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) + logger = log.NewLogger(logsWriter, log.LevelOption(zerolog.InfoLevel)) // set no-op logger if log level is not debug for machinery if viper.GetString(helper.LogLevel) != "debug" { diff --git a/cmd/heimdalld/cmd/migration/verify/verify.go b/cmd/heimdalld/cmd/migration/verify/verify.go index b0bfc7d0..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" @@ -19,13 +17,12 @@ import ( heimdallApp "github.com/0xPolygon/heimdall-v2/app" "github.com/0xPolygon/heimdall-v2/cmd/heimdalld/cmd/migration/utils" - "github.com/0xPolygon/heimdall-v2/helper" hmTypes "github.com/0xPolygon/heimdall-v2/x/stake/types" ) // 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) @@ -38,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, log.LevelOption(helper.GetLogLevel())), 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 dc7b02ea..0d6099ca 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -4,7 +4,6 @@ import ( "os" "path" - "cosmossdk.io/log" "github.com/cometbft/cometbft/libs/cli" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" @@ -47,7 +46,7 @@ func NewRootCmd() *cobra.Command { // 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, log.LevelOption(helper.GetLogLevel())), db, nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) + tempApp := app.NewHeimdallApp(logger, db, nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) encodingConfig := EncodingConfig{ InterfaceRegistry: tempApp.InterfaceRegistry(), Codec: tempApp.AppCodec(), diff --git a/helper/call_test.go b/helper/call_test.go index 06737ba5..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("helper.LogLevel", "info") + viper.Set(LogLevel, "info") InitTestHeimdallConfig("") contractCallerObj, err := NewContractCaller() diff --git a/helper/config.go b/helper/config.go index 5671e4eb..deb83e22 100644 --- a/helper/config.go +++ b/helper/config.go @@ -9,16 +9,15 @@ import ( "strings" "time" + logger "cosmossdk.io/log" cfg "github.com/cometbft/cometbft/config" "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 +140,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) } // CustomConfig represents heimdall config @@ -307,10 +306,10 @@ func InitHeimdallConfigWith(homeDir string, heimdallConfigFileFromFlag string) { // perform check for json logging if conf.Custom.LogsType == "json" { - Logger = logger.NewTMJSONLogger(logger.NewSyncWriter(GetLogsWriter(conf.Custom.LogsWriterFile))) + Logger = logger.NewLogger(GetLogsWriter(conf.Custom.LogsWriterFile), logger.OutputJSONOption()) } else { // default fallback - Logger = logger.NewTMLogger(logger.NewSyncWriter(GetLogsWriter(conf.Custom.LogsWriterFile))) + Logger = logger.NewLogger(GetLogsWriter(conf.Custom.LogsWriterFile)) } // perform checks for timeout @@ -1017,30 +1016,3 @@ func SetTestPrivPubKey(privKey secp256k1.PrivKey) { } pubKeyObject = pubKey } - -// GetLogLevel returns the zerolog level based on the configured log level string -func GetLogLevel() zerolog.Level { - logLevel := strings.ToLower(viper.GetString(LogLevel)) - - switch logLevel { - case "trace": - return zerolog.TraceLevel - case "debug": - return zerolog.DebugLevel - case "info": - return zerolog.InfoLevel - case "warn": - return zerolog.WarnLevel - case "error": - return zerolog.ErrorLevel - case "fatal": - return zerolog.FatalLevel - case "panic": - return zerolog.PanicLevel - case "disabled": - return zerolog.Disabled - default: - // Default to info level if invalid or not specified - return zerolog.InfoLevel - } -} diff --git a/helper/config_test.go b/helper/config_test.go index 4025507e..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("helper.LogLevel", "info") + viper.Set(LogLevel, "info") InitTestHeimdallConfig("") From bf6368aff438dcd0cce2d7c830c201c255357080 Mon Sep 17 00:00:00 2001 From: kamuikatsurgi Date: Sat, 8 Feb 2025 15:46:34 +0530 Subject: [PATCH 11/22] fix: use info as default for now --- bridge/listener/service.go | 4 +++- cmd/heimdalld/cmd/root.go | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/bridge/listener/service.go b/bridge/listener/service.go index 0aab9da0..e2187a90 100644 --- a/bridge/listener/service.go +++ b/bridge/listener/service.go @@ -1,6 +1,8 @@ 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" @@ -30,7 +32,7 @@ func NewListenerService(cdc codec.Codec, queueConnector *queue.QueueConnector, h // creating listener object listenerService := &ListenerService{} - listenerService.BaseService = *common.NewBaseService(logger.NewNopLogger(), 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/cmd/heimdalld/cmd/root.go b/cmd/heimdalld/cmd/root.go index 0d6099ca..0d4b8c71 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -4,6 +4,7 @@ import ( "os" "path" + "cosmossdk.io/log" "github.com/cometbft/cometbft/libs/cli" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" @@ -17,6 +18,7 @@ import ( "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" @@ -46,7 +48,7 @@ func NewRootCmd() *cobra.Command { // 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(logger, db, nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) + tempApp := app.NewHeimdallApp(log.NewLogger(os.Stdout, log.LevelOption(zerolog.InfoLevel)), db, nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) encodingConfig := EncodingConfig{ InterfaceRegistry: tempApp.InterfaceRegistry(), Codec: tempApp.AppCodec(), From b5ea45a6d10093ee616b29b21c99522e64ab7361 Mon Sep 17 00:00:00 2001 From: kamuikatsurgi Date: Sun, 9 Feb 2025 13:04:09 +0530 Subject: [PATCH 12/22] refactor NewRootCmd() to get the log_level value --- bridge/cmd/start.go | 7 ------- bridge/util/common.go | 21 +-------------------- cmd/heimdalld/cmd/root.go | 25 +++++++++++++++++++++++-- helper/config.go | 3 ++- 4 files changed, 26 insertions(+), 30 deletions(-) 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/util/common.go b/bridge/util/common.go index df374f11..e100d3d4 100644 --- a/bridge/util/common.go +++ b/bridge/util/common.go @@ -9,19 +9,15 @@ import ( "net/http" "net/url" "strconv" - "sync" "time" "cosmossdk.io/log" - mLog "github.com/RichardKnop/machinery/v1/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/rs/zerolog" - "github.com/spf13/viper" "github.com/0xPolygon/heimdall-v2/contracts/statesender" "github.com/0xPolygon/heimdall-v2/helper" @@ -88,24 +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() { - logsWriter := helper.GetLogsWriter(helper.GetConfig().LogsWriterFile) - logger = log.NewLogger(logsWriter, log.LevelOption(zerolog.InfoLevel)) - - // set no-op logger if log level is not debug for machinery - if viper.GetString(helper.LogLevel) != "debug" { - mLog.SetDebug(NoopLogger{}) - } - }) - - return logger + return helper.Logger.With("module", "bridge") } // IsProposer checks if we are proposer diff --git a/cmd/heimdalld/cmd/root.go b/cmd/heimdalld/cmd/root.go index 0d4b8c71..65f7ccf8 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -5,6 +5,7 @@ import ( "path" "cosmossdk.io/log" + "github.com/cometbft/cometbft/libs/cli" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" @@ -48,7 +49,7 @@ func NewRootCmd() *cobra.Command { // 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.Stdout, log.LevelOption(zerolog.InfoLevel)), db, nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) + tempApp := app.NewHeimdallApp(logger, db, nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) encodingConfig := EncodingConfig{ InterfaceRegistry: tempApp.InterfaceRegistry(), Codec: tempApp.AppCodec(), @@ -113,7 +114,27 @@ func NewRootCmd() *cobra.Command { customAppTemplate, customAppConfig := initAppConfig() customCMTConfig := initCometBFTConfig() - return server.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig, customCMTConfig) + 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") + + // Set log_level value from serverCtx.Viper to viper + viper.Set(helper.LogLevel, serverCtx.Viper.GetString(helper.LogLevel)) + + // Overwrite default heimdall logger + logLvl, _ := zerolog.ParseLevel(serverCtx.Viper.GetString(helper.LogLevel)) + helper.Logger = log.NewLogger(cmd.OutOrStdout(), log.LevelOption(logLvl)) + + // Set server context + return server.SetCmdServerContext(cmd, serverCtx) }, PersistentPreRun: func(cmd *cobra.Command, _ []string) { // set the default command outputs diff --git a/helper/config.go b/helper/config.go index deb83e22..c9643ed4 100644 --- a/helper/config.go +++ b/helper/config.go @@ -18,6 +18,7 @@ import ( 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" @@ -140,7 +141,7 @@ var DefaultNodeHome = os.ExpandEnv("$HOME/var/lib/heimdall") var cdc = amino.NewCodec() func init() { - Logger = logger.NewLogger(os.Stdout) + Logger = logger.NewLogger(os.Stdout, logger.LevelOption(zerolog.InfoLevel)) } // CustomConfig represents heimdall config From 7593fd8170fc9a14c4f5122e911fafbc182cc15e Mon Sep 17 00:00:00 2001 From: kamuikatsurgi Date: Mon, 10 Feb 2025 10:31:46 +0530 Subject: [PATCH 13/22] Final changes --- cmd/heimdalld/cmd/root.go | 14 ++++++++++---- helper/config.go | 21 ++++++++++++++------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/cmd/heimdalld/cmd/root.go b/cmd/heimdalld/cmd/root.go index 65f7ccf8..d94286cf 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -126,12 +126,18 @@ func NewRootCmd() *cobra.Command { } serverCtx.Logger = logger.With(log.ModuleKey, "server") - // Set log_level value from serverCtx.Viper to viper - viper.Set(helper.LogLevel, serverCtx.Viper.GetString(helper.LogLevel)) + // 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 - logLvl, _ := zerolog.ParseLevel(serverCtx.Viper.GetString(helper.LogLevel)) - helper.Logger = log.NewLogger(cmd.OutOrStdout(), log.LevelOption(logLvl)) + 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) diff --git a/helper/config.go b/helper/config.go index c9643ed4..298bc0a9 100644 --- a/helper/config.go +++ b/helper/config.go @@ -249,6 +249,8 @@ 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 @@ -272,12 +274,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 +288,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 +303,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.NewLogger(GetLogsWriter(conf.Custom.LogsWriterFile), logger.OutputJSONOption()) + Logger = logger.NewLogger(GetLogsWriter(conf.Custom.LogsWriterFile), logger.LevelOption(logLevel), logger.OutputJSONOption()) } else { // default fallback - Logger = logger.NewLogger(GetLogsWriter(conf.Custom.LogsWriterFile)) + Logger = logger.NewLogger(GetLogsWriter(conf.Custom.LogsWriterFile), logger.LevelOption(logLevel)) } // perform checks for timeout @@ -344,7 +352,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) } From 7ad78dc9387173f3a45199af330c331a452a11ad Mon Sep 17 00:00:00 2001 From: kamuikatsurgi Date: Mon, 10 Feb 2025 10:46:13 +0530 Subject: [PATCH 14/22] gci lint --- cmd/heimdalld/cmd/root.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cmd/heimdalld/cmd/root.go b/cmd/heimdalld/cmd/root.go index d94286cf..f2423a0b 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -5,7 +5,8 @@ import ( "path" "cosmossdk.io/log" - + "github.com/0xPolygon/heimdall-v2/app" + "github.com/0xPolygon/heimdall-v2/helper" "github.com/cometbft/cometbft/libs/cli" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" @@ -22,9 +23,6 @@ import ( "github.com/rs/zerolog" "github.com/spf13/cobra" "github.com/spf13/viper" - - "github.com/0xPolygon/heimdall-v2/app" - "github.com/0xPolygon/heimdall-v2/helper" ) var logger = helper.Logger.With("module", "cmd/heimdalld") From d24ac164857fa8da206e1a711188340bce0e1447 Mon Sep 17 00:00:00 2001 From: kamuikatsurgi Date: Mon, 10 Feb 2025 11:56:48 +0530 Subject: [PATCH 15/22] Lint --- cmd/heimdalld/cmd/root.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmd/heimdalld/cmd/root.go b/cmd/heimdalld/cmd/root.go index 88f0187e..24622d69 100644 --- a/cmd/heimdalld/cmd/root.go +++ b/cmd/heimdalld/cmd/root.go @@ -4,8 +4,6 @@ import ( "os" "cosmossdk.io/log" - "github.com/0xPolygon/heimdall-v2/app" - "github.com/0xPolygon/heimdall-v2/helper" "github.com/cometbft/cometbft/cmd/cometbft/commands" db "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" @@ -21,6 +19,9 @@ import ( "github.com/rs/zerolog" "github.com/spf13/cobra" "github.com/spf13/viper" + + "github.com/0xPolygon/heimdall-v2/app" + "github.com/0xPolygon/heimdall-v2/helper" ) var logger = helper.Logger.With("module", "cmd/heimdalld") From fcf486a061f33a4796cfbfff7947981830bcc4fe Mon Sep 17 00:00:00 2001 From: Angel Valkov Date: Mon, 10 Feb 2025 12:30:20 +0200 Subject: [PATCH 16/22] Fix log --- bridge/processor/checkpoint.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 76557ad9a33c25686b76118256054a86c0ac30d6 Mon Sep 17 00:00:00 2001 From: Pratik Patil Date: Mon, 10 Feb 2025 20:29:21 +0530 Subject: [PATCH 17/22] tx: fixed the chain ID passed to the tx factory --- common/cli/tx.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/common/cli/tx.go b/common/cli/tx.go index eac7a07a..dd25fc26 100644 --- a/common/cli/tx.go +++ b/common/cli/tx.go @@ -85,10 +85,15 @@ func MakeTxFactory(clictx client.Context, address string, logger log.Logger) (tx 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(clictx.ChainID). + WithChainID(chainParam.ChainParams.HeimdallChainId). WithSignMode(signMode). WithAccountNumber(accNum). WithSequence(accSeq). From 8744f49470e14eda4a5054f0d0692e66194fb431 Mon Sep 17 00:00:00 2001 From: Angel Valkov Date: Tue, 11 Feb 2025 14:19:00 +0200 Subject: [PATCH 18/22] Register MsgServer for chainmanager --- x/chainmanager/module.go | 1 + 1 file changed, 1 insertion(+) 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 From fc4274763f308c905db9597cacea88b8a72f09ae Mon Sep 17 00:00:00 2001 From: Pratik Patil Date: Wed, 12 Feb 2025 11:17:57 +0530 Subject: [PATCH 19/22] stake: bug fix in signer-update --- x/stake/client/cli/tx.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/stake/client/cli/tx.go b/x/stake/client/cli/tx.go index eb903002..8afe202c 100644 --- a/x/stake/client/cli/tx.go +++ b/x/stake/client/cli/tx.go @@ -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") } @@ -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 { From efcda3bf0aa9e963b2c8accba617a10a63aac1e9 Mon Sep 17 00:00:00 2001 From: Pratik Patil Date: Wed, 12 Feb 2025 14:37:19 +0530 Subject: [PATCH 20/22] update logging --- bridge/processor/stake.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/bridge/processor/stake.go b/bridge/processor/stake.go index bdc83406..9a291365 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, @@ -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(), From 6d732ad5eed3e4813bcfd6364dc9ea998de9b254 Mon Sep 17 00:00:00 2001 From: Pratik Patil Date: Wed, 12 Feb 2025 15:22:37 +0530 Subject: [PATCH 21/22] removed duplicate function --- bridge/listener/rootchain_log.go | 4 ++-- bridge/processor/stake.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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/processor/stake.go b/bridge/processor/stake.go index 9a291365..9d984e29 100644 --- a/bridge/processor/stake.go +++ b/bridge/processor/stake.go @@ -348,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") } From 97f9211393292095adb7a8565a4e77ffe637340d Mon Sep 17 00:00:00 2001 From: Angel Valkov Date: Wed, 12 Feb 2025 15:29:30 +0200 Subject: [PATCH 22/22] Take into account --chain arg --- cmd/heimdalld/cmd/commands.go | 5 +++++ 1 file changed, 5 insertions(+) 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 }