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) { | ||||
| 	var err error | ||||
| 	URLHintContractAddress, err = xeth.Transact(addr, "", "100000000000", "1000000", "100000", ContractCodeURLhint) | ||||
| 	URLHintContractAddress, err = xeth.Transact(addr, "", "", "100000000000", "1000000", "100000", ContractCodeURLhint) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	HashRegContractAddress, err = xeth.Transact(addr, "", "100000000000", "1000000", "100000", ContractCodeHashReg) | ||||
| 	HashRegContractAddress, err = xeth.Transact(addr, "", "", "100000000000", "1000000", "100000", ContractCodeHashReg) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
|   | ||||
| @@ -173,7 +173,13 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err | ||||
| 			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 { | ||||
| 			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 { | ||||
| 	From     string | ||||
| 	To       string | ||||
| 	Nonce    *big.Int | ||||
| 	Value    *big.Int | ||||
| 	Gas      *big.Int | ||||
| 	GasPrice *big.Int | ||||
| @@ -170,6 +171,7 @@ func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) { | ||||
| 	var ext struct { | ||||
| 		From     string | ||||
| 		To       string | ||||
| 		Nonce    interface{} | ||||
| 		Value    interface{} | ||||
| 		Gas      interface{} | ||||
| 		GasPrice interface{} | ||||
| @@ -200,6 +202,14 @@ func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) { | ||||
| 	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 { | ||||
|   | ||||
							
								
								
									
										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 ( | ||||
| 		from             = common.HexToAddress(fromStr) | ||||
| 		to               = common.HexToAddress(toStr) | ||||
| @@ -704,7 +704,13 @@ func (self *XEth) Transact(fromStr, toStr, valueStr, gasStr, gasPriceStr, codeSt | ||||
| 	} | ||||
|  | ||||
| 	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) | ||||
|  | ||||
| 	if err := self.sign(tx, from, false); err != nil { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user