Parcourir la source

fix eth.sign. now implemented in admin jsre until web3.js has it .

zelig il y a 10 ans
Parent
commit
00f59f5014
4 fichiers modifiés avec 68 ajouts et 43 suppressions
  1. 25 0
      cmd/geth/admin.go
  2. 1 1
      cmd/geth/js_test.go
  3. 10 10
      rpc/api.go
  4. 32 32
      rpc/args.go

+ 25 - 0
cmd/geth/admin.go

@@ -35,6 +35,7 @@ func (js *jsre) adminBindings() {
 	eth := ethO.Object()
 	eth.Set("pendingTransactions", js.pendingTransactions)
 	eth.Set("resend", js.resend)
+	eth.Set("sign", js.sign)
 
 	js.re.Set("admin", struct{}{})
 	t, _ := js.re.Get("admin")
@@ -177,6 +178,30 @@ func (js *jsre) resend(call otto.FunctionCall) otto.Value {
 	return otto.FalseValue()
 }
 
+func (js *jsre) sign(call otto.FunctionCall) otto.Value {
+	if len(call.ArgumentList) != 2 {
+		fmt.Println("requires 2 arguments: eth.sign(signer, data)")
+		return otto.UndefinedValue()
+	}
+	signer, err := call.Argument(0).ToString()
+	if err != nil {
+		fmt.Println(err)
+		return otto.UndefinedValue()
+	}
+
+	data, err := call.Argument(1).ToString()
+	if err != nil {
+		fmt.Println(err)
+		return otto.UndefinedValue()
+	}
+	v, err := js.xeth.Sign(signer, data, false)
+	if err != nil {
+		fmt.Println(err)
+		return otto.UndefinedValue()
+	}
+	return js.re.ToVal(v)
+}
+
 func (js *jsre) debugBlock(call otto.FunctionCall) otto.Value {
 	block, err := js.getBlock(call)
 	if err != nil {

+ 1 - 1
cmd/geth/js_test.go

@@ -230,7 +230,7 @@ func TestSignature(t *testing.T) {
 	defer ethereum.Stop()
 	defer os.RemoveAll(tmp)
 
-	val, err := repl.re.Run(`eth.sign({from: "` + testAddress + `", data: "` + testHash + `"})`)
+	val, err := repl.re.Run(`eth.sign("` + testAddress + `", "` + testHash + `")`)
 
 	// This is a very preliminary test, lacking actual signature verification
 	if err != nil {

+ 10 - 10
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)

+ 32 - 32
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