VRGDA 算法浅析
本文将Paradigm的blog VRGDA做了简单整理,如需了解更多细节,请阅读原文。
概述
VRGDA全称是Variable Rate Gradual Dutch Auctions(可变速率渐进式荷兰拍卖),是Paradigm提出的一种代币发行机制。其目的是通过可定制的代币发行模型,实现渐进式荷兰拍的效果:当市场热度超出预期时,价格上涨;反之,当市场热度低于预期时,价格下跌;而当市场热度与预期一致时,其价格等于设定的目标价格。
在Art Gobblers项目中,有两种NFT通过VRGDA方式进行拍卖:一种是Gobbler,其总量具有固定上限10,000个;另一种是Page,无总量上限。这两种代币发行速率如下图所示:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
定义
函数
为了实现荷兰拍卖的效果,需要寻找一种价格 与时间 的函数,使得随着时间 的增长,价格 呈下降趋势。
有很多函数可以满足要求,如paradigm在GDA文章中提到的:
这里我们选择如下函数:
其中, 为起始价格,由于 ,因此随着时间 增加,价格 将小于 。
假设 , 的时间单位为天,则其表示每天的价格为前一天的70%。
价格(纵轴)与时间(横轴)曲线如下图所示:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
参数
定义如下参数:
- - 目标价格,如果NFT按照计划的速度拍卖,即市场热度符合预期,则每个NFT都将以该价格卖出
- - 在单位时间内,如果没有NFT成交,则NFT价格按照该百分比递减
- - 代币发行模型,在时间 内,预计将有多少数量的NFT发行
我们使用 替换公式(1)中的 ,可得:
假设 , 的时间单位为天,起始价格为 ,则表示如果没有成交,每天价格下降30%(为前一天的70%)。
代币模型
到目前为止,公式(3)已经实现了价格随时间下降的效果。
为了使价格能够反映市场热度,我们使用 代替 ,即用一个由已拍卖代币数量 定义的函数 来控制 。
我们希望 能够实现以下效果:
- 如果拍卖进度快于预期,则下一个NFT的起拍价格大于
- 如果拍卖进度慢于预期,则下一个NFT的起拍价格小于
- 如果拍卖进度等于预期,则下一个NFT的起拍价格等于
假设拍卖进度等于预期,我们可以得出:
可知此时 ,因此 可以看作时间与代币数量的函数,即代币数量与时间函数 的反函数:
其中,代币数量与时间函数 ,即为代币发行模型。
因为 ,如果拍卖进度快于预期,则 ,即 ,因此 ,可知:,即起拍价格大于 ;同理,如果拍卖进度慢于预期,则 ,即起拍价格小于 。
特别地,当市场过热时,拍卖价格会急速上升,以降低市场热度,可以防止巨鲸批量拍卖。
这就实现了拍卖价格与市场热度相互作用。
VRGDA公式
VRGDA最终公式如下:
其中,
- - 目标价格
- - 每单位时间价格衰减百分比
- - 时间与代币数量的函数,即代币发行模型 的反函数
- - 起拍到当前的时间
常见的代币发行模型
接下来我们以几个常见的代币发行模型为例,介绍VRGDA算法。
线性
假设预期每天卖出 个NFT,则代币数量与时间的函数(发行模型)为:
对应的曲线为:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
其反函数(时间与代币数量的函数)为:
代入公式(6)可得,线性发行速率的VRGDA公式为:
平方根
假设预期第1个NFT在第1天卖出,第2个NFT在第4天卖出,第 个NFT在 天卖出,即代币数量与时间的函数为:
对应的曲线为:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
其反函数为:
代入公式(6)可得:
逻辑函数
逻辑斯蒂函数(Logistic Function)是一种S型函数,简化定义为:
其可将任意输入压缩到的范围内,如图所示:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
我们可以使用逻辑函数作为具备总量上限的发行模型函数。
首先将函数沿纵坐标下移0.5(因为时,),取 ,则 ,函数表示为:
假设我们希望代币总量为 ,可将上述公式放大 ,并引入一个时间乘数 以控制发行速率,即可得到发行函数:
当 时,可得:
因此可以选择 为使得代币发行量达到总量的46%的时间。比如,如果希望100天以后发行量达到总量的46%,则 ,因此 。
可计算 的反函数为:
代入公式(6),可得到基于逻辑函数的VRGDA公式:
对应的代币发行曲线如下图所示:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Art Gobblers 中的 VRGDA
在 Art Gobblers 项目中,Gobbler和Page两种NFT使用VRGDA方式拍卖,其中:
- Gobbler使用逻辑函数作为发行模型,其总量上限为10,000个
- Page使用了逻辑函数和线性发行相结合的方式,在一定时间后切换到线性发行,其总量无上限
以Gobbler为例,我们看看源码中是如何定义VRGDA拍卖相关参数的:
constructor(
bytes32 _merkleRoot,
uint256 _mintStart,
Goo _goo,
Pages _pages,
address _team,
address _community,
RandProvider _randProvider,
string memory _baseUri,
string memory _unrevealedUri
)
GobblersERC721("Art Gobblers", "GOBBLER")
Owned(msg.sender)
LogisticVRGDA(
69.42e18,
0.31e18,
toWadUnsafe(MAX_MINTABLE),
0.0023e18
)
这里只需关注最后几行:
- 69.42e18:即目标价格(起始价格)
- 0.31e18:表示如果一天内没有拍卖成功,则价格变为前一天价格的
- MAX_MINTABLE:最大可拍卖数,即 (注意,不是 )
- 0.0023e18:即时间乘数, 表示预期在435天后拍卖出总量46%的代币,根据gobbler的拍卖计划,大概在第15个月(435天左右)达到拍卖量的46%。
总结
VRGDA提出了一种可定制代币模型的渐进式荷兰拍卖方式,让市场参与拍卖代币的定价。实际上该算法不仅可以应用在NFT拍卖中,也适用于ERC20代币拍卖。VRGDA算法本质上是一种AMM,通过算法动态调整市场价格。
参考文章