Update x/gov to use Any (#6147)
* Update x/gov to use Any * Fixes * Remove MsgSubmitProposalLegacy * Update CHANGELOG.md * Add RegisterInterfaces for x/distribution, x/params, & x/upgrade * Fix query JSON issue * Fix gov tests * Revert custom Any Equals * Re-remove types * Rename receivers * Fix imports in gov * Sort imports * Make amino JSON signing work with Any * Run proto-gen * Create full amino wrapper * Fix errors * Fixes * Fix tests * Test fixes * Fix tests * Linting * Update ADR 019 and CHANGELOG * Updated ADR 019 * Extract Marshal/UnmarshalProposal * fix error * lint * linting * linting * Update client/keys/parse.go Co-authored-by: Marko <marbar3778@yahoo.com> * linting * Update docs/architecture/adr-019-protobuf-state-encoding.md Co-authored-by: Alexander Bezobchuk <alexanderbez@users.noreply.github.com> * Update docs/architecture/adr-019-protobuf-state-encoding.md Co-authored-by: Alexander Bezobchuk <alexanderbez@users.noreply.github.com> * Address review feedback * Add godocs * Fix errors * fix errors * revert file * Address review feedback * Address review feedback * Stacktrace debug flag * Fix tests * Address review feedback Co-authored-by: sahith-narahari <sahithnarahari@gmail.com> Co-authored-by: Marko <marbar3778@yahoo.com> Co-authored-by: Alexander Bezobchuk <alexanderbez@users.noreply.github.com>
This commit is contained in:
co-authored by
Marko
Alexander Bezobchuk
sahith-narahari
parent
d7677e0871
commit
70767c87c4
@@ -5,6 +5,7 @@
|
||||
- 2020 Feb 15: Initial Draft
|
||||
- 2020 Feb 24: Updates to handle messages with interface fields
|
||||
- 2020 Apr 27: Convert usages of `oneof` for interfaces to `Any`
|
||||
- 2020 May 15: Describe `cosmos_proto` extensions and amino compatibility
|
||||
|
||||
## Status
|
||||
|
||||
@@ -176,6 +177,14 @@ type InterfaceRegistry interface {
|
||||
In addition to serving as a whitelist, `InterfaceRegistry` can also serve
|
||||
to communicate the list of concrete types that satisfy an interface to clients.
|
||||
|
||||
In .proto files:
|
||||
* fields which accept interfaces should be annotated with `cosmos_proto.accepts_interface`
|
||||
using the same full-qualified name passed as `protoName` to `InterfaceRegistry.RegisterInterface`
|
||||
* interface implementations should be annotated with `cosmos_proto.implements_interface`
|
||||
using the same full-qualified name passed as `protoName` to `InterfaceRegistry.RegisterInterface`
|
||||
|
||||
In the future, `protoName`, `cosmos_proto.accepts_interface`, `cosmos_proto.implements_interface`
|
||||
may be used via code generation, reflection &/or static linting.
|
||||
|
||||
The same struct that implements `InterfaceRegistry` will also implement an
|
||||
interface `InterfaceUnpacker` to be used for unpacking `Any`s:
|
||||
@@ -299,6 +308,21 @@ func (msg MsgSubmitEvidence) GetEvidence() eviexported.Evidence {
|
||||
}
|
||||
```
|
||||
|
||||
### Amino Compatibility
|
||||
|
||||
Our custom implementation of `Any` can be used transparently with Amino if used
|
||||
with the proper codec instance. What this means is that interfaces packed within
|
||||
`Any`s will be amino marshaled like regular Amino interfaces (assuming they
|
||||
have been registered properly with Amino).
|
||||
|
||||
In order for this functionality to work:
|
||||
* **all legacy code must use `*codec.Codec` instead of `*amino.Codec` which is
|
||||
now a wrapper which properly handles `Any`**
|
||||
* **all new code should use `Marshaler` which is compatible with both amino and
|
||||
protobuf**
|
||||
|
||||
Also, before v0.39, `codec.Codec` will be renamed to `codec.LegacyAmino`.
|
||||
|
||||
### Why Wasn't X Chosen Instead
|
||||
|
||||
For a more complete comparison to alternative protocols, see [here](https://codeburst.io/json-vs-protocol-buffers-vs-flatbuffers-a4247f8bda6f).
|
||||
|
||||
Reference in New Issue
Block a user