作者:DaveWhite,Frankie,JustinRoiland
原文标题:《ConstantRateIssuanceSalesProtocol》
编译:Kyle,DiFi之道
介绍
本文介绍了恒定速度发行销售协议,这是一种定价机制,旨在随着时间的推移以目标速度销售NFT。
如果我们想每天卖出100个NFT,但实际只能卖出10个,那么CRISP会慢慢降低“立即购买”的价格。如果我们想每天卖出100个NFT,但实际能够卖出200个,那么CRISP会在每次新卖出时迅速提高“立即购买”的价格。
我们提供了一个Pythonnotebook来模拟这个机制的行为,以及一个参考Solidity实现。
动机
想象一下,你有一套无限数量的NFT,你想以固定的速度出售——比如每天100个。
你可以设计一个拍卖系统来实现这个目标。你可以在一次拍卖中出售所有100个,或者可能举行100次不同的拍卖,每次拍卖一个NFT。
但是,拍卖的用户体验可能非常笨拙——拍卖需要花费gas,我们希望用户能够随时购买其中一个NFT,而无需等待拍卖终止。
机制
概述
CRISP跟踪NFT的销售速度,并将其与目标速度进行比较。
当NFT的销售速度相对于目标价格过快时,我们希望能够快速调整价格。与目标速度相比,销售速度越高,我们想提高价格的速度就越快。
另一方面,当NFT的销售速度相对于目标速度太慢时,我们不希望过于仓促降低价格。毕竟,在过去的某个时候,有足够的需求来支撑当前的价格。因此,随着时间的推移,我们会慢慢降低价格。
销售速度
我们使用指数移动和或EMS来衡量销售速度。
EMS是对指数移动平均线的调整,通常用于量化交易,以衡量某个数量在最近加权时间窗口内的累积。它的计算成本很低,并且需要很少的存储空间。
CRISPEMS特别是用来跟踪最近一段时间内出售的NFT数量,该时间段由销售平均半衰期定义。平均半衰期为100的销售意味着100个区块前的销售只会增加当前EMS的1/2。
区块b中的EMS递归定义为:
其中S_b是一个变量,表示在区块b中发生的销售数量。
给定两个区块b_1和b_2,假设区块之间没有发生销售,我们有
我们可以使用上述公式将目标销售速度转换为一个目标EMS。假设我们的目标是每n个区块进行1次销售,那么目标EMS应该是
提高价格
如果当前的EMS高于目标,则根据定义,销售速度则太高了。因此,我们希望为下一个NFT销售收取更多费用,因为这会减少需求,或者至少会增加收入。
相对于期望的价格,我们卖出NFT的速度越快,我们更新价格的速度就越快。所以,我们定义一个变量
然后设定
其中价格上涨速度控制价格对目标价格和观察价格之间差异的反应速度。
在此示例中,我们在200个区块的周期内对CRISP进行建模。我们的目标是每100个区块进行一次销售,并使用700个区块的销售半衰期。在给定的时期内,我们看到每50个区块发生一次购买,这超出了我们的目标。这会在每次购买时将EMS推高,价格也会相应做出反应。
降低价格
当前EMS低于目标时,销售速度太低。因此,我们希望为下一个NFT收取更少的费用,使其成为更具吸引力的购买方式。
但是,我们希望随着时间的推移缓慢降低价格,因为我们设法以之前的价格达到了目标速度,而且我们不希望降价超过我们必须的水平。
假设最后一笔交易发生在区块b_1的price_{b_1},那么区块b_2的价格由下式给出:
其中价格衰减半衰期控制衰减速度。
因为我们只想在销售速度低于目标时衰减价格,如果当前销售是自销售速度低于目标速度后的第一次销售,我们从低于目标时的区块开始计算衰减,而不是从自上次销售以来的时间。
在此示例中,我们在300个区块的周期内对CRISP进行建模。同样,我们的目标是每100个区块进行一次销售。在给定的时间段内,只有一次购买发生在第200个区块。我们看到当前EMS在前200个区块上缓慢下跌,但价格直到第100个区块左右才开始下跌,此时当前EMS跌破目标。由于购买后,EMS仍然低于目标,价格没有上涨。
完整示例
一个较长时间段的CRISP示例。起初,购买速度太高,所以每次购买都会涨价。经过一段时间的没有购买,价格和购买速度大致稳定。
代码
Pythonnotebook和Solidity实现可在?https://github.com/FrankieIsLost/CRISP?获得。
结论
我们希望CRISP能够解锁一系列酷炫有趣的NFT动态。
如果您发现任何问题或想到任何改进,我们很乐意听取您的意见!您可以在Twitter上通过@_Dave__White_、次销售的区块上的EMS为
这是一个几何级数,收敛于
因此,我们可以在目标销售速度和目标EMS之间进行转换。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。