Особенность мира криптовалют заключается в уникальности операций. Каждая транзакция, как правило, уникальна и строго фиксируется майнерами в блокчейн-сети. Впрочем, иногда бывают случаи, когда из-за несовершенства кода сети пользователь может дважды потратить одни и те же монеты. Этой уязвимости и дали название двойная трата (англ. double spending).
Иными словами, двойная трата — это процесс совершения двух платежей в рамках одной и той же сети и одной и той же монеты с целью обмануть получателя.
Как уже было сказано выше, каждая биткоин-транзакция фиксируется в блокчейне майнерами или валидаторами сети (в случае с криптовалютами работающими по модели доказательства доли владения pos). Когда пользователь совершает транзакцию, она не подтверждена. В каждый блок, который добывают майнеры (и за который получают вознаграждения), входят исключительно подтвержденные транзакции. Подтвержденная транзакция означает, что она не может быть потрачена дважды или скопирована.
Зачем нужна двойная трата?
Несмотря на то, что блокчейн биткоина, по сути, решает проблему двойного расходования, она все еще существует в некоторых сетях. Двойная трата выражается в виде отправки двух транзакций в быстрой последовательности. При этом только одна из них со временем будет подтверждена майнерами.
Цель двойной траты состоит в том, чтобы что-то купить с помощью неподтвержденной транзакции, пока майнеры не подтвердят истинную. Такая трата возможна только в том случае, когда получатель перевода готов принимать неподтвержденную транзакцию.
Как защищаются от двойных трат?
Но зачем принимать неподтвержденную транзакцию? Иногда наплыв транзакций в блокчейне настолько велик, что майнеры попросту не справляются с нагрузкой. Это приводит к тому, что для подтверждения транзакции уходит куда больше времени, чем обычно.
Некоторые получатели транзакций (например, биржи или депозитарии) готовы зачислять к себе на счет только те монеты, которые прошли определенное количество подтверждений (больше, чем два-три подтверждения, например). Чем больше число подтверждений, тем выше безопасность сделки, но медленнее сама операция.
Пример разновидности двойной траты
В качестве примера разновидности двойной траты можно привести забавный случай с блокчейном filecoin. Майнинг-сообщество проектов Filfox и FileStar выявило баг, позволявший проводить двойные депозиты в токенах filecoin (FIL) одной транзакцией на криптобиржах.
Фактически двойная трата происходила следующим образом:
- пользователь отправляет транзакцию с низкой комиссией;
- отменяет транзакцию, поскольку она зависает в статусе подтверждения;
- использует те же монеты для отправки новой транзакции;
- указывает более высокую комиссию для замены неподтвержденной транзакции.
Несмотря на то, что фактически в блокчейне подтвердилась только одна транзакция, биржа успешно засчитывала обе. При этом сами разработчики экосистемы Filecoin утверждают, что двойного расходования не было. Виноватыми в инциденте, по их мнению, были сами биржи, которые некорректно использовали api для подсчета входящий транзакций.