| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | package rpc | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-04 08:22:59 -06:00
										 |  |  | import ( | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	"bytes" | 
					
						
							| 
									
										
										
										
											2015-03-04 08:22:59 -06:00
										 |  |  | 	"encoding/json" | 
					
						
							| 
									
										
										
										
											2015-03-26 12:06:14 +01:00
										 |  |  | 	"errors" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2015-03-04 08:22:59 -06:00
										 |  |  | 	"math/big" | 
					
						
							| 
									
										
										
										
											2015-02-17 14:19:05 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							| 
									
										
										
										
											2015-03-04 08:22:59 -06:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 16:34:50 +01:00
										 |  |  | func blockHeight(raw interface{}, number *int64) (err error) { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	// Parse as integer | 
					
						
							| 
									
										
										
										
											2015-03-18 15:48:34 -04:00
										 |  |  | 	num, ok := raw.(float64) | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	if ok { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:48:34 -04:00
										 |  |  | 		*number = int64(num) | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 		return nil | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Parse as string/hexstring | 
					
						
							|  |  |  | 	str, ok := raw.(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("BlockNumber is not a string") | 
					
						
							| 
									
										
										
										
											2015-03-10 13:40:49 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-10 20:14:38 +01:00
										 |  |  | 	switch str { | 
					
						
							|  |  |  | 	case "latest": | 
					
						
							|  |  |  | 		*number = -1 | 
					
						
							|  |  |  | 	case "pending": | 
					
						
							| 
									
										
										
										
											2015-03-23 16:36:12 +01:00
										 |  |  | 		*number = -2 | 
					
						
							| 
									
										
										
										
											2015-03-10 20:14:38 +01:00
										 |  |  | 	default: | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 		*number = common.String2Big(str).Int64() | 
					
						
							| 
									
										
										
										
											2015-03-10 13:40:49 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-10 13:40:49 +01:00
										 |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-26 12:40:09 +01:00
										 |  |  | func toNumber(v interface{}) (int64, error) { | 
					
						
							|  |  |  | 	var str string | 
					
						
							|  |  |  | 	if v != nil { | 
					
						
							|  |  |  | 		var ok bool | 
					
						
							|  |  |  | 		str, ok = v.(string) | 
					
						
							|  |  |  | 		if !ok { | 
					
						
							|  |  |  | 			return 0, errors.New("is not a string or undefined") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		str = "latest" | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch str { | 
					
						
							|  |  |  | 	case "latest": | 
					
						
							|  |  |  | 		return -1, nil | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return int64(common.Big(v.(string)).Int64()), nil | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | type GetBlockByHashArgs struct { | 
					
						
							| 
									
										
										
										
											2015-03-19 23:20:54 -04:00
										 |  |  | 	BlockHash  string | 
					
						
							|  |  |  | 	IncludeTxs bool | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetBlockByHashArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	r := bytes.NewReader(b) | 
					
						
							|  |  |  | 	if err := json.NewDecoder(r).Decode(&obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-11 10:27:24 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	argstr, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError("BlockHash not a string") | 
					
						
							| 
									
										
										
										
											2015-03-11 10:27:24 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	args.BlockHash = argstr | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							| 
									
										
										
										
											2015-03-19 23:20:54 -04:00
										 |  |  | 		args.IncludeTxs = obj[1].(bool) | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | type GetBlockByNumberArgs struct { | 
					
						
							| 
									
										
										
										
											2015-03-19 23:20:54 -04:00
										 |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | 	IncludeTxs  bool | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	r := bytes.NewReader(b) | 
					
						
							|  |  |  | 	if err := json.NewDecoder(r).Decode(&obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-02-17 22:20:47 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-09 20:38:37 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if v, ok := obj[0].(float64); ok { | 
					
						
							|  |  |  | 		args.BlockNumber = int64(v) | 
					
						
							|  |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 		args.BlockNumber = common.Big(obj[0].(string)).Int64() | 
					
						
							| 
									
										
										
										
											2015-03-09 20:38:37 -05:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-17 22:20:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	if len(obj) > 1 { | 
					
						
							| 
									
										
										
										
											2015-03-19 23:20:54 -04:00
										 |  |  | 		args.IncludeTxs = obj[1].(bool) | 
					
						
							| 
									
										
										
										
											2015-02-17 22:20:47 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2015-02-17 22:20:47 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | type NewTxArgs struct { | 
					
						
							|  |  |  | 	From     string | 
					
						
							|  |  |  | 	To       string | 
					
						
							|  |  |  | 	Value    *big.Int | 
					
						
							|  |  |  | 	Gas      *big.Int | 
					
						
							|  |  |  | 	GasPrice *big.Int | 
					
						
							|  |  |  | 	Data     string | 
					
						
							| 
									
										
										
										
											2015-03-10 13:40:49 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-10 20:14:38 +01:00
										 |  |  | 	BlockNumber int64 | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	var obj []json.RawMessage | 
					
						
							|  |  |  | 	var ext struct{ From, To, Value, Gas, GasPrice, Data string } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Decode byte slice to array of RawMessages | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	// Check for sufficient params | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Decode 0th RawMessage to temporary struct | 
					
						
							|  |  |  | 	if err := json.Unmarshal(obj[0], &ext); err != nil { | 
					
						
							|  |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// var ok bool | 
					
						
							|  |  |  | 	args.From = ext.From | 
					
						
							|  |  |  | 	args.To = ext.To | 
					
						
							|  |  |  | 	args.Value = common.String2Big(ext.Value) | 
					
						
							|  |  |  | 	args.Gas = common.String2Big(ext.Gas) | 
					
						
							|  |  |  | 	args.GasPrice = common.String2Big(ext.GasPrice) | 
					
						
							|  |  |  | 	args.Data = ext.Data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Check for optional BlockNumber param | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							|  |  |  | 		var raw interface{} | 
					
						
							|  |  |  | 		if err = json.Unmarshal(obj[1], &raw); err != nil { | 
					
						
							|  |  |  | 			return NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 16:34:50 +01:00
										 |  |  | 		if err := blockHeight(raw, &args.BlockNumber); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-18 20:30:09 -04:00
										 |  |  | func (args *NewTxArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(args.From) == 0 { | 
					
						
							|  |  |  | 		return NewValidationError("From", "Is required") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | type GetStorageArgs struct { | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	Address     string | 
					
						
							| 
									
										
										
										
											2015-03-06 09:54:08 -06:00
										 |  |  | 	BlockNumber int64 | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	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 { | 
					
						
							| 
									
										
										
										
											2015-03-23 16:34:50 +01:00
										 |  |  | 		if err := blockHeight(obj[1], &args.BlockNumber); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetStorageArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(args.Address) == 0 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewValidationError("Address", "cannot be blank") | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 12:26:21 -06:00
										 |  |  | type GetStorageAtArgs struct { | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	Address     string | 
					
						
							|  |  |  | 	Key         string | 
					
						
							| 
									
										
										
										
											2015-03-06 09:54:08 -06:00
										 |  |  | 	BlockNumber int64 | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetStorageAtArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	if len(obj) < 2 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 2) | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	addstr, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("Address is not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Address = addstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	keystr, ok := obj[1].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("Key is not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Key = keystr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 2 { | 
					
						
							| 
									
										
										
										
											2015-03-23 16:34:50 +01:00
										 |  |  | 		if err := blockHeight(obj[2], &args.BlockNumber); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-10 20:14:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetStorageAtArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(args.Address) == 0 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewValidationError("Address", "cannot be blank") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if len(args.Key) == 0 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewValidationError("Key", "cannot be blank") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetTxCountArgs struct { | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	Address     string | 
					
						
							| 
									
										
										
										
											2015-03-06 09:54:08 -06:00
										 |  |  | 	BlockNumber int64 | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	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 { | 
					
						
							| 
									
										
										
										
											2015-03-23 16:34:50 +01:00
										 |  |  | 		if err := blockHeight(obj[1], &args.BlockNumber); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetTxCountArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(args.Address) == 0 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewValidationError("Address", "cannot be blank") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetBalanceArgs struct { | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	Address     string | 
					
						
							| 
									
										
										
										
											2015-03-06 09:54:08 -06:00
										 |  |  | 	BlockNumber int64 | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-03-12 08:42:31 -05:00
										 |  |  | 	var obj []interface{} | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-12 08:42:31 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-12 08:42:31 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	addstr, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError("Address is not a string") | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-12 08:42:31 -05:00
										 |  |  | 	args.Address = addstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							| 
									
										
										
										
											2015-03-23 16:34:50 +01:00
										 |  |  | 		if err := blockHeight(obj[1], &args.BlockNumber); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 			return err | 
					
						
							| 
									
										
										
										
											2015-03-12 08:42:31 -05:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetBalanceArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(args.Address) == 0 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewValidationError("Address", "cannot be blank") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | type GetDataArgs struct { | 
					
						
							|  |  |  | 	Address     string | 
					
						
							| 
									
										
										
										
											2015-03-06 09:54:08 -06:00
										 |  |  | 	BlockNumber int64 | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 	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 { | 
					
						
							| 
									
										
										
										
											2015-03-23 16:34:50 +01:00
										 |  |  | 		if err := blockHeight(obj[1], &args.BlockNumber); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-18 15:42:57 -04:00
										 |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *GetDataArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(args.Address) == 0 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewValidationError("Address", "cannot be blank") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-01-29 00:24:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-10 22:25:07 -05:00
										 |  |  | type BlockNumIndexArgs struct { | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							| 
									
										
										
										
											2015-03-11 10:25:15 -05:00
										 |  |  | 	Index       int64 | 
					
						
							| 
									
										
										
										
											2015-03-10 22:25:07 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | func (args *BlockNumIndexArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	r := bytes.NewReader(b) | 
					
						
							|  |  |  | 	if err := json.NewDecoder(r).Decode(&obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	arg0, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError("BlockNumber is not string") | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 	args.BlockNumber = common.Big(arg0).Int64() | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							|  |  |  | 		arg1, ok := obj[1].(string) | 
					
						
							|  |  |  | 		if !ok { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 			return NewDecodeParamError("Index not a string") | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 		args.Index = common.Big(arg1).Int64() | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-10 22:25:07 -05:00
										 |  |  | type HashIndexArgs struct { | 
					
						
							| 
									
										
										
										
											2015-03-12 15:59:07 +01:00
										 |  |  | 	Hash  string | 
					
						
							|  |  |  | 	Index int64 | 
					
						
							| 
									
										
										
										
											2015-03-10 22:25:07 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | func (args *HashIndexArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	r := bytes.NewReader(b) | 
					
						
							|  |  |  | 	if err := json.NewDecoder(r).Decode(&obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	arg0, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError("Hash not a string") | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-12 15:59:07 +01:00
										 |  |  | 	args.Hash = arg0 | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							|  |  |  | 		arg1, ok := obj[1].(string) | 
					
						
							|  |  |  | 		if !ok { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 			return NewDecodeParamError("Index not a string") | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 		args.Index = common.Big(arg1).Int64() | 
					
						
							| 
									
										
										
										
											2015-03-11 15:26:28 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 00:24:00 +01:00
										 |  |  | type Sha3Args struct { | 
					
						
							|  |  |  | 	Data string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	r := bytes.NewReader(b) | 
					
						
							|  |  |  | 	if err := json.NewDecoder(r).Decode(&obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	args.Data = obj[0].(string) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-19 23:55:17 -04:00
										 |  |  | type BlockFilterArgs struct { | 
					
						
							| 
									
										
										
										
											2015-01-29 16:52:00 +01:00
										 |  |  | 	Earliest int64 | 
					
						
							|  |  |  | 	Latest   int64 | 
					
						
							| 
									
										
										
										
											2015-02-17 14:19:05 +01:00
										 |  |  | 	Address  interface{} | 
					
						
							| 
									
										
										
										
											2015-03-09 18:19:35 +01:00
										 |  |  | 	Topics   []interface{} | 
					
						
							| 
									
										
										
										
											2015-01-29 16:52:00 +01:00
										 |  |  | 	Skip     int | 
					
						
							|  |  |  | 	Max      int | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-19 23:55:17 -04:00
										 |  |  | func (args *BlockFilterArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	var obj []struct { | 
					
						
							| 
									
										
										
										
											2015-03-16 10:38:57 -04:00
										 |  |  | 		FromBlock interface{}   `json:"fromBlock"` | 
					
						
							|  |  |  | 		ToBlock   interface{}   `json:"toBlock"` | 
					
						
							| 
									
										
										
										
											2015-03-09 17:55:01 +01:00
										 |  |  | 		Limit     string        `json:"limit"` | 
					
						
							|  |  |  | 		Offset    string        `json:"offset"` | 
					
						
							|  |  |  | 		Address   string        `json:"address"` | 
					
						
							|  |  |  | 		Topics    []interface{} `json:"topics"` | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-26 12:34:59 +01:00
										 |  |  | 	args.Earliest, err = toNumber(obj[0].ToBlock) | 
					
						
							| 
									
										
										
										
											2015-03-26 12:06:14 +01:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return NewDecodeParamError(fmt.Sprintf("FromBlock %v", err)) | 
					
						
							| 
									
										
										
										
											2015-03-16 15:30:31 -04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-26 12:06:14 +01:00
										 |  |  | 	args.Latest, err = toNumber(obj[0].FromBlock) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return NewDecodeParamError(fmt.Sprintf("ToBlock %v", err)) | 
					
						
							| 
									
										
										
										
											2015-03-16 10:38:57 -04:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 	args.Max = int(common.Big(obj[0].Limit).Int64()) | 
					
						
							|  |  |  | 	args.Skip = int(common.Big(obj[0].Offset).Int64()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	args.Address = obj[0].Address | 
					
						
							| 
									
										
										
										
											2015-03-09 18:19:35 +01:00
										 |  |  | 	args.Topics = obj[0].Topics | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | type DbArgs struct { | 
					
						
							|  |  |  | 	Database string | 
					
						
							|  |  |  | 	Key      string | 
					
						
							| 
									
										
										
										
											2015-03-23 16:04:21 +01:00
										 |  |  | 	Value    []byte | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | func (args *DbArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							| 
									
										
										
										
											2015-03-23 16:04:21 +01:00
										 |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 2 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 2) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-23 16:04:21 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	var objstr string | 
					
						
							|  |  |  | 	var ok bool | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if objstr, ok = obj[0].(string); !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("Database is not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Database = objstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if objstr, ok = obj[1].(string); !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("Key is not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Key = objstr | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 2 { | 
					
						
							| 
									
										
										
										
											2015-03-23 16:04:21 +01:00
										 |  |  | 		objstr, ok = obj[2].(string) | 
					
						
							|  |  |  | 		if !ok { | 
					
						
							|  |  |  | 			return NewDecodeParamError("Value is not a string") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		args.Value = []byte(objstr) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | func (a *DbArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(a.Database) == 0 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewValidationError("Database", "cannot be blank") | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	if len(a.Key) == 0 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewValidationError("Key", "cannot be blank") | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-01-30 13:25:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 16:04:21 +01:00
										 |  |  | type DbHexArgs struct { | 
					
						
							|  |  |  | 	Database string | 
					
						
							|  |  |  | 	Key      string | 
					
						
							|  |  |  | 	Value    []byte | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *DbHexArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 2 { | 
					
						
							|  |  |  | 		return NewInsufficientParamsError(len(obj), 2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var objstr string | 
					
						
							|  |  |  | 	var ok bool | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if objstr, ok = obj[0].(string); !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("Database is not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Database = objstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if objstr, ok = obj[1].(string); !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("Key is not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Key = objstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 2 { | 
					
						
							|  |  |  | 		objstr, ok = obj[2].(string) | 
					
						
							|  |  |  | 		if !ok { | 
					
						
							|  |  |  | 			return NewDecodeParamError("Value is not a string") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		args.Value = common.FromHex(objstr) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (a *DbHexArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(a.Database) == 0 { | 
					
						
							|  |  |  | 		return NewValidationError("Database", "cannot be blank") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if len(a.Key) == 0 { | 
					
						
							|  |  |  | 		return NewValidationError("Key", "cannot be blank") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-30 13:25:12 +01:00
										 |  |  | type WhisperMessageArgs struct { | 
					
						
							|  |  |  | 	Payload  string | 
					
						
							|  |  |  | 	To       string | 
					
						
							|  |  |  | 	From     string | 
					
						
							| 
									
										
										
										
											2015-03-11 10:56:44 -05:00
										 |  |  | 	Topics   []string | 
					
						
							| 
									
										
										
										
											2015-01-30 13:25:12 +01:00
										 |  |  | 	Priority uint32 | 
					
						
							|  |  |  | 	Ttl      uint32 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | func (args *WhisperMessageArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []struct { | 
					
						
							|  |  |  | 		Payload  string | 
					
						
							|  |  |  | 		To       string | 
					
						
							|  |  |  | 		From     string | 
					
						
							| 
									
										
										
										
											2015-03-11 10:56:44 -05:00
										 |  |  | 		Topics   []string | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 		Priority string | 
					
						
							|  |  |  | 		Ttl      string | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	args.Payload = obj[0].Payload | 
					
						
							|  |  |  | 	args.To = obj[0].To | 
					
						
							|  |  |  | 	args.From = obj[0].From | 
					
						
							| 
									
										
										
										
											2015-03-11 10:56:44 -05:00
										 |  |  | 	args.Topics = obj[0].Topics | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 	args.Priority = uint32(common.Big(obj[0].Priority).Int64()) | 
					
						
							|  |  |  | 	args.Ttl = uint32(common.Big(obj[0].Ttl).Int64()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type CompileArgs struct { | 
					
						
							|  |  |  | 	Source string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *CompileArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	r := bytes.NewReader(b) | 
					
						
							|  |  |  | 	if err := json.NewDecoder(r).Decode(&obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 0 { | 
					
						
							|  |  |  | 		args.Source = obj[0].(string) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type FilterStringArgs struct { | 
					
						
							|  |  |  | 	Word string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-03-13 10:03:19 -04:00
										 |  |  | 	var obj []interface{} | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	r := bytes.NewReader(b) | 
					
						
							|  |  |  | 	if err := json.NewDecoder(r).Decode(&obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-13 10:03:19 -04:00
										 |  |  | 	var argstr string | 
					
						
							|  |  |  | 	argstr, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("Filter is not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Word = argstr | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-19 22:58:07 -04:00
										 |  |  | func (args *FilterStringArgs) requirements() error { | 
					
						
							|  |  |  | 	switch args.Word { | 
					
						
							|  |  |  | 	case "latest", "pending": | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return NewValidationError("Word", "Must be `latest` or `pending`") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | type FilterIdArgs struct { | 
					
						
							|  |  |  | 	Id int | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *FilterIdArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []string | 
					
						
							|  |  |  | 	r := bytes.NewReader(b) | 
					
						
							|  |  |  | 	if err := json.NewDecoder(r).Decode(&obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 	args.Id = int(common.Big(obj[0]).Int64()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type WhisperIdentityArgs struct { | 
					
						
							|  |  |  | 	Identity string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *WhisperIdentityArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []string | 
					
						
							|  |  |  | 	r := bytes.NewReader(b) | 
					
						
							|  |  |  | 	if err := json.NewDecoder(r).Decode(&obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.Identity = obj[0] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type WhisperFilterArgs struct { | 
					
						
							| 
									
										
										
										
											2015-03-06 09:54:08 -06:00
										 |  |  | 	To     string `json:"to"` | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	From   string | 
					
						
							|  |  |  | 	Topics []string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-03-06 09:54:08 -06:00
										 |  |  | 	var obj []struct { | 
					
						
							|  |  |  | 		To     string | 
					
						
							|  |  |  | 		From   string | 
					
						
							|  |  |  | 		Topics []string | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &obj); err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							| 
									
										
										
										
											2015-03-12 19:07:03 -05:00
										 |  |  | 		return NewInsufficientParamsError(len(obj), 1) | 
					
						
							| 
									
										
										
										
											2015-03-05 21:37:45 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.To = obj[0].To | 
					
						
							|  |  |  | 	args.From = obj[0].From | 
					
						
							|  |  |  | 	args.Topics = obj[0].Topics | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-03-23 08:28:54 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | type SubmitWorkArgs struct { | 
					
						
							|  |  |  | 	Nonce  uint64 | 
					
						
							|  |  |  | 	Header common.Hash | 
					
						
							|  |  |  | 	Digest common.Hash | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *SubmitWorkArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 3 { | 
					
						
							|  |  |  | 		return NewInsufficientParamsError(len(obj), 3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var objstr string | 
					
						
							|  |  |  | 	var ok bool | 
					
						
							|  |  |  | 	if objstr, ok = obj[0].(string); !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("Nonce is not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 17:33:01 +01:00
										 |  |  | 	args.Nonce = common.String2Big(objstr).Uint64() | 
					
						
							| 
									
										
										
										
											2015-03-23 08:28:54 +01:00
										 |  |  | 	if objstr, ok = obj[1].(string); !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("Header is not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.Header = common.HexToHash(objstr) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if objstr, ok = obj[2].(string); !ok { | 
					
						
							|  |  |  | 		return NewDecodeParamError("Digest is not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.Digest = common.HexToHash(objstr) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } |