Ethereum не использует Math.random(). Он не может. Сеть полагается на криптографические методы для генерации случайности, которую может проверить любой желающий — это различие важно для каждой лотереи, игры и NFT-дропа, построенных на его основе.
Ловушка Math.random()
Math.random() — это генератор псевдослучайных чисел. Он берет начальное значение (seed) и создает последовательность, которая выглядит случайной, но полностью детерминирована. Если вы знаете seed, вы можете предсказать каждое последующее число. В публичном блокчейне это фатальный недостаток. Майнеры или валидаторы могут увидеть seed или даже повлиять на него и манипулировать системой.
Существует также проблема проверяемости. С помощью Math.random() пользователи не могут доказать, что результат был действительно случайным. Пришлось бы доверять разработчику контракта. В децентрализованной сети такое доверие трудно обеспечить.
Как Ethereum обеспечивает случайность
Ethereum вместо этого использует криптографические методы для создания случайности. Эти методы разработаны так, чтобы результат был проверяемым для любого пользователя. Это означает, что пользователь может проверить, что случайность не была изменена после факта.
Точная механика сложна, но идея проста: объединить входные данные от нескольких участников так, чтобы ни один участник не мог контролировать результат. Затем выходные данные хешируются или обрабатываются для получения окончательного случайного значения. Поскольку процесс прозрачен, результат можно проверить.
Почему проверяемость обязательна
Смарт-контракты, которые выбирают победителей, перемешивают карты или присваивают характеристики, нуждаются в случайности, которой можно доверять. Если случайность предсказуема, всё приложение ломается. Лотерею можно обмануть. Игру можно подстроить. NFT-дроп можно обойти с помощью front-running.
Проверяемая случайность меняет это. Она дает пользователям способ подтвердить, что результат был честным. Это не просто приятная функция — это требование для любого приложения, которое хочет работать без централизованного органа.
Частое заблуждение
Новые разработчики блокчейнов часто используют Math.random() по привычке. Это естественный инстинкт — он работает везде. Но в блокчейне это неприемлемо. Кривая обучения реальна, и ошибка обычно всплывает во время тестирования, когда кто-то понимает, что может предсказать результат.
Вывод
Выбор Ethereum использовать криптографическую случайность вместо Math.random() — не стилистическое предпочтение. Это фундаментальное требование для создания систем без доверия. Для разработчиков это означает, что понимание разницы между псевдослучайностью и проверяемой случайностью является обязательным. Для пользователей это гарантия того, что игры и лотереи, в которых они участвуют, не подстроены.




