Yam历史

有关Yam金融的发展历程、重要事件转折,以及协议内容的变化更新,您都可以在这里找到答案。

YAM版本

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

YAMv1摘要

YAMv1因致命的系统漏洞而导致无法对项目进行治理,请点击查看YAMv1事件完整回顾文章。

YAMv1代币地址:0x0e2298e3b3390e3b945a5456fbf59ecc3f55da16

YAMv2摘要

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

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弹性供应机制。同时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是致力于让开源项目贡献者获得奖金回报的网络平台。

Last updated