Проверить честность самому
Всё, что сайт говорит о контракте, можно сверить в открытых данных сети. Ниже проверки от самой простой (две минуты) до самой глубокой (сборка кода). Для большинства программирование не нужно.
Как устроена проверка
Сайт можно подделать или он может ошибиться, а запись в блокчейне нет. Поэтому проверяйте не на сайте проекта, а в обозревателе сети: независимом сайте, который показывает содержимое блокчейна (Solscan, Solana Explorer, SolanaFM и подобные). Откройте любой из них самостоятельно, не по ссылкам из чужих сообщений.
Для проверок нужны два адреса: программа (контракт) и токен. Их показывает страница «Безопасность». Сверьте их ещё минимум в двух независимых местах (репозиторий, официальные каналы): если адреса расходятся, вас пытаются обмануть.
Быстрые проверки (2–10 минут)
| Что проверить | Где посмотреть | Как должно быть | Если иначе |
|---|---|---|---|
| 1. Нельзя ли напечатать новые токены | Страница токена в обозревателе, поле Mint Authority | Пусто (отозвано) | Тот, чей адрес указан, может выпустить сколько угодно токенов и обесценить ваши. |
| 2. Нельзя ли заморозить токены | Та же страница, поле Freeze Authority | Пусто | Владелец может заморозить любой кошелёк, включая ваш. |
| 3. Кто может изменить код | Страница программы, поле Upgrade Authority | Пусто (код заморожен) или адрес мультисига с задержкой на обновления | Один обычный адрес означает, что владелец может в любой момент загрузить другие правила. |
| 4. Общий выпуск токена | Страница токена: Supply | Не больше 100 000 000 000 и только уменьшается из-за сжигания | Больше значит, что выпуск был увеличен. |
| 5. Совпадает ли токен | Адрес токена в вашем кошельке против страницы «Безопасность» | Адреса идентичны посимвольно | Это не настоящий FAIRDRUM. Не покупайте и не вносите. |
| 6. Хватает ли токенов в хранилище | Адрес хранилища со страницы «Безопасность», баланс токена; суммы копилок на «Экономике» | Баланс хранилища не меньше суммы копилок (и ещё игровых балансов игроков) | Контракт должен всегда быть покрыт токенами. Расхождение — серьёзный сигнал. |
Верхняя таблица на странице «Безопасность» читает те же поля прямо из сети и отмечает ✔ или ⚠, но не полагайтесь только на неё: сверьте один раз сами.
Проверить свой прокрут
Каждый прокрут оставляет запись в сети, и результат на экране можно сверить с ней.
Найдите транзакцию
После прокрута под кнопкой появляется ссылка «Транзакция». Она открывает запись в обозревателе. Либо откройте историю вашего кошелька в обозревателе и выберите транзакцию с программой FAIRDRUM.
Должно быть: статус Success и список инструкций.
Найдите две пары вызовов
В первой транзакции есть вызов Switchboard (запрос случайности, commit) и вызов программы FAIRDRUM
spin_commit(ставка). Во второй: вызов Switchboard (раскрытие, reveal) иspin_settle(расчёт). Название в обозревателях выглядит немного по-разному (SpinCommit, spinCommit).Сравните порядок
Ставка была записана раньше, чем число раскрыто: у первой транзакции меньший номер блока (Slot), чем у второй. Это значит, что ни вы, ни проект не знали результат в момент ставки.
Посмотрите журнал (Logs) второй транзакции
Там записано событие
SpinSettledс числом прокрутов, призами, попаданиями в мини-джекпот, джекпот и суперджекпот. Это те же числа, что показал барабан.Проверьте владельца случайности
Аккаунт случайности, указанный в транзакции, должен принадлежать программе 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. Контракт проверяет, что число из нужного аккаунта и раскрыто после ставки, но не может проверить, что узлы оракула не сговорились. Это внешняя зависимость.
- Отсутствие ошибок в коде. Тесты и открытый код повышают уверенность, но заменить независимый аудит не могут. Пока ссылка на аудит не указана, его нет.
- Будущее. Пока право на обновление не отозвано, правила могут измениться новой версией. Следите за транзакциями обновления программы.
- Что делает администратор вне контракта. Продажи его токенов, маркетинг, решения о листингах контракт не контролирует. Выплаты из фонда продвижения публичны, но «на что» контракт не проверяет.