风投Paradigm:一文了解 NFT 恒定速度发行销售协议
作者:Dave White,Frankie,Paradigm研究员
Justin Roiland,知名动画《瑞克和莫蒂》(Rick and Morty)主创之一
编译:Kyle
介绍
本文介绍了恒定速度发行销售协议(CRISP),这是一种定价机制,旨在随着时间的推移以目标速度销售 NFT。
如果我们想每天卖出 100 个 NFT,但实际只能卖出 10 个,那么 CRISP 会慢慢降低“立即购买”的价格。如果我们想每天卖出 100 个 NFT,但实际能够卖出 200 个,那么 CRISP 会在每次新卖出时迅速提高“立即购买”的价格。
我们提供了一个 Python notebook 来模拟这个机制的行为,以及一个参考 Solidity 实现。
动机
想象一下,你有一套无限数量的 NFT,你想以固定的速度出售——比如每天 100 个。
你可以设计一个拍卖系统来实现这个目标。你可以在一次拍卖中出售所有 100 个,或者可能举行 100 次不同的拍卖,每次拍卖一个 NFT。
但是,拍卖的用户体验可能非常笨拙——拍卖需要花费 gas,我们希望用户能够随时购买其中一个 NFT,而无需等待拍卖终止。
机制
概述
CRISP 跟踪 NFT 的销售速度,并将其与目标速度进行比较。
当 NFT 的销售速度相对于目标价格过快时,我们希望能够快速调整价格。与目标速度相比,销售速度越高,我们想提高价格的速度就越快。
另一方面,当 NFT 的销售速度相对于目标速度太慢时,我们不希望过于仓促降低价格。毕竟,在过去的某个时候,有足够的需求来支撑当前的价格。因此,随着时间的推移,我们会慢慢降低价格。
销售速度
我们使用指数移动和或 EMS 来衡量销售速度。
EMS 是对指数移动平均线的调整,通常用于量化交易,以衡量某个数量在最近加权时间窗口内的累积。它的计算成本很低,并且需要很少的存储空间。
CRISP EMS特别是用来跟踪最近一段时间内出售的 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 示例。 起初,购买速度太高,所以每次购买都会涨价。 经过一段时间的没有购买,价格和购买速度大致稳定。
代码
Python notebook 和 Solidity 实现
结论
我们希望 CRISP 能够解锁一系列酷炫有趣的 NFT 动态。
如果您发现任何问题或想到任何改进,我们很乐意听取您的意见! 您可以在 Twitter 上通过 @_Dave__White_、@FrankieIsLost 和 @justinroiland 联系我们。
附录
将目标销售速度转换为目标 EMS:证明
假设我们的目标是每第 n 个区块销售 1 次。 然后,使用公式 (1),第 k^{th} 次销售的区块上的 EMS 为
这是一个几何级数,收敛于
因此,我们可以在目标销售速度和目标 EMS 之间进行转换。