Transaction queue: return new tx hash

This commit is contained in:
Victor Farazdagi 2016-08-09 19:41:42 +03:00
parent 4635ced174
commit a1b02b8792
5 changed files with 22 additions and 13 deletions

View file

@ -132,15 +132,16 @@ func onSendTransactionRequest(queuedTx les.QueuedTx) {
C.GethServiceSignalEvent(C.CString(string(body)))
}
func completeTransaction(hash string) error {
func completeTransaction(hash string) (common.Hash, error) {
if currentNode != nil {
if lightEthereum != nil {
backend := lightEthereum.StatusBackend
return backend.CompleteQueuedTransaction(les.QueuedTxHash(hash))
}
return errors.New("Could not retrieve light ethereum service")
return common.Hash{}, errors.New("can not retrieve LES service")
}
return errors.New("No running node detected for account unlock")
return common.Hash{}, errors.New("can not complete transaction: no running node detected")
}

View file

@ -107,14 +107,17 @@ func TestAccountBindings(t *testing.T) {
sentinel := 0
backend.SetTransactionQueueHandler(func(queuedTx les.QueuedTx) {
glog.V(logger.Info).Infof("Queued transaction hash: %v\n", queuedTx.Hash.Hex())
if err := completeTransaction(queuedTx.Hash.Hex()); err != nil {
var txHash common.Hash
if txHash, err = completeTransaction(queuedTx.Hash.Hex()); err != nil {
t.Errorf("Test failed: cannot complete queued transation[%s]: %v", queuedTx.Hash.Hex(), err)
}
glog.V(logger.Info).Infof("Transaction complete: https://testnet.etherscan.io/tx/%s", txHash.Hex())
sentinel = 1
})
// try completing non-existing transaction
if err := completeTransaction("0x1234512345123451234512345123456123451234512345123451234512345123"); err == nil {
if _, err := completeTransaction("0x1234512345123451234512345123456123451234512345123451234512345123"); err == nil {
t.Errorf("Test failed: error expected and not recieved")
}

View file

@ -65,7 +65,7 @@ func UnlockAccount(address, password *C.char, seconds int) *C.char {
//export CompleteTransaction
func CompleteTransaction(hash *C.char) *C.char {
err := completeTransaction(C.GoString(hash))
txHash, err := completeTransaction(C.GoString(hash))
errString := emptyError
if err != nil {
@ -73,7 +73,8 @@ func CompleteTransaction(hash *C.char) *C.char {
errString = err.Error()
}
out := JSONError{
out := CompleteTransactionResult{
Hash: txHash.Hex(),
Error: errString,
}
outBytes, _ := json.Marshal(&out)

View file

@ -38,6 +38,11 @@ type SendTransactionEvent struct {
Args les.SendTxArgs `json:"args"`
}
type CompleteTransactionResult struct {
Hash string `json:"hash"`
Error string `json:"error"`
}
type GethEvent struct {
Type string `json:"type"`
Event interface{} `json:"event"`

View file

@ -4,12 +4,12 @@ import (
"golang.org/x/net/context"
"sync"
"errors"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/internal/ethapi"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/rpc"
"errors"
)
const (
@ -102,14 +102,13 @@ func (b *StatusBackend) SendTransaction(ctx context.Context, args SendTxArgs) er
}
// CompleteQueuedTransaction wraps call to PublicTransactionPoolAPI.CompleteQueuedTransaction
func (b *StatusBackend) CompleteQueuedTransaction(hash QueuedTxHash) error {
func (b *StatusBackend) CompleteQueuedTransaction(hash QueuedTxHash) (common.Hash, error) {
queuedTx, err := b.txEvictingQueue.getQueuedTransaction(hash)
if err != nil {
return err
return common.Hash{}, err
}
_, err = b.txapi.CompleteQueuedTransaction(context.Background(), ethapi.SendTxArgs(queuedTx.Args))
return err
return b.txapi.CompleteQueuedTransaction(context.Background(), ethapi.SendTxArgs(queuedTx.Args))
}
// GetTransactionQueue wraps call to PublicTransactionPoolAPI.GetTransactionQueue