Приоритетная фича 1. Мультикошелёк: балансы и транзакции в одном дашборде
Зарегистрированный пользователь подключает к кабинету любое количество своих крипто-кошельков и видит по ним остатки и историю транзакций — в разрезе кошельков и в разрезе криптовалют по всем кошелькам сразу. Всё собрано в функциональный дашборд с фильтрами и несколькими видами. Это первая из двух приоритетных фич личного кабинета theunum.io.
1. Ценность и место в продукте#
Кабинет перестаёт быть «витриной новостей с настройками» и становится местом, где пользователь видит своё реальное состояние. Это база для всего остального: персональная лента, алерты и AI-ассистент (приоритетная фича 2) получают контекст «чем человек на самом деле владеет», а не абстрактный вотчлист. Портфель ручного ввода из ранних концепций не отменяется — подключённые кошельки становятся его автоматическим источником, ручной ввод остаётся для CEX-балансов и внебиржевых активов.
Ключевая рамка: только чтение. Кабинет никогда не запрашивает приватные ключи и сид-фразы, не подписывает транзакции и не выводит средства. Подключить кошелёк = сообщить кабинету публичный адрес. Это резко снижает и техническую сложность, и регуляторный риск, и барьер доверия у пользователя.
2. Подключение кошельков#
Три способа добавить кошелёк, от простого к точному:
- Вставить адрес. Пользователь копирует публичный адрес (EVM 0x…, BTC, SOL, TRON, TON), кабинет определяет сеть автоматически или уточняет. Работает для любого кошелька, включая аппаратные и чужие watch-only адреса.
- WalletConnect / браузерное расширение. Подключение через WalletConnect v2 или инжектированный провайдер (MetaMask и совместимые) — адрес подтягивается сам, меньше ошибок копирования. Запрашивается только адрес, никаких подписей транзакций.
- Подтверждение владения (опционально). Бесплатная подпись сообщения (personal_sign) помечает кошелёк как «верифицированный». Для просмотра балансов не требуется; нужна как основа будущих фич, где важно доказанное владение (закрытые разделы, персональные лимиты, соцфункции).
Пользовательские атрибуты кошелька: собственное имя («Холодный Ledger», «Трейдинг»), цвет/иконка, флаг «скрыть из общей сводки». Кошельков — сколько угодно; мягкий лимит (например, 50) только против абьюза.
Сети на старте: Ethereum + основные EVM L2 (Arbitrum, Base, Optimism, BSC, Polygon), Bitcoin, Solana, TRON. Этот набор покрывает подавляющую долю розничных портфелей. TON и прочие — следующей волной, архитектура должна позволять добавлять сеть конфигом, а не переписыванием.
3. Данные: откуда берутся балансы и транзакции#
Собственные индексаторы блокчейнов не строим — это отдельный бизнес. Но и платный агрегатор (Covalent, Moralis, Zerion, Alchemy) не обязателен: он покупает лишь удобство — один API на все сети с уже размеченными транзакциями. MVP собирается целиком на бесплатных источниках, по адаптеру на семейство сетей:
- EVM-сети. Etherscan V2 API: один бесплатный ключ покрывает Ethereum, Arbitrum, Base, Optimism, BSC, Polygon и десятки других сетей — нативные балансы и полная история переводов токенов. Текущие балансы ERC-20 выводятся из истории трансферов и точечно сверяются
balanceOf-запросами через публичные RPC (PublicNode, LlamaNodes, Ankr). Лимитов бесплатного тарифа (~5 запросов/сек, 100 тыс./день) при фоновой очереди синхронизации хватает на тысячи кошельков. - Bitcoin. mempool.space / Blockstream API — бесплатно, без ключа: баланс и история адреса.
- Solana. Публичный RPC:
getTokenAccountsByOwnerотдаёт все SPL-балансы одним запросом, история —getSignaturesForAddress+ разбор транзакций; если публичного RPC перестанет хватать — бесплатный тариф Helius. - TRON. TronGrid (бесплатный ключ) либо открытый API Tronscan.
Цена подхода — не деньги, а инженерное время: вместо одного унифицированного API — четыре адаптера; разметку типов транзакций (перевод, свап, комиссия) делаем сами (свап определяется группировкой трансферов внутри одного хэша); под rate-лимиты нужна аккуратная очередь с приоритетами. Компенсируется это тем, что тяжёлая работа одноразовая: история кошелька грузится при подключении и кэшируется в своём Postgres, дальше — только инкременты. Слой нормализации проектируем так, чтобы платный агрегатор можно было подключить позже как ещё один взаимозаменяемый источник — если рост аудитории упрётся в бесплатные лимиты, это решается деньгами в любой момент, а не переписыванием.
Схема работы:
- Синхронизация по расписанию + по требованию. Фоновый воркер обновляет балансы раз в N минут (активные пользователи чаще), полная история транзакций подтягивается один раз при добавлении кошелька и дальше инкрементально. Открытие дашборда триггерит внеочередное обновление, но UI сразу показывает кэш с пометкой «обновлено X мин назад» — никаких белых экранов в ожидании чужого API.
- Единая модель транзакции. Всё нормализуется в один формат: время, сеть, кошелёк, тип (получение, отправка, свап, комиссия, контрактное взаимодействие), актив(ы), количество, контрагент, хэш со ссылкой на эксплорер. Это фундамент фильтров и будущего PnL.
- Цены — из уже имеющейся базы CoinGecko. Котировки уже лежат в Postgres (используются AI-ассистентом). Балансы оцениваются в USD (и RUB/EUR по выбору) по этим же данным — один источник цен на весь продукт, дашборд и ассистент не расходятся в цифрах.
- Хранение. Балансы и транзакции кэшируются в своём Postgres. Это и скорость, и независимость от лимитов провайдера, и данные для графика стоимости портфеля во времени (снэпшоты стоимости раз в сутки с момента подключения).
4. Дашборд: виды и фильтры#
Один экран «Портфель» с переключаемыми видами, а не набор разрозненных страниц.
Сводка (верхняя полоса). Суммарная стоимость всех кошельков, изменение за 24ч/7д/30д, число кошельков и активов. Кнопка-глаз «скрыть суммы» (режим для публичных мест).
Вид «По криптовалютам» — основной. Таблица активов, агрегированных по всем подключённым кошелькам: актив, суммарное количество, цена, стоимость, доля портфеля, изменение за период, мини-спарклайн. Раскрытие строки показывает разбивку: в каких кошельках и сетях лежит этот актив. Пыль (< $1) сворачивается в одну строку «прочее».
Вид «По кошелькам». Карточки или таблица кошельков: имя, сети, стоимость, изменение, топ-активы. Клик — экран кошелька с его активами и его транзакциями.
Распределение. Донат/трипмэп по активам и по сетям — структура портфеля с первого взгляда.
История стоимости. График суммарной стоимости портфеля во времени (с момента подключения кошельков; ретроспективу до подключения не обещаем — честнее и на порядок дешевле).
Транзакции. Единая лента по всем кошелькам с фильтрами: кошелёк, сеть, актив, тип операции, период, поиск по хэшу/адресу. Каждая строка — ссылка на эксплорер. Экспорт выборки в CSV.
Все фильтры (набор кошельков, период, валюта отображения) действуют глобально на все виды и сохраняются между сессиями. Мобильная вёрстка обязательна: портфель смотрят с телефона.
5. Этапность#
MVP: добавление кошельков адресом и через WalletConnect, EVM-набор + Bitcoin + Solana + TRON, балансы, агрегированный вид по активам, вид по кошелькам, лента транзакций с фильтрами, оценка в USD, кэш и фоновая синхронизация.
Волна 2: график истории стоимости, распределение, CSV-экспорт, верификация владения подписью, RUB/EUR, TON и добавление сетей по запросам пользователей.
Сознательно не в первом контуре: PnL и средняя цена входа (требует надёжной истории цен на момент каждой транзакции — делать после стабилизации модели транзакций), DeFi-позиции (стейкинг, LP, lending), NFT, налоговые отчёты, интеграция CEX по API-ключам. Каждый из пунктов — отдельная фича со своей ценой; тащить их в первый релиз — верный способ его не выпустить.
6. Риски и как их гасим#
- Ненадёжность бесплатных источников. Rate-лимиты, троттлинг, смена условий. Гасится архитектурой: история грузится один раз в свой Postgres, при недоступности источника показываем кэш с честной пометкой возраста данных; для каждого семейства сетей держим запасной бесплатный источник (Etherscan ↔ RPC, mempool.space ↔ Blockstream), а платный агрегатор остаётся планом Б, включаемым без переписывания.
- Рост аудитории упирается в лимиты. Кэшируем агрессивно, частоту обновления привязываем к активности пользователя, тяжёлую историю грузим один раз. Мониторим расход квот как штатную метрику; порог, при котором дешевле заплатить агрегатору, известен заранее, а не обнаруживается аварией.
- Мусорные токены и скам-эйрдропы. В EVM-кошельках их десятки. Свой фильтр: белые списки токенов (CoinGecko-база уже есть), эвристики по ликвидности, открытые спам-списки; спам скрыт по умолчанию с возможностью показать.
- Приватность. Адреса кошельков — чувствительные данные: шифрование в базе, никакой передачи третьим лицам кроме запросов данных, удаление кошелька = удаление его данных. Явно проговорить в интерфейсе, что кабинет не имеет доступа к средствам.
7. Метрики успеха#
Доля зарегистрированных, подключивших ≥1 кошелёк; медианное число кошельков на пользователя; возвраты в дашборд (DAU/WAU по экрану портфеля); доля сессий с использованием фильтров/переключением видов; время от регистрации до первого подключённого кошелька.