Skip to content

Commit

Permalink
DRY code
Browse files Browse the repository at this point in the history
  • Loading branch information
alexanderbez committed Mar 13, 2020
1 parent 0a79849 commit 217cae2
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 25 deletions.
23 changes: 1 addition & 22 deletions codec/std/tx.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
package std

import (
"bytes"

jsonc "github.com/gibson042/canonicaljson-go"
"github.com/gogo/protobuf/jsonpb"

"github.com/cosmos/cosmos-sdk/client"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
Expand Down Expand Up @@ -165,21 +160,5 @@ func NewSignDoc(num, seq uint64, cid, memo string, fee auth.StdFee, msgs ...Mess
// names adhere to their proto definition, default values are omitted, and follows
// the JSON Canonical Form.
func (sd *SignDoc) CanonicalSignBytes() ([]byte, error) {
jm := &jsonpb.Marshaler{EmitDefaults: false, OrigName: false}
buf := new(bytes.Buffer)

// first, encode via canonical Protocol Buffer JSON
if err := jm.Marshal(buf, sd); err != nil {
return nil, err
}

genericJSON := make(map[string]interface{})

// decode canonical proto encoding into a generic map
if err := jsonc.Unmarshal(buf.Bytes(), &genericJSON); err != nil {
return nil, err
}

// finally, return the canonical JSON encoding via JSON Canonical Form
return jsonc.Marshal(genericJSON)
return sdk.CanonicalSignBytes(sd)
}
27 changes: 27 additions & 0 deletions types/codec.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
package types

import (
"bytes"

jsonc "github.com/gibson042/canonicaljson-go"
"github.com/gogo/protobuf/jsonpb"

"github.com/cosmos/cosmos-sdk/codec"
)

Expand All @@ -9,3 +14,25 @@ func RegisterCodec(cdc *codec.Codec) {
cdc.RegisterInterface((*Msg)(nil), nil)
cdc.RegisterInterface((*Tx)(nil), nil)
}

// CanonicalSignBytes returns a canonical JSON encoding of a message that can be
// signed over.
func CanonicalSignBytes(m codec.ProtoMarshaler) ([]byte, error) {
jm := &jsonpb.Marshaler{EmitDefaults: false, OrigName: false}
buf := new(bytes.Buffer)

// first, encode via canonical Protocol Buffer JSON
if err := jm.Marshal(buf, m); err != nil {
return nil, err
}

genericJSON := make(map[string]interface{})

// decode canonical proto encoding into a generic map
if err := jsonc.Unmarshal(buf.Bytes(), &genericJSON); err != nil {
return nil, err
}

// finally, return the canonical JSON encoding via JSON Canonical Form
return jsonc.Marshal(genericJSON)
}
5 changes: 2 additions & 3 deletions types/tx_msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
)

type (
// Msg defines the interface a transaction message must fulfill.
// Msg defines the interface a transaction message must fulfill.
Msg interface {

// Return the message type.
Expand Down Expand Up @@ -45,7 +45,7 @@ type (
GetSignature() []byte
}

// Tx defines the interface a transaction must fulfill.
// Tx defines the interface a transaction must fulfill.
Tx interface {
// Gets the all the transaction's messages.
GetMsgs() []Msg
Expand All @@ -56,7 +56,6 @@ type (
}
)


// TxDecoder unmarshals transaction bytes
type TxDecoder func(txBytes []byte) (Tx, error)

Expand Down

0 comments on commit 217cae2

Please sign in to comment.