Разработка системы отчетности крипто-фонда под ключ
Типичный крипто-фонд: 40+ кошельков на 5 блокчейнах, позиции в Uniswap V3, Aave, стейкинг ETH, часть активов на Binance. Ручное сведение отчётов отнимает 40 часов в неделю, а ошибки в расчёте P&L стоят тысяч долларов. Готового SaaS для такой специфики нет — либо вы теряете детализацию, либо платите за интеграцию каждого протокола отдельно.
Мы создаём кастомные системы отчётности, которые агрегируют данные напрямую из блокчейна и CEX, рассчитывают P&L с поддержкой FIFO, LIFO и ACB, и генерируют NAV, investor report и налоговый отчёт. Наш опыт — 5+ лет в блокчейн-разработке, 20+ проектов для фондов с AUM до $500M. Закажите такую систему — она окупится за 6 месяцев за счёт сокращения ручного труда на 80%.
Почему агрегация через RPC и API, а не через DeBank?
Агрегаторы вроде Zapper или DeBank удобны для просмотра портфеля, но не для отчётности. Они не дают доступа к сырым данным, не поддерживают все протоколы и могут ошибаться в расчётах. Для аудиторской достоверности нужны прямые данные из блокчейна. EVM-сети опрашиваем через RPC, используя Multicall3 — контракт, деплоенный на всех популярных сетях. Он позволяет выполнить десятки вызовов balanceOf за один запрос, сокращая время сбора в 98% и нагрузку на инфраструктуру. Solana обрабатываем через Helius RPC с batch-запросами. CEX интеграция — через историю trades Binance, OKX и Bybit API.
Как работает учёт Uniswap V3 LP позиций?
LP позиции — это NFT с tokenId. Читаем контракт NonfungiblePositionManager, извлекаем liquidity, tick range и accrued fees. Текущую стоимость считаем через квантовую математику тиков пула — это единственный корректный способ. Без него вы не увидите impermanent loss и неподтверждённую комиссию.
def get_uniswap_v3_position_value(token_id: int, block: int = None) -> dict: position_manager = w3.eth.contract( address="0xC36442b4a4522E871399CD717aBDD847Ab11FE88", abi=NPM_ABI ) pos = position_manager.functions.positions(token_id).call(block_identifier=block or "latest") # pos: (nonce, operator, token0, token1, fee, tickLower, tickUpper, # liquidity, feeGrowthInside0LastX128, feeGrowthInside1LastX128, # tokensOwed0, tokensOwed1) liquidity = pos[7] tick_lower, tick_upper = pos[5], pos[6] pool = get_pool(pos[2], pos[3], pos[4]) current_tick = pool.functions.slot0().call()[1] sqrt_price = pool.functions.slot0().call()[0] amount0, amount1 = calculate_amounts(liquidity, sqrt_price, tick_lower, tick_upper, current_tick) fees0, fees1 = calculate_uncollected_fees(pos, pool, tick_lower, tick_upper) return { "principal": {"token0": amount0, "token1": amount1}, "fees": {"token0": fees0, "token1": fees1} } Сравнение методов стоимостной базы: FIFO, LIFO, ACB
Выбор метода напрямую влияет на P&L и налоговые обязательства. Вот сравнение:
| Метод | Принцип | Когда лучше | Недостатки |
|---|---|---|---|
| FIFO | Первый пришёл — первый ушёл | Стандарт, подходит для долгосрочных инвесторов | Может увеличивать налог при росте |
| LIFO | Последний пришёл — первый ушёл | Оптимизация при растущем рынке | Не разрешён в некоторых юрисдикциях |
| ACB | Средняя стоимость | Простота, подходит для частых торгов | Может давать неточный P&L при больших колебаниях |
Реализация FIFO на Python:
from dataclasses import dataclass from collections import deque from decimal import Decimal @dataclass class Lot: amount: Decimal cost_basis_usd: Decimal acquired_at: datetime class FIFOLedger: def __init__(self): self.lots: dict[str, deque[Lot]] = {} def buy(self, symbol: str, amount: Decimal, price_usd: Decimal, ts: datetime): if symbol not in self.lots: self.lots[symbol] = deque() self.lots[symbol].append(Lot(amount, amount * price_usd, ts)) def sell(self, symbol: str, amount: Decimal, price_usd: Decimal, ts: datetime) -> Decimal: proceeds = amount * price_usd cost = Decimal(0) remaining = amount while remaining > 0 and self.lots[symbol]: lot = self.lots[symbol][0] if lot.amount <= remaining: cost += lot.cost_basis_usd remaining -= lot.amount self.lots[symbol].popleft() else: portion = remaining / lot.amount cost += lot.cost_basis_usd * portion lot.amount -= remaining lot.cost_basis_usd -= lot.cost_basis_usd * portion remaining = Decimal(0) return proceeds - cost Этапы внедрения системы отчетности
- Анализ портфеля — собираем адреса, протоколы, требуемую историю (7 дней, 30 дней, вся история).
- Проектирование архитектуры — определяем адаптеры для каждого протокола, метод стоимостной базы, форматы отчётов.
- Разработка агрегаторов — пишем скрипты для Multicall3, CEX API, кастомных контрактов.
- Интеграция ML-модуля P&L (опционально) — для предсказания impermanent loss и оптимизации ребалансировки LP.
- Генерация отчётов — NAV, P&L, transaction history, tax report в PDF/Excel.
- Деплой и обучение — разворачиваем на вашем сервере или в облаке, обучаем команду.
Что входит в результат
- Скрипты агрегации для EVM и Solana, поддержка 20+ протоколов (Uniswap, Aave, Compound, Lido, Curve и др.).
- Интеграция CEX (Binance, OKX, Bybit) с автоматической выгрузкой trades.
- Расчёт P&L (FIFO/LIFO/ACB на выбор) с учётом комиссий и сплитов.
- Детерминированные отчёты — любой аудитор может воспроизвести данные из исходных контрактов.
- Полная документация, обучение команды, гарантия точности (верификация каждого вызова).
Кейс: как мы сократили ручной труд на 80% для фонда с AUM $200M
Фонд M управлял 80 кошельками на 6 сетях, включая сложные LP в Uniswap V3 и стейкинг в Rocket Pool. Раньше отчётность занимала 35 часов в неделю. Внедрили кастомную систему на основе Multicall3 и FIFO-ledger. Результат: автоматический сбор за 5 минут, еженедельный отчёт — 1 час на проверку. Система работает 2 года, ни одного расхождения с ретроспективным аудитом.
Сроки и как начать
Базовая версия для 5–10 адресов на 3–4 сетях с базовыми DeFi протоколами занимает 3–5 недель. Стоимость рассчитывается индивидуально — зависит от количества адресов, протоколов и глубины истории. Обычно проект окупается за полгода за счёт сокращения ручного труда на 80%.
Получите консультацию — свяжитесь с нами, и мы подготовим предложение под вашу специфику. Закажите демо-версию для вашего портфеля уже сегодня.







