Безопасность. Атака frontrunning (опережение)
В Ethereum все транзакции сначала добавляются в пул, который виден всем участникам сети, а далее майнеры добавляют их в блок в произвольном порядке. Поэтому результат выполнения транзакции не должен зависеть от ее положения в блоке.
Допустим, наш контракт представляет собой конкурс на поиск числа, хеш от которого меньше заданного значения. Допустим, вы нашли подходящее решение и отправили транзакцию с ответом. Нечестный игрок может подсмотреть ваш ответ в пуле транзакций и отправить такой же. При отправке транзакции нужно указать цену за газ, которую вы готовы заплатить, чтобы ваша транзакция выполнилась. Чем выше цена газа, тем больше вероятность транзакции быть добавленной в блок раньше. Таким образом, злоумышленник, выставив цену газа выше вашей, сможет выиграть конкурс.
Частично решит проблему добавление в контракт ограничения на цену газа, но майнеры все равно смогут манипулировать порядком транзакций. Более правильным, но сложным решением будет схема Commit — Reveal, которую мы также рассматривали в одном из прошлых уроков.
#frontrunning #безопасность
Post #358
170
- 👍 1