aboutsummaryrefslogtreecommitdiffstats
path: root/rpc/args.go
diff options
context:
space:
mode:
Diffstat (limited to 'rpc/args.go')
-rw-r--r--rpc/args.go198
1 files changed, 156 insertions, 42 deletions
diff --git a/rpc/args.go b/rpc/args.go
index d4d807060..b935c5007 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -11,7 +11,7 @@ import (
func blockNumber(raw json.RawMessage, number *int64) (err error) {
var str string
if err = json.Unmarshal(raw, &str); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
switch str {
@@ -34,16 +34,16 @@ func (args *GetBlockByHashArgs) UnmarshalJSON(b []byte) (err error) {
var obj []interface{}
r := bytes.NewReader(b)
if err := json.NewDecoder(r).Decode(&obj); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 1 {
- return errArguments
+ return NewInsufficientParamsError(len(obj), 1)
}
argstr, ok := obj[0].(string)
if !ok {
- return errDecodeArgs
+ return NewDecodeParamError("BlockHash not a string")
}
args.BlockHash = argstr
@@ -63,11 +63,11 @@ func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) {
var obj []interface{}
r := bytes.NewReader(b)
if err := json.NewDecoder(r).Decode(&obj); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 1 {
- return errArguments
+ return NewInsufficientParamsError(len(obj), 1)
}
if v, ok := obj[0].(float64); ok {
@@ -117,7 +117,7 @@ type GetStorageArgs struct {
func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) {
if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
return nil
@@ -125,7 +125,7 @@ func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) {
func (args *GetStorageArgs) requirements() error {
if len(args.Address) == 0 {
- return NewErrorWithMessage(errArguments, "Address cannot be blank")
+ return NewValidationError("Address", "cannot be blank")
}
return nil
}
@@ -139,10 +139,10 @@ type GetStorageAtArgs struct {
func (args *GetStorageAtArgs) UnmarshalJSON(b []byte) (err error) {
var obj []string
if err = UnmarshalRawMessages(b, &obj, &args.BlockNumber); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 2 {
- return errDecodeArgs
+ return NewInsufficientParamsError(len(obj), 2)
}
args.Address = obj[0]
@@ -153,11 +153,11 @@ func (args *GetStorageAtArgs) UnmarshalJSON(b []byte) (err error) {
func (args *GetStorageAtArgs) requirements() error {
if len(args.Address) == 0 {
- return NewErrorWithMessage(errArguments, "Address cannot be blank")
+ return NewValidationError("Address", "cannot be blank")
}
if len(args.Key) == 0 {
- return NewErrorWithMessage(errArguments, "Key cannot be blank")
+ return NewValidationError("Key", "cannot be blank")
}
return nil
}
@@ -169,7 +169,7 @@ type GetTxCountArgs struct {
func (args *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) {
if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
return nil
@@ -177,7 +177,7 @@ func (args *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) {
func (args *GetTxCountArgs) requirements() error {
if len(args.Address) == 0 {
- return NewErrorWithMessage(errArguments, "Address cannot be blank")
+ return NewValidationError("Address", "cannot be blank")
}
return nil
}
@@ -188,16 +188,40 @@ type GetBalanceArgs struct {
}
func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
- if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
- return errDecodeArgs
+ var obj []interface{}
+ r := bytes.NewReader(b)
+ if err := json.NewDecoder(r).Decode(&obj); err != nil {
+ return NewDecodeParamError(err.Error())
}
+ if len(obj) < 1 {
+ return NewInsufficientParamsError(len(obj), 1)
+ }
+
+ addstr, ok := obj[0].(string)
+ if !ok {
+ return NewDecodeParamError("Address is not a string")
+ }
+ args.Address = addstr
+
+ if len(obj) > 1 {
+ if obj[1].(string) == "latest" {
+ args.BlockNumber = -1
+ } else {
+ args.BlockNumber = ethutil.Big(obj[1].(string)).Int64()
+ }
+ }
+
+ // if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
+ // return NewDecodeParamError(err.Error())
+ // }
+
return nil
}
func (args *GetBalanceArgs) requirements() error {
if len(args.Address) == 0 {
- return NewErrorWithMessage(errArguments, "Address cannot be blank")
+ return NewValidationError("Address", "cannot be blank")
}
return nil
}
@@ -209,7 +233,7 @@ type GetDataArgs struct {
func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
return nil
@@ -217,7 +241,7 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
func (args *GetDataArgs) requirements() error {
if len(args.Address) == 0 {
- return NewErrorWithMessage(errArguments, "Address cannot be blank")
+ return NewValidationError("Address", "cannot be blank")
}
return nil
}
@@ -227,9 +251,65 @@ type BlockNumIndexArgs struct {
Index int64
}
+func (args *BlockNumIndexArgs) UnmarshalJSON(b []byte) (err error) {
+ var obj []interface{}
+ r := bytes.NewReader(b)
+ if err := json.NewDecoder(r).Decode(&obj); err != nil {
+ return NewDecodeParamError(err.Error())
+ }
+
+ if len(obj) < 1 {
+ return NewInsufficientParamsError(len(obj), 1)
+ }
+
+ arg0, ok := obj[0].(string)
+ if !ok {
+ return NewDecodeParamError("BlockNumber is not string")
+ }
+ args.BlockNumber = ethutil.Big(arg0).Int64()
+
+ if len(obj) > 1 {
+ arg1, ok := obj[1].(string)
+ if !ok {
+ return NewDecodeParamError("Index not a string")
+ }
+ args.Index = ethutil.Big(arg1).Int64()
+ }
+
+ return nil
+}
+
type HashIndexArgs struct {
- BlockHash string
- Index int64
+ Hash string
+ Index int64
+}
+
+func (args *HashIndexArgs) UnmarshalJSON(b []byte) (err error) {
+ var obj []interface{}
+ r := bytes.NewReader(b)
+ if err := json.NewDecoder(r).Decode(&obj); err != nil {
+ return NewDecodeParamError(err.Error())
+ }
+
+ if len(obj) < 1 {
+ return NewInsufficientParamsError(len(obj), 1)
+ }
+
+ arg0, ok := obj[0].(string)
+ if !ok {
+ return NewDecodeParamError("Hash not a string")
+ }
+ args.Hash = arg0
+
+ if len(obj) > 1 {
+ arg1, ok := obj[1].(string)
+ if !ok {
+ return NewDecodeParamError("Index not a string")
+ }
+ args.Index = ethutil.Big(arg1).Int64()
+ }
+
+ return nil
}
type Sha3Args struct {
@@ -240,11 +320,11 @@ func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) {
var obj []interface{}
r := bytes.NewReader(b)
if err := json.NewDecoder(r).Decode(&obj); err != nil {
- return NewErrorWithMessage(errDecodeArgs, err.Error())
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 1 {
- return errArguments
+ return NewInsufficientParamsError(len(obj), 1)
}
args.Data = obj[0].(string)
@@ -307,12 +387,13 @@ func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
}
if err = json.Unmarshal(b, &obj); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 1 {
- return errArguments
+ return NewInsufficientParamsError(len(obj), 1)
}
+
args.Earliest = int64(ethutil.Big(obj[0].FromBlock).Int64())
args.Latest = int64(ethutil.Big(obj[0].ToBlock).Int64())
args.Max = int(ethutil.Big(obj[0].Limit).Int64())
@@ -337,11 +418,11 @@ func (args *DbArgs) UnmarshalJSON(b []byte) (err error) {
var obj []interface{}
r := bytes.NewReader(b)
if err := json.NewDecoder(r).Decode(&obj); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 2 {
- return errArguments
+ return NewInsufficientParamsError(len(obj), 2)
}
args.Database = obj[0].(string)
args.Key = obj[1].(string)
@@ -355,10 +436,10 @@ func (args *DbArgs) UnmarshalJSON(b []byte) (err error) {
func (a *DbArgs) requirements() error {
if len(a.Database) == 0 {
- return NewErrorWithMessage(errArguments, "Database cannot be blank")
+ return NewValidationError("Database", "cannot be blank")
}
if len(a.Key) == 0 {
- return NewErrorWithMessage(errArguments, "Key cannot be blank")
+ return NewValidationError("Key", "cannot be blank")
}
return nil
}
@@ -383,11 +464,11 @@ func (args *WhisperMessageArgs) UnmarshalJSON(b []byte) (err error) {
}
if err = json.Unmarshal(b, &obj); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 1 {
- return errArguments
+ return NewInsufficientParamsError(len(obj), 1)
}
args.Payload = obj[0].Payload
args.To = obj[0].To
@@ -407,7 +488,7 @@ func (args *CompileArgs) UnmarshalJSON(b []byte) (err error) {
var obj []interface{}
r := bytes.NewReader(b)
if err := json.NewDecoder(r).Decode(&obj); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) > 0 {
@@ -422,17 +503,22 @@ type FilterStringArgs struct {
}
func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) {
- var obj []string
+ var obj []interface{}
r := bytes.NewReader(b)
if err := json.NewDecoder(r).Decode(&obj); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 1 {
- return errDecodeArgs
+ return NewInsufficientParamsError(len(obj), 1)
}
- args.Word = obj[0]
+ var argstr string
+ argstr, ok := obj[0].(string)
+ if !ok {
+ return NewDecodeParamError("Filter is not a string")
+ }
+ args.Word = argstr
return nil
}
@@ -445,11 +531,11 @@ func (args *FilterIdArgs) UnmarshalJSON(b []byte) (err error) {
var obj []string
r := bytes.NewReader(b)
if err := json.NewDecoder(r).Decode(&obj); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 1 {
- return errDecodeArgs
+ return NewInsufficientParamsError(len(obj), 1)
}
args.Id = int(ethutil.Big(obj[0]).Int64())
@@ -465,11 +551,11 @@ func (args *WhisperIdentityArgs) UnmarshalJSON(b []byte) (err error) {
var obj []string
r := bytes.NewReader(b)
if err := json.NewDecoder(r).Decode(&obj); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 1 {
- return errDecodeArgs
+ return NewInsufficientParamsError(len(obj), 1)
}
args.Identity = obj[0]
@@ -491,11 +577,11 @@ func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) {
}
if err = json.Unmarshal(b, &obj); err != nil {
- return errDecodeArgs
+ return NewDecodeParamError(err.Error())
}
if len(obj) < 1 {
- return errArguments
+ return NewInsufficientParamsError(len(obj), 1)
}
args.To = obj[0].To
@@ -504,3 +590,31 @@ func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) {
return nil
}
+
+// func (req *RpcRequest) ToRegisterArgs() (string, error) {
+// if len(req.Params) < 1 {
+// return "", errArguments
+// }
+
+// var args string
+// err := json.Unmarshal(req.Params, &args)
+// if err != nil {
+// return "", err
+// }
+
+// return args, nil
+// }
+
+// func (req *RpcRequest) ToWatchTxArgs() (string, error) {
+// if len(req.Params) < 1 {
+// return "", errArguments
+// }
+
+// var args string
+// err := json.Unmarshal(req.Params, &args)
+// if err != nil {
+// return "", err
+// }
+
+// return args, nil
+// }