|
|
@ -219,3 +219,22 @@ func TestMissingNonce(t *testing.T) { |
|
|
|
t.Error("expected 1 queued transaction, got", len(pool.queue[addr])) |
|
|
|
t.Error("expected 1 queued transaction, got", len(pool.queue[addr])) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TestNonceRecovery(t *testing.T) { |
|
|
|
|
|
|
|
const n = 10 |
|
|
|
|
|
|
|
pool, key := setupTxPool() |
|
|
|
|
|
|
|
addr := crypto.PubkeyToAddress(key.PublicKey) |
|
|
|
|
|
|
|
pool.currentState().SetNonce(addr, n) |
|
|
|
|
|
|
|
pool.currentState().AddBalance(addr, big.NewInt(100000000000000)) |
|
|
|
|
|
|
|
pool.resetState() |
|
|
|
|
|
|
|
tx := transaction(n, big.NewInt(100000), key) |
|
|
|
|
|
|
|
if err := pool.Add(tx); err != nil { |
|
|
|
|
|
|
|
t.Error(err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// simulate some weird re-order of transactions and missing nonce(s)
|
|
|
|
|
|
|
|
pool.currentState().SetNonce(addr, n-1) |
|
|
|
|
|
|
|
pool.resetState() |
|
|
|
|
|
|
|
if fn := pool.pendingState.GetNonce(addr); fn != n+1 { |
|
|
|
|
|
|
|
t.Errorf("expected nonce to be %d, got %d", n+1, fn) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|