Открыть сервис

ERC-4626

ERC-4626 — это стандарт Ethereum Request for Comments (ERC), определяющий единый интерфейс для токенизированных хранилищ (vaults), предназначенных для размещения средств в протоколах децентрализованных финансов (DeFi). Стандарт был предложен в 2021 году разработчиками Джоуи Санторо (Fei Protocol), Аттилой Салаи (Yield) и другими, и получил статус финального (Final) в декабре 2022 года. ERC-4626 стандартизирует взаимодействие с хранилищами, которые принимают базовый актив (например, DAI, USDC, ETH) и выпускают взамен токены долей (shares), представляющие долю в пуле ликвидности или доходной стратегии.

История

До появления ERC-4626 каждый DeFi-протокол, предлагающий доходные хранилища (например, Yearn Finance, Curve, Convex), реализовывал собственный интерфейс для депозита, вывода средств и расчёта долей. Это создавало фрагментацию: разработчики интеграций (агрегаторы доходности, кошельки, роботы-советники) вынуждены были писать отдельные адаптеры для каждого протокола. ERC-4626 был разработан для устранения этой проблемы путём введения единого API, аналогичного тому, как ERC-20 стандартизировал интерфейс для токенов.

Стандарт был впервые предложен в Ethereum Improvement Proposal (EIP) 4626 в ноябре 2021 года. После обсуждений и доработок он был принят сообществом и включён в реестр ERC. На момент 2024 года ERC-4626 поддерживается десятками протоколов, включая Yearn Finance, Balancer, Aave, Morpho, и используется в большинстве новых доходных хранилищ.

Структура и функции

ERC-4626 расширяет интерфейс ERC-20, добавляя специфические функции для работы с хранилищем. Токен хранилища сам является ERC-20, что позволяет его передавать, обменивать и использовать в других протоколах.

Основные функции

Стандарт определяет несколько обязательных и опциональных функций:

  • asset() — возвращает адрес базового актива, который принимает хранилище.
  • totalAssets() — возвращает общее количество базового актива, управляемого хранилищем.
  • convertToShares(uint256 assets) — рассчитывает количество токенов долей, которое можно получить за указанное количество базового актива по текущему курсу.
  • convertToAssets(uint256 shares) — рассчитывает количество базового актива, которое можно получить за указанное количество токенов долей.
  • maxDeposit(address receiver) — возвращает максимальное количество базового актива, которое может быть внесено одним пользователем.
  • previewDeposit(uint256 assets) — симулирует результат депозита без фактического выполнения транзакции.
  • deposit(uint256 assets, address receiver) — вносит базовый актив в хранилище и начисляет токены долей получателю.
  • maxMint(address receiver) — возвращает максимальное количество токенов долей, которое может быть выпущено для одного пользователя.
  • previewMint(uint256 shares) — симулирует результат выпуска токенов долей.
  • mint(uint256 shares, address receiver) — выпускает указанное количество токенов долей, принимая соответствующее количество базового актива.
  • maxWithdraw(address owner) — возвращает максимальное количество базового актива, которое может быть выведено владельцем.
  • previewWithdraw(uint256 assets) — симулирует результат вывода средств.
  • withdraw(uint256 assets, address receiver, address owner) — выводит указанное количество базового актива, сжигая соответствующее количество токенов долей.
  • maxRedeem(address owner) — возвращает максимальное количество токенов долей, которое может быть погашено владельцем.
  • previewRedeem(uint256 shares) — симулирует результат погашения токенов долей.
  • redeem(uint256 shares, address receiver, address owner) — погашает указанное количество токенов долей, возвращая соответствующее количество базового актива.

События

Стандарт определяет одно обязательное событие:

  • Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares) — генерируется при депозите или выпуске токенов.
  • Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares) — генерируется при выводе средств или погашении токенов.

Принцип работы

Хранилище ERC-4626 работает по принципу пула ликвидности. Пользователи вносят базовый актив (например, USDC) и получают токены долей, которые представляют их долю в общем пуле. Хранилище использует собранные средства для реализации доходной стратегии (например, кредитование на Aave, обеспечение ликвидности на Uniswap, стейкинг). Доход от стратегии увеличивает общую стоимость пула, что приводит к росту стоимости одного токена доли относительно базового актива.

Курс конвертации между базовым активом и токенами долей определяется формулой: shares = assets * totalSupply / totalAssets. При депозите и выводе средств курс может немного отличаться из-за округления в пользу хранилища (для защиты от атак с манипуляцией округлением).

Преимущества

  • Интероперабельность: единый интерфейс позволяет любому приложению, поддерживающему ERC-4626, взаимодействовать с любым хранилищем без написания кастомного кода.
  • Упрощение интеграции: разработчики агрегаторов доходности, кошельков и DeFi-протоколов могут использовать стандартные вызовы функций.
  • Прозрачность: функции preview* позволяют пользователям и приложениям рассчитать точный результат операции до её выполнения.
  • Безопасность: стандарт включает защиту от атак с округлением, что снижает риски потери средств.

Недостатки и ограничения

  • Отсутствие стандартизации стратегий: ERC-4626 определяет только интерфейс, но не регламентирует, как хранилище управляет средствами. Разные хранилища могут иметь разные риски, комиссии и стратегии, что требует от пользователей дополнительного анализа.
  • Зависимость от реализации: хотя интерфейс стандартизирован, внутренняя логика может содержать ошибки или уязвимости, характерные для конкретного протокола.
  • Округление в пользу хранилища: при больших объёмах операций накопленные округления могут привести к незначительным потерям для пользователей, хотя это предусмотрено для защиты от атак.

Применение

ERC-4626 широко используется в экосистеме DeFi:

  • Доходные хранилища: Yearn Finance, Beefy Finance, Harvest Finance используют стандарт для представления своих стратегий.
  • Протоколы кредитования: Aave, Morpho предлагают хранилища, соответствующие ERC-4626, для упрощения депозитов.
  • Агрегаторы доходности: Zapper, Zerion, DeBank используют стандарт для отображения балансов и выполнения операций.
  • Роботы-советники: автоматизированные стратегии управления капиталом могут подключаться к любым хранилищам через единый интерфейс.

Примеры реализаций

  • Yearn Finance Vaults: хранилища, которые автоматически перераспределяют средства между различными стратегиями для максимизации доходности. Каждый Vault соответствует ERC-4626.
  • Balancer Linear Pools: пулы, которые объединяют ликвидность из нескольких источников, используя ERC-4626 для представления долей.
  • Morpho Vaults: хранилища, которые оптимизируют распределение средств между рынками кредитования для получения лучшей ставки.

Интересные факты

  • ERC-4626 был одним из первых стандартов, принятых после перехода Ethereum на Proof-of-Stake, и его разработка совпала с ростом популярности доходных стратегий в DeFi.
  • Стандарт не требует, чтобы хранилище было некастодиальным: теоретически он может быть реализован и в централизованных решениях, но на практике используется только в децентрализованных протоколах.
  • Некоторые реализации добавляют дополнительные функции, такие как динамические комиссии, ограничения на максимальный депозит или механизмы ребалансировки, что выходит за рамки стандарта, но сохраняет совместимость с ним.

Источники

  • Ethereum Improvement Proposal 4626 (EIP-4626)
  • Документация OpenZeppelin по реализации ERC-4626
  • Статья «ERC-4626: The Standard for Tokenized Vaults» на Ethereum.org
  • Анализ безопасности ERC-4626 от Trail of Bits (2022)
  • Репозиторий Yearn Finance на GitHub

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →