Четыре операции фиксируют разные входные единицы
МетодПользователь задаётКонтракт возвращаетПредварительный запрос
depositТочное число assetsПолученные sharespreviewDeposit + maxDeposit
mintТочное число sharesПотраченные assetspreviewMint + maxMint
withdrawТочное число assetsСписанные sharespreviewWithdraw + maxWithdraw
redeemТочное число sharesПолученные assetspreviewRedeem + maxRedeem
Четыре операции фиксируют разные входные единицы
Метод
deposit
Пользователь задаёт
Точное число assets
Контракт возвращает
Полученные shares
Предварительный запрос
previewDeposit + maxDeposit
Метод
mint
Пользователь задаёт
Точное число shares
Контракт возвращает
Потраченные assets
Предварительный запрос
previewMint + maxMint
Метод
withdraw
Пользователь задаёт
Точное число assets
Контракт возвращает
Списанные shares
Предварительный запрос
previewWithdraw + maxWithdraw
Метод
redeem
Пользователь задаёт
Точное число shares
Контракт возвращает
Полученные assets
Предварительный запрос
previewRedeem + maxRedeem

Vault ведёт учёт в двух контрактах и двух единицах

`asset()` возвращает address underlying ERC-20, а сам vault является ERC-20 для shares. `totalAssets()` сообщает количество managed underlying по правилам реализации; `totalSupply()` — supply долей. Баланс пользователя в `balanceOf` выражен в shares. Сначала зафиксируйте chain и оба contract address, затем прочитайте decimals токена для каждой единицы: одинаковое число знаков не является обязательным и не задаёт стоимость.

Convert, preview и max нельзя подменять друг другом

Какой read method отвечает на нужный вопрос
СлойВопросВключаетНе включает
convertToShares / convertToAssetsСредняя идеализированная конверсияОбщий exchange-rate logicFees, caller variation, slippage, limits
previewDeposit / previewMintРезультат входа в текущих условияхOperation-specific fees и неблагоприятное отклонениеDeposit/mint limits
previewWithdraw / previewRedeemРезультат выхода в текущих условияхOperation-specific fees и неблагоприятное отклонениеWithdraw/redeem limits
maxDeposit / maxMintСколько разрешено receiverGlobal и user-specific limitsРеальный wallet balance
maxWithdraw / maxRedeemСколько доступно ownerShares и текущие ограниченияГарантию неизменности до следующего block
Какой read method отвечает на нужный вопрос
Слой
convertToShares / convertToAssets
Вопрос
Средняя идеализированная конверсия
Включает
Общий exchange-rate logic
Не включает
Fees, caller variation, slippage, limits
Слой
previewDeposit / previewMint
Вопрос
Результат входа в текущих условиях
Включает
Operation-specific fees и неблагоприятное отклонение
Не включает
Deposit/mint limits
Слой
previewWithdraw / previewRedeem
Вопрос
Результат выхода в текущих условиях
Включает
Operation-specific fees и неблагоприятное отклонение
Не включает
Withdraw/redeem limits
Слой
maxDeposit / maxMint
Вопрос
Сколько разрешено receiver
Включает
Global и user-specific limits
Не включает
Реальный wallet balance
Слой
maxWithdraw / maxRedeem
Вопрос
Сколько доступно owner
Включает
Shares и текущие ограничения
Не включает
Гарантию неизменности до следующего block

Preview привязан к текущему onchain state и наиболее близок к соответствующей операции в той же transaction, но не является резервированием курса. Между чтением и включением состояние может измениться. Max method обязан учитывать ограничения и способен вернуть ноль, даже если математическая конверсия положительна. Для асинхронного расширения ERC-7540 появляются request и claim states; обычный atomic workflow нельзя переносить на него без проверки interface.

Rounding системно зависит от направления операции

Минимальная модель округления ERC-4626

  • когда vault выдаёт shares за заданные assets, результат не должен завышаться для пользователя;
  • когда vault выдаёт assets за заданные shares, результат также округляется вниз;
  • когда пользователь запрашивает точное число shares или assets, необходимый input может округляться вверх;
  • оба convertTo methods по стандарту округляют вниз;
  • конкретная потеря зависит от rate, precision, размера операции, fees и реализации.

