rpc
- camelcase fields dont play nice with otto value magic: JsonRpc -> Jsonrpc, ID -> Id - jeth: ethereum.js rpc transport provider direct bridge between js and ethereumApi via otto jsre
This commit is contained in:
		
							parent
							
								
									31ffca6d8a
								
							
						
					
					
						commit
						16ecb1e2ea
					
				
							
								
								
									
										14
									
								
								rpc/http.go
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								rpc/http.go
									
									
									
									
									
								
							| @ -26,7 +26,7 @@ func JSONRPC(pipe *xeth.XEth, dataDir string) http.Handler { | ||||
| 
 | ||||
| 		if req.ContentLength > maxSizeReqLength { | ||||
| 			jsonerr := &RpcErrorObject{-32700, "Request too large"} | ||||
| 			json.Send(w, &RpcErrorResponse{JsonRpc: jsonrpcver, ID: nil, Error: jsonerr}) | ||||
| 			json.Send(w, &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: nil, Error: jsonerr}) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| @ -36,11 +36,11 @@ func JSONRPC(pipe *xeth.XEth, dataDir string) http.Handler { | ||||
| 			break | ||||
| 		case *DecodeParamError, *InsufficientParamsError, *ValidationError: | ||||
| 			jsonerr := &RpcErrorObject{-32602, reqerr.Error()} | ||||
| 			json.Send(w, &RpcErrorResponse{JsonRpc: jsonrpcver, ID: nil, Error: jsonerr}) | ||||
| 			json.Send(w, &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: nil, Error: jsonerr}) | ||||
| 			return | ||||
| 		default: | ||||
| 			jsonerr := &RpcErrorObject{-32700, "Could not parse request"} | ||||
| 			json.Send(w, &RpcErrorResponse{JsonRpc: jsonrpcver, ID: nil, Error: jsonerr}) | ||||
| 			json.Send(w, &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: nil, Error: jsonerr}) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| @ -51,19 +51,19 @@ func JSONRPC(pipe *xeth.XEth, dataDir string) http.Handler { | ||||
| 			break | ||||
| 		case *NotImplementedError: | ||||
| 			jsonerr := &RpcErrorObject{-32601, reserr.Error()} | ||||
| 			json.Send(w, &RpcErrorResponse{JsonRpc: jsonrpcver, ID: reqParsed.ID, Error: jsonerr}) | ||||
| 			json.Send(w, &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: reqParsed.Id, Error: jsonerr}) | ||||
| 			return | ||||
| 		case *DecodeParamError, *InsufficientParamsError, *ValidationError: | ||||
| 			jsonerr := &RpcErrorObject{-32602, reserr.Error()} | ||||
| 			json.Send(w, &RpcErrorResponse{JsonRpc: jsonrpcver, ID: reqParsed.ID, Error: jsonerr}) | ||||
| 			json.Send(w, &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: reqParsed.Id, Error: jsonerr}) | ||||
| 			return | ||||
| 		default: | ||||
| 			jsonerr := &RpcErrorObject{-32603, reserr.Error()} | ||||
| 			json.Send(w, &RpcErrorResponse{JsonRpc: jsonrpcver, ID: reqParsed.ID, Error: jsonerr}) | ||||
| 			json.Send(w, &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: reqParsed.Id, Error: jsonerr}) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		rpchttplogger.DebugDetailf("Generated response: %T %s", response, response) | ||||
| 		json.Send(w, &RpcSuccessResponse{JsonRpc: jsonrpcver, ID: reqParsed.ID, Result: response}) | ||||
| 		json.Send(w, &RpcSuccessResponse{Jsonrpc: jsonrpcver, Id: reqParsed.Id, Result: response}) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
							
								
								
									
										43
									
								
								rpc/jeth.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								rpc/jeth.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| package rpc | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	// "fmt"
 | ||||
| 	"github.com/obscuren/otto" | ||||
| ) | ||||
| 
 | ||||
| type Jeth struct { | ||||
| 	ethApi *EthereumApi | ||||
| 	toVal  func(interface{}) otto.Value | ||||
| } | ||||
| 
 | ||||
| func NewJeth(ethApi *EthereumApi, toVal func(interface{}) otto.Value) *Jeth { | ||||
| 	return &Jeth{ethApi, toVal} | ||||
| } | ||||
| 
 | ||||
| func (self *Jeth) err(code int, msg string, id interface{}) otto.Value { | ||||
| 	rpcerr := &RpcErrorObject{code, msg} | ||||
| 	rpcresponse := &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: rpcerr} | ||||
| 	return self.toVal(rpcresponse) | ||||
| } | ||||
| 
 | ||||
| func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { | ||||
| 	reqif, err := call.Argument(0).Export() | ||||
| 	if err != nil { | ||||
| 		return self.err(-32700, err.Error(), nil) | ||||
| 	} | ||||
| 
 | ||||
| 	jsonreq, err := json.Marshal(reqif) | ||||
| 
 | ||||
| 	var req RpcRequest | ||||
| 	err = json.Unmarshal(jsonreq, &req) | ||||
| 
 | ||||
| 	var respif interface{} | ||||
| 	err = self.ethApi.GetRequestReply(&req, &respif) | ||||
| 	if err != nil { | ||||
| 		return self.err(-32603, err.Error(), req.Id) | ||||
| 	} | ||||
| 	rpcresponse := &RpcSuccessResponse{Jsonrpc: jsonrpcver, Id: req.Id, Result: respif} | ||||
| 	response = self.toVal(rpcresponse) | ||||
| 	return | ||||
| } | ||||
| @ -83,21 +83,21 @@ func NewValidationError(param string, msg string) error { | ||||
| } | ||||
| 
 | ||||
| type RpcRequest struct { | ||||
| 	ID      interface{}     `json:"id"` | ||||
| 	JsonRpc string          `json:"jsonrpc"` | ||||
| 	Id      interface{}     `json:"id"` | ||||
| 	Jsonrpc string          `json:"jsonrpc"` | ||||
| 	Method  string          `json:"method"` | ||||
| 	Params  json.RawMessage `json:"params"` | ||||
| } | ||||
| 
 | ||||
| type RpcSuccessResponse struct { | ||||
| 	ID      interface{} `json:"id"` | ||||
| 	JsonRpc string      `json:"jsonrpc"` | ||||
| 	Id      interface{} `json:"id"` | ||||
| 	Jsonrpc string      `json:"jsonrpc"` | ||||
| 	Result  interface{} `json:"result"` | ||||
| } | ||||
| 
 | ||||
| type RpcErrorResponse struct { | ||||
| 	ID      interface{}     `json:"id"` | ||||
| 	JsonRpc string          `json:"jsonrpc"` | ||||
| 	Id      interface{}     `json:"id"` | ||||
| 	Jsonrpc string          `json:"jsonrpc"` | ||||
| 	Error   *RpcErrorObject `json:"error"` | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user