VRF, или проверяемая случайная функция, — криптографическая функция с проверяемым результатом. Владелец секретного ключа вычисляет значение, а любой обладатель публичного ключа может проверить доказательство.
Для блокчейн-приложения важна не видимость случайности, а связь результата с заранее определёнными входными данными. VRF помогает проверить эту связь, но не доказывает честность всей системы.
Почему блокчейну трудно получить случайность
Узлы блокчейна должны одинаково исполнять одну и ту же операцию. Локальный генератор, который возвращает каждому узлу своё значение, нарушил бы согласованность состояния.
Поэтому смарт-контракту нужен внешний или протокольный источник случайности. При этом результат должен быть достаточно непредсказуемым до раскрытия и проверяемым после него.
Публичные свойства блока нельзя автоматически считать надёжным источником случайности.
Документация Solidity пред упреждает, что получение случайных чисел в смарт-контрактах сложно, если производитель блока может влиять на процесс.
Хэш публичных данных тоже не создаёт непредсказуемость. Если адреса, номера блоков и другие входы известны заранее, любой участник может повторить расчёт и оценить результат.
Серверный генератор способен выдать качественное случайное число, но без проверяемого доказательства читателю приходится доверять оператору. Проблема здесь не в сервере как таковом, а в отсутствии независимой проверки.
Как работает VRF
RFC 9381 описывает VRF как вариант криптографического хэша с открытым ключом. Только владелец секретного ключа вычисляет результат, но проверить его может любой обладатель публичного ключа.
Упрощённая схема выглядит так:
- Приложение фиксирует входные данные для конкретного события.
- Владелец ключа или распределённая сеть вычисляет результат и доказательство.
- Проверяющая сторона использует публичный ключ, входные данные и доказательство.
- Приложение принимает результат только после успешной проверки.
Для фиксированных публичного ключа и входных данных корректная VRF связывает проверяемое доказательство с одним результатом. Подставить другое значение с действительным доказательством должно быть вычислительно невозможно.
Для наблюдателя без секретного ключа результат выглядит случайным при выполнении условий выбранной схемы. Сам владелец ключа способен вычислить его, поэтому непредсказуемость не является безусловной для всех участников.
Что меняется для блокчейн-приложения
Без доказательства приложение получает число и обещание, что оно выбрано честно. С VRF оно получает число, доказательство и формальную процедуру проверки.
Но доказательство относится только к определённым входным данным и ключу. Приложение должно заранее определить, какой запрос проверяется и как полученное значение превращается в итоговый выбор.
Например, правило выбора победителя должно быть зафиксировано до получения случайности и не создавать систематического смещения. Само наличие VRF не исправляет ошибочный или изменяемый алгоритм выбора.
Распределённая VRF, или dVRF, делит вычисление между несколькими участниками.
В описании архитектуры Supra dVRF результат собирается из порогового числа частичных вычислений.
Такая модель снижает зависимость от одного владельца ключа в пределах заявленных криптографических и сетевых предпосылок. За это приходится платить дополнительной координацией и вычислительной сложностью.
Чего VRF не доказывает
VRF защищает один слой системы — получение и проверку случайного результата. Она не подтверждает автоматически, что весь розыгрыш или другой процесс устроен честно.
Отдельно необходимо проверить:
- были ли правила зафиксированы до участия;
- кто и когда определил входные данные;
- соответствует ли список участников объявленным условиям;
- как случайное значение преобразуется в выбор;
- можно ли удержать ответ и запросить новый;
- действительно ли существует обещанный приз;
- соблюдаются ли правила хранения и передачи актива.
Даже действительное доказательство не исключает манипуляцию входными данными, выбор удобного момента запроса или отказ публиковать невыгодный ответ. Эти риски должна ограничивать архитектура приложения.
Простая модель для понимания
Представьте машину для жеребьёвки, которая выдаёт номер и криптографическую квитанцию. По квитанции можно проверить, что номер связан с заданным входом и ключом.
Квитанция не показывает, был ли список участников полным, существовал ли приз и не менялись ли правила. VRF делает проверяемым результат, но не заменяет проверку остального процесса.
Пример ElyxS
В ElyxS случайность для результата розыгрыша поступает через Supra dVRF. Смарт-контракт проверяет ответ и его связь с конкретным запросом, розыгрышем и раундом, прежде чем использовать значение при расчёте итога.
Это пример принципа «не доверять ответу без проверки». Он не означает, что VRF сама подтверждает состав участников, условия приза, хранение актива или его получение победителем.
Практическая проверка результата описана отдельно в руководстве Как проверить результат розыгрыша. Технический обзор контрактной модели находится в разделе Смарт-контракты.
Где VRF особенно полезна
Проверяемая случайность нужна там, где исход распределяет ценность или права и у участников есть стимул повлиять на результат:
- в лотереях и розыгрышах;
- при распределении свойств и редкости NFT;
- в игровых наградах и подборе соперников;
- при случайной выборке участников или заявок;
- в протоколах, где случайность влияет на доступ или порядок действий.
Чем выше цена результата, тем важнее проверять не только источник случайности, но и входные данные, правило выбора и последующее исполнение.
Источники и дальнейшее чтение
- RFC 9381 о VRF — определение VRF, алгоритмы проверки и свойства безопасности.
- Рекомендации Solidity о случайности — ограничения временных меток и хэшей блоков в EVM-контрактах.
- Supra dVRF: Overview — назначение Supra dVRF и общий путь получения проверяемой случайности.
- Supra dVRF: Architecture Guide — порогова я архитектура, проверка и её вычислительные компромиссы.