syntax = "proto3"; package amino; import "google/protobuf/descriptor.proto"; // TODO(fdymylja): once we fully migrate to protov2 the go_package needs to be updated. // We need this right now because gogoproto codegen needs to import the extension. option go_package = "github.com/cosmos/cosmos-sdk/types/tx/amino"; extend google.protobuf.MessageOptions { // name is the string used when registering a concrete // type into the Amino type registry, via the Amino codec's // `RegisterConcrete()` method. This string MUST be at most 39 // characters long, or else the message will be rejected by the // Ledger hardware device. string name = 11110001; // encoding describes the encoding format used by Amino for the given // message. The field type is chosen to be a string for // flexibility, but it should ideally be short and expected to be // machine-readable, for example "base64" or "utf8_json". We // highly recommend to use underscores for word separation instead of spaces. // // If left empty, then the Amino encoding is expected to be the same as the // Protobuf one. // // This annotation should not be confused with the `encoding` // one which operates on the field level. string message_encoding = 11110002; } extend google.protobuf.FieldOptions { // encoding describes the encoding format used by Amino for // the given field. The field type is chosen to be a string for // flexibility, but it should ideally be short and expected to be // machine-readable, for example "base64" or "utf8_json". We // highly recommend to use underscores for word separation instead of spaces. // // If left empty, then the Amino encoding is expected to be the same as the // Protobuf one. // // This annotation should not be confused with the // `message_encoding` one which operates on the message level. string encoding = 11110003; // field_name sets a different field name (i.e. key name) in // the amino JSON object for the given field. // // Example: // // message Foo { // string bar = 1 [(amino.field_name) = "baz"]; // } // // Then the Amino encoding of Foo will be: // `{"baz":"some value"}` string field_name = 11110004; // dont_omitempty sets the field in the JSON object even if // its value is empty, i.e. equal to the Golang zero value. To learn what // the zero values are, see https://go.dev/ref/spec#The_zero_value. // // Fields default to `omitempty`, which is the default behavior when this // annotation is unset. When set to true, then the field value in the // JSON object will be set, i.e. not `undefined`. // // Example: // // message Foo { // string bar = 1; // string baz = 2 [(amino.dont_omitempty) = true]; // } // // f := Foo{}; // out := AminoJSONEncoder(&f); // out == {"baz":""} bool dont_omitempty = 11110005; }