Перевірити чесність самому
Усе, що сайт каже про контракт, можна звірити у відкритих даних мережі. Нижче перевірки від найпростішої (дві хвилини) до найглибшої (збирання коду). Для більшості програмування не потрібне.
Як влаштована перевірка
Сайт можна підробити, або він може помилитися, а запис у блокчейні ні. Тому перевіряйте не на сайті проєкту, а в оглядачі мережі: незалежному сайті, який показує вміст блокчейна (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. Контракт перевіряє, що число з потрібного акаунта і розкрите після ставки, але не може перевірити, що вузли оракула не змовилися. Це зовнішня залежність.
- Відсутність помилок у коді. Тести і відкритий код підвищують упевненість, але замінити незалежний аудит не можуть. Поки посилання на аудит не вказане, його немає.
- Майбутнє. Поки право на оновлення не відкликане, правила можуть змінитися новою версією. Стежте за транзакціями оновлення програми.
- Що робить адміністратор поза контрактом. Продажі його токенів, маркетинг, рішення про лістинги контракт не контролює. Виплати з фонду просування публічні, але «на що» контракт не перевіряє.