Я разработчик, создающий приложение, которое принимает платежи в криптовалютах.
Можно ли в случае атаки 51% создать скрипт, который обнаружит это, чтобы мы могли автоматически приостанавливать снятие средств?
Как правило, нет, пока не стало слишком поздно.
Типичная атака 51% будет выглядеть так:
Злоумышленник в частном порядке начинает майнить свою собственную цепочку, которая расходится с основной цепочкой в каком-то блоке N.
Злоумышленник вносит монеты в ваш бизнес, отправляя их с адреса A. Назовите эту транзакцию X.
Злоумышленник вставляет в свою цепочку транзакцию X', которая конфликтует с X; обычно X' отправляет монеты с адреса A на другой адрес, принадлежащий злоумышленнику.
Злоумышленник ждет нескольких подтверждений транзакции X в блоках N+1, ..., N+6 (замените 6 любым количеством подтверждений, которое требуется вашему бизнесу) основной цепочки.
Как только будет достаточно подтверждений, чтобы удовлетворить вас, вы доставляете товары или услуги злоумышленнику.
Злоумышленник выпускает свою собственную цепочку, в которой теперь есть блоки, скажем, до N+50. Будучи длиннее, эта цепочка принимается сетью. Эта цепочка содержит не транзакцию X, а X', поэтому у вас нет монет, которые, как вы думали, у вас есть.
Обратите внимание, что вплоть до шага 6 все в сети выглядит совершенно нормально; только злоумышленник знает, что происходит.
Марч