diff --git a/rpc/codec.go b/rpc/codec.go index bbf0ba604183cc0da6be98b0c0909181c9ba9773..750a5a88e8a6ea672fe635ef41c2f69d2c36274d 100644 --- a/rpc/codec.go +++ b/rpc/codec.go @@ -23,5 +23,6 @@ type Codec interface { EncodeBytes(interface{}) ([]byte, error) Encode(interface{}, io.Writer) error DecodeBytes(interface{}, []byte) error + DecodeBytesPtr(interface{}, []byte) error Decode(interface{}, io.Reader) error } diff --git a/rpc/v0/codec.go b/rpc/v0/codec.go index 5763c7bc710adfcc897cb581a25da5596026f27c..87eb73b3d6c4bd2dddbd701448fdb613aca07772 100644 --- a/rpc/v0/codec.go +++ b/rpc/v0/codec.go @@ -62,3 +62,11 @@ func (this *TCodec) DecodeBytes(v interface{}, bts []byte) error { wire.ReadJSON(v, bts, &err) return err } + +// Decode from a byte array pointer. +func (this *TCodec) DecodeBytesPtr(v interface{}, bts []byte) error { + var err error + wire.ReadJSONPtr(v, bts, &err) + return err +} + diff --git a/rpc/v0/methods.go b/rpc/v0/methods.go index a29086dfaf0b5511a95a545295282f2ca22e1e1d..6a26848cc8f3a6cb38afe01b704a19d98f57c611 100644 --- a/rpc/v0/methods.go +++ b/rpc/v0/methods.go @@ -361,7 +361,7 @@ func (erisDbMethods *ErisDbMethods) CallCode(request *rpc.RPCRequest, requester func (erisDbMethods *ErisDbMethods) BroadcastTx(request *rpc.RPCRequest, requester interface{}) (interface{}, int, error) { // Accept all transaction types as parameter for broadcast. param := new(txs.Tx) - err := erisDbMethods.codec.DecodeBytes(param, request.Params) + err := erisDbMethods.codec.DecodeBytesPtr(param, request.Params) if err != nil { return nil, rpc.INVALID_PARAMS, err }