Для разработчиков
Код FAIRDRUM открыт под лицензией MIT: контракт, сайт, скрипты запуска и тесты лежат в одном репозитории (ссылка появится здесь после публикации). Здесь коротко, как всё устроено и как запустить свою копию.
Устройство
| Папка | Что внутри |
|---|---|
programs/fairdrum/ | Контракт на Rust и Anchor 1.2.2. Числа игры в consts.rs, расчёты в engine.rs и math.rs в виде обычных функций, поэтому тесты идут без сети. |
app/ | Сайт: Vite и TypeScript, страницы в app/src/pages/, клиент контракта и работа со Switchboard в app/src/chain/. Таблицы чисел на сайте генерируются из consts.rs, поэтому с контрактом не расходятся. |
scripts/ | Запуск: выпуск токена, инициализация, проверка записанных настроек, тест на devnet, служебные выплаты, необязательный «дежурный». |
docs/ | ARCHITECTURE.md (как всё устроено), LAUNCH.md (пошаговый запуск), AUDIT.md (самопроверка безопасности и открытые вопросы). |
e2e/ | Проверки сайта в настоящем браузере с подставным кошельком и подставной сетью. |
В проекте нет сервера и базы данных: сайт состоит из обычных файлов и читает данные прямо из контракта.
Запустить у себя
Нужны Node.js 20.19 или новее и Rust для тестов контракта.
npm install
npm run dev # сайт на localhost, без контракта в демо-режиме
npm test # тесты клиента
cargo test -p fairdrum --release # тесты контракта
npm run build # сайт в папке dist/
npm run build:single # офлайн-версия: отдельные html-файлы, открываются двойным щелчком
Пошаговый запуск на devnet и в основной сети с командами и разбором частых ошибок: docs/LAUNCH.md в репозитории.
Настройки без пересборки
Файл config.json лежит рядом со страницами и читается при каждой загрузке, поэтому адрес контракта, узел сети и ссылки меняются без сборки. Пустой programId включает демо-режим.
{
"programId": "адрес программы после запуска",
"cluster": "mainnet-beta",
"rpc": "https://...",
"swapUrl": "ссылка на обмен FAIRDRUM, когда появится",
"links": { "github": "...", "telegram": "...", "x": "...", "audit": "..." }
}
Адрес сайта, описания страниц и подтверждения для вебмастеров задаются в app/seo.json и app/pages.json; npm run gen:html пересобирает по ним страницы, карту сайта и robots.txt.
Проверка кода
Тесты
Логика контракта проверяется без сети, в том числе «штормом» из десятков тысяч случайных операций: после каждой токены в хранилище обязаны ровно равняться обязательствам. Тест проверен «мутацией»: если в расчёте сместить хотя бы одну минимальную единицу, он падает.
Что не проверено
Сборка под Solana, живая работа со Switchboard и независимый аудит: статус проекта. Внутренняя проверка не заменяет аудит, и в docs/AUDIT.md перечислено, что остаётся открытым.
Сверка с сетью
После запуска сверьте опубликованный код с программой в сети по инструкции «Проверить честность». Адреса программы и токена читаются на странице «Официальные ссылки».
Если сайт fairdrum.to недоступен
Игровой баланс хранится в контракте, а не на сайте. Сайт — удобная оболочка, и вывод можно сделать с любой её копии.
- Проверьте, что адрес набран верно, и откройте сайт из закладки. Если недоступен только он, подождите: бывает временный сбой хостинга.
- Откройте копию сайта: репозиторий открыт, а сайт — это обычные файлы. Скачайте офлайн-версию или соберите свою (
npm run build), положите рядомconfig.jsonс настоящим адресом программы (его можно сверить на странице «Официальные ссылки» и в обозревателе) и откройте через любой простой веб-сервер, напримерnpx vite preview. - Подключите тот же кошелёк. Баланс, ранг и серия прочитаются из контракта, и вывод работает так же, как на основном сайте.
- Не вводите секретную фразу ни на каких «зеркалах». Сайт её никогда не просит: любая копия, которая просит, поддельная.
Копию сайта из чужого источника проверьте: сравните код с репозиторием проекта. Без этого вы не знаете, что именно подпишете. Надёжнее собрать самому.
Лицензия
MIT: код можно читать, копировать, изменять и запускать, в том числе в коммерческих целях, сохранив текст лицензии. Лицензия касается кода, а не названия и адреса fairdrum.to: форк с другими правилами не должен выдавать себя за этот проект.