## MorphoMeta 核心机制 当 MorphoMeta 创建后,金库的创建者可以分配以下几种角色(注意,Owner 实际上具有以下几种角色的所有权限): 1. Curator 该角色负责选择可以投资的借贷市场并评估可以向该借贷市场内投入的最大资金数量限制 2. Allocator 该角色负责进行资金分配管理,但是该角色只能将资金注入 Curator 认为合理的借贷市场内。Allocator 也负责 MorphoMeta 的流动性管理,可以设置用户资金存入的借贷市场和用户提取资金时提取的借贷市场 3. Guardian 用于审查各种配置更新请求,比如 Curator 提议纳入一个新的借贷市场,Guardian 有权否决 在 MetaMorpho 建立最初,Curator 需要选择一批合适的位于 Morpho 协议内的借贷市场将其纳入协议,并且设置每一个可用借贷市场的最大资金数量限制。在 Curator 完成工作后,Allocator 首先需要设计以下两个队列: 1. SupplyQueue 该队列负责接收用户存款。当用户存入资金时,MetaMorpho 协议会自动将用户存入的资金配置到 SupplyQueue 内的借贷市场内,当一个借贷市场达到最大资金数量限制时,用户的资金会被自动发送到 SupplyQueue 内下一个市场内部 2. WithdrawQueue 该队列负责用户提取资产。当用户提取资产时,MetaMorpho 会在 WithdrawQueue 内选择可用的借贷市场为用户提取资金 简单来说,用户存入的资金会被按照顺序填入 SupplyQueue 内配置的借贷市场内,而用户退出时则会在按照 WithdrawQueue 内的借贷市场的顺序退出。当 SupplyQueue 队列内的所有市场都达到了最大资金限制,此时用户无法向 MetaMorpho 内存入资产。而当 WithdrawQueue 内所有市场都无法提取资产时,用户也无法在 MetaMorpho 内提取资产。 当 MetaMorpho 存在基础的流动性后,Allocator 可以进行进一步的调仓操作。Allocator 允许直接将资金在 Curator 批准的借贷市场组合内部进行再分配。Allocator 可以将 A 市场内的资金调仓到 B 市场,但是资金再分配时任何市场都不能超过最大资金限制。 一个较为复杂的问题是在 MetaMorpho 内移除借贷市场。借贷市场的移除首先需要 Allocator 将该市场移出 SupplyQueue 以屏蔽用户对该市场对资金注入。Allocator 也需要利用调仓操作将待移除的借贷市场内的所有资金提取。然后, Curator 将该市场的资金数量限制调整为 0。最后,Allocator 将该市场在 WithdrawQueue 移除。 可以看到上述操作需要 Allocator 将待移除借贷市场内的所有资金提取。但存在某些特殊情况,比如某一个借贷市场流动性不足,Allocator 无法将其内部的资金提取,此时需要 Curator 调用 MetaMorpho 内的强制移除功能。该功能调用后,MetaMorpho 不会提取借贷市场内的资金。然后 Allocator 将该市场在 WithdrawQueue 移除。此时用户会直接发现 MetaMorpho 内的资金减少,同时用户可以提取的资金也减少。等待借贷市场流动性充足时,Curator 可以将该市场重新纳入到 MetaMorpho 中,该操作也会重新尝试提取借贷市场内的资金。假如提取成功,那么 MetaMorpho 内的资金恢复正常。 本质上,MetaMorpho 一旦因为资金分配问题导致资产损失,所有用户都会按资金比例承担损失。 ## 初始化 在初始化时,我们注意到 Morpho 策展人实际上可以自己确定时间锁的长度,经过检查,Morpho 策展人需要将时间锁控制在 1 day - 2 weeks 之间。 经过手动检查,目前 Morpho Earn 列出的前 5 大策展人都使用了 1 day 的时间锁,我们可以在前端页面内找到相关信息:  ## 角色 `onlyOwner` Owner 的权限: 1. `setCurator` 2. `setIsAllocator` 配置 Allocator 3. `setSkimRecipient` 配置 SkimRecipient 4. `submitTimelock` 提交时间锁更新申请 5. `setFee` 立即更新费率。更新时要求费率低于 `MAX_FEE`(50%) 6. `setFeeRecipient` 立即更新手续费接受地址 7. `submitGuardian` 提交新的 Guardian 地址更新申请 `onlyCuratorRole` Curator 和 owner 的权限: 1. `submitCap` 修改某个借贷市场的投资限度,当投资限额为 0 时,`Allocator` 无法向该借贷市场投入资金。该配置更新受时间锁控制 2. `submitMarketRemoval` 强制删除某一个借贷市场,注意强制删除过程中不会撤回借贷市场内的资产 > `submitMarketRemoval` 用于不撤回资产的强制退出,这种情况一般是因为投资的借贷市场出现流动性问题,无法撤回资产,此时只能通过不撤回资产直接删除的方案将该借贷市场移出投资方案。实际上,等待借贷市场恢复流动性后,可以再次通过 `submitCap` 操作将市场内的资金取出 `onlyAllocatorRole` Allocator / Curator / Owner 的权限: 1. `setSupplyQueue` 更新当前的借贷市场投资队列。在 MetaMorpho 内,用户存入的资产会按照顺序填充 SupplyQueue 内的市场,当某一个市场填充到达 `cap` 上限时,会继续填充下一个市场。该操作没有时间锁限制,但是只能将 `cap > 0` 的资产放入 SupplyQueue 内。 2. `updateWithdrawQueue` 更新当前的借贷市场撤出队列,当用户选择退出时,MetaMorpho 会按照 WithdrawQueue 顺序在借贷市场内撤出资金 3. `reallocate` 在可投资的借贷市场内进行调仓操作,允许将目前 MetaMorpho 内的所有资金进行重新分配,但仍不可以超过 `cap` 限制 `onlyGuardianRole` Guardian / Owner 的权限: 1. `revokePendingTimelock` 撤销之前使用 `submitTimelock` 提交的时间锁更新请求 2. `revokePendingGuardian` 撤销之前的使用 `submitGuardian` 提交的 `Guardian` 更新申请 `onlyCuratorOrGuardianRole` Guardian / Curator / Owner 的权限: 1. `revokePendingCap` 撤销借贷市场的 `Cap` 更新请求 2. `revokePendingMarketRemoval` 撤销借贷市场的强制删除请求 `afterTimelock` Timelock SkimRecipient 用于接受 Morpho 协议内借贷金库的其他收益,比如 Morpho 代币激励等。 ## 时间锁机制 `sumbit` / `revoke` / `accept` 是 MetaMorpho 内部更新配置参数的基础机制。当调用一个需要时间锁等待的更新参数时,带有权限的用户需要首先调用 `sumbit` 进行申请,在时间锁范围内,Guardian (有时包含 Owner) 可以随时调用 `revoke` 撤销申请。等待时间锁到期后,任何人可以调用 `accept` 根据 `sumbit` 提交的数值更新某些配置。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up