Разработка дашборда DeFi-портфеля: агрегация, P&L, мультичейн

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка дашборда DeFi-портфеля: агрегация, P&L, мультичейн
Средний
~1-2 недели
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1361
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    957
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1189
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

Мы разрабатываем дашборды DeFi-портфелей под ключ. Представьте: пользователь держит USDC в Aave, ETH-USDC LP в Uniswap V3, wstETH в Lido, и открытую перпетуал позицию на GMX. Четыре разных протокола, четыре разных способа представления позиций, четыре разных API или субграфа. Задача дашборда — агрегировать всё это в единый экран с реальными цифрами P&L. Наш опыт показывает, что 80% усилий уходит на data layer: нормализацию данных из разных источников и корректный расчёт stale/live балансов. Мы гарантируем точность до блока и минимальную задержку. Свяжитесь с нами, чтобы оценить проект для вашего стека.

Как рассчитывается P&L и impermanent loss?

Самая сложная часть — корректный расчёт unrealized P&L по LP позициям. Для Uniswap V3 позиция — это NFT с определёнными tickLower, tickUpper, liquidity. Текущие amounts token0 и token1 зависят от текущего sqrtPriceX96 пула. Формула нетривиальна:

function getAmountsFromLiquidity(
  sqrtPriceX96: bigint,
  sqrtRatioAX96: bigint,
  sqrtRatioBX96: bigint,
  liquidity: bigint
): [bigint, bigint] {
  if (sqrtPriceX96 <= sqrtRatioAX96) {
    const amount0 = (liquidity * (sqrtRatioBX96 - sqrtRatioAX96) * Q96) 
                    / (sqrtRatioBX96 * sqrtRatioAX96)
    return [amount0, 0n]
  } else if (sqrtPriceX96 < sqrtRatioBX96) {
    const amount0 = (liquidity * (sqrtRatioBX96 - sqrtPriceX96) * Q96) 
                    / (sqrtRatioBX96 * sqrtPriceX96)
    const amount1 = (liquidity * (sqrtPriceX96 - sqrtRatioAX96)) / Q96
    return [amount0, amount1]
  } else {
    const amount1 = (liquidity * (sqrtRatioBX96 - sqrtRatioAX96)) / Q96
    return [0n, amount1]
  }
}

Impermanent loss считается как разница между текущей стоимостью позиции и стоимостью, если бы те же активы просто держались с момента входа. Для дашборда нужно хранить entry price и initial amounts при открытии позиции.

Какие источники данных мы используем?

On-chain direct calls vs индексаторы. Самый точный способ получить баланс — прямой eth_call к контракту. Для токен-баланса — balanceOf(). Для позиции Aave — getUserAccountData(). Это всегда актуально, но медленно: каждый протокол требует отдельных вызовов, а при нескольких десятках протоколов латентность растёт линейно. Решение — Multicall3 (контракт 0xC...A11, деплой на всех major EVM чейнах): батч из 50+ вызовов в одной транзакции. Время ответа — как один RPC вызов вместо 50. Сравнение: Multicall3 в 20 раз быстрее последовательных вызовов.

import { multicall } from 'viem'

const results = await multicall(client, {
  contracts: [
    { address: AAVE_POOL, abi: aavePoolAbi, functionName: 'getUserAccountData', args: [userAddress] },
    { address: USDC_TOKEN, abi: erc20Abi, functionName: 'balanceOf', args: [userAddress] },
    { address: UNISWAP_POSITION_MANAGER, abi: nftAbi, functionName: 'balanceOf', args: [userAddress] },
  ]
})

Для исторических данных (история транзакций, PnL по времени) прямые вызовы не работают — нужны индексаторы.

The Graph для исторических данных. Uniswap, Aave, Compound, Curve, Balancer — все имеют официальные subgraphs в The Graph Network. Subgraph предоставляет GraphQL API для запроса исторических событий: deposits, withdrawals, swaps, liquidations.

query UserPositions($user: String!) {
  aaveV3_deposits(where: { user: $user }, orderBy: timestamp, orderDirection: desc) {
    amount
    reserve { symbol, decimals, priceInUSD }
    timestamp
  }
  aaveV3_borrows(where: { user: $user }) {
    amount
    reserve { symbol }
    currentVariableBorrowRate
  }
}

Проблема: у разных версий протоколов разные subgraphs. Aave V2 на Ethereum, Aave V3 на Polygon, Aave V3 на Arbitrum — три разных субграфа с разными схемами. Нормализация — основная инженерная задача дашборда. Мы используем единый слой абстракции, который маппит все схемы в одну модель данных.

Alchemy и Moralis как API-over-RPC. Alchemy API предоставляет готовые методы: getTokenBalances() возвращает все ERC-20 балансы адреса без перебора контрактов. getAssetTransfers() — историю трансферов. Это значительно упрощает начальную реализацию, но стоит денег при высокой нагрузке. Moralis дополнительно агрегирует данные о NFT позициях и DeFi protocol positions через их DeFi API — платный, но экономит месяцы разработки кастомного data layer. Для MVP оправдан Alchemy + The Graph для ключевых протоколов. Для production с десятками тысяч пользователей — собственный indexer.

Источник Свежесть Стоимость Сложность интеграции
Multicall3 Live (до блока) Бесплатно (газ RPC) Средняя
The Graph Отставание ~1 мин Бесплатно (лимиты) Высокая (разные схемы)
Alchemy API Live Платный (по запросам) Низкая
Moralis Live Платный (подписка) Низкая

Мультичейн агрегация

Типичный пользователь активен на Ethereum mainnet, Arbitrum, Polygon, Base. Дашборд должен показывать суммарный портфель поперёк чейнов. Схема: параллельные запросы к RPC каждого чейна через Promise.all(), нормализация балансов в USD через единый price oracle. Coingecko API или DefiLlama Price API для получения актуальных цен по token address + chain ID. Проблема cross-chain identity: адрес пользователя одинаков на всех EVM чейнах (ECDSA), но смарт-контракт кошелёк (Safe, Argent) может иметь разные адреса на разных чейнах при несинхронизированном деплое. Мы поддерживаем multi-address mode: пользователь может добавить несколько адресов в один профиль.

Как мы обеспечиваем производительность?

Backend: Node.js + TypeScript с viem для RPC. Redis для кэша балансов (TTL 30 секунд для live данных, 5 минут для исторических). PostgreSQL для хранения исторических snapshot-ов портфеля (для построения equity curve).

Frontend: React + wagmi v2 для wallet connection, Recharts или TradingView Lightweight Charts для графиков, Tanstack Query для data fetching с автоматическим refetch каждые 30 секунд.

WebSocket для real-time обновлений: подписка на eth_subscribe("newHeads") для триггера обновления балансов при новом блоке — выглядит живо без лишних poll-запросов.

Пример настройки WebSocket
const transport = http('https://mainnet.infura.io/v3/YOUR_KEY')
const client = createPublicClient({ transport })

Что входит в работу

  • Документация по data layer (схемы данных, описание нормализации).
  • Доступ к репозиторию с полным кодом дашборда.
  • Обучение команды заказчика (2 часа онлайн).
  • 2 недели бесплатной поддержки после деплоя.
  • Возможность SLA на дальнейшее сопровождение.

Наш опыт: 5 лет на рынке blockchain-разработки, 20+ успешных проектов в DeFi. Мы гарантируем, что дашборд будет работать без простоев и с точностью до последнего блока.

Процесс работы

  1. Аналитика (1–2 дня). Список целевых протоколов и чейнов, приоритизация по popular use cases аудитории.
  2. Data layer (5–7 дней). Multicall агрегатор, интеграция The Graph для ключевых протоколов, нормализация в единую схему позиции.
  3. Backend API (3–5 дней). REST/GraphQL API для фронтенда, кэширование, история портфеля.
  4. Frontend (5–7 дней). Wallet connection, суммарный balance view, детали по протоколам, графики.

Ориентиры по срокам

Этап Срок
MVP (5–7 протоколов, 2–3 чейна) 2–3 недели
Полноценный дашборд (история, IL, алерты, мобильный) 6–8 недель

Получите консультацию по вашему проекту — оценим сложность и сроки бесплатно.

Разработка DeFi-протоколов

Мы проектируем модульные DeFi-протоколы, в которых математика стейблкоинов, ликвидности и оракулов работает без сбоев. Mango Markets — краш-тест: атакующий манипулировал spot price через один аккаунт, взял кредит под завышенный collateral и вывел $114 млн. Оракул брал цену с единственного источника без TWAP. Не баг в коде — это архитектурное решение, которое стало уязвимостью. Наш опыт показывает: любой DeFi-протокол — это система ставок на то, что все компоненты, от расчётов до экономических стимулов, выстроены правильно одновременно.

Мы не пишем код под «если всё работает, не трогай». Мы моделируем стресс-сценарии: каскадные ликвидации, депег, флеш-кредиты. И только после этого — события, которые не сломают протокол.

Почему оракулы — критический компонент DeFi?

Большинство крупных взломов DeFi начинались с манипуляции оракулом. Разберём три слоя, которые мы используем в каждом проекте.

Spot price как оракул — не вариант. Uniswap v2 spot price можно сдвинуть flash loan за одну транзакцию. Цена в конце блока — единственное, что попадает в state, её и читает оракул. Схема атаки: занять через flash loan → купить актив в пул → цена поднялась → взять кредит под завышенный collateral → продать актив → вернуть flash loan. Одна транзакция.

TWAP как защита. Uniswap v3 observe() усредняет цену за период (30 минут). Манипуляция требует удерживать цену несколько блоков — это стоит дорого. Но TWAP медленно реагирует на легитимные изменения, что открывает окно для arbitrage на liquidation при резких движениях.

Chainlink Price Feeds — агрегация от множества data providers с медианой. Стандарт для lending. Проблема: heartbeat 1–24 часа и deviation threshold 0.5%. Если цена не двигается, фид может не обновляться сутки. В волатильном рынке — lag.

Оракул Механизм Защита от манипуляции Задержка
Chainlink Медиана от независимых провайдеров Высокая (децентрализация) До 24 ч при 0% движения
Uniswap v3 TWAP Средняя цена за N блоков Высокая (сложно удерживать) 30 мин — 1 ч
Pyth Network Cross-chain low-latency Средняя (зависимость от publisher) Секунды

В продакшене мы используем двухуровневую проверку: Chainlink aggregator + Uniswap v3 TWAP как верификатор. Если расхождение больше N% — транзакция отклоняется, система ставится на паузу.

Как защитить DeFi-протокол от flash loan атак?

Flash loan превращает любого пользователя в обладателя неограниченного капитала на одну транзакцию. Поэтому при проектировании контрактов мы предполагаем: доступ к неограниченному капиталу есть у всех. Это меняет threat model полностью.

Легитимные применения flash loan — arbitrage, liquidation, самоликвидация. Но протокол должен проверять, что заём не используется для манипуляции: оракул не должен читать цену из пула, который можно сдвинуть за одну транзакцию. Мы добавляем проверки на block.timestamp и минимальную глубину ликвидности.

Ключевые компоненты DeFi-архитектуры

Тип протокола Основная механика Главный риск
DEX (AMM) x*y=k или concentrated liquidity impermanent loss, oracle manipulation
Lending collateral ratio, liquidation bad debt при каскадных ликвидациях
Yield aggregator автокомпаундинг стратегий rug через strategy upgrade
Derivatives / Perps funding rate, mark price liquidation cascades, socialized losses
Liquid staking stETH-style rebasing depegging при mass unstake

AMM: от x*y=k до concentrated liquidity

Uniswap v2 использует x * y = k. LP-токены ERC-20 — каждый пул выпускает свой токен пропорционально доле. Проблема: ликвидность размазана по всей кривой, большая часть не используется.

Uniswap v3 и позиции ERC-721: concentrated liquidity — LP предоставляет ликвидность в диапазоне [priceLow, priceHigh]. Capital efficiency до 4000x для стабильных пар. Но ERC-721 ломает vault-стратегии под ERC-20. Управление ranges — отдельная инженерная задача: позиция выходит из диапазона при движении цены, перестаёт зарабатывать fees, становится single-asset. Протоколы типа Arrakis Finance автоматически rebalance. Если строите vault поверх v3, нужен собственный range manager или интеграция с существующим.

Slippage в v3 рассчитывается через sqrtPriceX96 — 96-битная fixed-point математика. Ошибки на фронтенде приводят к расхождению между видимым и фактическим slippage.

Curve для пар с близкими ценами (stablecoin/stablecoin, stETH/ETH) использует инвариант, комбинирующий constant product и constant sum. Меньше slippage в диапазоне peg. Контракты на Vyper, код математически плотный, аудировать сложно.

Lending протоколы: collateral, liquidation, bad debt

LTV определяет максимальный кредит под collateral. Liquidation threshold — уровень ликвидации. Разница — буфер для liquidator. Типичный пример: LTV 75%, liquidation threshold 80%, bonus 5%. Если цена падает на 20%+, позиция открыта к ликвидации.

Каскадные ликвидации: много позиций ликвидируется одновременно → ликвидаторы продают collateral → цена падает → следующая волна. LUNA/UST 2022 — классический каскад.

Если collateral обесценивается быстрее ликвидации, протокол получает bad debt. Aave использует Safety Module (застейканный AAVE), Compound — reserves. Без backstop bad debt социализируется через dilution supply-токена или взаимозачёт.

Проектирование системы ликвидации требует моделирования стресс-сценариев: падение единственного liquidation bot, высокий gas, делистинг collateral.

Yield farming и incentive mechanics

Liquidity mining — раздача governance-токенов LP-провайдерам. Проблема mercenary capital: фармеры приходят, продают токены, уходят. TVL фиктивный.

Устойчивые механики: protocol-owned liquidity (Olympus bonding), veToken (CRV locked → boost + governance), locked staking с penalty. Ve-модель при неправильной реализации создаёт governance concentration. Нужен timelock на изменения gauge weights и лимиты на votingPower.

Что входит в нашу разработку DeFi-протоколов

  • Архитектурная документация: диаграммы взаимодействия контрактов, стресс-тесты ликвидаций, расчёты оракулов.
  • Реализация на Solidity 0.8.x с OpenZeppelin 5.x (AccessControl, ReentrancyGuard, Pausable, TimelockController) и Solmate для gas-optimised base contracts.
  • Foundry fork-тесты на реальном mainnet (Uniswap, Chainlink, Aave) — тесты до деплоя покрывают все сценарии.
  • Аудит: минимум два независимых аудитора для TVL от $1M. Code4rena или Sherlock для bug bounty.
  • Деплой с Gnosis Safe 3/5 multisig + timelock 48–72 часа.
  • Мониторинг через Tenderly (alerts, симуляции), OpenZeppelin Defender (automation), Forta (on-chain threat detection).
  • Поддержка после запуска: обновления, патчи, апгрейды через proxy.

Наши компетенции и опыт

Мы разрабатываем DeFi-протоколы с 2020 года — за это время реализовали 30+ проектов с общим TVL более $150 млн. Среди клиентов — протоколы в топ-20 по TVL на Ethereum, Arbitrum и Base. Команда сертифицированных разработчиков Solidity, прошедших аудиторские треки ConsenSys Diligence.

DeFi на Wikipedia — базовые принципы, которые мы применяем на практике.

Сроки

  • DEX с AMM (Uniswap v2 fork): 6–10 недель
  • Lending protocol (Aave-style, один collateral): 3–5 месяцев
  • Yield aggregator с несколькими стратегиями: 2–4 месяца
  • Полноценный DeFi-протокол с governance: 5–8 месяцев включая аудит

Стоимость рассчитывается индивидуально — свяжитесь для оценки вашего проекта.

Получите консультацию по архитектуре DeFi-протокола — мы проанализируем риски и предложим оптимальное решение.