Два запроса, один баланс, окно в микросекунды. Когда проверка баланса и списание не атомарны, деньги уходят дважды.
Вывод — это прочитать и записать: проверить баланс, затем списать. Если эти два шага разделены, а запрос достаточно быстрый, два параллельных запроса оба читают один баланс раньше любого списания. Оба одобряются — счёт уходит в минус или расчётный счёт платит дважды.
На криптобирже или кэшауте казино это прямая потеря денег, и видно её только когда кто-то намеренно шлёт один и тот же вывод параллельно. Обычное тестирование так не делает.
Вывод, кэшаут, погашение, возврат, бонус — любой поток, который двигает ценность по схеме «прочитал — записал». Биржи и казино уязвимее всего, потому что потоки публичные, а стимул попробовать высокий.
Шлём один и тот же вывод однопакетным параллелизмом HTTP/2 и показываем, что оба запроса одобрены против одного баланса — с отрицательным контролем, где обычный последовательный вывод корректно отклоняется.
Нет. Проверки идут на изолированных данных и тестовых счетах, никогда на балансах клиентов.