# Yam历史

## YAM版本

Yam协议的初始版本启动于2020年8月12日，之后由于一个致命的系统漏洞，导致失去了对Yam金库基金中资产的控制权限，也因此失去了对项目进行继续治理的可能性。之后项目方宣布了重启计划，并将初始版本YAMv1迁移至临时版本YAMv2，以使社区成员在等待正式版本YAM代码审计期间，可以对最终版本的具体参数设置进行投票表决。2020年9月18日，功能完备的正式版YAM发布，同时开启了YAMv2到YAM的迁移工作。

### YAMv1摘要

YAMv1因致命的系统漏洞而导致无法对项目进行治理，请点击查看[YAMv1事件完整回顾](http://www.apple.com/au/)文章。

YAMv1代币地址：`0x0e2298e3b3390e3b945a5456fbf59ecc3f55da16`

### YAMv2摘要

YAMv2是稳定且功能单一的ERC20代币，在成功募集到足够的代码审计资金后，创始团队部署了YAMv2合约。在等待正式版本YAM代码审计期间，社区成员使用YAMv2对最终版本的具体参数设置进行了投票表决并做出相应的修改。请点击查看[YAMv2临时治理摘要](http://www.apple.com/au/)文章。

YAMv2代币地址：`0xAba8cAc6866B83Ae4eec97DD07ED254282f6aD8A`

### YAM正式版

2020年9月18日，内建基数调整（Rebasing）机制，功能完备的弹性代币YAM正式版发布。同年12月29日，经Yam社区投票表决通过，正式取消了Rebasing弹性供应机制，同时Yam协议的`比例因子系数（Scaling Factor）`也永远定格在2.50这一数值。

YAM代币地址：`0x0aacfbec6a24756c20d41914f2caba817c0d8521`

## Rebase相关内容

经Yam社区投票表决通过，**Yam于2020年12月29日正式取消了Rebasing弹性供应机制。**&#x540C;时Yam协议的`比例因子系数（Scaling Factor）`也永远定格在2.50这一数值。

以下内容仅供存档使用：

### Rebase基本要点

通常来说，基数调整（Rebasing）是一种用来推动代币价格趋于稳定的机制，它通过自动调节供应量来实现这一功能。当代币价格高于目标价格时，供应量增加；而低于目标价格时，则供应量减少。YAM最后锚定的目标价格为1 USDC，同时使用Sushiswap YAM/ETH流动池的数据生成TWAP（时间加权平均价格）的预言机数据，以判定是否有必要对供应量进行调整。

* 如果YAM的价格高于1.05 USDC，则增加YAM的供应量，这被称为正向基数调整（通胀）。
* 如果YAM的价格低于1.05 USDC，则减少YAM的供应量，这被称为负向基数调整（通缩）。
* 如果YAM的价格介于0.95 - 1.05 USDC，则YAM的供应量保持不变，不进行基数调整。

当基数调整发生时，Yam内置的`比例因子系数（Scaling Factor）`也会同时产生变化，并对所有地址上的YAM余额自动进行调整，无一例外。

在Yam协议中，每当正向基数调整（通胀）发生时，YAM供应量增加部分的5%都会被用来在Sushiswap YAM/ETH流动池进行出售，换成ETH作为储备金资产存入由社区共同管理的金库基金。

### Rebase相关计算

在计算供应量变化之前，首先需要确定代币的当前价格与目标价格的偏离比：

* 价格偏离比 = ( 当前价格 - 目标价格 ) ÷ 目标价格

同时，为了降低因供应量调整而产生的剧烈波动，将YAM的价格平滑引向目标价格，Yam协议引入了`变基迟滞参数（RebaseLag）`，这个参数的数值最后被设定为20。

变基迟滞参数会将供应量的调整，分散在20个基数调整周期内进行。也就是说，在没有任何买入/卖出的前提下，经过20次基数调整后，代币价格将与目标价格相吻合。

综合以上，基数调整所产生的供应量变化、新的供应总量，以及金库注入储备金的计算公式，分别对应如下：

* 供应量变化 = 当前供应总量 × ( 价格偏离比 ÷ 变基迟滞参数 )
* 新供应总量 = 当前供应总量 + 供应量变化
* 金库基金注入资金数量 = 供应量变化 × 5%

举例说明，如果目前YAM供应总量为500万枚，当前价格为1.1美元，目标价格为1美元，则相应的数据及计算过程如下：

* 价格偏离比：( 1.1 - 1 ) ÷ 1 = 0.1
* 供应量变化：5,000,000 × ( 0.1 ÷ 20 ) = 25,000
* 新供应总量：5,000,000 + 25,000 = 5,025,000
* 金库基金注入资金数量：25,000 × 5% = 1,250（此部分会售出换成储备金资产后，存入金库基金）
* 分发给YAM持有者数量：25,000 - 1,250 = 23,750

### 最大滑点限制

为了避免因购买储备金资产而对市场价格造成过度压力，Yam协议对该交易行为设置了一个阈值，以降低对价格产生影响，这个阈值被称为`最大滑点（MaxSlippage）`，Yam协议中最后的最大滑点值被设置为5%。

金库基金在出售YAM用于购买储备金资产时，如果触发最大滑点仍未能全部卖出，则剩余部分会在下次基数调整后，继续在不超出最大滑点的范围内进行出售。

### 流动性供给

内建基数调整（Rebasing）机制的弹性代币，并非一种标准的ERC20代币。在功能性上，这一类代币超出了标准的ERC20定义规范。因此，在默认情况下，诸如Uniswap、Sushiswap和Balancer这样的流动性平台，无法正确处理基数调整所导致的代币数量增减。即便流动池内的代币数量因基数调整而产生了变化，流动池也无法进行正确识别，这就导致了恶意交易者或交易机器人可以利用这一漏洞来“盗取”这些代币。

通过向相关流动池添加有效函数调用的方法，可以避免这种情况的发生。对Uniswap和Sushiswap而言，这个函数就是`同步函数 sync()`。目前`同步函数 sync()`已被添加至Uniswap YAM/yUSD流动池、Uniswap YAM/ETH流动池，以及Sushiswap YAM/ETH流动池的合约调用代码中，以确保相关流动池可以正确识别基数调整所带来的代币数量增减。

需要注意的是，除了上述3个流动池之外的所有其它流动池，都没有添加`同步函数 sync()`调用。在基数调整发生时，这些流动池会存在相关风险。

### TWAP预言机

基数调整的相关计算需要使用由Sushiswap流动池提供的TWAP（时间加权平均价格）数据。TWAP预言机用于测算两次基数调整之间的价格变化平均值，也被用来确定YAM代币的当前价格。

由于金库基金资产的购买流动池是YAM/ETH，而YAM的目标价格是1 USDC，因此计算YAM的TWAP价格需要用到YAM/ETH和ETH/USDC两个流动池内的TWAP数据，从而可以推导获得YAM/USDC的TWAP价格。

## Gitcoin捐赠金

在YAMv2临时治理期间，一项关于Gitcoin的提案被提交并通过。该提案批准将金库基金资产的1%捐赠给Gitcoin，用以资助以太坊网络上的公共开源项目。

注：Gitcoin是致力于让开源项目贡献者获得奖金回报的网络平台。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.yam.finance/yam/chinese/history.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
