From b22803e8b737f06991c2bdf76200a0ff5b13bae6 Mon Sep 17 00:00:00 2001
From: Alex Tran Qui <alex@katalysis.io>
Date: Tue, 24 Jan 2017 23:00:38 +0100
Subject: [PATCH] Fix for deserialization of BroadcastTx which was missing the
 type byte.

Author:    Alex Tran Qui <alex@katalysis.io>
Date:      Tue Jan 24 23:00:38 2017 +0100
---
 rpc/codec.go      | 1 +
 rpc/v0/codec.go   | 8 ++++++++
 rpc/v0/methods.go | 2 +-
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/rpc/codec.go b/rpc/codec.go
index bbf0ba60..750a5a88 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 5763c7bc..87eb73b3 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 a29086df..6a26848c 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
 	}
-- 
GitLab