На малых суммах одна минимальная единица shares может быть существенной. В пустом или почти пустом vault прямое пополнение underlying без mint shares способно сдвинуть rate и усилить rounding loss для следующего deposit — это называют donation/inflation attack. OpenZeppelin Contracts 5.x использует virtual assets и shares как mitigation, но наличие стандарта ERC-4626 не доказывает, что конкретный deployment использует эту реализацию или её настройки.

Перед входом или выходом строят quote card на одном block

  1. 1
    Определить contracts

    Зафиксируйте chain, vault address, результат asset() и bytecode/implementation, если vault upgradeable.

  2. 2
    Назвать единицу цели

    Для точных assets выбирайте deposit/withdraw, для точных shares — mint/redeem; не сравнивайте разные направления.

  3. 3
    Прочитать preview и max

    Вызовите соответствующую пару для receiver/owner на одном block и запишите raw units.

  4. 4
    Проверить разрешения

    Для входа обычно нужен ERC-20 allowance vault-контракту; отдельно проверьте spender и сумму.

  5. 5
    Задать границу

    Если wrapper/router поддерживает slippage check, установите minimum output или maximum input; стандартный метод сам по себе не принимает такой параметр.

Если vault участвует в DeFi-кредитовании, его `totalAssets` и withdrawal limits могут зависеть от внешней позиции; ERC-4626 не объясняет риск ликвидации или доступную ликвидность стратегии. Если proxy implementation, asset address, max result или preview неожиданно меняется, не увеличивайте allowance и не повторяйте операцию, пока причина не установлена.

Receipt подтверждает дельты, а не обещанный APY

Что делать после операции или ошибки
НаблюдениеПроверкаДействие
Transaction успешнаDeposit/Withdraw events и balance deltas assets/sharesСохранить tx hash, block, raw amounts и receiver/owner
Revertmax, allowance, balance, pause, custom errorНе повышать gas вслепую; устранить конкретное условие
Shares меньше previewBlock/state, fees, slippage guard, другой contractОстановить повтор и сравнить calldata с quote
maxWithdraw = 0Owner, shares, global/user limits, async request stateНе считать convertToAssets доступной суммой
Неизвестный spenderApproval transaction и фактический vault/routerНе подписывать; отозвать лишнее разрешение, если оно уже выдано
Что делать после операции или ошибки
Наблюдение
Transaction успешна
Проверка
Deposit/Withdraw events и balance deltas assets/shares
Действие
Сохранить tx hash, block, raw amounts и receiver/owner
Наблюдение
Revert
Проверка
max, allowance, balance, pause, custom error
Действие
Не повышать gas вслепую; устранить конкретное условие
Наблюдение
Shares меньше preview
Проверка
Block/state, fees, slippage guard, другой contract
Действие
Остановить повтор и сравнить calldata с quote
Наблюдение
maxWithdraw = 0
Проверка
Owner, shares, global/user limits, async request state
Действие
Не считать convertToAssets доступной суммой
Наблюдение
Неизвестный spender
Проверка
Approval transaction и фактический vault/router
Действие
Не подписывать; отозвать лишнее разрешение, если оно уже выдано

Проверяемый результат содержит chain, vault и asset contracts, block, выбранный метод, preview/max, transaction hash и фактические изменения двух балансов. Перед подписью отдельно прочитайте, что подписывает кошелёк: receiver и owner могут различаться, а router добавляет собственный contract и assumptions. Если фактический output нарушил заданную onchain-границу, сохраните calldata/receipt и остановите новые approvals до анализа реализации.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. ERC-4626: Tokenized Vaults Ethereum Improvement Proposals · Проверено 20 августа 2026 г. в 09:21 GMT+5
  2. OpenZeppelin Contracts 5.x — ERC4626 API OpenZeppelin · Проверено 20 августа 2026 г. в 09:21 GMT+5
  3. OpenZeppelin Contracts 5.x — ERC-4626 guide OpenZeppelin · Проверено 20 августа 2026 г. в 09:21 GMT+5
  4. ERC-7540: Asynchronous ERC-4626 Tokenized Vaults Ethereum Improvement Proposals · Проверено 20 августа 2026 г. в 09:21 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.