Руководство 5

Проверить честность самому

Всё, что сайт говорит о контракте, можно сверить в открытых данных сети. Ниже проверки от самой простой (две минуты) до самой глубокой (сборка кода). Для большинства программирование не нужно.

Как устроена проверка

Сайт можно подделать или он может ошибиться, а запись в блокчейне нет. Поэтому проверяйте не на сайте проекта, а в обозревателе сети: независимом сайте, который показывает содержимое блокчейна (Solscan, Solana Explorer, SolanaFM и подобные). Откройте любой из них самостоятельно, не по ссылкам из чужих сообщений.

Для проверок нужны два адреса: программа (контракт) и токен. Их показывает страница «Безопасность». Сверьте их ещё минимум в двух независимых местах (репозиторий, официальные каналы): если адреса расходятся, вас пытаются обмануть.

Быстрые проверки (2–10 минут)

Что проверитьГде посмотретьКак должно бытьЕсли иначе
1. Нельзя ли напечатать новые токеныСтраница токена в обозревателе, поле Mint AuthorityПусто (отозвано)Тот, чей адрес указан, может выпустить сколько угодно токенов и обесценить ваши.
2. Нельзя ли заморозить токеныТа же страница, поле Freeze AuthorityПустоВладелец может заморозить любой кошелёк, включая ваш.
3. Кто может изменить кодСтраница программы, поле Upgrade AuthorityПусто (код заморожен) или адрес мультисига с задержкой на обновленияОдин обычный адрес означает, что владелец может в любой момент загрузить другие правила.
4. Общий выпуск токенаСтраница токена: SupplyНе больше 100 000 000 000 и только уменьшается из-за сжиганияБольше значит, что выпуск был увеличен.
5. Совпадает ли токенАдрес токена в вашем кошельке против страницы «Безопасность»Адреса идентичны посимвольноЭто не настоящий FAIRDRUM. Не покупайте и не вносите.
6. Хватает ли токенов в хранилищеАдрес хранилища со страницы «Безопасность», баланс токена; суммы копилок на «Экономике»Баланс хранилища не меньше суммы копилок (и ещё игровых балансов игроков)Контракт должен всегда быть покрыт токенами. Расхождение — серьёзный сигнал.

Верхняя таблица на странице «Безопасность» читает те же поля прямо из сети и отмечает ✔ или ⚠, но не полагайтесь только на неё: сверьте один раз сами.

Проверить свой прокрут

Каждый прокрут оставляет запись в сети, и результат на экране можно сверить с ней.

  1. Найдите транзакцию

    После прокрута под кнопкой появляется ссылка «Транзакция». Она открывает запись в обозревателе. Либо откройте историю вашего кошелька в обозревателе и выберите транзакцию с программой FAIRDRUM.

    Должно быть: статус Success и список инструкций.

  2. Найдите две пары вызовов

    В первой транзакции есть вызов Switchboard (запрос случайности, commit) и вызов программы FAIRDRUM spin_commit (ставка). Во второй: вызов Switchboard (раскрытие, reveal) и spin_settle (расчёт). Название в обозревателях выглядит немного по-разному (SpinCommit, spinCommit).

  3. Сравните порядок

    Ставка была записана раньше, чем число раскрыто: у первой транзакции меньший номер блока (Slot), чем у второй. Это значит, что ни вы, ни проект не знали результат в момент ставки.

  4. Посмотрите журнал (Logs) второй транзакции

    Там записано событие SpinSettled с числом прокрутов, призами, попаданиями в мини-джекпот, джекпот и суперджекпот. Это те же числа, что показал барабан.

  5. Проверьте владельца случайности

    Аккаунт случайности, указанный в транзакции, должен принадлежать программе Switchboard. Контракт сам отвергает любой другой, но убедиться стоит: откройте аккаунт и посмотрите поле Owner.

Глубокие проверки

Собрать код и сравнить хеш

Возьмите репозиторий проекта на GitHub (ссылка появится после публикации), соберите программу в воспроизводимом режиме (anchor build --verifiable) и сравните хеш с тем, что в сети (solana-verify). Совпадение значит, что в сети лежит ровно этот открытый код.

Прочитать константы

Все числа игры собраны в одном файле consts.rs: доли, шансы, лестница призов, комиссии, сроки. Сайт рисует свои таблицы именно из него, и расхождений между сайтом и контрактом быть не должно.

Запустить тесты

В репозитории есть тесты правил и расчётов (cargo test) и клиента (npm test). Они проверяют, например, что сумма всех пулов и балансов не превышает токены в хранилище.

Разобрать, как выбирается результат

Из 32 байт раскрытой случайности контракт получает числа через SHA-256. Для главного барабана это блоки SHA-256("FDRM-M" + случайность + номер блока), из которых по 4 байта (little-endian) берётся по числу на каждый выполненный прокрут. Для золотого барабана: SHA-256("FDRM-G" + случайность + номер выполненного прокрута). Число сравнивается с порогами в долях 232; сами пороги зависят от недельного объёма и размера копилок в момент расчёта, поэтому пересчитать старый прокрут целиком можно только вместе с состоянием программы на тот слот. Формулы лежат в math.rs и engine.rs.

Прочитать журнал за период

Любой может выгрузить из сети все события SpinSettled за период и самому подсчитать частоту золота и размер копилок. Сравните с «Шансами». На малом числе прокрутов разброс огромный: чтобы увидеть шанс в 1%, нужны тысячи прокрутов.

Что проверить нельзя

  • Честность оракула. Случайность приходит от сети Switchboard. Контракт проверяет, что число из нужного аккаунта и раскрыто после ставки, но не может проверить, что узлы оракула не сговорились. Это внешняя зависимость.
  • Отсутствие ошибок в коде. Тесты и открытый код повышают уверенность, но заменить независимый аудит не могут. Пока ссылка на аудит не указана, его нет.
  • Будущее. Пока право на обновление не отозвано, правила могут измениться новой версией. Следите за транзакциями обновления программы.
  • Что делает администратор вне контракта. Продажи его токенов, маркетинг, решения о листингах контракт не контролирует. Выплаты из фонда продвижения публичны, но «на что» контракт не проверяет.

Красные флаги

Адрес в сообщении не совпадает с сайтомПодмена токена или программы.
Mint или Freeze Authority заполненыВыпуск или заморозка остаются у кого-то.
Право на обновление у одного адреса без задержкиПравила можно сменить в любой момент.
«Гарантированный выигрыш», «схема», «партнёрка»В игре нет рефералов и гарантий, средний возврат около 73–74%.
Просят секретную фразу или «подтвердить кошелёк»Это кража. Закройте страницу.
Транзакция просит больше, чем вы ожидалиПрочитайте окно кошелька. Не уверены: откажитесь.