撰文:雷达熊,dodo 创始人

一个有效的市场包含巨量信息,这些信息承载了市场对价格的判断。但是链上计算资源有限,要在链上实现一个高度灵活的市场,就好像要把大象塞进冰箱。

把大象塞冰箱这种事情并不罕见,互联网历史上已经有过几次壮举。例如图像压缩,音频压缩。

压缩的本质是提取最重要的特征,抛弃不重要的细节信息。

其中 i 是 第一个参数 「mid price」,k 是第二个参数 「slope」。

B 表示当前的 Base Token 库存,B0 表示初始 Base Token 库存,(B0-B)/B0 用来表示有百分之多少的 BaseToken 被消耗掉了。

这一公式可以使得价格随着 Base Token 被卖出的数量线性增长。

但是,线性真的是描述流动性最好的方法吗?并不是,线性描述有两个局限:

这个公式可以满足随着 B 的减小,P 不断增大,直至无穷大。但是要怎么把斜率的影响加进去呢?

上式中,k 的取值范围是 [0,1],决定了价格的斜率。

当 k=0 时,价格完全不变

当 k=1 时,价格斜率退化到上一个版本的公式

k 越大,价格变化越敏感。k 越小,价格变化越不敏感。

在 B0/B 外面加一个平方项,这样积分后就变成了一个简单的除法。

令人惊叹的是,当 k=1 时,这条曲线正是 AMM 所定义的 bonding curve。这种巧合使我们相信,这是一套更加触及市场本质的算法。

延伸阅读:《PMM 退化为 AMM 的推导》

PMM 算法是对 Orderbook 市场的高度压缩,参数简单,却极度灵活。

这使得我们在冰箱如此狭小的空间内,拥有了堪比大象的能力。

下面我来列举,通过调整参数和充提规则,这套算法可以实现哪些 use case。

Use Case 1 跟随外部市场价格的主动做市

这一 use case 的应用场景是拥有巨大外部市场的主流币,例如 ETH BTC 等

PMM 可以实现主动调整盘口价格,减少 IL。获得比 AMM 更高的资金利用率,并且持有单币种就能提供流动性

设置如下:

将价格 i 设置为外部市场价格

将 k 设置为小于 1 的数字

允许任何人单边充提

这一 Use Case 我们称之为 DODO Classic Pool。

Use Case 2 轻资本需求的自动做市算法

这一 use case 应用于没有主观定价能力的长尾币市场,将定价权完全交给 taker

通常来讲,长尾币都是新资产,在 AMM 框架下没有足够的卖盘流动性,因而导致其流动性长期匮乏

延伸阅读:《PMM 可以帮助这些资产获得充足的卖盘流动性》

设置如下:

将价格 i 设置成起始发行价

任意设置 k

第一笔充值可以以任意资产比例,且不改变市场价

后续充值(或提现)必须按照当前资产比例同时操作两种资产

这一 Use Case 我们称之为 DODO Vending Machine。

Use Case 3 完全自由的做市算法

这一 use case 为那些雄心勃勃,想要大展拳脚的做市商准备。(做市商也可以是项目方或个人)

在此 use case 下,资金池的全部资金都归做市商所有。所有参数都可以调整,做市商可以根据他的判断为资产灵活定价。同时做市商可以任意充提单一币种,而不影响市场价格。

例如:

在 ETH=700USDT 附近做市,使用很小的 k 获得非常有竞争力的流动性,并赚取大量手续费。当察觉到 ETH 有上涨预期时,撤出 ETH 库存以减少单边风险。但这一操作并不削弱买盘流动性。

新资产发行项目方只提供代币而不提供资金。在 1$ 开始销售代币。为了让更多人以合理价格买到代币,设置了较小的 k,使得代币上涨温和。随后项目方发现需要使用资金,则可以直接提出资金池中的资产,而不损害卖盘流动性,即用户仍然可以买到大量廉价代币。

设置如下:

这一 Use Case 我们称之为 DODO Private Pool。

Use Case 4 流动性众筹

我们可以将新资产发行分为两阶段:

这一 Use Case 我们称之为 CrowdPooling。

Use Case 5 退化为 AMM

设置如下:

设置 k=1

必须按照当前价格比例同时充提两种资产

算法表现即和 AMM 相同。

Use Case 6 稳定币交易

设置如下:

i=1

k=0.001 (这个值越小,越接近稳定币刚性兑换)

算法表现可以与 curve 相同,并且更灵活,可以比 curve 更接近刚性兑换,或更接近 AMM。

来源链接:medium.com