diff --git a/baseapp/internal/protocompat/protocompat.go b/baseapp/internal/protocompat/protocompat.go index bad4787d4e94..b2a97f8890fc 100644 --- a/baseapp/internal/protocompat/protocompat.go +++ b/baseapp/internal/protocompat/protocompat.go @@ -16,8 +16,9 @@ import ( ) var ( - gogoType = reflect.TypeOf((*gogoproto.Message)(nil)).Elem() - protov2Type = reflect.TypeOf((*proto2.Message)(nil)).Elem() + gogoType = reflect.TypeOf((*gogoproto.Message)(nil)).Elem() + protov2Type = reflect.TypeOf((*proto2.Message)(nil)).Elem() + protov2MarshalOpts = proto2.MarshalOptions{Deterministic: true} ) type Handler = func(ctx context.Context, request, response protoiface.MessageV1) error @@ -96,7 +97,7 @@ func makeProtoV2HybridHandler(prefMethod protoreflect.MethodDescriptor, cdc code // the response is a protov2 message, so we cannot just return it. // since the request came as gogoproto, we expect the response // to also be gogoproto. - respBytes, err := proto2.Marshal(resp.(proto2.Message)) + respBytes, err := protov2MarshalOpts.Marshal(resp.(proto2.Message)) if err != nil { return err } @@ -137,7 +138,7 @@ func makeGogoHybridHandler(prefMethod protoreflect.MethodDescriptor, cdc codec.B switch m := inReq.(type) { case proto2.Message: // we need to marshal and unmarshal the request. - requestBytes, err := proto2.Marshal(m) + requestBytes, err := protov2MarshalOpts.Marshal(m) if err != nil { return err } diff --git a/codec/collections.go b/codec/collections.go index 12f1c396d5c8..cded358c5cc9 100644 --- a/codec/collections.go +++ b/codec/collections.go @@ -104,7 +104,8 @@ type collValue2[T any, PT protoMessageV2[T]] struct { } func (c collValue2[T, PT]) Encode(value PT) ([]byte, error) { - return protov2.Marshal(value) + protov2MarshalOpts := protov2.MarshalOptions{Deterministic: true} + return protov2MarshalOpts.Marshal(value) } func (c collValue2[T, PT]) Decode(b []byte) (PT, error) { diff --git a/codec/proto_codec.go b/codec/proto_codec.go index 26259cf06f72..11fa7859c1c1 100644 --- a/codec/proto_codec.go +++ b/codec/proto_codec.go @@ -345,7 +345,8 @@ type grpcProtoCodec struct { func (g grpcProtoCodec) Marshal(v interface{}) ([]byte, error) { switch m := v.(type) { case proto.Message: - return proto.Marshal(m) + protov2MarshalOpts := proto.MarshalOptions{Deterministic: true} + return protov2MarshalOpts.Marshal(m) case gogoproto.Message: return g.cdc.Marshal(m) default: diff --git a/codec/types/any.go b/codec/types/any.go index 0e743e89dfe9..bef5441fd170 100644 --- a/codec/types/any.go +++ b/codec/types/any.go @@ -69,7 +69,8 @@ func NewAnyWithValue(v proto.Message) (*Any, error) { err error ) if msg, ok := v.(protov2.Message); ok { - bz, err = protov2.Marshal(msg) + protov2MarshalOpts := protov2.MarshalOptions{Deterministic: true} + bz, err = protov2MarshalOpts.Marshal(msg) } else { bz, err = proto.Marshal(v) } @@ -110,7 +111,8 @@ func (any *Any) pack(x proto.Message) error { err error ) if msg, ok := x.(protov2.Message); ok { - bz, err = protov2.Marshal(msg) + protov2MarshalOpts := protov2.MarshalOptions{Deterministic: true} + bz, err = protov2MarshalOpts.Marshal(msg) } else { bz, err = proto.Marshal(x) }