cosmos-sdk/types/codec.go

43 lines
1.2 KiB
Go
Raw Normal View History

package types
import (
2020-03-13 06:57:15 -07:00
jsonc "github.com/gibson042/canonicaljson-go"
"github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/cosmos-sdk/codec"
)
// Register the sdk message type
func RegisterCodec(cdc *codec.Codec) {
cdc.RegisterInterface((*Msg)(nil), nil)
cdc.RegisterInterface((*Tx)(nil), nil)
}
2020-03-13 06:57:15 -07:00
// Register the sdk message type
func RegisterInterfaces(registry types.InterfaceRegistry) {
registry.RegisterInterface("cosmos_sdk.v1.Msg", (*Msg)(nil))
}
2020-03-13 06:58:53 -07:00
// CanonicalSignBytes returns a canonical JSON encoding of a Proto message that
// can be signed over. The JSON encoding ensures all field names adhere to their
// Proto definition, default values are omitted, and follows the JSON Canonical
// Form.
2020-03-26 09:46:10 -07:00
func CanonicalSignBytes(msg codec.ProtoMarshaler) ([]byte, error) {
// first, encode via canonical Proto3 JSON
bz, err := codec.ProtoMarshalJSON(msg)
if err != nil {
2020-03-13 06:57:15 -07:00
return nil, err
}
genericJSON := make(map[string]interface{})
// decode canonical proto encoding into a generic map
2020-03-26 09:46:10 -07:00
if err := jsonc.Unmarshal(bz, &genericJSON); err != nil {
2020-03-13 06:57:15 -07:00
return nil, err
}
// finally, return the canonical JSON encoding via JSON Canonical Form
return jsonc.Marshal(genericJSON)
}