本文介绍了 ERC-4626 标准,该标准旨在解决 DeFi 中 Tokenized Vaults 的集成问题。通过标准化 Vaults 的接口和功能,ERC-4626 简化了不同 DeFi 协议之间的互操作性,降低了开发难度和安全风险,并提高了 DeFi 应用的效率和可组合性。
Written by Alchemy
Published on June 21, 20225 min read
虽然目前有几种突出的 token 标准,但去中心化金融 (DeFi) 世界在 token 化的 vault 方面仍然存在一个反复出现的问题。 这促成了最新标准 ERC-4626 的创建。
本文将解释什么是 vault,开发人员在 token 化它们时面临的问题,以及 ERC-4626 如何解决 DeFi 开发中的这个问题。 然后,我们将深入研究这个新标准带来的新变化,并向你展示如何在智能合约中实现它们。
Vault 是一种多重签名解决方案或智能合约,可以存储和管理加密货币等资产。 每个 vault 总是将其生成的 token 作为回报的一种形式。 这些生成的 token 随后可以兑换为最初锁定在 vault 中的 token。
例如,当你在 Sushiswap(一种 Automated Market Maker (AMM))上 stake Sushi 时,你将获得 xSushi 作为奖励。 同样,当你在 Compound(一种 DeFi 借贷协议)上进行 USDC 稳定币的 yield farm 时,你还将获得 cUSDC。
cUSDC 和 xSushi 是 yield-bearing token,可以兑换以获得原始 token(例如,本例中的 USDC 或 SUSHI)。 只要 vault 或池中锁定的 token 增加,yield-bearing token 的价值就会持续增加。
Vault 被认为比钱包更好、更安全,这也是许多 DeFi 协议选择将资金存入 vault 的原因。 使用 vault 的热门 DeFi 协议包括 Sushiswap、Aave、Balancer 和 Compound 等。
开发人员在 yield-bearing token 方面面临的问题是集成不同协议的 token。
例如,在你想要构建一个 DeFi 应用程序的情况下,你需要集成每个协议的 token,你将需要研究每一个协议,了解它们累积收益的模型,并将其调整到你的代码库中。
如果你想集成 Maker DAO 的 vDAI; Curve 上的 stETH; 等等,你需要了解其智能合约的特性,并构建自定义解决方案,以成功地将每个合约集成到你的 DeFi 应用程序中。
除了集成不同的 yield-bearing token 的过程有多么紧张和耗时之外,它还会因潜在的错误而增加智能合约的风险。
开发人员将需要花费更多时间来检查适配器中潜在的漏洞,在某些情况下,他们甚至可能需要将其外包给智能合约审计员,这可能会非常昂贵。 鉴于攻击者正在破坏许多协议和 DeFi 应用程序的完整性,这一点现在更为重要。
2021 年底,注意到开发人员难以集成单独的 yield-bearing token,Fei Protocol 的创始人 Joey Santoro 带领另外四位以太坊开发人员提交了 Ethereum Comment Proposal 4626 (ERC-4626)。
经过几轮审查和审议后,以太坊最终于 2022 年 5 月批准了该标准。
ERC-4626 的主要好处是它标准化了 token 化的 vault,使协议集成更容易且不易出错。
由于存在你可以集成的通用标准,因此实际上不再需要构建单独的适配器。 简而言之,它可以加快开发速度; 可组合性达到顶峰。
同样,它可以降低成本,因为构建者不再需要让审计员来帮助他们处理适配器和接口。 最重要的是,ERC-4626 增强了处理 yield-bearing token 的 dApp 和 yield 聚合器的安全性。
有了新的 ERC-4626 token,现在开发人员可以构建涉及 yield token 的 DeFi 应用程序的标准。
简而言之,ERC-4626 标准实现了以下功能:
适用于想要集成它的开发人员的优化 vault 接口。
提供 shares 作为存款的交换,其中 shares 代表 vault 的底层 token 的部分所有权
开发人员在开发 yield-bearing 合约时可以使用的统一标准
经过实战检验的 vault token 安全性
ERC-4626 是 ERC-20 标准的扩展,并且与之兼容。 因此,适用于 ERC-20 token 合约的大多数常用变量、事件和函数仍然适用于 ERC-4626 vault 标准。
vault 标准引入了 shares 的概念,作为从整个池中获得部分所有权的一种方式。 这些 shares 指的是 yield-bearing token。
现在让我们开始在 ERC-4626 中进行开发。
虽然你可以使用 Cairo 和 Viper 等语言,但我们将使用 Solidity 编写此合约。
在你打开 IDE (我们推荐 Remix) 后,指示编译器你正在使用哪个版本的 Solidity 编写合约。
在这种情况下,声明你将使用 0.8。 之后,你需要导入 ERC-20 和 ERC-4626 的两个 OpenZeppelin 扩展。
Pragma solidity ^0.8;import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";import "https://github.com/Rari-Capital/solmate/blob/main/src/mixins/ERC4626.sol";
接下来,让我们创建一个合约并命名它。
命名你的合约,并进一步巩固它是基于 ERC-20 token 和 ERC-4626 的。
Contract, testingVaults is ERC20, IERC4626 { 在此添加你的全部代码 }
创建合约后,你应该了解此标准中的方法、函数和事件的一些重要更改。 因此,让我们检查一下 ERC-4626 中的一些方法和事件:
当用户将任何资金投入 vault 时,存款函数会触发智能合约,以便向存款人铸造相应数量的 shares。 作为事件,只要有存款,就必须触发智能合约。
Function deposit(address _to, uint256 _value) public returns (uint256 _shares)
使用此函数,我们已指示合约将一些 token 存入 vault,并将 shares 的所有权授予调用者。 你可以以相同的方式编写取款函数。
取款函数帮助所有者燃烧 shares 以换取资产。 当从 vault 取款时,必须触发提款事件。
Event Deposit(address indexed _from, address indexed _to, uint256 _value)
此事件中的 address indexed _from 表示批准将 token 存入 vault 的用户,而可以提取已存入 token 的人是 address indexed _to。
vault token 的地址应在 asset 函数中使用。 智能合约中底层资产的整个数量应在 totalAssets 下声明。
在 ERC-4626 标准下,有两种转换函数:convertToShares
和 convertToAssets
。
如果你需要将资产转换为 shares,则 convertToShares
是要调用的正确函数,因为它包含要释放的 shares 数量以代替资产。
相反,convertToAssets
以相反的方式工作,通过将 shares 转换为资产。
Function convertToAssets(uint256 shares) public view virtual override returns (uint256 assets) {Return _convertToAssets(shares, Math.Rounding.Down);Function totalAssets() public view virtual override returns (uint256) {Return _asset.balanceOf(address(this)); }
一旦有存款,就会为接收者调用铸造函数。 maxMint
是可以在 vault 中为用户或接收者创建的 shares 总量。 作为开发人员,你应该设置此值。
Function mint(uint256 shares, address receiver) public virtual override returns (uint256) { Require(shares <= maxMint(receiver), "ERC20TokenizedVault: mint more than max");
redeem
函数从所有者 (msg.sender) 处燃烧一些 shares,并将资产发送给接收者。 如果 shares 因某种原因无法赎回,则必须还原 redeem
。
Function redeem(address _to, uint256 _shares) public returns (uint256 _value)
maxRedeem
是所有者可以赎回的 vault 中的 shares 数量。
使用预览方法时,开发人员必须记住,这些方法返回的值不会完全精确,但会很接近。 你不应将它们用作预言机。
你可以将预览与其他方法(如 mint
、withdraw
、redeem
和 deposit
)一起使用。
就这样。 你已成功开始使用 ERC-4626 的开发之旅!
随着 ERC-4626 的出现,DeFi 迎来了一股新潮流。
DeFi 聚合器一直发现聚合多个 yield-bearing token 非常困难,因为没有标准。 但现在 ERC-4626 使得通过一次 API 调用即可获得 yield-bearing token 的详细信息成为可能。
通过这个经过实战检验的标准,在很大程度上解决了通过 yield-bearing token 增强 DeFi 应用程序安全性的问题。
各种 DeFi 协议之间使用可组合性和互操作性将在未来几年内增加。 甚至有可能该标准将成为在 DeFi 生态系统中构建和发布全新产品的基础。
\
\
以太坊\
\
以太坊分片:区块链分片简介\
\
什么是区块链分片以及它与以太坊有何关系?
\
\
以太坊\
\
什么是强化交易?\
\
探索一种新的交易类型,保证交易被挖掘并针对 Gas 进行了优化
\
\
以太坊\
\
什么是以太坊承诺级别?\
\
了解安全(已验证)、最终确定和最新承诺级别
Alchemy 将最强大的 web3 开发人员产品和工具与资源、社区和传奇支持相结合。
- 原文链接: alchemy.com/overviews/er...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!