Skip to content

Canonical marshalling for imported messages #34

Open

Description

Our deterministic marshalling implementation enforces canonical marshalling for messages.
This is achieved because we generated that code with pulsar codegen.

But what happens when we import a message that was not generated with cosmos-proto?

Ex:

message GeneratedWithCosmosProto {
  google.Protobuf.FileDescriptor not_generated_with_cosmos_proto = 1;
  string field = 1;
  map<string, int64> map_field = 2;
  ...
}

How do we detect that the import is not generated with pulsar from marshal codegen, and then how do we marshal it in a canonical way without impacting performance much?

Use cases:

  • ORM will most likely save objects protobuf file descriptors into state using the google.Protobuf.FileDescriptor message.
  • Timestamp and Duration proto

NOTE:
We can enforce deterministic marshalling for imported objects, protobuf marshal options supports this, but there is no guarantee that that deterministic marshalling follows https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-027-deterministic-protobuf-serialization.md

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    • Status

      📋 Backlog

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions