diff options
author | Felix Lange <fjl@twurst.com> | 2015-08-29 16:54:10 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2015-08-29 16:54:10 +0800 |
commit | e1037bd0cfd6a19ef8612672ba192a8923e88d96 (patch) | |
tree | 554f24efc93bef27c4bd471e4dd9de7daba8cb57 | |
parent | 2d1ced87596b8ea1b33bb5474c9ca042be42824f (diff) | |
parent | d9addf79fadfed85a7437184aa3ab12622eb5d13 (diff) | |
download | dexon-e1037bd0cfd6a19ef8612672ba192a8923e88d96.tar.gz dexon-e1037bd0cfd6a19ef8612672ba192a8923e88d96.tar.zst dexon-e1037bd0cfd6a19ef8612672ba192a8923e88d96.zip |
Merge pull request #1724 from Gustav-Simonsson/get_work
rpc: return error code for eth_getWork when no work ready
-rw-r--r-- | miner/remote_agent.go | 7 | ||||
-rw-r--r-- | rpc/api/eth.go | 7 | ||||
-rw-r--r-- | rpc/shared/errors.go | 14 | ||||
-rw-r--r-- | rpc/shared/types.go | 3 |
4 files changed, 27 insertions, 4 deletions
diff --git a/miner/remote_agent.go b/miner/remote_agent.go index 5c672a6e0..9e4453ce8 100644 --- a/miner/remote_agent.go +++ b/miner/remote_agent.go @@ -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,9 @@ func (a *RemoteAgent) GetWork() [3]string { res[2] = common.BytesToHash(n.Bytes()).Hex() a.work[block.HashNoNonce()] = a.currentWork + return res, nil } - - return res + return res, errors.New("No work available yet, don't panic.") } // Returns true or false, but does not indicate if the PoW was correct diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 5199bd966..ba87e86c6 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -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("mining work") + } else { + return ret, nil + } } func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) { diff --git a/rpc/shared/errors.go b/rpc/shared/errors.go index 85af1bb2f..d5a7011f9 100644 --- a/rpc/shared/errors.go +++ b/rpc/shared/errors.go @@ -64,6 +64,20 @@ func NewNotImplementedError(method string) *NotImplementedError { } } +type NotReadyError struct { + Resource string +} + +func (e *NotReadyError) Error() string { + return fmt.Sprintf("%s not ready", e.Resource) +} + +func NewNotReadyError(resource string) *NotReadyError { + return &NotReadyError{ + Resource: resource, + } +} + type DecodeParamError struct { err string } diff --git a/rpc/shared/types.go b/rpc/shared/types.go index dd9a60aab..db328234d 100644 --- a/rpc/shared/types.go +++ b/rpc/shared/types.go @@ -92,6 +92,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} |