Vault V2
Vaults V2 允许任何人创建 非托管 金库,将资产分配到不同的市场。 Vault V2 的存款人无需主动管理其仓位,即可从底层市场获得收益。 存款资产的策展由一组不同的角色(所有者、策展人和分配者)负责。 VaultV2Factory 部署 Vaults V2 的实例。 所有合约都是不可变的。
概述
适配器
金库通过称为适配器的独立合约将资产分配到底层市场。 它们代表金库持有仓位。 适配器还用于了解这些投资的市值(利息和损失实现)。
使用 适配器注册表 来限制金库可以拥有和添加哪些适配器。 这在弃权时(参见 时间锁)特别有用,以确保金库将永远向由给定注册表授权的适配器提供流动性。
当前可用的适配器如下:
- Morpho Market V1 Adapter V2.
- Morpho Vault V1 Adapter.
- Morpho Market V2 Adapter. WIP
上限
金库的资金分配受基于 ID 的上限系统约束。 ID 是某些仓位共同风险因素(如抵押品、预言机、协议等)的抽象标识符。 具有共同 ID 的市场上的分配受绝对上限和相对上限的限制。 相对上限仅约束分配,因此可能因从金库中提款而被超过。
流动性
分配器负责确保用户随时可以提取其资产。 这是通过管理可用的闲置流动性和可选的流动性适配器来实现的。
此外,如果存在流动性市场,用户可以利用 forceDeallocate 函数从金库中提取资产,前提是他们愿意支付相应的罚金。
实际上,无许可的 forceDeallocate 函数允许任何人将资产从适配器转移到金库的闲置资产(即金库代币余额)。
当用户提取资产时,优先使用闲置资产。 如果闲置流动性不足,则从流动性适配器中提取流动性。 当定义时,流动性适配器还用于转发存入的资金。
典型的流动性适配器会允许存款/取款通过一个流动性极高的 Market V1 进行。
时间锁
策展人配置更改均可设置时间锁(除了 decreaseAbsoluteCap 和 decreaseRelativeCap),这意味着执行操作需要先提交,只有当时间锁过期后才能执行(由任何人执行)。
这对于 非托管保证 特别有用,但通常如果策展人希望就某些配置提供保证,这也很有用。
应谨慎使用 increaseTimelock,因为 decreaseTimelock 是功能依赖的:降低某个函数的时间锁受该函数自身时间锁的限制。
此外,配置可以被 弃权,即通过调用 abdicate 使其无法再被设置。
实物赎回
实物赎回是一种机制,用于减少用户在金库中的头寸,并增加其在底层市场中的头寸。
通过实物赎回退出,允许用户在任何时间以底层头寸退出金库,即使没有底层市场具有流动性。
用户可以借助 forceDeallocate 函数进行实物赎回:闪电贷流动性,将其供应到适配器的市场,并在偿还闪电贷之前通过 forceDeallocate 提取流动性。
可以为每个适配器设置使用 forceDeallocate 的惩罚,最高可达 2%。 这旨在抑制对分配的操作,特别是对在提取时未检查的相对上限的操作。 请注意,对于惩罚率为 0% 的适配器,解除分配的唯一摩擦是相关的气体成本。
非托管保证
非托管保证来自 实物赎回 和 时间锁。 这些机制确保用户可以在任何关键配置变更生效之前(如果相应的时间锁不为零)随时提取其资产。
门控
金库 V2 可以使用外部门控合约来控制份额转移、金库资产存入和金库资产提取。 如果未设置门控,则其对应的操作不受限制。
定义了四个门控:
- 接收份额门控 (
receiveSharesGate): 控制接收份额的权限。 - 发送份额门控 (
sendSharesGate): 控制发送份额的权限。 - 接收资产门控 (
receiveAssetsGate): 控制与接收资产相关的权限。 - 发送资产门控 (
sendAssetsGate): 控制与发送资产相关的权限。
参见 WhitelistSendAssetsGate,它提供了发送资产门控的一种可能实现。
最大速率
金库的份额价格增长不会快于分配器设定的 maxRate。
这有助于稳定分配速率,或建立缓冲以能够吸收损失。
费用
VaultV2 存款人需支付绩效费用,即利息的一部分(上限为 50%),以及管理费(上限为 5%/年),即本金的一部分。 每项费用均支付给由策展人设定的相应接收方。
角色
-
所有者: 所有者的角色是设置策展人和哨兵。 它还可以设置金库的名称和符号。 只有一个地址可以拥有此角色。
-
策展人: 策展人的角色是配置金库。 他们可以启用和禁用 适配器 以及可选的适配器注册表,通过设置绝对和相对上限来配置 风险限制,设置 门控、分配器、时间锁、费用 以及费用接收方。 除了降低绝对和相对上限外,所有操作均可设置时间锁。 只有一个地址可以拥有此角色。
-
Allocator(s): 分配器的角色是处理金库在底层市场中的资金分配与回收(使用已启用的适配器,并在策展人设定的上限范围内)。 它们还设置流动性适配器和最大利率。 它们尤其负责金库的性能和流动性。
-
Sentinel(s): 哨兵角色可用于快速降低金库的风险。 它们能够撤销待处理的操作、将资金分配至闲置状态并降低上限。
ERC-4626 合规性
Vault V2 符合 ERC-4626 和 ERC-2612 标准。
[!WARNING] 金库在 max 函数上具有非传统行为(
maxDeposit,maxMint,maxWithdraw,maxRedeem):它们始终返回零。
开发者
使用 forge 进行编译、测试和格式化。 周边合约可在 src/periphery 中找到。
审计
所有审计报告均存储在 audits 文件夹中。
许可证
本仓库中的文件在许可证 GPL-2.0-or-later 下公开可用,参见 LICENSE。