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
 	}