diff options
Diffstat (limited to 'rpc/api/eth.go')
-rw-r--r-- | rpc/api/eth.go | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 6c4745504..3fbb8d755 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" @@ -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) { |