core: only post event once per tx & fixed test
This commit is contained in:
parent
4feb5f6f9c
commit
7138404cb0
@ -125,11 +125,6 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
|
||||
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 {
|
||||
hash := tx.Hash()
|
||||
|
||||
@ -147,7 +142,7 @@ func (self *TxPool) add(tx *types.Transaction) error {
|
||||
return err
|
||||
}
|
||||
|
||||
self.addTx(tx)
|
||||
self.queueTx(tx)
|
||||
|
||||
var toname string
|
||||
if to := tx.To(); to != nil {
|
||||
@ -226,6 +221,19 @@ func (pool *TxPool) Stop() {
|
||||
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
|
||||
func (pool *TxPool) checkQueue() {
|
||||
pool.mu.Lock()
|
||||
@ -257,9 +265,7 @@ func (pool *TxPool) checkQueue() {
|
||||
}
|
||||
enonce++
|
||||
|
||||
pool.txs[tx.Hash()] = tx
|
||||
// Notify the subscribers
|
||||
go pool.eventMux.Post(TxPreEvent{tx})
|
||||
pool.addTx(tx)
|
||||
}
|
||||
//pool.queue[address] = txs[i:]
|
||||
// delete the entire queue entry if it's empty. There's no need to keep it
|
||||
|
@ -67,7 +67,7 @@ func TestTransactionQueue(t *testing.T) {
|
||||
tx.SignECDSA(key)
|
||||
from, _ := tx.From()
|
||||
pool.currentState().AddBalance(from, big.NewInt(1))
|
||||
pool.addTx(tx)
|
||||
pool.queueTx(tx)
|
||||
|
||||
pool.checkQueue()
|
||||
if len(pool.txs) != 1 {
|
||||
@ -79,7 +79,7 @@ func TestTransactionQueue(t *testing.T) {
|
||||
from, _ = tx.From()
|
||||
pool.currentState().SetNonce(from, 10)
|
||||
tx.SetNonce(1)
|
||||
pool.addTx(tx)
|
||||
pool.queueTx(tx)
|
||||
pool.checkQueue()
|
||||
if _, ok := pool.txs[tx.Hash()]; ok {
|
||||
t.Error("expected transaction to be in tx pool")
|
||||
@ -96,9 +96,9 @@ func TestTransactionQueue(t *testing.T) {
|
||||
tx1.SignECDSA(key)
|
||||
tx2.SignECDSA(key)
|
||||
tx3.SignECDSA(key)
|
||||
pool.addTx(tx1)
|
||||
pool.addTx(tx2)
|
||||
pool.addTx(tx3)
|
||||
pool.queueTx(tx1)
|
||||
pool.queueTx(tx2)
|
||||
pool.queueTx(tx3)
|
||||
from, _ = tx1.From()
|
||||
pool.checkQueue()
|
||||
|
||||
@ -106,7 +106,7 @@ func TestTransactionQueue(t *testing.T) {
|
||||
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]))
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user