From cd3540b970f71e575d53162b2e3c273fe6cafbbe Mon Sep 17 00:00:00 2001 From: Akhil Kumar P <36399231+akhilkumarpilli@users.noreply.github.com> Date: Mon, 15 Jul 2024 14:20:19 +0530 Subject: [PATCH] fix(client): panic `math.LegacyDec` deserialization (#20912) --- CHANGELOG.md | 2 ++ client/cmd.go | 13 ++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b9e49504f09..764d9437e5d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,8 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes +* (client) [#20912](https://github.com/cosmos/cosmos-sdk/pull/20912) Fix `math.LegacyDec` type deserialization in GRPC queries. + * (x/group) [#20750](https://github.com/cosmos/cosmos-sdk/pull/20750) x/group shouldn't claim "orm" error codespace. This prevents any chain Cosmos SDK `v0.47` chain to use the ORM module. ## [v0.47.12](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.47.12) - 2024-06-10 diff --git a/client/cmd.go b/client/cmd.go index 4acb2933840f..f7ddd23ad108 100644 --- a/client/cmd.go +++ b/client/cmd.go @@ -92,11 +92,6 @@ func ValidateCmd(cmd *cobra.Command, args []string) error { // - client.Context field pre-populated & flag not set: uses pre-populated value // - client.Context field pre-populated & flag set: uses set flag value func ReadPersistentCommandFlags(clientCtx Context, flagSet *pflag.FlagSet) (Context, error) { - if clientCtx.OutputFormat == "" || flagSet.Changed(cli.OutputFlag) { - output, _ := flagSet.GetString(cli.OutputFlag) - clientCtx = clientCtx.WithOutputFormat(output) - } - if clientCtx.HomeDir == "" || flagSet.Changed(flags.FlagHome) { homeDir, _ := flagSet.GetString(flags.FlagHome) clientCtx = clientCtx.WithHomeDir(homeDir) @@ -165,12 +160,20 @@ func ReadPersistentCommandFlags(clientCtx Context, flagSet *pflag.FlagSet) (Cont }))) } + dialOpts = append(dialOpts, grpc.WithDefaultCallOptions(grpc.ForceCodec(clientCtx.gRPCCodec()))) + grpcClient, err := grpc.Dial(grpcURI, dialOpts...) if err != nil { return Context{}, err } clientCtx = clientCtx.WithGRPCClient(grpcClient) } + + // this should be last as gRPCCodec overwrites output flag to JSON + if clientCtx.OutputFormat == "" || flagSet.Changed(cli.OutputFlag) { + output, _ := flagSet.GetString(cli.OutputFlag) + clientCtx = clientCtx.WithOutputFormat(output) + } } return clientCtx, nil