diff --git a/CHANGELOG.md b/CHANGELOG.md index 8554540501..f12eaa4203 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## Pending + +BREAKING CHANGES + +FEATURES + +IMPROVEMENTS +* bank module uses go-wire codec instead of 'encoding/json' +* auth module uses go-wire codec instead of 'encoding/json' + +FIXES + ## 0.18.1 BREAKING CHANGES diff --git a/x/auth/msgs.go b/x/auth/msgs.go index c449b837b1..3eb5cc8ba2 100644 --- a/x/auth/msgs.go +++ b/x/auth/msgs.go @@ -1,8 +1,6 @@ package auth import ( - "encoding/json" - sdk "github.com/cosmos/cosmos-sdk/types" crypto "github.com/tendermint/go-crypto" ) @@ -30,7 +28,7 @@ func (msg MsgChangeKey) ValidateBasic() sdk.Error { // Implements Msg. func (msg MsgChangeKey) GetSignBytes() []byte { - b, err := json.Marshal(msg) // XXX: ensure some canonical form + b, err := msgCdc.MarshalJSON(msg) // XXX: ensure some canonical form if err != nil { panic(err) } diff --git a/x/auth/stdtx.go b/x/auth/stdtx.go index bc01b01490..4858ae0b43 100644 --- a/x/auth/stdtx.go +++ b/x/auth/stdtx.go @@ -1,8 +1,6 @@ package auth import ( - "encoding/json" - sdk "github.com/cosmos/cosmos-sdk/types" crypto "github.com/tendermint/go-crypto" ) @@ -70,7 +68,7 @@ func (fee StdFee) Bytes() []byte { if len(fee.Amount) == 0 { fee.Amount = sdk.Coins{} } - bz, err := json.Marshal(fee) // TODO + bz, err := msgCdc.MarshalJSON(fee) // TODO if err != nil { panic(err) } @@ -95,7 +93,7 @@ type StdSignDoc struct { // StdSignBytes returns the bytes to sign for a transaction. // TODO: change the API to just take a chainID and StdTx ? func StdSignBytes(chainID string, sequences []int64, fee StdFee, msg sdk.Msg) []byte { - bz, err := json.Marshal(StdSignDoc{ + bz, err := msgCdc.MarshalJSON(StdSignDoc{ ChainID: chainID, Sequences: sequences, FeeBytes: fee.Bytes(), diff --git a/x/auth/wire.go b/x/auth/wire.go index 42b34b96d5..309464c864 100644 --- a/x/auth/wire.go +++ b/x/auth/wire.go @@ -10,3 +10,10 @@ func RegisterWire(cdc *wire.Codec) { cdc.RegisterConcrete(&BaseAccount{}, "auth/Account", nil) cdc.RegisterConcrete(MsgChangeKey{}, "auth/ChangeKey", nil) } + +var msgCdc = wire.NewCodec() + +func init() { + RegisterWire(msgCdc) + wire.RegisterCrypto(msgCdc) +} diff --git a/x/bank/client/rest/sendtx.go b/x/bank/client/rest/sendtx.go index 916aa08fe1..defed3f144 100644 --- a/x/bank/client/rest/sendtx.go +++ b/x/bank/client/rest/sendtx.go @@ -11,6 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" + "github.com/cosmos/cosmos-sdk/x/bank" "github.com/cosmos/cosmos-sdk/x/bank/client" ) @@ -29,6 +30,12 @@ type sendBody struct { Sequence int64 `json:"sequence"` } +var msgCdc = wire.NewCodec() + +func init() { + bank.RegisterWire(msgCdc) +} + // SendRequestHandlerFn - http request handler to send coins to a address func SendRequestHandlerFn(cdc *wire.Codec, kb keys.Keybase, ctx context.CoreContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { @@ -43,7 +50,7 @@ func SendRequestHandlerFn(cdc *wire.Codec, kb keys.Keybase, ctx context.CoreCont w.Write([]byte(err.Error())) return } - err = json.Unmarshal(body, &m) + err = msgCdc.UnmarshalJSON(body, &m) if err != nil { w.WriteHeader(http.StatusBadRequest) w.Write([]byte(err.Error())) diff --git a/x/bank/msgs.go b/x/bank/msgs.go index de7f2a8b15..7836056de0 100644 --- a/x/bank/msgs.go +++ b/x/bank/msgs.go @@ -1,8 +1,6 @@ package bank import ( - "encoding/json" - sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -55,7 +53,7 @@ func (msg MsgSend) ValidateBasic() sdk.Error { // Implements Msg. func (msg MsgSend) GetSignBytes() []byte { - b, err := json.Marshal(msg) // XXX: ensure some canonical form + b, err := msgCdc.MarshalJSON(msg) // XXX: ensure some canonical form if err != nil { panic(err) } @@ -104,7 +102,7 @@ func (msg MsgIssue) ValidateBasic() sdk.Error { // Implements Msg. func (msg MsgIssue) GetSignBytes() []byte { - b, err := json.Marshal(msg) // XXX: ensure some canonical form + b, err := msgCdc.MarshalJSON(msg) // XXX: ensure some canonical form if err != nil { panic(err) } diff --git a/x/bank/msgs_test.go b/x/bank/msgs_test.go index 78de01f400..8f9791c8d7 100644 --- a/x/bank/msgs_test.go +++ b/x/bank/msgs_test.go @@ -186,8 +186,14 @@ func TestMsgSendGetSignBytes(t *testing.T) { Outputs: []Output{NewOutput(addr2, coins)}, } res := msg.GetSignBytes() + + unmarshaledMsg := &MsgSend{} + msgCdc.UnmarshalJSON(res, unmarshaledMsg) + assert.Equal(t, &msg, unmarshaledMsg) + // TODO bad results - assert.Equal(t, string(res), `{"inputs":[{"address":"696E707574","coins":[{"denom":"atom","amount":10}]}],"outputs":[{"address":"6F7574707574","coins":[{"denom":"atom","amount":10}]}]}`) + expected := `{"type":"EAFDE32A2C87F8","value":{"inputs":[{"address":"696E707574","coins":[{"denom":"atom","amount":10}]}],"outputs":[{"address":"6F7574707574","coins":[{"denom":"atom","amount":10}]}]}}` + assert.Equal(t, expected, string(res)) } func TestMsgSendGetSigners(t *testing.T) { @@ -255,8 +261,14 @@ func TestMsgIssueGetSignBytes(t *testing.T) { Outputs: []Output{NewOutput(addr, coins)}, } res := msg.GetSignBytes() + + unmarshaledMsg := &MsgIssue{} + msgCdc.UnmarshalJSON(res, unmarshaledMsg) + assert.Equal(t, &msg, unmarshaledMsg) + // TODO bad results - assert.Equal(t, string(res), `{"banker":"696E707574","outputs":[{"address":"6C6F616E2D66726F6D2D62616E6B","coins":[{"denom":"atom","amount":10}]}]}`) + expected := `{"type":"72E617C06ABAD0","value":{"banker":"696E707574","outputs":[{"address":"6C6F616E2D66726F6D2D62616E6B","coins":[{"denom":"atom","amount":10}]}]}}` + assert.Equal(t, expected, string(res)) } func TestMsgIssueGetSigners(t *testing.T) { diff --git a/x/bank/wire.go b/x/bank/wire.go index fdb6c252b5..f468d3e530 100644 --- a/x/bank/wire.go +++ b/x/bank/wire.go @@ -9,3 +9,9 @@ func RegisterWire(cdc *wire.Codec) { cdc.RegisterConcrete(MsgSend{}, "cosmos-sdk/Send", nil) cdc.RegisterConcrete(MsgIssue{}, "cosmos-sdk/Issue", nil) } + +var msgCdc = wire.NewCodec() + +func init() { + RegisterWire(msgCdc) +} diff --git a/x/stake/msg.go b/x/stake/msg.go index 1cbf31c82d..67d9597cac 100644 --- a/x/stake/msg.go +++ b/x/stake/msg.go @@ -1,10 +1,7 @@ package stake import ( - "encoding/json" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/wire" crypto "github.com/tendermint/go-crypto" ) @@ -20,12 +17,6 @@ const StakingToken = "steak" //Verify interface at compile time var _, _, _, _ sdk.Msg = &MsgDeclareCandidacy{}, &MsgEditCandidacy{}, &MsgDelegate{}, &MsgUnbond{} -var msgCdc = wire.NewCodec() - -func init() { - wire.RegisterCrypto(msgCdc) -} - //______________________________________________________________________ // MsgDeclareCandidacy - struct for unbonding transactions @@ -98,7 +89,7 @@ func (msg MsgEditCandidacy) GetSigners() []sdk.Address { // get the bytes for the message signer to sign on func (msg MsgEditCandidacy) GetSignBytes() []byte { - b, err := json.Marshal(msg) + b, err := msgCdc.MarshalJSON(msg) if err != nil { panic(err) } @@ -142,7 +133,7 @@ func (msg MsgDelegate) GetSigners() []sdk.Address { // get the bytes for the message signer to sign on func (msg MsgDelegate) GetSignBytes() []byte { - b, err := json.Marshal(msg) + b, err := msgCdc.MarshalJSON(msg) if err != nil { panic(err) } @@ -189,7 +180,7 @@ func (msg MsgUnbond) GetSigners() []sdk.Address { return []sdk.Address{msg.Deleg // get the bytes for the message signer to sign on func (msg MsgUnbond) GetSignBytes() []byte { - b, err := json.Marshal(msg) + b, err := msgCdc.MarshalJSON(msg) if err != nil { panic(err) } diff --git a/x/stake/params.go b/x/stake/params.go index ace39935c3..026bd871f1 100644 --- a/x/stake/params.go +++ b/x/stake/params.go @@ -18,8 +18,8 @@ type Params struct { } func (p Params) equal(p2 Params) bool { - bz1 := cdcEmpty.MustMarshalBinary(&p) - bz2 := cdcEmpty.MustMarshalBinary(&p2) + bz1 := msgCdc.MustMarshalBinary(&p) + bz2 := msgCdc.MustMarshalBinary(&p2) return bytes.Equal(bz1, bz2) } diff --git a/x/stake/pool.go b/x/stake/pool.go index 0b320432ed..ba1890ce55 100644 --- a/x/stake/pool.go +++ b/x/stake/pool.go @@ -25,8 +25,8 @@ type Pool struct { } func (p Pool) equal(p2 Pool) bool { - bz1 := cdcEmpty.MustMarshalBinary(&p) - bz2 := cdcEmpty.MustMarshalBinary(&p2) + bz1 := msgCdc.MustMarshalBinary(&p) + bz2 := msgCdc.MustMarshalBinary(&p2) return bytes.Equal(bz1, bz2) } diff --git a/x/stake/wire.go b/x/stake/wire.go index 6e6e382606..fb1a1c8867 100644 --- a/x/stake/wire.go +++ b/x/stake/wire.go @@ -12,4 +12,9 @@ func RegisterWire(cdc *wire.Codec) { cdc.RegisterConcrete(MsgUnbond{}, "cosmos-sdk/MsgUnbond", nil) } -var cdcEmpty = wire.NewCodec() +var msgCdc = wire.NewCodec() + +func init() { + RegisterWire(msgCdc) + wire.RegisterCrypto(msgCdc) +}