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
|
package miner
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"math/big"
|
"math/big"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
@ -90,7 +91,7 @@ func (a *RemoteAgent) GetHashRate() (tot int64) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *RemoteAgent) GetWork() [3]string {
|
func (a *RemoteAgent) GetWork() ([3]string, error) {
|
||||||
a.mu.Lock()
|
a.mu.Lock()
|
||||||
defer a.mu.Unlock()
|
defer a.mu.Unlock()
|
||||||
|
|
||||||
|
@ -110,9 +111,10 @@ func (a *RemoteAgent) GetWork() [3]string {
|
||||||
res[2] = common.BytesToHash(n.Bytes()).Hex()
|
res[2] = common.BytesToHash(n.Bytes()).Hex()
|
||||||
|
|
||||||
a.work[block.HashNoNonce()] = a.currentWork
|
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
|
// 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) {
|
func (self *ethApi) GetWork(req *shared.Request) (interface{}, error) {
|
||||||
self.xeth.SetMining(true, 0)
|
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) {
|
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 {
|
type DecodeParamError struct {
|
||||||
err string
|
err string
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,6 +94,9 @@ func NewRpcResponse(id interface{}, jsonrpcver string, reply interface{}, err er
|
||||||
case *NotImplementedError:
|
case *NotImplementedError:
|
||||||
jsonerr := &ErrorObject{-32601, err.Error()}
|
jsonerr := &ErrorObject{-32601, err.Error()}
|
||||||
response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
|
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:
|
case *DecodeParamError, *InsufficientParamsError, *ValidationError, *InvalidTypeError:
|
||||||
jsonerr := &ErrorObject{-32602, err.Error()}
|
jsonerr := &ErrorObject{-32602, err.Error()}
|
||||||
response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
|
response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
|
||||||
|
|
Loading…
Reference in New Issue