Перейти к основному контенту
Change page

Стандарт токенизированного хранилища ERC-4626

Введение

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

Роль ERC-4626 в доходных хранилищах

Рынки кредитования, агрегаторы и токены, изначально приносящие процентный доход, помогают пользователям находить лучшую доходность для их криптовалютных токенов путем выполнения различных стратегий. Эти стратегии реализуются с небольшими вариациями, что может приводить к ошибкам или лишним тратам ресурсов на разработку.

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

Токен ERC-4626 полностью описан в EIP-4626 (opens in a new tab).

Асинхронное расширение хранилища (ERC-7540)

ERC-4626 оптимизирован для атомарных внесений и погашений до определенного лимита. Если лимит достигнут, новые внесения или погашения не могут быть отправлены. Это ограничение плохо работает для любой системы смарт-контрактов с асинхронными действиями или задержками в качестве обязательного условия для взаимодействия с хранилищем (например, протоколы активов реального мира, протоколы кредитования с недостаточным обеспечением, протоколы кроссчейн-кредитования, токены ликвидного стейкинга (LST) или страховые модули безопасности).

ERC-7540 расширяет полезность хранилищ ERC-4626 для асинхронных сценариев использования. Существующий интерфейс хранилища (deposit/withdraw/mint/redeem) полностью используется для того, чтобы востребовать асинхронные запросы.

Расширение ERC-7540 полностью описано в ERC-7540 (opens in a new tab).

Расширение хранилища для нескольких активов (ERC-7575)

Одним из недостающих сценариев использования, который не поддерживается ERC-4626, являются хранилища, имеющие несколько активов или точек входа, такие как токены поставщика ликвидности (LP). Обычно они являются громоздкими или несовместимыми из-за требования к ERC-4626 самому быть токеном ERC-20.

ERC-7575 добавляет поддержку хранилищ с несколькими активами путем вынесения реализации токена ERC-20 за пределы реализации ERC-4626.

Расширение ERC-7575 полностью описано в ERC-7575 (opens in a new tab).

Предварительные требования

Для лучшего понимания этой страницы мы рекомендуем сначала прочитать про стандарты токенов и ERC-20.

Функции и особенности ERC-4626:

Методы

asset

function asset() public view returns (address assetTokenAddress)

Эта функция возвращает адрес базового токена, используемого для хранилища в целях учета, внесения и вывода.

totalAssets

function totalAssets() public view returns (uint256)

Эта функция возвращает общую сумму базовых активов, удерживаемых хранилищем.

convertToShares

function convertToShares(uint256 assets) public view returns (uint256 shares)

Эта функция возвращает количество shares, которое хранилище обменяло бы на предоставленное количество assets.

convertToAssets

function convertToAssets(uint256 shares) public view returns (uint256 assets)

Эта функция возвращает количество assets, которое хранилище обменяло бы на предоставленное количество shares.

maxDeposit

function maxDeposit(address receiver) public view returns (uint256 maxAssets)

Эта функция возвращает максимальное количество базовых активов, которое может быть внесено за один вызов deposit, с долями, отчеканенными для receiver.

previewDeposit

function previewDeposit(uint256 assets) public view returns (uint256 shares)

Эта функция позволяет пользователям смоделировать результаты их внесения на текущем блоке.

deposit

function deposit(uint256 assets, address receiver) public returns (uint256 shares)

Эта функция вносит assets базовых токенов в хранилище и предоставляет право собственности на shares для receiver.

maxMint

function maxMint(address receiver) public view returns (uint256 maxShares)

Эта функция возвращает максимальное количество долей, которое может быть отчеканено за один вызов mint, с долями, отчеканенными для receiver.

previewMint

function previewMint(uint256 shares) public view returns (uint256 assets)

Эта функция позволяет пользователям смоделировать результаты их чеканки на текущем блоке.

mint

function mint(uint256 shares, address receiver) public returns (uint256 assets)

Эта функция чеканит ровно shares долей хранилища для receiver путем внесения assets базовых токенов.

maxWithdraw

function maxWithdraw(address owner) public view returns (uint256 maxAssets)

Эта функция возвращает максимальное количество базовых активов, которое может быть выведено с баланса owner за один вызов withdraw.

previewWithdraw

function previewWithdraw(uint256 assets) public view returns (uint256 shares)

Эта функция позволяет пользователям смоделировать результаты их вывода на текущем блоке.

withdraw

function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares)

Эта функция сжигает shares у owner и отправляет ровно assets токенов из хранилища к receiver.

maxRedeem

function maxRedeem(address owner) public view returns (uint256 maxShares)

Эта функция возвращает максимальное количество долей, которое может быть погашено с баланса owner через вызов redeem.

previewRedeem

function previewRedeem(uint256 shares) public view returns (uint256 assets)

Эта функция позволяет пользователям смоделировать результаты их погашения на текущем блоке.

redeem

function redeem(uint256 shares, address receiver, address owner) public returns (uint256 assets)

Эта функция погашает определенное количество shares у owner и отправляет assets базовых токенов из хранилища к receiver.

totalSupply

function totalSupply() public view returns (uint256)

Возвращает общее количество непогашенных долей хранилища в обращении.

balanceOf

function balanceOf(address owner) public view returns (uint256)

Возвращает общее количество долей хранилища, которое в настоящее время имеет owner.

Карта интерфейса

Map of the ERC-4626 interface

События

Событие Deposit

ДОЛЖНО генерироваться, когда токены вносятся в хранилище через методы mint и deposit.

event Deposit(
    address indexed sender,
    address indexed owner,
    uint256 assets,
    uint256 shares
)

Где sender — это пользователь, который обменял assets на shares и перевел эти shares к owner.

Событие Withdraw

ДОЛЖНО генерироваться, когда доли выводятся из хранилища вкладчиком в методах redeem или withdraw.

event Withdraw(
    address indexed sender,
    address indexed receiver,
    address indexed owner,
    uint256 assets,
    uint256 shares
)

Где sender — это пользователь, который инициировал вывод и обменял shares, принадлежащие owner, на assets. receiver — это пользователь, который получил выведенные assets.

Дополнительная литература