Клиентская часть платформы Ять (Yat) — децентрализованной системы обмена ценностями на базе DAG и криптографии Ed25519. Это браузерный кошелёк: он генерирует ключи прямо у вас в браузере, подписывает транзакции, шифрует сообщения и общается с сетью по GraphQL и REST.
Важно понимать: здесь только клиент. Ядро сети (DAG, консенсус Raft и всё остальное) находится в других репозиториях. Проект пока на стадии раннего прототипа: часть экранов — заглушки, а сервер тестовой сети может быть недоступен.
- Создаёт кошелёк из мнемонической фразы из 24 слов (BIP39) и выводит из неё ключи Ed25519.
- Подписывает и отправляет транзакции.
- Шифрует и расшифровывает сообщения.
- Показывает баланс и историю транзакций.
- Шифрует вашу сид-фразу паролем и хранит её только на устройстве.
Vue 3 + Quasar 2 (Vite), Pinia, vue-router, vue-i18n. Данные — через Apollo Client (GraphQL) и
ky (REST), локально — IndexedDB. Криптография — libsodium, tweetnacl, bip39 и @noble/hashes.
Весь код — на JavaScript.
- Node.js 18+ (проект собран и проверен на Node 22).
- npm, yarn или pnpm.
- Для e2e-тестов — установленный Google Chrome (скачивать отдельный браузер не нужно).
Установите зависимости:
npm installСоздайте файл окружения из шаблона и откройте его:
cp .env.example .envВ .env нужно указать адреса сервисов:
GQL_API=http://127.0.0.1:8000/graphql # GraphQL
REST_API=http://127.0.0.1:8000/ # REST, обязательно со слэшем в конце
Запустите приложение в режиме разработки:
npm run devОткройте http://localhost:9000.
| Команда | Что делает |
|---|---|
npm run dev |
Dev-сервер с горячей перезагрузкой |
npm run build |
Production-сборка в dist/spa |
npm run lint |
Проверка кода линтером |
npm run format |
Форматирование кода |
npm run test:e2e |
Сборка + end-to-end тесты в браузере |
src/
boot/ Инициализация при запуске: крипто сообщений, проверка env, Apollo, i18n, IndexedDB
services/ wallet.js — шифрование и хранение сид-фразы
stores/ user.js — состояние пользователя (ключи, сид) на Pinia
components/ Общие компоненты (форма входа, слайдшоу)
pages/ Экраны приложения (в т.ч. user/ и landing/)
layouts/ Общий каркас страницы
router/ Маршруты
i18n/ Переводы (en, ru)
e2e/ End-to-end тесты (Playwright)
scripts/ Вспомогательные скрипты (SPA-сервер для тестов)
Это кошелёк, поэтому к хранению секретов относимся серьёзно.
- Сид-фраза шифруется паролем и лежит только в IndexedDB устройства, в формате
{ v, salt, nonce, ciphertext }. В cookie, localStorage или на сервер она не попадает. - После перезагрузки страницы ключи из памяти пропадают — нужно снова ввести пароль.
- Никогда не коммитьте
.env, приватные ключи и сертификаты в репозиторий. - Вся работа с сид-фразой должна идти через
src/services/wallet.js.
End-to-end тесты написаны на Playwright и проверяют реальные сценарии в браузере (создание кошелька, вход, восстановление, очистка). Запуск:
npm run test:e2eТест сначала собирает приложение, затем поднимает локальный сервер на порту 9100. Используется
системный Chrome; при необходимости путь можно задать переменной CHROME_PATH.
- Версия
libsodium-wrappersзафиксирована на0.7.15— в0.7.16сломан сборщик, и проект не соберётся. - В используемой сборке libsodium нет
crypto_pwhash, поэтому ключ из пароля получается через pbkdf2 (SHA-512). - Импорты
services/пишутся полным путём:src/services/wallet.
Проект ещё в разработке, и список того, что предстоит сделать, живёт в
docs/TODO.md. Там — результаты аудита, задачи по приоритетам, отдельное
видение дизайна и техническое задание. Если хотите помочь проекту или понять, куда он движется,
начните с этого файла.
Ближайшие важные направления:
- Безопасность: скрыть сид-фразу и приватный ключ на странице профиля, валидировать отправку транзакций, защитить маршруты, требующие входа, и добавить блокировку кошелька.
- Надёжность: корректно грузить баланс и историю после входа, показывать состояния загрузки/ошибки/пусто, вычистить отладочный код и дубли.
- Дизайн: единая визуальная система и айдентика вокруг исторической буквы «ѣ» — палитра «цифровой пергамент» (индиго, золото, кремовый), аккуратный онбординг и читаемая лента транзакций.
- Инфраструктура: CI с линтом, сборкой и e2e; экспорт/импорт зашифрованного бэкапа кошелька; экран контактов.