AESwap系列:一文读懂市商和自动化市商

在社区用户们的热切期待下,这周,AESwap终于和大家见面了。在这一阶段,aelf让大家使用测试ELF token体验AESwap。
很多人都知道DeFi很火爆,但是对具体项目并不熟悉,我们能看到各类swap产品,比如Uniswap、JustSwap、SushiSwap等等。本文会从较为基础的层面为大家解读这类swap,让大家对DeFi本身有一个入门的理解。
本文的题目叫《市商和自动化市商》,其实已经表明了这类swap的本质。它们被称为“自动化市商”,英文为automated market maker。它为两部分,第一部分automated,是自动化的意思,即把原本手动完成的事情自动化起来;第二部分是market maker,即市商,也是本文要讨论的对象。
如果你炒股票,相信你一定对市商再熟悉不过了,不过本文考虑到了没有炒过股票的朋友们,所以会对市商展开说明。
那么,什么是市商?更准确的说,market maker是做什么的?
注意,下面我会使用market maker,即“MM“代替“市商”二字,这样会带来十分直观的理解。
在金融领域,market maker就是制作或者促成一个市场的人或者机构,一般都会以代理商的形式出现,比如交易所。他们会购买一些公司的股票,然后标注卖出价格和买入价格,也就是说,他们会有一个ask——卖出的价格,以及一个bid——买入的价格。比如A公司在这家交易所里的ask是10美金一股,而bid却是9美金一股,这是因为交易所要赚取这1美元的差价,作为其收入来源。如果有一个手持现金的人要买入A公司的股票,他只能以10美金购买,相反,如果他持有该股票想卖,他只能以9美金卖出。
在这个例子里,这个人最终用10美元买了A公司的股票,这就是A股票现在的价格,即它最后一次被交易的时候的价格。此外,除了交易所自身可以设定买卖价格,任何人都可以设定它的价格,比如A公司的股票的交易量超级大,这时候一定有许多的人——先把事情简单化——持有A公司的股票,并设定卖出它的价格。这时候,如果张三觉得它很值钱,他可以设定卖出价为12美金,并卖出200股,这个“12美金,200股,卖出”就是所谓的订单,即order。现在李四觉得它不是那么值钱,他就把卖出价设定为11美金,并卖出300股,王五等其他人也会这样设定价格。另外,也有许多人想买入A公司的股票,和卖家的心理活动相似,买家会设定自己觉得值得购买的价格和购买的数量。这样,我们可以看到这些人形成了一系列订单记录。
卖方
……
13美金:500股
12美金:100股
11美金:250股
10美金:300股
买方
9美金:100股
8.5美金:300股
8美金:350股
7美金:400股
……

而这个订单记录就是所谓的order book,即国内的“盘口”。它是判断股票价格短期波动方向的主要工具,而和它搭配的工具就是k线图。在火币等中心化的交易所里,我们能看到,在右边的那一部分就是所谓的order book,也就是我刚才说明的内容,而这就是市商的核心。

由于篇幅所限,便不在这方面展开说明,不过从MM中,我们还是可以看出一个关键点:市场的价格是由人为因素决定的,取决于你在盘口上的订单。
而新出现的自动化市商,即AMM,则截然不同,在AMM中,价格不再由人为因素决定,而完全由算法决定。这一点该如何理解呢?
在AMM中,一般两种token(比如ETH和USDT)组成一个交易对,持有token的人会向这个交易对中存入token,这样,这个交易对就变成一个具有流动性的池子了。一些想把ETH换成USDT的人,就可以通过这个交易对的池子实现币种的兑换,反之亦然。不过,要想进行兑换,必然得看价格多少,在AMM中,一种token的价格是相对于另一种token的,并且由算法决定。
实现价格决定的自动化算法很多,但是最著名的莫过于“恒定乘积公式”,即constant product formula。它的表示式为:
x*y = k
x和y是两种token的数量,k是恒定值。
而价格便由两种token数量的比率决定:
P = x/y
这是因为,一个交易池是一个隔离的世界,比如上述的ETH-USDT,在这个池子里,ETH的总价值一定和USDT的总价值相等。即:
P(ETH) * x = P(USDT) * y
得到:
P(ETH/USDT) = y/x
假设池中有100个ETH和10000个USDT,那么ETH的价格就是10000/100 = 100。
现在你一定会问,这个看起来简单的公式为什么有效?
首先,它使得交易池子摆脱了流动性规模的限制。我们在坐标平面上画出x*y=k的图形,发现它就是双曲线的一支。

现在假设池子里有100个ETH和10000个USDT,并且在中心化的交易所里,比如火币上的ETH/USDT是100。现在我要换取60个ETH,那么这个时候我需要花多少USDT呢?
我们根据恒定乘积公式,知道k=100*10000=1M,现在当ETH变成了40(100-60=40),根据公式,USDT的数量应该是1M/40=25000,ETH在该池子对USDT的价格就变成了25000/40=625,用户一般不会花如此高价购买如此多的ETH。所以,从利益动机上来看,人们不会在这个池子里做这么大比重的交易,一般人们只会进行一笔换取0.05个ETH的交易,这不会让其价格和火币的价格相差太多。而中心化的交易所,不存在这种利益动机能够阻止一个买家在MM中下一个大笔订单,并且,他完全可以出于某种利益动机这么做,因为这会对资产的市场价格造成巨大的影响,而他自己并不会承受到这个影响。在这种情况下,我们称这个市场的流动性较差,或者市场深度较低,反过来讲就是:
一个市场流动性好的表现就是,不存在任何一笔订单,会对市商内部的资产价格造成较大影响。
另外,AMM能够通过套利机制实现价格的稳定。
假如现在火币上ETH的价格变成了150,但是在AMM里面,ETH的价格还是100,那么聪明人一定会从AMM中换取ETH,然后放到火币上卖出赚取差价,这样AMM中的ETH就会开始变少,即ETH在AMM中开始变贵,人们不会停止套利直到AMM中ETH的价格变成150(不考虑交易费)。
再比如,如果我只向这个池子里提供了100个ETH,现在池子里变成了200个ETH和10000和USDT,显然在AMM里ETH贬值了一半,这时聪明人一定会从AMM中换取ETH,然后放到火币上卖出赚取差价,和之前一样,AMM中的ETH会回归到100个,但是池子里所有人提供的ETH量就会折损成原理的一半,导致发生损失。因此,在提供流动性的时候,任何一个swap应用都会建议:
请一起提供ETH以及和其法币价值相同的USDT。
最后,需要注意的是,k并不是绝对不变的,如果没有向池子里提供新的流动性,而只是进行token兑换,这时候k是不变的,但是一旦加入或者减少了流动性,k就会增大或者减少。