搜索
NFT元宇宙Web3
近期热门

如何为token模型制作联合曲线

Founder

亲爱的朋友们,大家好,我是公众号老雅痞的小编波动,雅痞哥为了敦促我学习区块链/DAO/NFT知识,我们将单独开始一个专栏,从零开始学习。每天在公众号FastDaily和老雅痞各更新一篇。

让我们每天学点新东西,争取不白活。

欢迎大家和我一起学习进步(微信yaoyaobigc)~揪咪~

这是关于如何制作自己的联合曲线的技术入门,然后讨论所涉及的机会和风险。如果你对该技术不感兴趣,请跳到最后以获取一些一般性见解。

作者:斯拉瓦·巴拉萨诺夫 Relevant 创始人 – 基于人类价值观的去中心化策展协议,写于2018 年 2 月 6 日

如何为代币模型制作联合曲线

什么是联合曲线?

最近有很多关于策展市场背后的想法的新的兴奋,这个术语由西蒙·德拉鲁维埃提出:

  • 策展市场的核心功能组成部分包括:
  • 可以根据智能合约设定的价格随时(连续)铸造的token 。
  • 随着越来越多的token 在流通,这个价格变得越来越贵。
  • 为token 支付的金额保存在公共存款中。
  • 在任何时间点,都可以从活跃供应中提取(“销毁”)token ,并且可以提取一定比例的公共存款。
  • token 用于将其与每个子主题的策展人联系起来,然后策展人以他们的比例支持来管理信息。

如何为代币模型制作联合曲线

在策展市场中,token 是根据“联合曲线”买卖的——一个将 token 价格定义为 token 供应函数的方程。

以下是二次联合曲线的示例:

currentPrice = tokenSupply²

如何为代币模型制作联合曲线

当用户想要购买 10 个 token 时,合约会铸造 10 个新 token ,计算它们的价格并将这些token 发送给用户以换取以太币(或其他储备token )。

但是计算我们应该为这10个新的token 收取多少钱并不是一件简单的事情。人们可能认为它应该是10 * currentPrice,但这是不正确的,因为创建每个新的 token 都会增加价格,所以用户必须为每个后续的 token 支付比currentPrice多一点的价格。

一种简单的方法是迭代新 token 并在每次迭代时更新价格。然而,这非常低效且不准确,因为即使 token 供应量的最小变化(如 .1 token )也会改变价格。

我们要做的是计算所有无限小的价格变化的总和。这与计算联合曲线下的面积相同——我们可以轻松地做到这一点。

例如,为了计算我们的二次联合曲线合约持有的总以太币(poolBalance),我们计算价格函数的积分:

poolBalance = 1/3 * tokenSupply³

这与我们曲线下 0 和 tokenSupply 之间的区域相同:

如何为代币模型制作联合曲线

由此我们可以得出我们应该为 10 个新 token 收取多少费用:

priceForTokens = 1/3* (tokenSupply + 10)³ — poolBalance

如何为代币模型制作联合曲线

使用这种方法,我们可以根据任何幂函数y=x^p计算联合曲线的公式。示例代码包括y=m * x²、y=m * x和y = m * sqrt(x)的情况

班科公式

不过我们可以做得更好。还记得班科尔吗?去年夏天用 40 行代码筹集了 1.53 亿美元的 ICO?好吧,该代码用于计算一般类型的联合曲线。

幂函数的一个很好的特性是我们可以用准备金率来定义我们的联合曲线。储备比率由 token 价格、token 供应量和poolBalance之间的关系来定义。

ReserveRatio = poolBalance / (currentPrice * tokenSupply)

在我们的y=x²函数中,poolBalance = 1/3 * tokenSupply³,所以我们可以重写准备金率公式:

ReserveRatio = 1/3 * tokenSupply³ / (tokenSupply² * tokenSupply) = 1 / 3

所以我们可以将我们的二次曲线表示为准备金率为 1/3 的 token 。类似地,y=x是 ReserveRatio 为 ½ 的曲线,y=sqrt(x)是 ReserveRatio 为 2/3 的曲线。

Bancor 的公式允许我们计算准备金率在0 -100%之间的任意曲线的 token 价格(你可以在他们的白皮书中阅读更多详细信息)。事实上,他们自己的 BNT token 可以通过具有1/10准备金率的智能合约进行买卖。

影响

联合曲线允许我们创建一些很酷的 token 模型。

流动性

明显的优势就是即时流动性——你可以创建一个合约,让任何人都能立即买卖你的 token 。

买卖价差和动态通货膨胀率

由于合约充当做市商,你可以定义自己的买卖差价,并在用户买卖 token 时收取少量溢价,并通过提供流动性产生收入。这也是一种减轻 pump-n-dump 攻击的方法,而 token 是它的初级阶段——如果我们使用具有较低准备金率的卖出曲线,攻击的利润将会降低。

更有趣的是,你可以定义单独的(甚至是动态计算的)买卖曲线。同样,这些功能作为动态买卖差价,并允许你根据自己的喜好分配收益。

在Relevant,我们计划使用买卖差价来创建具有动态计算通胀率的通胀 token 。新铸造的 token 将用于奖励用户策划高质量的新闻提要。

