xeth, rpc: added nonce setting through RPC and xeth transact
This commit is contained in:
parent
aa884c052d
commit
03bb88dec0
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user