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