forked from cerc-io/plugeth
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.
This commit is contained in:
parent
55b7c14554
commit
5245bd7b20
@ -331,7 +331,7 @@ func (pool *TxPool) checkQueue() {
|
|||||||
// current account nonce.
|
// current account nonce.
|
||||||
sort.Sort(addq)
|
sort.Sort(addq)
|
||||||
for _, e := range addq {
|
for _, e := range addq {
|
||||||
if e.AccountNonce > curnonce+1 {
|
if e.AccountNonce > curnonce {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
delete(txs, e.hash)
|
delete(txs, e.hash)
|
||||||
|
@ -201,3 +201,26 @@ func TestTransactionDoubleNonce(t *testing.T) {
|
|||||||
t.Error("expected 2 pending txs. Got", len(pool.pending))
|
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]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user