diff options
Diffstat (limited to 'rpc')
-rw-r--r-- | rpc/api/eth.go | 7 | ||||
-rw-r--r-- | rpc/api/personal.go | 4 | ||||
-rw-r--r-- | rpc/api/personal_args.go | 4 | ||||
-rw-r--r-- | rpc/shared/errors.go | 14 | ||||
-rw-r--r-- | rpc/shared/types.go | 3 |
5 files changed, 27 insertions, 5 deletions
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/api/personal.go b/rpc/api/personal.go index 1b0dea330..1fb412612 100644 --- a/rpc/api/personal.go +++ b/rpc/api/personal.go @@ -110,7 +110,7 @@ func (self *personalApi) UnlockAccount(req *shared.Request) (interface{}, error) return nil, shared.NewDecodeParamError(err.Error()) } - if len(args.Passphrase) == 0 { + if args.Passphrase == nil { fe := self.xeth.Frontend() if fe == nil { return false, fmt.Errorf("No password provided") @@ -121,6 +121,6 @@ func (self *personalApi) UnlockAccount(req *shared.Request) (interface{}, error) am := self.ethereum.AccountManager() addr := common.HexToAddress(args.Address) - err := am.TimedUnlock(addr, args.Passphrase, time.Duration(args.Duration)*time.Second) + err := am.TimedUnlock(addr, *args.Passphrase, time.Duration(args.Duration)*time.Second) return err == nil, err } diff --git a/rpc/api/personal_args.go b/rpc/api/personal_args.go index 89419029b..73dc6285e 100644 --- a/rpc/api/personal_args.go +++ b/rpc/api/personal_args.go @@ -46,7 +46,7 @@ func (args *NewAccountArgs) UnmarshalJSON(b []byte) (err error) { type UnlockAccountArgs struct { Address string - Passphrase string + Passphrase *string Duration int } @@ -70,7 +70,7 @@ func (args *UnlockAccountArgs) UnmarshalJSON(b []byte) (err error) { if len(obj) >= 2 && obj[1] != nil { if passphrasestr, ok := obj[1].(string); ok { - args.Passphrase = passphrasestr + args.Passphrase = &passphrasestr } else { return shared.NewInvalidTypeError("passphrase", "not a string") } 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} |