| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // Copyright 2015 The go-ethereum Authors | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // This file is part of the go-ethereum library. | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // | 
					
						
							| 
									
										
										
										
											2015-07-23 18:35:11 +02:00
										 |  |  | // The go-ethereum library is free software: you can redistribute it and/or modify | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // it under the terms of the GNU Lesser General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // The go-ethereum library is distributed in the hope that it will be useful, | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // GNU Lesser General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Lesser General Public License | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"encoding/json" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"math/big" | 
					
						
							| 
									
										
										
										
											2015-06-24 13:53:37 +02:00
										 |  |  | 	"strconv" | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 	"strings" | 
					
						
							| 
									
										
										
										
											2015-06-24 13:53:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/core/state" | 
					
						
							| 
									
										
										
										
											2015-06-24 13:53:37 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/core/types" | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/rpc/shared" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	defaultLogLimit  = 100 | 
					
						
							|  |  |  | 	defaultLogOffset = 0 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetBalanceArgs struct { | 
					
						
							|  |  |  | 	Address     string | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	addstr, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("address", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Address = addstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							|  |  |  | 		if err := blockHeight(obj[1], &args.BlockNumber); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		args.BlockNumber = -1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetStorageArgs struct { | 
					
						
							|  |  |  | 	Address     string | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	addstr, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("address", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Address = addstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							|  |  |  | 		if err := blockHeight(obj[1], &args.BlockNumber); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		args.BlockNumber = -1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetStorageAtArgs struct { | 
					
						
							|  |  |  | 	Address     string | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | 	Key         string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *GetStorageAtArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 2 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	addstr, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("address", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Address = addstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	keystr, ok := obj[1].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("key", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Key = keystr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 2 { | 
					
						
							|  |  |  | 		if err := blockHeight(obj[2], &args.BlockNumber); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		args.BlockNumber = -1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetTxCountArgs struct { | 
					
						
							|  |  |  | 	Address     string | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	addstr, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("address", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Address = addstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							|  |  |  | 		if err := blockHeight(obj[1], &args.BlockNumber); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		args.BlockNumber = -1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-06 11:58:14 +02:00
										 |  |  | type SubmitHashRateArgs struct { | 
					
						
							|  |  |  | 	Id   string | 
					
						
							|  |  |  | 	Rate uint64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *SubmitHashRateArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 2 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	arg0, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("hash", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Id = arg0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	arg1, ok := obj[1].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("rate", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.Rate = common.String2Big(arg1).Uint64() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | type HashArgs struct { | 
					
						
							|  |  |  | 	Hash string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *HashArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	arg0, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("hash", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Hash = arg0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type BlockNumArg struct { | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *BlockNumArg) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := blockHeight(obj[0], &args.BlockNumber); err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetDataArgs struct { | 
					
						
							|  |  |  | 	Address     string | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	addstr, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("address", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Address = addstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							|  |  |  | 		if err := blockHeight(obj[1], &args.BlockNumber); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		args.BlockNumber = -1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-16 12:28:10 -04:00
										 |  |  | type NewDataArgs struct { | 
					
						
							| 
									
										
										
										
											2015-06-19 14:04:18 +02:00
										 |  |  | 	Data string | 
					
						
							| 
									
										
										
										
											2015-06-16 12:28:10 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							| 
									
										
										
										
											2015-06-19 14:04:18 +02:00
										 |  |  | 	var obj []interface{} | 
					
						
							| 
									
										
										
										
											2015-06-16 12:28:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-19 14:04:18 +02:00
										 |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-06-16 12:28:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-19 14:04:18 +02:00
										 |  |  | 	// Check for sufficient params | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-06-16 12:28:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-19 14:04:18 +02:00
										 |  |  | 	data, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("data", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Data = data | 
					
						
							| 
									
										
										
										
											2015-06-16 12:28:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-19 14:04:18 +02:00
										 |  |  | 	if len(args.Data) == 0 { | 
					
						
							|  |  |  | 		return shared.NewValidationError("data", "is required") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-06-16 12:28:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-19 14:04:18 +02:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2015-06-16 12:28:10 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-09 16:06:51 +02:00
										 |  |  | type NewSigArgs struct { | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 	From string | 
					
						
							|  |  |  | 	Data string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-09 16:06:51 +02:00
										 |  |  | func (args *NewSigArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Check for sufficient params | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-09 16:06:51 +02:00
										 |  |  | 	from, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("from", "not a string") | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-06-09 16:06:51 +02:00
										 |  |  | 	args.From = from | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-09 16:06:51 +02:00
										 |  |  | 	if len(args.From) == 0 { | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		return shared.NewValidationError("from", "is required") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-09 16:06:51 +02:00
										 |  |  | 	data, ok := obj[1].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("data", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Data = data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(args.Data) == 0 { | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		return shared.NewValidationError("data", "is required") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type NewTxArgs struct { | 
					
						
							|  |  |  | 	From     string | 
					
						
							|  |  |  | 	To       string | 
					
						
							|  |  |  | 	Nonce    *big.Int | 
					
						
							|  |  |  | 	Value    *big.Int | 
					
						
							|  |  |  | 	Gas      *big.Int | 
					
						
							|  |  |  | 	GasPrice *big.Int | 
					
						
							|  |  |  | 	Data     string | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []json.RawMessage | 
					
						
							|  |  |  | 	var ext struct { | 
					
						
							|  |  |  | 		From     string | 
					
						
							|  |  |  | 		To       string | 
					
						
							|  |  |  | 		Nonce    interface{} | 
					
						
							|  |  |  | 		Value    interface{} | 
					
						
							|  |  |  | 		Gas      interface{} | 
					
						
							|  |  |  | 		GasPrice interface{} | 
					
						
							|  |  |  | 		Data     string | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Decode byte slice to array of RawMessages | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Check for sufficient params | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Decode 0th RawMessage to temporary struct | 
					
						
							|  |  |  | 	if err := json.Unmarshal(obj[0], &ext); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(ext.From) == 0 { | 
					
						
							|  |  |  | 		return shared.NewValidationError("from", "is required") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.From = ext.From | 
					
						
							|  |  |  | 	args.To = ext.To | 
					
						
							|  |  |  | 	args.Data = ext.Data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var num *big.Int | 
					
						
							|  |  |  | 	if ext.Nonce != nil { | 
					
						
							|  |  |  | 		num, err = numString(ext.Nonce) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Nonce = num | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if ext.Value == nil { | 
					
						
							|  |  |  | 		num = big.NewInt(0) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		num, err = numString(ext.Value) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Value = num | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	num = nil | 
					
						
							| 
									
										
										
										
											2015-06-15 17:21:08 +02:00
										 |  |  | 	if ext.Gas != nil { | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		if num, err = numString(ext.Gas); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Gas = num | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	num = nil | 
					
						
							| 
									
										
										
										
											2015-06-15 17:21:08 +02:00
										 |  |  | 	if ext.GasPrice != nil { | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		if num, err = numString(ext.GasPrice); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.GasPrice = num | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Check for optional BlockNumber param | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							|  |  |  | 		if err := blockHeightFromJson(obj[1], &args.BlockNumber); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		args.BlockNumber = -1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type SourceArgs struct { | 
					
						
							|  |  |  | 	Source string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *SourceArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	arg0, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("source code", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Source = arg0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type CallArgs struct { | 
					
						
							|  |  |  | 	From     string | 
					
						
							|  |  |  | 	To       string | 
					
						
							|  |  |  | 	Value    *big.Int | 
					
						
							|  |  |  | 	Gas      *big.Int | 
					
						
							|  |  |  | 	GasPrice *big.Int | 
					
						
							|  |  |  | 	Data     string | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *CallArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []json.RawMessage | 
					
						
							|  |  |  | 	var ext struct { | 
					
						
							|  |  |  | 		From     string | 
					
						
							|  |  |  | 		To       string | 
					
						
							|  |  |  | 		Value    interface{} | 
					
						
							|  |  |  | 		Gas      interface{} | 
					
						
							|  |  |  | 		GasPrice interface{} | 
					
						
							|  |  |  | 		Data     string | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Decode byte slice to array of RawMessages | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Check for sufficient params | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Decode 0th RawMessage to temporary struct | 
					
						
							|  |  |  | 	if err := json.Unmarshal(obj[0], &ext); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.From = ext.From | 
					
						
							|  |  |  | 	args.To = ext.To | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var num *big.Int | 
					
						
							|  |  |  | 	if ext.Value == nil { | 
					
						
							|  |  |  | 		num = big.NewInt(0) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		if num, err = numString(ext.Value); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Value = num | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-22 13:19:59 +02:00
										 |  |  | 	if ext.Gas != nil { | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		if num, err = numString(ext.Gas); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-06-22 13:19:59 +02:00
										 |  |  | 	} else { | 
					
						
							|  |  |  | 		num = nil | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	args.Gas = num | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-22 13:19:59 +02:00
										 |  |  | 	if ext.GasPrice != nil { | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		if num, err = numString(ext.GasPrice); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-06-22 13:19:59 +02:00
										 |  |  | 	} else { | 
					
						
							|  |  |  | 		num = nil | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	args.GasPrice = num | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.Data = ext.Data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Check for optional BlockNumber param | 
					
						
							|  |  |  | 	if len(obj) > 1 { | 
					
						
							|  |  |  | 		if err := blockHeightFromJson(obj[1], &args.BlockNumber); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		args.BlockNumber = -1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type HashIndexArgs struct { | 
					
						
							|  |  |  | 	Hash  string | 
					
						
							|  |  |  | 	Index int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *HashIndexArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 2 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	arg0, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("hash", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Hash = arg0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	arg1, ok := obj[1].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("index", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Index = common.Big(arg1).Int64() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type BlockNumIndexArgs struct { | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | 	Index       int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *BlockNumIndexArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 2 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := blockHeight(obj[0], &args.BlockNumber); err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var arg1 *big.Int | 
					
						
							|  |  |  | 	if arg1, err = numString(obj[1]); err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Index = arg1.Int64() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetBlockByHashArgs struct { | 
					
						
							|  |  |  | 	BlockHash  string | 
					
						
							|  |  |  | 	IncludeTxs bool | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *GetBlockByHashArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 2 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	argstr, ok := obj[0].(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("blockHash", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.BlockHash = argstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.IncludeTxs = obj[1].(bool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetBlockByNumberArgs struct { | 
					
						
							|  |  |  | 	BlockNumber int64 | 
					
						
							|  |  |  | 	IncludeTxs  bool | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 2 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := blockHeight(obj[0], &args.BlockNumber); err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.IncludeTxs = obj[1].(bool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type BlockFilterArgs struct { | 
					
						
							|  |  |  | 	Earliest int64 | 
					
						
							|  |  |  | 	Latest   int64 | 
					
						
							|  |  |  | 	Address  []string | 
					
						
							|  |  |  | 	Topics   [][]string | 
					
						
							|  |  |  | 	Skip     int | 
					
						
							|  |  |  | 	Max      int | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *BlockFilterArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []struct { | 
					
						
							|  |  |  | 		FromBlock interface{} `json:"fromBlock"` | 
					
						
							|  |  |  | 		ToBlock   interface{} `json:"toBlock"` | 
					
						
							|  |  |  | 		Limit     interface{} `json:"limit"` | 
					
						
							|  |  |  | 		Offset    interface{} `json:"offset"` | 
					
						
							|  |  |  | 		Address   interface{} `json:"address"` | 
					
						
							|  |  |  | 		Topics    interface{} `json:"topics"` | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// args.Earliest, err = toNumber(obj[0].ToBlock) | 
					
						
							|  |  |  | 	// if err != nil { | 
					
						
							|  |  |  | 	// 	return shared.NewDecodeParamError(fmt.Sprintf("FromBlock %v", err)) | 
					
						
							|  |  |  | 	// } | 
					
						
							|  |  |  | 	// args.Latest, err = toNumber(obj[0].FromBlock) | 
					
						
							|  |  |  | 	// if err != nil { | 
					
						
							|  |  |  | 	// 	return shared.NewDecodeParamError(fmt.Sprintf("ToBlock %v", err)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var num int64 | 
					
						
							|  |  |  | 	var numBig *big.Int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// if blank then latest | 
					
						
							|  |  |  | 	if obj[0].FromBlock == nil { | 
					
						
							|  |  |  | 		num = -1 | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		if err := blockHeight(obj[0].FromBlock, &num); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	// if -2 or other "silly" number, use latest | 
					
						
							|  |  |  | 	if num < 0 { | 
					
						
							|  |  |  | 		args.Earliest = -1 //latest block | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		args.Earliest = num | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// if blank than latest | 
					
						
							|  |  |  | 	if obj[0].ToBlock == nil { | 
					
						
							|  |  |  | 		num = -1 | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		if err := blockHeight(obj[0].ToBlock, &num); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Latest = num | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if obj[0].Limit == nil { | 
					
						
							|  |  |  | 		numBig = big.NewInt(defaultLogLimit) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		if numBig, err = numString(obj[0].Limit); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Max = int(numBig.Int64()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if obj[0].Offset == nil { | 
					
						
							|  |  |  | 		numBig = big.NewInt(defaultLogOffset) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		if numBig, err = numString(obj[0].Offset); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Skip = int(numBig.Int64()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if obj[0].Address != nil { | 
					
						
							|  |  |  | 		marg, ok := obj[0].Address.([]interface{}) | 
					
						
							|  |  |  | 		if ok { | 
					
						
							|  |  |  | 			v := make([]string, len(marg)) | 
					
						
							|  |  |  | 			for i, arg := range marg { | 
					
						
							|  |  |  | 				argstr, ok := arg.(string) | 
					
						
							|  |  |  | 				if !ok { | 
					
						
							|  |  |  | 					return shared.NewInvalidTypeError(fmt.Sprintf("address[%d]", i), "is not a string") | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				v[i] = argstr | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			args.Address = v | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			argstr, ok := obj[0].Address.(string) | 
					
						
							|  |  |  | 			if ok { | 
					
						
							|  |  |  | 				v := make([]string, 1) | 
					
						
							|  |  |  | 				v[0] = argstr | 
					
						
							|  |  |  | 				args.Address = v | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				return shared.NewInvalidTypeError("address", "is not a string or array") | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if obj[0].Topics != nil { | 
					
						
							|  |  |  | 		other, ok := obj[0].Topics.([]interface{}) | 
					
						
							|  |  |  | 		if ok { | 
					
						
							|  |  |  | 			topicdbl := make([][]string, len(other)) | 
					
						
							|  |  |  | 			for i, iv := range other { | 
					
						
							|  |  |  | 				if argstr, ok := iv.(string); ok { | 
					
						
							|  |  |  | 					// Found a string, push into first element of array | 
					
						
							|  |  |  | 					topicsgl := make([]string, 1) | 
					
						
							|  |  |  | 					topicsgl[0] = argstr | 
					
						
							|  |  |  | 					topicdbl[i] = topicsgl | 
					
						
							|  |  |  | 				} else if argarray, ok := iv.([]interface{}); ok { | 
					
						
							|  |  |  | 					// Found an array of other | 
					
						
							|  |  |  | 					topicdbl[i] = make([]string, len(argarray)) | 
					
						
							|  |  |  | 					for j, jv := range argarray { | 
					
						
							|  |  |  | 						if v, ok := jv.(string); ok { | 
					
						
							|  |  |  | 							topicdbl[i][j] = v | 
					
						
							|  |  |  | 						} else if jv == nil { | 
					
						
							|  |  |  | 							topicdbl[i][j] = "" | 
					
						
							|  |  |  | 						} else { | 
					
						
							|  |  |  | 							return shared.NewInvalidTypeError(fmt.Sprintf("topic[%d][%d]", i, j), "is not a string") | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} else if iv == nil { | 
					
						
							|  |  |  | 					topicdbl[i] = []string{""} | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					return shared.NewInvalidTypeError(fmt.Sprintf("topic[%d]", i), "not a string or array") | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			args.Topics = topicdbl | 
					
						
							|  |  |  | 			return nil | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			return shared.NewInvalidTypeError("topic", "is not a string or array") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type FilterIdArgs struct { | 
					
						
							|  |  |  | 	Id int | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *FilterIdArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var num *big.Int | 
					
						
							|  |  |  | 	if num, err = numString(obj[0]); err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Id = int(num.Int64()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type LogRes struct { | 
					
						
							|  |  |  | 	Address          *hexdata   `json:"address"` | 
					
						
							|  |  |  | 	Topics           []*hexdata `json:"topics"` | 
					
						
							|  |  |  | 	Data             *hexdata   `json:"data"` | 
					
						
							|  |  |  | 	BlockNumber      *hexnum    `json:"blockNumber"` | 
					
						
							|  |  |  | 	LogIndex         *hexnum    `json:"logIndex"` | 
					
						
							|  |  |  | 	BlockHash        *hexdata   `json:"blockHash"` | 
					
						
							|  |  |  | 	TransactionHash  *hexdata   `json:"transactionHash"` | 
					
						
							|  |  |  | 	TransactionIndex *hexnum    `json:"transactionIndex"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewLogRes(log *state.Log) LogRes { | 
					
						
							|  |  |  | 	var l LogRes | 
					
						
							|  |  |  | 	l.Topics = make([]*hexdata, len(log.Topics)) | 
					
						
							|  |  |  | 	for j, topic := range log.Topics { | 
					
						
							|  |  |  | 		l.Topics[j] = newHexData(topic) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	l.Address = newHexData(log.Address) | 
					
						
							|  |  |  | 	l.Data = newHexData(log.Data) | 
					
						
							|  |  |  | 	l.BlockNumber = newHexNum(log.Number) | 
					
						
							|  |  |  | 	l.LogIndex = newHexNum(log.Index) | 
					
						
							|  |  |  | 	l.TransactionHash = newHexData(log.TxHash) | 
					
						
							|  |  |  | 	l.TransactionIndex = newHexNum(log.TxIndex) | 
					
						
							|  |  |  | 	l.BlockHash = newHexData(log.BlockHash) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return l | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewLogsRes(logs state.Logs) (ls []LogRes) { | 
					
						
							|  |  |  | 	ls = make([]LogRes, len(logs)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i, log := range logs { | 
					
						
							|  |  |  | 		ls[i] = NewLogRes(log) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewHashesRes(hs []common.Hash) []string { | 
					
						
							|  |  |  | 	hashes := make([]string, len(hs)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i, hash := range hs { | 
					
						
							|  |  |  | 		hashes[i] = hash.Hex() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return hashes | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type SubmitWorkArgs struct { | 
					
						
							|  |  |  | 	Nonce  uint64 | 
					
						
							|  |  |  | 	Header string | 
					
						
							|  |  |  | 	Digest string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *SubmitWorkArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 3 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var objstr string | 
					
						
							|  |  |  | 	var ok bool | 
					
						
							|  |  |  | 	if objstr, ok = obj[0].(string); !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("nonce", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.Nonce = common.String2Big(objstr).Uint64() | 
					
						
							|  |  |  | 	if objstr, ok = obj[1].(string); !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("header", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.Header = objstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if objstr, ok = obj[2].(string); !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("digest", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	args.Digest = objstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-06-24 13:53:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | type tx struct { | 
					
						
							|  |  |  | 	tx *types.Transaction | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-12 22:16:18 +02:00
										 |  |  | 	To       string `json:"to"` | 
					
						
							|  |  |  | 	From     string `json:"from"` | 
					
						
							|  |  |  | 	Nonce    string `json:"nonce"` | 
					
						
							|  |  |  | 	Value    string `json:"value"` | 
					
						
							|  |  |  | 	Data     string `json:"data"` | 
					
						
							|  |  |  | 	GasLimit string `json:"gas"` | 
					
						
							|  |  |  | 	GasPrice string `json:"gasPrice"` | 
					
						
							|  |  |  | 	Hash     string `json:"hash"` | 
					
						
							| 
									
										
										
										
											2015-06-24 13:53:37 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func newTx(t *types.Transaction) *tx { | 
					
						
							|  |  |  | 	from, _ := t.From() | 
					
						
							|  |  |  | 	var to string | 
					
						
							|  |  |  | 	if t := t.To(); t != nil { | 
					
						
							|  |  |  | 		to = t.Hex() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return &tx{ | 
					
						
							|  |  |  | 		tx:       t, | 
					
						
							|  |  |  | 		To:       to, | 
					
						
							|  |  |  | 		From:     from.Hex(), | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 		Value:    t.Value().String(), | 
					
						
							| 
									
										
										
										
											2015-06-24 13:53:37 +02:00
										 |  |  | 		Nonce:    strconv.Itoa(int(t.Nonce())), | 
					
						
							|  |  |  | 		Data:     "0x" + common.Bytes2Hex(t.Data()), | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 		GasLimit: t.Gas().String(), | 
					
						
							| 
									
										
										
										
											2015-06-24 13:53:37 +02:00
										 |  |  | 		GasPrice: t.GasPrice().String(), | 
					
						
							| 
									
										
										
										
											2015-07-10 11:35:15 +02:00
										 |  |  | 		Hash:     t.Hash().Hex(), | 
					
						
							| 
									
										
										
										
											2015-06-24 13:53:37 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-06-24 14:56:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | type ResendArgs struct { | 
					
						
							|  |  |  | 	Tx       *tx | 
					
						
							|  |  |  | 	GasPrice string | 
					
						
							|  |  |  | 	GasLimit string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | func (tx *tx) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var fields map[string]interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &fields); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 	var ( | 
					
						
							|  |  |  | 		nonce            uint64 | 
					
						
							|  |  |  | 		to               common.Address | 
					
						
							|  |  |  | 		amount           = new(big.Int).Set(common.Big0) | 
					
						
							|  |  |  | 		gasLimit         = new(big.Int).Set(common.Big0) | 
					
						
							|  |  |  | 		gasPrice         = new(big.Int).Set(common.Big0) | 
					
						
							|  |  |  | 		data             []byte | 
					
						
							|  |  |  | 		contractCreation = true | 
					
						
							|  |  |  | 	) | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-10 11:35:15 +02:00
										 |  |  | 	if val, found := fields["Hash"]; found { | 
					
						
							|  |  |  | 		if hashVal, ok := val.(string); ok { | 
					
						
							|  |  |  | 			tx.Hash = hashVal | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 	if val, found := fields["To"]; found { | 
					
						
							|  |  |  | 		if strVal, ok := val.(string); ok && len(strVal) > 0 { | 
					
						
							|  |  |  | 			tx.To = strVal | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 			to = common.HexToAddress(strVal) | 
					
						
							|  |  |  | 			contractCreation = false | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if val, found := fields["From"]; found { | 
					
						
							|  |  |  | 		if strVal, ok := val.(string); ok { | 
					
						
							|  |  |  | 			tx.From = strVal | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if val, found := fields["Nonce"]; found { | 
					
						
							|  |  |  | 		if strVal, ok := val.(string); ok { | 
					
						
							|  |  |  | 			tx.Nonce = strVal | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 			if nonce, err = strconv.ParseUint(strVal, 10, 64); err != nil { | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 				return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Nonce - %v", err)) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-06-29 12:42:47 +02:00
										 |  |  | 	} else { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError("tx.Nonce not found") | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var parseOk bool | 
					
						
							|  |  |  | 	if val, found := fields["Value"]; found { | 
					
						
							|  |  |  | 		if strVal, ok := val.(string); ok { | 
					
						
							|  |  |  | 			tx.Value = strVal | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 			if _, parseOk = amount.SetString(strVal, 0); !parseOk { | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 				return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Amount - %v", err)) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if val, found := fields["Data"]; found { | 
					
						
							|  |  |  | 		if strVal, ok := val.(string); ok { | 
					
						
							|  |  |  | 			tx.Data = strVal | 
					
						
							|  |  |  | 			if strings.HasPrefix(strVal, "0x") { | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 				data = common.Hex2Bytes(strVal[2:]) | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 				data = common.Hex2Bytes(strVal) | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if val, found := fields["GasLimit"]; found { | 
					
						
							|  |  |  | 		if strVal, ok := val.(string); ok { | 
					
						
							|  |  |  | 			tx.GasLimit = strVal | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 			if _, parseOk = gasLimit.SetString(strVal, 0); !parseOk { | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 				return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasLimit - %v", err)) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if val, found := fields["GasPrice"]; found { | 
					
						
							|  |  |  | 		if strVal, ok := val.(string); ok { | 
					
						
							|  |  |  | 			tx.GasPrice = strVal | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 			if _, parseOk = gasPrice.SetString(strVal, 0); !parseOk { | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 				return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasPrice - %v", err)) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-30 15:27:27 +02:00
										 |  |  | 	if contractCreation { | 
					
						
							|  |  |  | 		tx.tx = types.NewContractCreation(nonce, amount, gasLimit, gasPrice, data) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		tx.tx = types.NewTransaction(nonce, to, amount, gasLimit, gasPrice, data) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-06-29 12:32:01 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-24 14:56:53 +02:00
										 |  |  | func (args *ResendArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err = json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 1 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	data, err := json.Marshal(obj[0]) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError("Unable to parse transaction object") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	trans := new(tx) | 
					
						
							|  |  |  | 	err = json.Unmarshal(data, trans) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2015-06-29 11:13:28 +02:00
										 |  |  | 		return shared.NewDecodeParamError("Unable to parse transaction object") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if trans == nil || trans.tx == nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError("Unable to parse transaction object") | 
					
						
							| 
									
										
										
										
											2015-06-24 14:56:53 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	gasLimit, gasPrice := trans.GasLimit, trans.GasPrice | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 1 && obj[1] != nil { | 
					
						
							|  |  |  | 		if gp, ok := obj[1].(string); ok { | 
					
						
							|  |  |  | 			gasPrice = gp | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			return shared.NewInvalidTypeError("gasPrice", "not a string") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if len(obj) > 2 && obj[2] != nil { | 
					
						
							|  |  |  | 		if gl, ok := obj[2].(string); ok { | 
					
						
							|  |  |  | 			gasLimit = gl | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			return shared.NewInvalidTypeError("gasLimit", "not a string") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-06-29 11:13:28 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-24 14:56:53 +02:00
										 |  |  | 	args.Tx = trans | 
					
						
							|  |  |  | 	args.GasPrice = gasPrice | 
					
						
							|  |  |  | 	args.GasLimit = gasLimit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } |