rpc: return error code for eth_getWork when no work ready
This commit is contained in:
parent
abce09954b
commit
829201382b
|
@ -17,6 +17,7 @@
|
|||
package miner
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"math/big"
|
||||
"sync"
|
||||
"time"
|
||||
|
@ -90,7 +91,7 @@ func (a *RemoteAgent) GetHashRate() (tot int64) {
|
|||
return
|
||||
}
|
||||
|
||||
func (a *RemoteAgent) GetWork() [3]string {
|
||||
func (a *RemoteAgent) GetWork() ([3]string, error) {
|
||||
a.mu.Lock()
|
||||
defer a.mu.Unlock()
|
||||
|
||||
|
@ -110,9 +111,10 @@ func (a *RemoteAgent) GetWork() [3]string {
|
|||
res[2] = common.BytesToHash(n.Bytes()).Hex()
|
||||
|
||||
a.work[block.HashNoNonce()] = a.currentWork
|
||||
return res, nil
|
||||
} else {
|
||||
return res, errors.New("No work available yet, don't panic.")
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
// Returns true or false, but does not indicate if the PoW was correct
|
||||
|
|
|
@ -563,7 +563,12 @@ func (self *ethApi) GetLogs(req *shared.Request) (interface{}, error) {
|
|||
|
||||
func (self *ethApi) GetWork(req *shared.Request) (interface{}, error) {
|
||||
self.xeth.SetMining(true, 0)
|
||||
return self.xeth.RemoteMining().GetWork(), nil
|
||||
ret, err := self.xeth.RemoteMining().GetWork()
|
||||
if err != nil {
|
||||
return nil, shared.NewNotReadyError("getWork")
|
||||
} else {
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) {
|
||||
|
|
|
@ -64,6 +64,20 @@ func NewNotImplementedError(method string) *NotImplementedError {
|
|||
}
|
||||
}
|
||||
|
||||
type NotReadyError struct {
|
||||
Method string
|
||||
}
|
||||
|
||||
func (e *NotReadyError) Error() string {
|
||||
return fmt.Sprintf("%s method not ready", e.Method)
|
||||
}
|
||||
|
||||
func NewNotReadyError(method string) *NotReadyError {
|
||||
return &NotReadyError{
|
||||
Method: method,
|
||||
}
|
||||
}
|
||||
|
||||
type DecodeParamError struct {
|
||||
err string
|
||||
}
|
||||
|
|
|
@ -94,6 +94,9 @@ func NewRpcResponse(id interface{}, jsonrpcver string, reply interface{}, err er
|
|||
case *NotImplementedError:
|
||||
jsonerr := &ErrorObject{-32601, err.Error()}
|
||||
response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
|
||||
case *NotReadyError:
|
||||
jsonerr := &ErrorObject{-32000, err.Error()}
|
||||
response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
|
||||
case *DecodeParamError, *InsufficientParamsError, *ValidationError, *InvalidTypeError:
|
||||
jsonerr := &ErrorObject{-32602, err.Error()}
|
||||
response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
|
||||
|
|
Loading…
Reference in New Issue