From 862e2337f8f6db2f5d6021ec6644899e1337b522 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Mon, 30 Oct 2023 23:11:12 +0100 Subject: [PATCH 1/7] fix(client/v2): fix marshalling of queries with any --- client/v2/autocli/app.go | 3 +-- client/v2/go.mod | 2 +- simapp/go.mod | 5 ++++- simapp/go.sum | 2 -- simapp/gomod2nix.toml | 3 --- x/tx/CHANGELOG.md | 6 ++++++ x/tx/go.mod | 2 +- x/tx/signing/aminojson/any.go | 12 ------------ x/tx/signing/aminojson/json_marshal.go | 2 +- x/tx/signing/aminojson/options.go | 17 +++++++++++++++-- 10 files changed, 29 insertions(+), 25 deletions(-) diff --git a/client/v2/autocli/app.go b/client/v2/autocli/app.go index 052b660e1573..2daa2e4ae151 100644 --- a/client/v2/autocli/app.go +++ b/client/v2/autocli/app.go @@ -1,7 +1,6 @@ package autocli import ( - "github.com/cosmos/gogoproto/proto" "github.com/spf13/cobra" "google.golang.org/grpc" "google.golang.org/protobuf/reflect/protoregistry" @@ -66,7 +65,7 @@ func (appOptions AppOptions) EnhanceRootCommand(rootCmd *cobra.Command) error { builder := &Builder{ Builder: flag.Builder{ TypeResolver: protoregistry.GlobalTypes, - FileResolver: proto.HybridResolver, + FileResolver: appOptions.ClientCtx.InterfaceRegistry, Keyring: appOptions.Keyring, AddressCodec: appOptions.ClientCtx.AddressCodec, ValidatorAddressCodec: appOptions.ClientCtx.ValidatorAddressCodec, diff --git a/client/v2/go.mod b/client/v2/go.mod index baf68515850e..941ad1bc2f8f 100644 --- a/client/v2/go.mod +++ b/client/v2/go.mod @@ -11,7 +11,6 @@ require ( github.com/cockroachdb/errors v1.11.1 github.com/cosmos/cosmos-proto v1.0.0-beta.3 github.com/cosmos/cosmos-sdk v0.51.0 - github.com/cosmos/gogoproto v1.4.11 github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 google.golang.org/grpc v1.59.0 @@ -48,6 +47,7 @@ require ( github.com/cosmos/cosmos-db v1.0.0 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/gogoproto v1.4.11 // indirect github.com/cosmos/iavl v1.0.0-rc.1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.2 // indirect diff --git a/simapp/go.mod b/simapp/go.mod index 30e08346b3ee..fd89ba8b0f42 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -210,10 +210,13 @@ require ( // replace ( // // ) +replace ( + cosmossdk.io/api => ../api + cosmossdk.io/x/tx => ../x/tx +) // SimApp on main always tests the latest extracted SDK modules importing the sdk replace ( - cosmossdk.io/api => ../api cosmossdk.io/client/v2 => ../client/v2 cosmossdk.io/tools/confix => ../tools/confix cosmossdk.io/x/authz => ../x/authz diff --git a/simapp/go.sum b/simapp/go.sum index 16354abe7ce6..d3942a9e9d62 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -201,8 +201,6 @@ cosmossdk.io/math v1.1.3-rc.1 h1:NebCNWDqb1MJRNfvxr4YY7d8FSYgkuB3L75K6xvM+Zo= cosmossdk.io/math v1.1.3-rc.1/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/store v1.0.0-rc.0 h1:9DwOjuUYxDtYxn/REkTxGQAmxlIGfRroB35MQ8TrxF4= cosmossdk.io/store v1.0.0-rc.0/go.mod h1:FtBDOJmwtOZfmKKF65bKZbTYgS3bDNjjo3nP76dAegk= -cosmossdk.io/x/tx v0.11.0 h1:Ak2LIC06bXqPbpMIEorkQbwVddRvRys1sL3Cjm+KPfs= -cosmossdk.io/x/tx v0.11.0/go.mod h1:tzuC7JlfGivYuIO32JbvvY3Ft9s6FK1+r0/nGHiHwtM= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= diff --git a/simapp/gomod2nix.toml b/simapp/gomod2nix.toml index 2cded1b22002..c848b177f8ac 100644 --- a/simapp/gomod2nix.toml +++ b/simapp/gomod2nix.toml @@ -37,9 +37,6 @@ schema = 3 [mod."cosmossdk.io/store"] version = "v1.0.0-rc.0" hash = "sha256-DgW4ZrDwmgsPtEXajPyAsrQuPjXekw5PfsYFvA5yuiE=" - [mod."cosmossdk.io/x/tx"] - version = "v0.11.0" - hash = "sha256-8CYRI51ChKRonaK1lWWGGe/pvH1zEmrPzheTdE0C9hc=" [mod."filippo.io/edwards25519"] version = "v1.0.0" hash = "sha256-APnPAcmItvtJ5Zsy863lzR2TjEBF9Y66TY1e4M1ap98=" diff --git a/x/tx/CHANGELOG.md b/x/tx/CHANGELOG.md index 44157179e329..6524ff0ba059 100644 --- a/x/tx/CHANGELOG.md +++ b/x/tx/CHANGELOG.md @@ -31,6 +31,12 @@ Ref: https://keepachangelog.com/en/1.0.0/ ## [Unreleased] +## v0.12.0 + +### Improvements + +* []() Update encoder so that amino types defauls to msg type url. + ## v0.11.0 ### Improvements diff --git a/x/tx/go.mod b/x/tx/go.mod index db308f3ccf16..e1b0240908cd 100644 --- a/x/tx/go.mod +++ b/x/tx/go.mod @@ -8,6 +8,7 @@ require ( cosmossdk.io/errors v1.0.0 cosmossdk.io/math v1.1.3-rc.1 github.com/cosmos/cosmos-proto v1.0.0-beta.3 + github.com/cosmos/gogoproto v1.4.11 github.com/google/go-cmp v0.6.0 github.com/google/gofuzz v1.2.0 github.com/iancoleman/strcase v0.3.0 @@ -20,7 +21,6 @@ require ( ) require ( - github.com/cosmos/gogoproto v1.4.11 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/x/tx/signing/aminojson/any.go b/x/tx/signing/aminojson/any.go index 4e0e46954bcb..6c3f83ed83f5 100644 --- a/x/tx/signing/aminojson/any.go +++ b/x/tx/signing/aminojson/any.go @@ -50,12 +50,6 @@ func marshalAny(enc *Encoder, message protoreflect.Message, writer io.Writer) er protoMessage = valueMsg.ProtoReflect() } - _, named := getMessageAminoName(protoMessage.Descriptor().Options()) - if !named { - return fmt.Errorf("message %s is packed into an any field, so requires an amino.name annotation", - anyMsg.TypeUrl) - } - return enc.beginMarshal(protoMessage, writer) } @@ -73,12 +67,6 @@ func marshalDynamic(enc *Encoder, message protoreflect.Message, writer io.Writer return errors.Wrapf(err, "can't resolve type URL %s", msgName) } - _, named := getMessageAminoName(desc.Options()) - if !named { - return fmt.Errorf("message %s is packed into an any field, so requires an amino.name annotation", - msgName) - } - valueMsg := dynamicpb.NewMessageType(desc.(protoreflect.MessageDescriptor)).New().Interface() err = proto.Unmarshal(msgBytes, valueMsg) if err != nil { diff --git a/x/tx/signing/aminojson/json_marshal.go b/x/tx/signing/aminojson/json_marshal.go index d3ca5822b54d..04f33e2e824f 100644 --- a/x/tx/signing/aminojson/json_marshal.go +++ b/x/tx/signing/aminojson/json_marshal.go @@ -171,7 +171,7 @@ func (enc Encoder) Marshal(message proto.Message) ([]byte, error) { } func (enc Encoder) beginMarshal(msg protoreflect.Message, writer io.Writer) error { - name, named := getMessageAminoName(msg.Descriptor().Options()) + name, named := getMessageAminoName(msg) if named { _, err := fmt.Fprintf(writer, `{"type":"%s","value":`, name) if err != nil { diff --git a/x/tx/signing/aminojson/options.go b/x/tx/signing/aminojson/options.go index 4e17060c78f3..b37558535280 100644 --- a/x/tx/signing/aminojson/options.go +++ b/x/tx/signing/aminojson/options.go @@ -2,6 +2,7 @@ package aminojson import ( cosmos_proto "github.com/cosmos/cosmos-proto" + gogoproto "github.com/cosmos/gogoproto/proto" "github.com/iancoleman/strcase" "github.com/pkg/errors" "google.golang.org/protobuf/proto" @@ -11,12 +12,24 @@ import ( ) // getMessageAminoName returns the amino name of a message if it has been set by the `amino.name` option. -// If the message does not have an amino name, then the function returns false. -func getMessageAminoName(messageOptions proto.Message) (string, bool) { +// If the message does not have an amino name, then it returns the msg url. +// If it cannot get the msg url, then it returns false. +func getMessageAminoName(msg protoreflect.Message) (string, bool) { + messageOptions := msg.Descriptor().Options() if proto.HasExtension(messageOptions, amino.E_Name) { name := proto.GetExtension(messageOptions, amino.E_Name) return name.(string), true } + + msgURL := "/" + string(msg.Descriptor().FullName()) + if msgURL != "/" { + return msgURL, true + } + + if m, ok := msg.(gogoproto.Message); ok { + return "/" + gogoproto.MessageName(m), true + } + return "", false } From 9c78e8b2733ba36e93f7da4f46954074138fd2e8 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 31 Oct 2023 21:39:32 +0100 Subject: [PATCH 2/7] updates --- x/tx/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/tx/CHANGELOG.md b/x/tx/CHANGELOG.md index 6524ff0ba059..dc45ce62cea3 100644 --- a/x/tx/CHANGELOG.md +++ b/x/tx/CHANGELOG.md @@ -35,7 +35,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements -* []() Update encoder so that amino types defauls to msg type url. +* [#18309](https://github.com/cosmos/cosmos-sdk/pull/18309) Update encoder so that amino types defauls to msg type url. ## v0.11.0 From aecee41a0d60373b54bde18c620a3e96f04a71ba Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 1 Nov 2023 13:12:34 +0100 Subject: [PATCH 3/7] updates --- x/tx/signing/aminojson/any.go | 4 ++-- x/tx/signing/aminojson/json_marshal.go | 16 +++++++++++++--- x/tx/signing/aminojson/options.go | 22 +++++++++++++++++----- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/x/tx/signing/aminojson/any.go b/x/tx/signing/aminojson/any.go index 6c3f83ed83f5..c7e304a46977 100644 --- a/x/tx/signing/aminojson/any.go +++ b/x/tx/signing/aminojson/any.go @@ -50,7 +50,7 @@ func marshalAny(enc *Encoder, message protoreflect.Message, writer io.Writer) er protoMessage = valueMsg.ProtoReflect() } - return enc.beginMarshal(protoMessage, writer) + return enc.beginMarshal(protoMessage, writer, true) } const ( @@ -73,5 +73,5 @@ func marshalDynamic(enc *Encoder, message protoreflect.Message, writer io.Writer return err } - return enc.beginMarshal(valueMsg.ProtoReflect(), writer) + return enc.beginMarshal(valueMsg.ProtoReflect(), writer, true) } diff --git a/x/tx/signing/aminojson/json_marshal.go b/x/tx/signing/aminojson/json_marshal.go index 04f33e2e824f..aa8aa76b945e 100644 --- a/x/tx/signing/aminojson/json_marshal.go +++ b/x/tx/signing/aminojson/json_marshal.go @@ -156,7 +156,7 @@ func (enc Encoder) DefineTypeEncoding(typeURL string, encoder MessageEncoder) En // Marshal serializes a protobuf message to JSON. func (enc Encoder) Marshal(message proto.Message) ([]byte, error) { buf := &bytes.Buffer{} - err := enc.beginMarshal(message.ProtoReflect(), buf) + err := enc.beginMarshal(message.ProtoReflect(), buf, false) if enc.indent != "" { indentBuf := &bytes.Buffer{} @@ -170,8 +170,18 @@ func (enc Encoder) Marshal(message proto.Message) ([]byte, error) { return buf.Bytes(), err } -func (enc Encoder) beginMarshal(msg protoreflect.Message, writer io.Writer) error { - name, named := getMessageAminoName(msg) +func (enc Encoder) beginMarshal(msg protoreflect.Message, writer io.Writer, isAny bool) error { + var ( + name string + named bool + ) + + if isAny { + name, named = getMessageAminoNameAny(msg), true + } else { + name, named = getMessageAminoName(msg) + } + if named { _, err := fmt.Fprintf(writer, `{"type":"%s","value":`, name) if err != nil { diff --git a/x/tx/signing/aminojson/options.go b/x/tx/signing/aminojson/options.go index b37558535280..0eecedb88731 100644 --- a/x/tx/signing/aminojson/options.go +++ b/x/tx/signing/aminojson/options.go @@ -12,8 +12,7 @@ import ( ) // getMessageAminoName returns the amino name of a message if it has been set by the `amino.name` option. -// If the message does not have an amino name, then it returns the msg url. -// If it cannot get the msg url, then it returns false. +// If the message does not have an amino name, then the function returns false. func getMessageAminoName(msg protoreflect.Message) (string, bool) { messageOptions := msg.Descriptor().Options() if proto.HasExtension(messageOptions, amino.E_Name) { @@ -21,16 +20,29 @@ func getMessageAminoName(msg protoreflect.Message) (string, bool) { return name.(string), true } + return "", false +} + +// getMessageAminoName returns the amino name of a message if it has been set by the `amino.name` option. +// If the message does not have an amino name, then it returns the msg url. +// If it cannot get the msg url, then it returns false. +func getMessageAminoNameAny(msg protoreflect.Message) string { + messageOptions := msg.Descriptor().Options() + if proto.HasExtension(messageOptions, amino.E_Name) { + name := proto.GetExtension(messageOptions, amino.E_Name) + return name.(string) + } + msgURL := "/" + string(msg.Descriptor().FullName()) if msgURL != "/" { - return msgURL, true + return msgURL } if m, ok := msg.(gogoproto.Message); ok { - return "/" + gogoproto.MessageName(m), true + return "/" + gogoproto.MessageName(m) } - return "", false + return "" } // omitEmpty returns true if the field should be omitted if empty. Empty field omission is the default behavior. From 104193a5f11f5066576e4f3a6acee60d61a83750 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 1 Nov 2023 13:18:26 +0100 Subject: [PATCH 4/7] revert simapp changes --- simapp/go.mod | 5 +---- simapp/go.sum | 2 ++ simapp/gomod2nix.toml | 3 +++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/simapp/go.mod b/simapp/go.mod index c50622a295d5..fcb5639d30b9 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -210,13 +210,10 @@ require ( // replace ( // // ) -replace ( - cosmossdk.io/api => ../api - cosmossdk.io/x/tx => ../x/tx -) // SimApp on main always tests the latest extracted SDK modules importing the sdk replace ( + cosmossdk.io/api => ../api cosmossdk.io/client/v2 => ../client/v2 cosmossdk.io/tools/confix => ../tools/confix cosmossdk.io/x/authz => ../x/authz diff --git a/simapp/go.sum b/simapp/go.sum index c37bc5b2d140..030e3f706fb5 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -201,6 +201,8 @@ cosmossdk.io/math v1.1.3-rc.1 h1:NebCNWDqb1MJRNfvxr4YY7d8FSYgkuB3L75K6xvM+Zo= cosmossdk.io/math v1.1.3-rc.1/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/store v1.0.0-rc.0 h1:9DwOjuUYxDtYxn/REkTxGQAmxlIGfRroB35MQ8TrxF4= cosmossdk.io/store v1.0.0-rc.0/go.mod h1:FtBDOJmwtOZfmKKF65bKZbTYgS3bDNjjo3nP76dAegk= +cosmossdk.io/x/tx v0.11.0 h1:Ak2LIC06bXqPbpMIEorkQbwVddRvRys1sL3Cjm+KPfs= +cosmossdk.io/x/tx v0.11.0/go.mod h1:tzuC7JlfGivYuIO32JbvvY3Ft9s6FK1+r0/nGHiHwtM= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= diff --git a/simapp/gomod2nix.toml b/simapp/gomod2nix.toml index c1b09745925c..a8ea3fd69208 100644 --- a/simapp/gomod2nix.toml +++ b/simapp/gomod2nix.toml @@ -37,6 +37,9 @@ schema = 3 [mod."cosmossdk.io/store"] version = "v1.0.0-rc.0" hash = "sha256-DgW4ZrDwmgsPtEXajPyAsrQuPjXekw5PfsYFvA5yuiE=" + [mod."cosmossdk.io/x/tx"] + version = "v0.11.0" + hash = "sha256-8CYRI51ChKRonaK1lWWGGe/pvH1zEmrPzheTdE0C9hc=" [mod."filippo.io/edwards25519"] version = "v1.0.0" hash = "sha256-APnPAcmItvtJ5Zsy863lzR2TjEBF9Y66TY1e4M1ap98=" From e54a39db74391aa6aa43bb26984df7dde0ac5e80 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Thu, 2 Nov 2023 23:02:40 +0100 Subject: [PATCH 5/7] add small tests --- x/tx/signing/aminojson/options_test.go | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 x/tx/signing/aminojson/options_test.go diff --git a/x/tx/signing/aminojson/options_test.go b/x/tx/signing/aminojson/options_test.go new file mode 100644 index 000000000000..8038827f0f7f --- /dev/null +++ b/x/tx/signing/aminojson/options_test.go @@ -0,0 +1,30 @@ +package aminojson + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "cosmossdk.io/x/tx/signing/aminojson/internal/testpb" +) + +func Test_getMessageAminoName(t *testing.T) { + msg := &testpb.ABitOfEverything{} + name, ok := getMessageAminoName(msg.ProtoReflect()) + require.True(t, ok) + require.Equal(t, "ABitOfEverything", name) + + secondMsg := &testpb.Duration{} + _, ok = getMessageAminoName(secondMsg.ProtoReflect()) + require.False(t, ok) +} + +func Test_getMessageAminoNameAny(t *testing.T) { + msg := &testpb.ABitOfEverything{} + name := getMessageAminoNameAny(msg.ProtoReflect()) + require.Equal(t, "ABitOfEverything", name) + + secondMsg := &testpb.Duration{} + name = getMessageAminoNameAny(secondMsg.ProtoReflect()) + require.Equal(t, "/testpb.Duration", name) +} From c47bb5d8f3a1ba5299b841174da00b1a28ae819e Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Thu, 2 Nov 2023 23:05:02 +0100 Subject: [PATCH 6/7] updates --- client/debug/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/client/debug/main.go b/client/debug/main.go index c328558dd569..508ab43e3bbb 100644 --- a/client/debug/main.go +++ b/client/debug/main.go @@ -86,6 +86,7 @@ func getCodecInterfaceImpls() *cobra.Command { Short: "List the registered type URLs for the provided interface", Long: "List the registered type URLs that can be used for the provided interface name using the application codec", Example: fmt.Sprintf("%s debug codec list-implementations cosmos.crypto.PubKey", version.AppName), + Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) impls := clientCtx.Codec.InterfaceRegistry().ListImplementations(args[0]) From af6046e753ed8824c23799590c2e56c4012e07c4 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Thu, 2 Nov 2023 23:05:56 +0100 Subject: [PATCH 7/7] fix changelog --- x/tx/CHANGELOG.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/x/tx/CHANGELOG.md b/x/tx/CHANGELOG.md index dc45ce62cea3..719c15cddb37 100644 --- a/x/tx/CHANGELOG.md +++ b/x/tx/CHANGELOG.md @@ -35,7 +35,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements -* [#18309](https://github.com/cosmos/cosmos-sdk/pull/18309) Update encoder so that amino types defauls to msg type url. +* [#18309](https://github.com/cosmos/cosmos-sdk/pull/18309) Update encoder so that amino types default to msg type url. ## v0.11.0 @@ -93,18 +93,18 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements * [#15871](https://github.com/cosmos/cosmos-sdk/pull/15871) - * `HandlerMap` now has a `DefaultMode()` getter method - * Textual types use `signing.ProtoFileResolver` instead of `protoregistry.Files` + * `HandlerMap` now has a `DefaultMode()` getter method + * Textual types use `signing.ProtoFileResolver` instead of `protoregistry.Files` ## v0.6.0 ### API Breaking * [#15709](https://github.com/cosmos/cosmos-sdk/pull/15709): - * `GetSignersContext` has been renamed to `signing.Context` - * `GetSigners` now returns `[][]byte` instead of `[]string` - * `GetSignersOptions` has been renamed to `signing.Options` and requires `address.Codec`s for account and validator addresses - * `GetSignersOptions.ProtoFiles` has been renamed to `signing.Options.FileResolver` + * `GetSignersContext` has been renamed to `signing.Context` + * `GetSigners` now returns `[][]byte` instead of `[]string` + * `GetSignersOptions` has been renamed to `signing.Options` and requires `address.Codec`s for account and validator addresses + * `GetSignersOptions.ProtoFiles` has been renamed to `signing.Options.FileResolver` ### Bug Fixes