具有动态通货膨胀率的 token 示例:

初始化:

  • 最大通货膨胀率 = 10%
  • 起始比率 = 20%
  • 最小储备率 = 10%

如上,我们的准备金率是:

ReserveRatio = poolBalance / (totalSupply * tokenPrice)

但它现在是动态的,因为总供应量随着通货膨胀而增加。

我们的“买入”曲线基于20% 的起始比率,我们的“卖出”曲线是根据实际准备金率动态计算的,但不允许低于10%。

如何为代币模型制作联合曲线

红色 = 卖出曲线,黄色 = 买入曲线

我们从基于20%准备金率的两条曲线开始,但随着时间的推移,我们会根据通货膨胀率铸造新的token 。结果,我们的供应量增加了,但poolBalance保持不变。这开始将卖出曲线推向接近10%的比率。发生这种情况时,我们将通货膨胀率调整为20% —— reserveRatio。随着reserveRatio接近10%的比率,通货膨胀率下降到0 %。但是,如果对 token 的需求很大,并且人们根据20%的曲线购买,储备率会上升到接近20%,通货膨胀率上升到最高10%。

最终,交易所将能够提供比我们的合同更具竞争力的买卖差价。一旦我们的 token 变得足够流动,可以在交易所交易,大部分交易将开始在那里进行,价格介于合约提供的买卖价差之间。一旦交易所价格高于或低于买入/卖出曲线,合约将提供套利机会,调整通货膨胀率并根据需要铸造或销毁token 以匹配交易所价格。

联合曲线和 ICO

你可以使用联合曲线token 进行 ICO。Bancor ICO 就是这样一个例子。他们使用ICO 筹集的20%的资金来初始化10%的联合曲线token 合约。token 总供应量的一半分配给了 ICO 贡献者,一半分配给了创始人。结果,token 总市值的10%得到了以太币的支持。

然而,Bancor的token 销售远非示范性的,在设计上更接近于普通的无上限ICO。主要的创新之处在于即时的 token 流动性和动态的 token 供应。

一种更新颖的方法是在进行 ICO之前启动你的token 并使其具有流动性——这种动态对于在进行销售之前测试市场对实用token 的需求特别有用。

操作方法:

使用所需的储备率创建一条联合曲线,例如20%。

在token 发布时,分配一个icoFund——由合约所有者控制的token 数量,不受 Ether 支持,也不能通过合约进行交易。

让用户根据考虑icoFund的曲线买卖token (totalSupply = tradableTokens + icoFund)。该计算假设 icoFund token 由资产支持,即使它们不是,但这很好,因为icoFund中的 token 不可交易。

宣布 ICO 开始时间并以当前token 价格设置价格——这将在icoFund中创建一个自动上限 = currentPrice * token 。

当参与者向 ICO 合约发送 Ether 时,将余额的20%存入token 合约poolBalance中,将适当数量的icoFund token 转换为普通 token 并发送给参与者。

创建单独的买卖曲线并降低立即出售 token 的利润也可以限制拉高和抛售风险。

这种模式仍然可以被滥用来欺骗投资者,但是如果设置正确并具有完全的透明度,它可以提供保护,免受创始人的操纵和滥用造成的暴涨暴跌。

网络内“本地令牌”

如何为代币模型制作联合曲线

正如两位 Chris Burniske 和Simon de la Rouviere提出的,本地粘合曲线 token 可以在 token 化平台中使用,以激励用户创建子社区或通过 token 策划的注册表来策划子主题。

攻击向量与安全

抢先攻击

联合曲线容易受到先行攻击。当一个对手观察到一个大的买入订单进来的同时,发送她自己的买入订单,并在原始订单之前削减更多的gas。一旦原始订单被执行,攻击者就会为了保证利润出售她的t oken 。

Bancor 提出的解决方案是对买家和卖家可以提交的 gas 价格设置一个限制,并鼓励每个人在发送订单时使用允许的最高 gas 价格。这可以防止对手在已经提交的订单之前执行他们的订单。

另一个不太有效的解决方法是要求用户提交他们想要购买的最低token 数量。这样,如果在提交订单后价格上涨,除非合约能够达到最低金额,否则它不会执行。

深度嵌套的联合曲线增加了风险

在我们有几层子 token 的情况下,每一层都有自己的联合曲线,风险是复杂的。

假设 Alice 创建了一个由 ETH 支持的具有10%准备金率的平台 token 。她允许用户创建任意数量的子 token ,每个子 token 都有自己的子token 和联合曲线。

Bob 创建了他自己的token ,具有50%的准备金率,由 Alice 的 token 支持。Bob 的 token 价格现在仅由0.1 * .5 = 5%的 Ether 支持。

Carol 创建一个拥有Bob token  20%储备的 token 。Carol 的 token 现在仅由0.1 * .5 * .2 = 1%的 Ether 支持,并且非常不稳定。

平台需要想办法限制这些场景并使风险对用户透明。一种解决方案是限制嵌套准备金率,使其不超过最低复合准备金率。

编辑于 2022-05-13 04:07
「 真诚赞赏,手留余香 」
赞赏

发表评论已发布0

手机APP 意见反馈 返回顶部 返回底部