xeth, rpc: added nonce setting through RPC and xeth transact
This commit is contained in:
		| @@ -24,11 +24,11 @@ var HashRegContractAddress string = "0000000000000000000000000000000000000000000 | |||||||
|  |  | ||||||
| func CreateContracts(xeth *xe.XEth, addr string) { | func CreateContracts(xeth *xe.XEth, addr string) { | ||||||
| 	var err error | 	var err error | ||||||
| 	URLHintContractAddress, err = xeth.Transact(addr, "", "100000000000", "1000000", "100000", ContractCodeURLhint) | 	URLHintContractAddress, err = xeth.Transact(addr, "", "", "100000000000", "1000000", "100000", ContractCodeURLhint) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		panic(err) | 		panic(err) | ||||||
| 	} | 	} | ||||||
| 	HashRegContractAddress, err = xeth.Transact(addr, "", "100000000000", "1000000", "100000", ContractCodeHashReg) | 	HashRegContractAddress, err = xeth.Transact(addr, "", "", "100000000000", "1000000", "100000", ContractCodeHashReg) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		panic(err) | 		panic(err) | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -173,7 +173,13 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err | |||||||
| 			return fmt.Errorf("Transaction not confirmed") | 			return fmt.Errorf("Transaction not confirmed") | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		v, err := api.xeth().Transact(args.From, args.To, args.Value.String(), args.Gas.String(), args.GasPrice.String(), args.Data) | 		// nonce may be nil ("guess" mode) | ||||||
|  | 		var nonce string | ||||||
|  | 		if args.Nonce != nil { | ||||||
|  | 			nonce = args.Nonce.String() | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		v, err := api.xeth().Transact(args.From, args.To, nonce, args.Value.String(), args.Gas.String(), args.GasPrice.String(), args.Data) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								rpc/args.go
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								rpc/args.go
									
									
									
									
									
								
							| @@ -157,6 +157,7 @@ func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) { | |||||||
| type NewTxArgs struct { | type NewTxArgs struct { | ||||||
| 	From     string | 	From     string | ||||||
| 	To       string | 	To       string | ||||||
|  | 	Nonce    *big.Int | ||||||
| 	Value    *big.Int | 	Value    *big.Int | ||||||
| 	Gas      *big.Int | 	Gas      *big.Int | ||||||
| 	GasPrice *big.Int | 	GasPrice *big.Int | ||||||
| @@ -170,6 +171,7 @@ func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) { | |||||||
| 	var ext struct { | 	var ext struct { | ||||||
| 		From     string | 		From     string | ||||||
| 		To       string | 		To       string | ||||||
|  | 		Nonce    interface{} | ||||||
| 		Value    interface{} | 		Value    interface{} | ||||||
| 		Gas      interface{} | 		Gas      interface{} | ||||||
| 		GasPrice interface{} | 		GasPrice interface{} | ||||||
| @@ -200,6 +202,14 @@ func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) { | |||||||
| 	args.Data = ext.Data | 	args.Data = ext.Data | ||||||
|  |  | ||||||
| 	var num *big.Int | 	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 { | 	if ext.Value == nil { | ||||||
| 		num = big.NewInt(0) | 		num = big.NewInt(0) | ||||||
| 	} else { | 	} else { | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								xeth/xeth.go
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								xeth/xeth.go
									
									
									
									
									
								
							| @@ -648,7 +648,7 @@ func (self *XEth) ConfirmTransaction(tx string) bool { | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (self *XEth) Transact(fromStr, toStr, valueStr, gasStr, gasPriceStr, codeStr string) (string, error) { | func (self *XEth) Transact(fromStr, toStr, nonceStr, valueStr, gasStr, gasPriceStr, codeStr string) (string, error) { | ||||||
| 	var ( | 	var ( | ||||||
| 		from             = common.HexToAddress(fromStr) | 		from             = common.HexToAddress(fromStr) | ||||||
| 		to               = common.HexToAddress(toStr) | 		to               = common.HexToAddress(toStr) | ||||||
| @@ -704,7 +704,13 @@ func (self *XEth) Transact(fromStr, toStr, valueStr, gasStr, gasPriceStr, codeSt | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	state := self.backend.ChainManager().TxState() | 	state := self.backend.ChainManager().TxState() | ||||||
| 	nonce := state.NewNonce(from) |  | ||||||
|  | 	var nonce uint64 | ||||||
|  | 	if len(nonceStr) != 0 { | ||||||
|  | 		nonce = common.Big(nonceStr).Uint64() | ||||||
|  | 	} else { | ||||||
|  | 		nonce = state.NewNonce(from) | ||||||
|  | 	} | ||||||
| 	tx.SetNonce(nonce) | 	tx.SetNonce(nonce) | ||||||
|  |  | ||||||
| 	if err := self.sign(tx, from, false); err != nil { | 	if err := self.sign(tx, from, false); err != nil { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user