diff --git a/rpc/api.go b/rpc/api.go
index b6f6ac3f915c672e678236f9853070815fdc7d2d..a9a0ae6093ba3298cc37eecd558aa615892d9fe6 100644
--- a/rpc/api.go
+++ b/rpc/api.go
@@ -158,16 +158,16 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
 		v := api.xethAtStateNum(args.BlockNumber).CodeAtBytes(args.Address)
 		*reply = newHexData(v)
 
-	// case "eth_sign":
-	// 	args := new(NewSigArgs)
-	// 	if err := json.Unmarshal(req.Params, &args); err != nil {
-	// 		return err
-	// 	}
-	// 	v, err := api.xeth().Sign(args.From, args.Data, false)
-	// 	if err != nil {
-	// 		return err
-	// 	}
-	// 	*reply = v
+	case "eth_sign":
+		args := new(NewSigArgs)
+		if err := json.Unmarshal(req.Params, &args); err != nil {
+			return err
+		}
+		v, err := api.xeth().Sign(args.From, args.Data, false)
+		if err != nil {
+			return err
+		}
+		*reply = v
 
 	case "eth_sendTransaction", "eth_transact":
 		args := new(NewTxArgs)
diff --git a/rpc/args.go b/rpc/args.go
index 27824f12c8bc5928901f4abc75498e77324bbbc6..686872a5985d8766aa5e32da1af521804040ef15 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -166,45 +166,45 @@ type NewTxArgs struct {
 	BlockNumber int64
 }
 
-// type NewSigArgs struct {
-// 	From string
-// 	Data string
-// }
+type NewSigArgs struct {
+	From string
+	Data string
+}
 
-// func (args *NewSigArgs) UnmarshalJSON(b []byte) (err error) {
-// 	var obj []json.RawMessage
-// 	var ext struct {
-// 		From string
-// 		Data string
-// 	}
+func (args *NewSigArgs) UnmarshalJSON(b []byte) (err error) {
+	var obj []json.RawMessage
+	var ext struct {
+		From string
+		Data string
+	}
 
-// 	// Decode byte slice to array of RawMessages
-// 	if err := json.Unmarshal(b, &obj); err != nil {
-// 		return NewDecodeParamError(err.Error())
-// 	}
+	// Decode byte slice to array of RawMessages
+	if err := json.Unmarshal(b, &obj); err != nil {
+		return NewDecodeParamError(err.Error())
+	}
 
-// 	// Check for sufficient params
-// 	if len(obj) < 1 {
-// 		return NewInsufficientParamsError(len(obj), 1)
-// 	}
+	// Check for sufficient params
+	if len(obj) < 1 {
+		return NewInsufficientParamsError(len(obj), 1)
+	}
 
-// 	// Decode 0th RawMessage to temporary struct
-// 	if err := json.Unmarshal(obj[0], &ext); err != nil {
-// 		return NewDecodeParamError(err.Error())
-// 	}
+	// Decode 0th RawMessage to temporary struct
+	if err := json.Unmarshal(obj[0], &ext); err != nil {
+		return NewDecodeParamError(err.Error())
+	}
 
-// 	if len(ext.From) == 0 {
-// 		return NewValidationError("from", "is required")
-// 	}
+	if len(ext.From) == 0 {
+		return NewValidationError("from", "is required")
+	}
 
-// 	if len(ext.Data) == 0 {
-// 		return NewValidationError("data", "is required")
-// 	}
+	if len(ext.Data) == 0 {
+		return NewValidationError("data", "is required")
+	}
 
-// 	args.From = ext.From
-// 	args.Data = ext.Data
-// 	return nil
-// }
+	args.From = ext.From
+	args.Data = ext.Data
+	return nil
+}
 
 func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) {
 	var obj []json.RawMessage