Skip to content

Commit

Permalink
rpc: return error code for eth_getWork when no work ready
Browse files Browse the repository at this point in the history
  • Loading branch information
Gustav Simonsson committed Aug 26, 2015
1 parent abce099 commit 8292013
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 4 deletions.
8 changes: 5 additions & 3 deletions miner/remote_agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package miner

import (
"errors"
"math/big"
"sync"
"time"
Expand Down Expand Up @@ -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()

Expand All @@ -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
Expand Down
7 changes: 6 additions & 1 deletion rpc/api/eth.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
14 changes: 14 additions & 0 deletions rpc/shared/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
3 changes: 3 additions & 0 deletions rpc/shared/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down

0 comments on commit 8292013

Please sign in to comment.