core: only post event once per tx & fixed test

This commit is contained in:
obscuren 2015-04-21 23:20:27 +02:00
parent 4feb5f6f9c
commit 7138404cb0
2 changed files with 21 additions and 15 deletions

View File

@ -125,11 +125,6 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
return nil return nil
} }
func (self *TxPool) addTx(tx *types.Transaction) {
from, _ := tx.From()
self.queue[from] = append(self.queue[from], tx)
}
func (self *TxPool) add(tx *types.Transaction) error { func (self *TxPool) add(tx *types.Transaction) error {
hash := tx.Hash() hash := tx.Hash()
@ -147,7 +142,7 @@ func (self *TxPool) add(tx *types.Transaction) error {
return err return err
} }
self.addTx(tx) self.queueTx(tx)
var toname string var toname string
if to := tx.To(); to != nil { if to := tx.To(); to != nil {
@ -226,6 +221,19 @@ func (pool *TxPool) Stop() {
glog.V(logger.Info).Infoln("TX Pool stopped") glog.V(logger.Info).Infoln("TX Pool stopped")
} }
func (self *TxPool) queueTx(tx *types.Transaction) {
from, _ := tx.From()
self.queue[from] = append(self.queue[from], tx)
}
func (pool *TxPool) addTx(tx *types.Transaction) {
if _, ok := pool.txs[tx.Hash()]; !ok {
pool.txs[tx.Hash()] = tx
// Notify the subscribers
pool.eventMux.Post(TxPreEvent{tx})
}
}
// check queue will attempt to insert // check queue will attempt to insert
func (pool *TxPool) checkQueue() { func (pool *TxPool) checkQueue() {
pool.mu.Lock() pool.mu.Lock()
@ -257,9 +265,7 @@ func (pool *TxPool) checkQueue() {
} }
enonce++ enonce++
pool.txs[tx.Hash()] = tx pool.addTx(tx)
// Notify the subscribers
go pool.eventMux.Post(TxPreEvent{tx})
} }
//pool.queue[address] = txs[i:] //pool.queue[address] = txs[i:]
// delete the entire queue entry if it's empty. There's no need to keep it // delete the entire queue entry if it's empty. There's no need to keep it

View File

@ -67,7 +67,7 @@ func TestTransactionQueue(t *testing.T) {
tx.SignECDSA(key) tx.SignECDSA(key)
from, _ := tx.From() from, _ := tx.From()
pool.currentState().AddBalance(from, big.NewInt(1)) pool.currentState().AddBalance(from, big.NewInt(1))
pool.addTx(tx) pool.queueTx(tx)
pool.checkQueue() pool.checkQueue()
if len(pool.txs) != 1 { if len(pool.txs) != 1 {
@ -79,7 +79,7 @@ func TestTransactionQueue(t *testing.T) {
from, _ = tx.From() from, _ = tx.From()
pool.currentState().SetNonce(from, 10) pool.currentState().SetNonce(from, 10)
tx.SetNonce(1) tx.SetNonce(1)
pool.addTx(tx) pool.queueTx(tx)
pool.checkQueue() pool.checkQueue()
if _, ok := pool.txs[tx.Hash()]; ok { if _, ok := pool.txs[tx.Hash()]; ok {
t.Error("expected transaction to be in tx pool") t.Error("expected transaction to be in tx pool")
@ -96,9 +96,9 @@ func TestTransactionQueue(t *testing.T) {
tx1.SignECDSA(key) tx1.SignECDSA(key)
tx2.SignECDSA(key) tx2.SignECDSA(key)
tx3.SignECDSA(key) tx3.SignECDSA(key)
pool.addTx(tx1) pool.queueTx(tx1)
pool.addTx(tx2) pool.queueTx(tx2)
pool.addTx(tx3) pool.queueTx(tx3)
from, _ = tx1.From() from, _ = tx1.From()
pool.checkQueue() pool.checkQueue()
@ -106,7 +106,7 @@ func TestTransactionQueue(t *testing.T) {
t.Error("expected tx pool to be 1 =") t.Error("expected tx pool to be 1 =")
} }
if len(pool.queue[from]) != 2 { if len(pool.queue[from]) != 3 {
t.Error("expected transaction queue to be empty. is", len(pool.queue[from])) t.Error("expected transaction queue to be empty. is", len(pool.queue[from]))
} }
} }