diff options
Diffstat (limited to 'rpc/api')
-rw-r--r-- | rpc/api/args_test.go | 6 | ||||
-rw-r--r-- | rpc/api/eth.go | 20 | ||||
-rw-r--r-- | rpc/api/eth_args.go | 12 | ||||
-rw-r--r-- | rpc/api/utils.go | 17 |
4 files changed, 35 insertions, 20 deletions
diff --git a/rpc/api/args_test.go b/rpc/api/args_test.go index bb279718b..23ae2930d 100644 --- a/rpc/api/args_test.go +++ b/rpc/api/args_test.go @@ -935,9 +935,9 @@ func TestCallArgsNotStrings(t *testing.T) { func TestCallArgsToEmpty(t *testing.T) { input := `[{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155"}]` args := new(CallArgs) - str := ExpectValidationError(json.Unmarshal([]byte(input), &args)) - if len(str) > 0 { - t.Error(str) + err := json.Unmarshal([]byte(input), &args) + if err != nil { + t.Error("Did not expect error. Got", err) } } diff --git a/rpc/api/eth.go b/rpc/api/eth.go index ed636004c..4041811f0 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -21,8 +21,9 @@ import ( "encoding/json" "math/big" + "fmt" + "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" @@ -322,7 +323,7 @@ func (self *ethApi) EstimateGas(req *shared.Request) (interface{}, error) { if len(gas) == 0 { return newHexNum(0), nil } else { - return newHexNum(gas), nil + return newHexNum(common.String2Big(gas)), err } } @@ -578,14 +579,17 @@ func (self *ethApi) Resend(req *shared.Request) (interface{}, error) { return nil, shared.NewDecodeParamError(err.Error()) } - ret, err := self.xeth.Transact(args.Tx.From, args.Tx.To, args.Tx.Nonce, args.Tx.Value, args.GasLimit, args.GasPrice, args.Tx.Data) - if err != nil { - return nil, err - } + from := common.HexToAddress(args.Tx.From) - self.ethereum.TxPool().RemoveTransactions(types.Transactions{args.Tx.tx}) + pending := self.ethereum.TxPool().GetTransactions() + for _, p := range pending { + if pFrom, err := p.From(); err == nil && pFrom == from && p.SigHash() == args.Tx.tx.SigHash() { + self.ethereum.TxPool().RemoveTx(common.HexToHash(args.Tx.Hash)) + return self.xeth.Transact(args.Tx.From, args.Tx.To, args.Tx.Nonce, args.Tx.Value, args.GasLimit, args.GasPrice, args.Tx.Data) + } + } - return ret, nil + return nil, fmt.Errorf("Transaction %s not found", args.Tx.Hash) } func (self *ethApi) PendingTransactions(req *shared.Request) (interface{}, error) { diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index ae394e7ec..1218bd625 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -469,10 +469,6 @@ func (args *CallArgs) UnmarshalJSON(b []byte) (err error) { } args.From = ext.From - - if len(ext.To) == 0 { - return shared.NewValidationError("to", "is required") - } args.To = ext.To var num *big.Int @@ -888,6 +884,7 @@ type tx struct { Data string GasLimit string GasPrice string + Hash string } func newTx(t *types.Transaction) *tx { @@ -906,6 +903,7 @@ func newTx(t *types.Transaction) *tx { Data: "0x" + common.Bytes2Hex(t.Data()), GasLimit: t.Gas().String(), GasPrice: t.GasPrice().String(), + Hash: t.Hash().Hex(), } } @@ -931,6 +929,12 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { contractCreation = true ) + if val, found := fields["Hash"]; found { + if hashVal, ok := val.(string); ok { + tx.Hash = hashVal + } + } + if val, found := fields["To"]; found { if strVal, ok := val.(string); ok && len(strVal) > 0 { tx.To = strVal diff --git a/rpc/api/utils.go b/rpc/api/utils.go index a791dcd65..50c607d16 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -32,16 +32,22 @@ var ( AutoCompletion = map[string][]string{ "admin": []string{ "addPeer", - "peers", - "nodeInfo", + "chainSyncStatus", + "datadir", "exportChain", + "getContractInfo", "importChain", - "verbosity", - "chainSyncStatus", + "nodeInfo", + "peers", + "register", + "registerUrl", "setSolc", - "datadir", + "sleepBlocks", + "startNatSpec", "startRPC", + "stopNatSpec", "stopRPC", + "verbosity", }, "db": []string{ "getString", @@ -97,6 +103,7 @@ var ( "miner": []string{ "hashrate", "makeDAG", + "setEtherbase", "setExtra", "setGasPrice", "startAutoDAG", |