---
title: "什么是 ERC-4626 代币标准？"
description: "了解新的金库代币化标准及其在 DeFi 项目中的实现方式"
---

# 什么是 ERC-4626 代币标准？

虽然目前存在几种主流的代币标准，[去中心化金融（DeFi）](https://www.alchemy.com/overviews/guide-to-defi)领域在代币化金库方面仍然存在一个反复出现的重大问题。这促成了最新标准 ERC-4626 的诞生。

本文将解释什么是金库、开发者在代币化金库时面临的问题，以及 ERC-4626 如何解决 DeFi 开发中的这一问题。然后我们会深入探讨这一标准带来的新变化，并展示如何在智能合约中实现它们。

## **什么是金库？**

金库是一种多签解决方案或智能合约，可以存储和管理加密资产等资产。每个金库都会产生对应的代币作为收益的一种形式。这些生成的代币之后可以兑换回最初锁定在金库中的代币。

例如，当你在自动做市商（AMM）Sushiswap 上质押 Sushi 时，你会获得 xSushi 作为奖励。类似地，当你在 DeFi 借贷协议 [Compound](https://www.alchemy.com/dapps/compound) 上通过收益耕作（yield farm）USDC 稳定币时，你也会获得 cUSDC。

cUSDC 和 xSushi 都是计息代币（yield-bearing token），可以兑换回原始代币（在此例中即 USDC 或 SUSHI）。只要金库或资金池中锁定的代币在增加，计息代币的价值就会随之上升。

金库被认为比钱包更好、更安全，这也是许多 DeFi 协议选择将资金存入金库的原因。使用金库的知名 DeFi 协议包括 Sushiswap、[Aave](https://www.alchemy.com/dapps/aave)、[Balancer](https://www.alchemy.com/dapps/balancer) 和 Compound 等。

## **代币化金库存在什么问题？**

开发者在处理计息代币时面临的问题在于如何整合不同协议的代币。

例如，如果你想[构建一个 DeFi 应用](https://www.alchemy.com/docs/alchemy-quickstart-guide)，需要整合各个协议的代币，你就得逐一研究每种代币，了解其收益累积模式，并将其调整适配到你的代码库中。

如果你想整合 Maker DAO 的 vDAI、Curve 上的 stETH 等等，你需要理解这些智能合约各自的特殊之处，并构建自定义方案才能成功将它们整合进你的 DeFi 应用。

除了整合不同计息代币这一过程本身既繁琐又耗时之外，由于潜在的错误，它还会增加智能合约风险。

开发者需要花费更多时间检查适配器中的潜在漏洞，在某些情况下，甚至可能需要将这项工作外包给智能合约审计人员，而这可能相当昂贵。鉴于目前有大量协议和 DeFi 应用的安全性遭到攻击者破坏，这一点变得更加重要。

## **ERC-4626 标准是谁提出的？**

2021 年底，Fei Protocol 创始人 Joey Santoro 注意到开发者整合各自独立的计息代币十分困难，于是带领另外四名 Ethereum 开发者提交了[**Ethereum Comment Proposal 4626**](https://eips.ethereum.org/EIPS/eip-4626)（ERC-4626）。

经过多轮审查和讨论后，Ethereum 最终在 2022 年 5 月批准了该标准。

## **ERC-4626 对金库有哪些好处？**

ERC-4626 的主要好处在于它将代币化金库标准化，使协议整合变得更容易、更不易出错。

由于现在有了一个可以直接整合的通用标准，实际上不再需要为每个协议单独构建适配器。简而言之，它加快了开发速度，将可组合性发挥到极致。

同样，由于构建者不再需要审计人员来协助其适配器和接口，成本也随之降低。最重要的是，ERC-4626 增强了处理计息代币的[应用](https://www.alchemy.com/dapps/top/defi-dapps)和收益聚合器之间的安全性。

## ERC-4626 标准引入了哪些变化？

**有了新的 ERC-4626 代币标准后，开发者在构建涉及收益代币的 DeFi 应用时，终于有了统一的标准可循。**

简而言之，ERC-4626 标准实现了以下特性：

- 为想要接入该标准的开发者提供优化的金库接口
- 存款时给予份额（shares）作为回报，份额代表对金库底层代币的部分所有权
- 为开发者构建计息合约提供一致的标准
- 经过实践检验的金库代币安全性

## **ERC-4626 的工作原理：函数与事件**

ERC-4626 是[ ERC-20](https://www.alchemy.com/docs/how-to-interact-with-erc-20-tokens-in-solidity) 标准的扩展，并与之兼容。因此，ERC-20 代币合约中适用的大多数常规变量、事件和函数在 ERC-4626 金库标准中依然适用。

该金库标准引入了"份额"（_shares_）这一概念，作为从整个资金池中获得部分所有权的方式。这些 _shares_ 指的就是计息代币。

现在让我们开始使用 ERC-4626 进行开发。

虽然你也可以使用 Cairo、Viper 等语言，但我们将使用 [Solidity](https://www.alchemy.com/overviews/solidity) 来编写这份合约。

### **1. 将 OpenZepellin 扩展导入你的 IDE**

打开你的 IDE（我们推荐使用 Remix）后，指定编译器所使用的 Solidity 版本。

在本例中，声明你使用的是 0.8 版本。之后，你需要导入两个 [OpenZeppelin](https://www.alchemy.com/dapps/openzeppelin) 扩展：ERC-20 和 ERC-4626。

接下来，创建并命名一个合约。

### **2. 创建你的合约**

命名你的合约，并进一步确定它同时基于 ERC-20 代币和 ERC-4626。

_Contract, testingVaults is ERC20, IERC4626 \{ your entire code here\}_

### **3. 实现该标准**

创建合约后，你需要了解该标准中方法、函数和事件的一些重要变化。接下来，我们看看 ERC-4626 中的一些方法和事件：

#### 存款（Deposit）

当用户向金库存入资金时，deposit 函数会触发智能合约向存款人铸造相应数量的份额。作为一个事件，每当发生存款时，智能合约必须触发该事件。

通过这个函数，我们指示合约将一定数量的代币存入金库，并将份额的所有权赋予调用者。提款函数的编写方式与此类似。

#### **提款（Withdrawal）**

提款函数帮助所有者销毁份额以换取资产。当从金库中提款时，必须触发提款事件。

该事件中的 address indexed \_from 代表批准将代币存入金库的用户，而可以提取已存代币的人则是 *address indexed \_to*。

#### Asset 与 totalAsset

金库代币的地址应在 _asset_ 函数中使用。智能合约中底层资产的总量应在 *totalAssets* 中声明。

#### convertToShares 与 convertToAssets

在 ERC-4626 标准下，有两个转换函数：`convertToShares` 和 `convertToAssets`。

当你需要将资产转换为份额时，`convertToShares` 是应该调用的正确函数，因为它会返回对应该资产数量应发放的份额数。

反之，`convertToAssets` 的作用方向相反，用于将份额转换为资产。

#### **铸造（Mint）**

当发生存款时，mint 函数会为接收者调用。`maxMint` 是金库中可以为某个用户或接收者创建的份额总量。作为开发者，你需要设置这个值。

#### **赎回（Redeem）**

`redeem` 函数会销毁所有者（msg.sender）的一定数量份额，并将资产发送给接收者。如果由于某种原因份额无法被赎回，`redeem` 必须被回滚（revert）。

`maxRedeem` 是所有者在金库中可以赎回的份额数量。

#### 预览（Preview）

在使用 preview 系列方法时，开发者必须清楚，这些方法返回的值并不完全精确，但会足够接近。你不应将它们当作预言机（oracle）来依赖。

你可以将 preview 与其他方法结合使用，例如 `mint`、`withdraw`、`redeem` 和 `deposit`。

到这里就完成了。你已经成功开启了 ERC-4626 的开发之旅！

## **总结——ERC-4626 的未来**

随着 ERC-4626 的出现，DeFi 领域正迎来一波新的浪潮。

由于此前没有统一标准，DeFi 聚合器一直很难聚合多种计息代币。但现在，借助 ERC-4626，只需一次 API 调用就能获取计息代币的详细信息。

借助这一经过实践检验的标准，为增强涉及计息代币的 DeFi 应用安全性而额外付出的努力问题，在很大程度上得到了解决。

未来几年，各 DeFi 协议之间可组合性和互操作性的应用将不断增加。这一标准甚至有可能成为构建和推出 DeFi 生态系统中全新产品的基石。
