| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | package rpc | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 12:01:51 +01:00
										 |  |  | import "encoding/json" | 
					
						
							| 
									
										
										
										
											2015-02-17 14:19:05 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 16:52:00 +01:00
										 |  |  | import "github.com/ethereum/go-ethereum/core" | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | type GetBlockArgs struct { | 
					
						
							|  |  |  | 	BlockNumber int32 | 
					
						
							|  |  |  | 	Hash        string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (obj *GetBlockArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	argint, argstr := int32(0), "" | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &argint); err == nil { | 
					
						
							|  |  |  | 		obj.BlockNumber = argint | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &argstr); err == nil { | 
					
						
							|  |  |  | 		obj.Hash = argstr | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 	return errDecodeArgs | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type NewTxArgs struct { | 
					
						
							| 
									
										
										
										
											2015-01-29 13:10:34 +01:00
										 |  |  | 	From     string `json:"from"` | 
					
						
							|  |  |  | 	To       string `json:"to"` | 
					
						
							|  |  |  | 	Value    string `json:"value"` | 
					
						
							|  |  |  | 	Gas      string `json:"gas"` | 
					
						
							|  |  |  | 	GasPrice string `json:"gasPrice"` | 
					
						
							|  |  |  | 	Data     string `json:"data"` | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-17 22:20:47 +01:00
										 |  |  | func (obj *NewTxArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	// Data can be either specified as "data" or "code" :-/ | 
					
						
							|  |  |  | 	var ext struct { | 
					
						
							|  |  |  | 		From     string | 
					
						
							|  |  |  | 		To       string | 
					
						
							|  |  |  | 		Value    string | 
					
						
							|  |  |  | 		Gas      string | 
					
						
							|  |  |  | 		GasPrice string | 
					
						
							|  |  |  | 		Data     string | 
					
						
							|  |  |  | 		Code     string | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &ext); err == nil { | 
					
						
							|  |  |  | 		if len(ext.Data) == 0 { | 
					
						
							|  |  |  | 			ext.Data = ext.Code | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		obj.From = ext.From | 
					
						
							|  |  |  | 		obj.To = ext.To | 
					
						
							|  |  |  | 		obj.Value = ext.Value | 
					
						
							|  |  |  | 		obj.Gas = ext.Gas | 
					
						
							|  |  |  | 		obj.GasPrice = ext.GasPrice | 
					
						
							|  |  |  | 		obj.Data = ext.Data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 	return errDecodeArgs | 
					
						
							| 
									
										
										
										
											2015-02-17 22:20:47 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | type PushTxArgs struct { | 
					
						
							|  |  |  | 	Tx string `json:"tx"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (obj *PushTxArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	arg0 := "" | 
					
						
							| 
									
										
										
										
											2015-02-15 02:08:08 +01:00
										 |  |  | 	if err = json.Unmarshal(b, &arg0); err == nil { | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 		obj.Tx = arg0 | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 	return errDecodeArgs | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (a *PushTxArgs) requirementsPushTx() error { | 
					
						
							|  |  |  | 	if a.Tx == "" { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return NewErrorWithMessage(errArguments, "PushTx requires a 'tx' as argument") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetStorageArgs struct { | 
					
						
							|  |  |  | 	Address string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (obj *GetStorageArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | 	if err = json.Unmarshal(b, &obj.Address); err != nil { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return errDecodeArgs | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (a *GetStorageArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(a.Address) == 0 { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return NewErrorWithMessage(errArguments, "GetStorageAt requires an 'address' value as argument") | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetStateArgs struct { | 
					
						
							|  |  |  | 	Address string | 
					
						
							|  |  |  | 	Key     string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (obj *GetStateArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	arg0 := "" | 
					
						
							| 
									
										
										
										
											2015-02-15 02:08:08 +01:00
										 |  |  | 	if err = json.Unmarshal(b, &arg0); err == nil { | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 		obj.Address = arg0 | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 	return errDecodeArgs | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | func (a *GetStateArgs) requirements() error { | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	if a.Address == "" { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return NewErrorWithMessage(errArguments, "GetStorageAt requires an 'address' value as argument") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	if a.Key == "" { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return NewErrorWithMessage(errArguments, "GetStorageAt requires an 'key' value as argument") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetTxCountArgs struct { | 
					
						
							|  |  |  | 	Address string `json:"address"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (obj *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	arg0 := "" | 
					
						
							| 
									
										
										
										
											2015-02-15 02:08:08 +01:00
										 |  |  | 	if err = json.Unmarshal(b, &arg0); err == nil { | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 		obj.Address = arg0 | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 	return errDecodeArgs | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (a *GetTxCountArgs) requirements() error { | 
					
						
							|  |  |  | 	if a.Address == "" { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return NewErrorWithMessage(errArguments, "GetTxCountAt requires an 'address' value as argument") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetBalanceArgs struct { | 
					
						
							|  |  |  | 	Address string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (obj *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	arg0 := "" | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &arg0); err == nil { | 
					
						
							|  |  |  | 		obj.Address = arg0 | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 	return errDecodeArgs | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (a *GetBalanceArgs) requirements() error { | 
					
						
							|  |  |  | 	if a.Address == "" { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return NewErrorWithMessage(errArguments, "GetBalanceAt requires an 'address' value as argument") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetCodeAtArgs struct { | 
					
						
							|  |  |  | 	Address string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (obj *GetCodeAtArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	arg0 := "" | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &arg0); err == nil { | 
					
						
							|  |  |  | 		obj.Address = arg0 | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 	return errDecodeArgs | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (a *GetCodeAtArgs) requirements() error { | 
					
						
							|  |  |  | 	if a.Address == "" { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return NewErrorWithMessage(errArguments, "GetCodeAt requires an 'address' value as argument") | 
					
						
							| 
									
										
										
										
											2015-01-20 13:57:51 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-01-29 00:24:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | type Sha3Args struct { | 
					
						
							|  |  |  | 	Data string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (obj *Sha3Args) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &obj.Data); err != nil { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return errDecodeArgs | 
					
						
							| 
									
										
										
										
											2015-01-29 00:24:00 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-01-29 16:52:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | type FilterOptions struct { | 
					
						
							|  |  |  | 	Earliest int64 | 
					
						
							|  |  |  | 	Latest   int64 | 
					
						
							| 
									
										
										
										
											2015-02-17 14:19:05 +01:00
										 |  |  | 	Address  interface{} | 
					
						
							| 
									
										
										
										
											2015-03-01 19:08:26 +01:00
										 |  |  | 	Topic    []interface{} | 
					
						
							| 
									
										
										
										
											2015-01-29 16:52:00 +01:00
										 |  |  | 	Skip     int | 
					
						
							|  |  |  | 	Max      int | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func toFilterOptions(options *FilterOptions) core.FilterOptions { | 
					
						
							|  |  |  | 	var opts core.FilterOptions | 
					
						
							| 
									
										
										
										
											2015-02-17 14:19:05 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Convert optional address slice/string to byte slice | 
					
						
							|  |  |  | 	if str, ok := options.Address.(string); ok { | 
					
						
							|  |  |  | 		opts.Address = [][]byte{fromHex(str)} | 
					
						
							|  |  |  | 	} else if slice, ok := options.Address.([]interface{}); ok { | 
					
						
							|  |  |  | 		bslice := make([][]byte, len(slice)) | 
					
						
							|  |  |  | 		for i, addr := range slice { | 
					
						
							|  |  |  | 			if saddr, ok := addr.(string); ok { | 
					
						
							|  |  |  | 				bslice[i] = fromHex(saddr) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		opts.Address = bslice | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 16:52:00 +01:00
										 |  |  | 	opts.Earliest = options.Earliest | 
					
						
							|  |  |  | 	opts.Latest = options.Latest | 
					
						
							| 
									
										
										
										
											2015-03-01 19:08:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	topics := make([][][]byte, len(options.Topic)) | 
					
						
							|  |  |  | 	for i, topicDat := range options.Topic { | 
					
						
							|  |  |  | 		if slice, ok := topicDat.([]interface{}); ok { | 
					
						
							|  |  |  | 			topics[i] = make([][]byte, len(slice)) | 
					
						
							|  |  |  | 			for j, topic := range slice { | 
					
						
							|  |  |  | 				topics[i][j] = fromHex(topic.(string)) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} else if str, ok := topicDat.(string); ok { | 
					
						
							|  |  |  | 			topics[i] = make([][]byte, 1) | 
					
						
							|  |  |  | 			topics[i][0] = fromHex(str) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-01-29 16:52:00 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-01 19:08:26 +01:00
										 |  |  | 	opts.Topics = topics | 
					
						
							| 
									
										
										
										
											2015-01-29 16:52:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return opts | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type FilterChangedArgs struct { | 
					
						
							|  |  |  | 	n int | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | type DbArgs struct { | 
					
						
							|  |  |  | 	Database string | 
					
						
							|  |  |  | 	Key      string | 
					
						
							|  |  |  | 	Value    string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (a *DbArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(a.Database) == 0 { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return NewErrorWithMessage(errArguments, "DbPutArgs requires an 'Database' value as argument") | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	if len(a.Key) == 0 { | 
					
						
							| 
									
										
										
										
											2015-02-24 19:05:03 +01:00
										 |  |  | 		return NewErrorWithMessage(errArguments, "DbPutArgs requires an 'Key' value as argument") | 
					
						
							| 
									
										
										
										
											2015-01-29 20:39:26 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-01-30 13:25:12 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | type WhisperMessageArgs struct { | 
					
						
							|  |  |  | 	Payload  string | 
					
						
							|  |  |  | 	To       string | 
					
						
							|  |  |  | 	From     string | 
					
						
							| 
									
										
										
										
											2015-02-19 11:49:58 +01:00
										 |  |  | 	Topic    []string | 
					
						
							| 
									
										
										
										
											2015-01-30 13:25:12 +01:00
										 |  |  | 	Priority uint32 | 
					
						
							|  |  |  | 	Ttl      uint32 | 
					
						
							|  |  |  | } |