Skip to content
yatledgerPublic

About

PWA

Resources

Stars

8 stars

Watchers

2 watching

Forks

Repository files navigation

Ять — веб-кошелёк

Клиентская часть платформы Ять (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; экспорт/импорт зашифрованного бэкапа кошелька; экран контактов.

About

PWA

Resources

Stars

8 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages