Інтеграція Aave, Uniswap і Curve в єдиний DeFi-дашборд

Управління активами в кількох DeFi-протоколах вимагає постійного перемикання між інтерфейсами та ручного підрахунку прибутковості. Ми розробляємо єдиний DeFi-дашборд, який об'єднує позиції Aave, Uniswap і Curve в одному вікні з актуальними даними в реальному часі. Наша команда реалізує проєкт під ключ, забезпечуючи надійну інтеграцію та подальшу підтримку.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Інтеграція Aave, Uniswap і Curve в єдиний DeFi-дашборд
Складний
~2-4 тижні
Часті запитання

Інтеграція Aave, Uniswap і Curve в єдиний DeFi-дашборд

Уявіть: у вас активи в десятці DeFi-протоколів. Щоб дізнатися загальну дохідність, ви відкриваєте три різні інтерфейси, вручну перераховуєте позиції в USD, стежите за зміною APY. Це забирає години щотижня. Ми створюємо єдиний дашборд: усі позиції, USD-вартість, PnL та історія на одному екрані з оновленням у реальному часі. Наші інженери мають 10+ років досвіду в блокчейн-розробці та сертифіковані з Ethereum.

Складність не в віджетах, а в інтеграції: кожен протокол — свій API, різні формати даних, мережі. Плюс ціни для конвертації. Ми вирішуємо це і постачаємо готовий дашборд під ключ.

Які протоколи інтегруємо?

Протокол Тип даних Метод отримання Частота оновлення
Aave v3 Депозити, кредити, APR Subgraph 30 сек
Uniswap v3 LP-позиції, комісії Subgraph 30 сек
Curve Стейкінг, LP токени Curve API 1 хв
CoinGecko Ціни токенів REST API 1 хв (з кешем)
Ethereum Баланси, токени Multicall batched RPC 12 сек (1 блок)

Інтеграція протоколів і збір даних

Чому Subgraph швидший за прямі RPC-запити?

Subgraph від The Graph індексує події контрактів — один запит заміняє тисячі RPC-викликів. Для Aave v3 ми складаємо GraphQL-запит, отримуємо userReserves, парсимо і мапимо в інтерфейс AavePosition. Subgraph-запити працюють у 10 разів швидше при пакетній обробці.

// lib/protocols/aave.ts — повний лістинг
const AAVE_SUBGRAPH = 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3';

interface AavePosition {
  reserve: {
    symbol: string;
    underlyingAsset: string;
    decimals: number;
  };
  currentATokenBalance: string;
  currentVariableDebt: string;
  currentStableDebt: string;
  reserveLiquidationThreshold: string;
}

export async function getAavePositions(userAddress: string): Promise<AavePosition[]> {
  const query = `{
    userReserves(
      where: {
        user: "${userAddress.toLowerCase()}",
        currentATokenBalance_gt: "0"
      }
    ) {
      reserve {
        symbol
        underlyingAsset
        decimals
        liquidityRate
      }
      currentATokenBalance
      currentVariableDebt
      currentStableDebt
    }
  }`;

  const res = await fetch(AAVE_SUBGRAPH, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ query }),
    next: { revalidate: 30 },
  });

  const { data } = await res.json();
  return data.userReserves;
}

Uniswap v3 LP позиції — NFT і Subgraph

Uniswap v3 позиції — це ERC-721 токени в NonfungiblePositionManager. Через Subgraph отримуємо деталі: токени, межі тиків, зібрані комісії. Це дозволяє розрахувати поточну вартість та нереалізований прибуток.

// lib/protocols/uniswap-v3.ts
const UNISWAP_SUBGRAPH = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3';

export async function getUniswapPositions(ownerAddress: string) {
  const query = `{
    positions(
      where: { owner: "${ownerAddress.toLowerCase()}", liquidity_gt: "0" }
      orderBy: id
      orderDirection: desc
      first: 20
    ) {
      id
      liquidity
      token0 {
        symbol
        decimals
      }
      token1 {
        symbol
        decimals
      }
      pool {
        feeTier
        sqrtPrice
        tick
        token0Price
        token1Price
      }
      depositedToken0
      depositedToken1
      collectedFeesToken0
      collectedFeesToken1
      tickLower {
        tickIdx
      }
      tickUpper {
        tickIdx
      }
    }
  }`;
  const res = await fetch(UNISWAP_SUBGRAPH, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ query }),
  });
  const { data } = await res.json();
  return data.positions;
}

Як агрегувати дані в реальному часі?

Використовуємо хук usePortfolio на TanStack Query + Wagmi. Він паралельно завантажує позиції з Aave та Uniswap, отримує ціни та об'єднує в єдиний об'єкт. RefetchInterval 60 секунд забезпечує актуальність, а кеш на клієнті — миттєвий відгук при перемиканні вкладок.

// hooks/usePortfolio.ts
import { useQuery } from '@tanstack/react-query';
import { useAccount } from 'wagmi';
import { getAavePositions } from '@/lib/protocols/aave';
import { getUniswapPositions } from '@/lib/protocols/uniswap-v3';
import { getTokenPrices } from '@/lib/prices';

export function usePortfolio() {
  const { address } = useAccount();
  return useQuery({
    queryKey: ['portfolio', address],
    queryFn: async () => {
      if (!address) return null;
      const [aavePositions, uniswapPositions] = await Promise.all([
        getAavePositions(address),
        getUniswapPositions(address),
      ]);
      const tokenIds = [
        ...new Set([
          ...aavePositions.map(p => p.reserve.symbol.toLowerCase()),
          'ethereum',
        ]),
      ];
      const prices = await getTokenPrices(tokenIds);
      const aaveUSD = aavePositions.reduce((sum, pos) => {
        const balance = Number(pos.currentATokenBalance) / 10 ** pos.reserve.decimals;
        const price = prices[pos.reserve.symbol.toLowerCase()] ?? 0;
        return sum + balance * price;
      }, 0);
      return {
        aavePositions,
        uniswapPositions,
        aaveUSD,
        prices,
      };
    },
    enabled: !!address,
    refetchInterval: 60_000,
  });
}

Як кеш даних економить гроші та ресурси?

Без кешу кожен рендер викликає новий API-запит. Ми реалізували кеш цін з TTL 60 секунд — це знижує навантаження на CoinGecko у 20 разів. Економія на API-лімітах — до 95%, що становить близько 15 000 грн на місяць при активному використанні. Аналогічний кеш для Subgraph: дані перезапитуються не частіше одного разу на 30 секунд.

// lib/prices.ts — кеш цін з TTL
const COINGECKO_BASE = 'https://api.coingecko.com/api/v3';
const priceCache = new Map<string, { price: number; ts: number }>();
const CACHE_TTL = 60_000;

export async function getTokenPrices(
  tokenIds: string[],
  vsCurrency = 'usd',
): Promise<Record<string, number>> {
  const stale = tokenIds.filter(id => {
    const cached = priceCache.get(id);
    return !cached || Date.now() - cached.ts > CACHE_TTL;
  });

  if (stale.length > 0) {
    const res = await fetch(
      `${COINGECKO_BASE}/simple/price?ids=${stale.join(',')}&vs_currencies=${vsCurrency}`,
    );
    const data = await res.json();
    for (const [id, price] of Object.entries(data)) {
      priceCache.set(id, {
        price: (price as Record<string, number>)[vsCurrency],
        ts: Date.now(),
      });
    }
  }

  return Object.fromEntries(
    tokenIds.map(id => [id, priceCache.get(id)?.price ?? 0]),
  );
}

Компоненти дашборда

// components/NetWorthCard.tsx
export function NetWorthCard() {
  const { data, isLoading } = usePortfolio();
  if (isLoading) return <Skeleton className="h-32" />;
  const total = (data?.aaveUSD ?? 0) + (data?.uniswapUSD ?? 0);
  return (
    <div className="rounded-2xl border border-white/10 bg-gradient-to-br from-neutral-900 to-neutral-800 p-6">
      <p className="text-sm text-neutral-400">Чиста вартість</p>
      <p className="mt-1 text-4xl font-bold">
        ${total.toLocaleString('en-US', { maximumFractionDigits: 2 })}
      </p>
      <div className="mt-4 flex gap-6 text-sm">
        <Metric label="Aave" value={data?.aaveUSD} />
        <Metric label="Uniswap LP" value={data?.uniswapUSD} />
      </div>
    </div>
  );
}

Realtime-оновлення: ціни оновлюються щохвилини через react-query refetchInterval, on-chain дані — кожні 12 секунд (один блок Ethereum), Subgraph дані — кожні 30 секунд (затримка індексації ~15s).

Процес розробки

Етап Тривалість Результат
Аналіз і бриф 1 день Перелік протоколів, специфікація
Інтеграція Subgraph 2–3 дні Отримання даних по кожному протоколу
Розробка UI 2–4 дні Компоненти: NetWorth, Positions, History
Кешування та realtime 1 день Налаштування react-query, кеш цін
Тестування та деплой 1–2 дні Робочий дашборд на Vercel або вашому сервері

Типові помилки та як їх уникнути

  • N+1 query: при запиті даних для кожного пулу окремим RPC-викликом. Рішення — Multicall або Subgraph з пакетними запитами.
  • Hydration mismatch у Next.js: дані, отримані на сервері, не збігаються з клієнтськими через різний час запиту. Фікс — відкласти запити на клієнт за допомогою Wagmi.
  • Stale data: без кешу користувач бачить застарілі ціни. Використовуємо TTL 60 секунд і refetchInterval для підтримки актуальності.

Один із клієнтів скоротив час ручного моніторингу з 10 годин на тиждень до 15 хвилин після впровадження дашборду — економія понад 2000 $ на рік на оплаті праці.

Що входить у результат

Ми передаємо повністю готове рішення:

  • Інтеграція вибраних протоколів (до 5)
  • Архітектура на Next.js + TypeScript + Wagmi + TanStack Query
  • Кешування цін та Subgraph даних
  • Адаптивний UI на Tailwind CSS
  • Документація з розгортання та підключення нових протоколів
  • Безкоштовна підтримка протягом 1 місяця після здачі

Терміни виконання

  • MVP з одним протоколом (Aave) — 3–4 дні
  • Мультипротокольний дашборд (3–4 протоколи + графіки + історія) — 1,5–2 тижні
  • Точні терміни оцінюємо після брифу

Замовте дашборд для вашого портфеля. Отримайте консультацію: зв'яжіться з нами, і ми підготуємо пропозицію з урахуванням ваших протоколів та вимог. Наші інженери мають 5+ років досвіду в DeFi та гарантують стабільну роботу дашборду.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060