Răsfoiți Sursa

eth_pushTx send raw signed encoded TX data to the chain through RPC

SilentCicero 10 ani în urmă
părinte
comite
f9a0a13fa9
3 a modificat fișierele cu 33 adăugiri și 0 ștergeri
  1. 11 0
      rpc/api.go
  2. 21 0
      rpc/api/eth.go
  3. 1 0
      rpc/api/utils.go

+ 11 - 0
rpc/api.go

@@ -170,6 +170,17 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
 		}
 		*reply = v
 
+	case "eth_pushTx":
+		args := new(NewSigArgs)
+		if err := json.Unmarshal(req.Params, &args); err != nil {
+			return err
+		}
+		v, err := api.xeth().PushTx(args.encodedTx)
+		if err != nil {
+			return err
+		}
+		*reply = v
+
 	case "eth_sendTransaction", "eth_transact":
 		args := new(NewTxArgs)
 		if err := json.Unmarshal(req.Params, &args); err != nil {

+ 21 - 0
rpc/api/eth.go

@@ -46,6 +46,7 @@ var (
 		"eth_getData":                           (*ethApi).GetData,
 		"eth_getCode":                           (*ethApi).GetData,
 		"eth_sign":                              (*ethApi).Sign,
+		"eth_pushTx":                            (*ethApi).PushTx,
 		"eth_sendTransaction":                   (*ethApi).SendTransaction,
 		"eth_transact":                          (*ethApi).SendTransaction,
 		"eth_estimateGas":                       (*ethApi).EstimateGas,
@@ -247,6 +248,26 @@ func (self *ethApi) Sign(req *shared.Request) (interface{}, error) {
 	return v, nil
 }
 
+
+func (self *ethApi) PushTx(req *shared.Request) (interface{}, error) {
+	args := new(NewTxArgs)
+	if err := self.codec.Decode(req.Params, &args); err != nil {
+		return nil, shared.NewDecodeParamError(err.Error())
+	}
+
+	// nonce may be nil ("guess" mode)
+	var nonce string
+	if args.Nonce != nil {
+		nonce = args.Nonce.String()
+	}
+
+	v, err := self.xeth.PushTx(args.encodedTx)
+	if err != nil {
+		return nil, err
+	}
+	return v, nil
+}
+
 func (self *ethApi) SendTransaction(req *shared.Request) (interface{}, error) {
 	args := new(NewTxArgs)
 	if err := self.codec.Decode(req.Params, &args); err != nil {

+ 1 - 0
rpc/api/utils.go

@@ -51,6 +51,7 @@ var (
 			"getData",
 			"getCode",
 			"sign",
+			"pushTx",
 			"sendTransaction",
 			"transact",
 			"estimateGas",