Преглед изворни кода

core: added a test for missing nonces

This test showed the logic in the queue was slightly flawed sending out
transactions to its peer it couldn't even resolve itself.
obscuren пре 10 година
родитељ
комит
5245bd7b20
2 измењених фајлова са 24 додато и 1 уклоњено
  1. 1 1
      core/transaction_pool.go
  2. 23 0
      core/transaction_pool_test.go

+ 1 - 1
core/transaction_pool.go

@@ -331,7 +331,7 @@ func (pool *TxPool) checkQueue() {
 		// current account nonce.
 		sort.Sort(addq)
 		for _, e := range addq {
-			if e.AccountNonce > curnonce+1 {
+			if e.AccountNonce > curnonce {
 				break
 			}
 			delete(txs, e.hash)

+ 23 - 0
core/transaction_pool_test.go

@@ -201,3 +201,26 @@ func TestTransactionDoubleNonce(t *testing.T) {
 		t.Error("expected 2 pending txs. Got", len(pool.pending))
 	}
 }
+
+func TestMissingNonce(t *testing.T) {
+	pool, key := setupTxPool()
+	addr := crypto.PubkeyToAddress(key.PublicKey)
+	pool.currentState().AddBalance(addr, big.NewInt(100000000000000))
+	tx := transaction()
+	tx.AccountNonce = 1
+	tx.GasLimit = big.NewInt(100000)
+	tx.SignECDSA(key)
+
+	err := pool.add(tx)
+	if err != nil {
+		t.Error("didn't expect error", err)
+	}
+
+	if len(pool.pending) != 0 {
+		t.Error("expected 0 pending transactions, got", len(pool.pending))
+	}
+
+	if len(pool.queue[addr]) != 1 {
+		t.Error("expected 1 queued transaction, got", len(pool.queue[addr]))
+	}
+}