当前位置: 直线机 >> 直线机前景 >> 保姆级教程去中心化交易所的AMM模型
上一节我们讲DEX交易的时候卖了一个关子:为什么交易时会有“滑点”?
如果你习惯于在传统交易所买卖,你可能还会有一个问题:在DEX里怎么找不到限价挂单功能啊?
这两个问题,都可以在DEX的交易机制里找到答案。本讲的内容可能略显晦涩,但它是进一步深入参与DeFi的必备知识,请务必逼着自己学完。
01
传统交易所的成交和定价机制:
我们以前在中心化交易所买卖币的时候,买卖决策的最直接依据是什么?
是币价。币价它是浮动的,相对低点我们买入,相对高点去卖出。
即使现在我们到了去中心化的交易所,币价肯定也是有涨跌的,没有涨跌,买卖就没有意义。
同时我们也应该明白一个基本的道理:价格的涨跌,就是由买卖行为决定的。比如我们在火币平台有ETH-USDT交易对,如果很多人卖出ETH换回USDT,那么ETH的价格肯定是跌的。
在传统的交易所里,数量庞大的交易者分别公布自己希望买入或卖出的价格。比如有ABC个人,分别想以、、USDT卖出ETH,同时又有DEF三个人,分别想以、99、98USDT买入ETH。
大家把各自的ETH充值到交易所的钱包地址上,并把上面的挂单信息在交易所app里发布。交易所发现A和D的价格匹配了,就撮合这两个人成交。
这种撮合成交的形式,被形象地称为:“订单簿”。
成交之后,在这两个人的app账号里,完成了ETH和USDT的交换。但在现实中,ETH和USDT还躺在交易所的账户里——除非他们发起提款。
02
去中心化交易所怎么撮合成交?
很显然,上面的做法,并不适合去中心化交易所。
首先,我们不能让用户事先把钱充值进来,否则就变成中心化的东西了。
其次,订单簿显然不适合在区块链上发布,链上广播信息太贵了,在成交之前,你就要花费一笔gas,太不经济。
为了解决这个问题,uniswap创造性地发明了一种新的交易机制,你可以理解为:它用智能合约实现了一个交易机器人,这个机器人作为所有市场参与者的交易对手,每个人的买和卖,都由它来响应。
举个例子:机器人手里持有一些美金和ETH。A想以USDT购买一些ETH,就把这个意向通过uniswap的Dapp界面,表达给机器人。
在操作上,就相当于在上一讲我们见过的这个界面里,输入以下信息:
机器人看了看手里的USDT和ETH余额,算出了当下他愿意卖给A的ETH数量:大约0.ETH。
A如果觉得合适,就确认交易。
那么问题来了,这个0.ETH,是怎么算出来的呢?
这里又要提到一个新概念:AMM。它的中文译名是:“恒定乘积模型”。
“恒定乘积模型”的定义是:一个交易对里的两个币种(比如之前说的ETH和USDT),一定始终满足:
交易对地址上两种币的数量乘积是定值;
默认交易对地址持有的两种币的总价值相等。
一个交易对,就是一个手持ETH和USDT的机器人。
假设开始的时候,交易对里一共有10枚ETH,枚USDT。
按照上面的原理,10枚ETH的价格和枚USDT的价格相等,一枚ETH价值是U。
同时,ETH和USDT的“枚数”的乘积,10乘以2万,等于20万。记住这个数字。
现在,有一个人来到这个机器人面前,他要卖出0.5枚ETH。
在DEX里,卖出,就是和机器人进行交易。这个人卖出0.5ETH,是把0.5ETH给了机器人,机器人现在一共持有10.5ETH。
在这个时候,“恒定乘积模型”开始发挥作用。机器人手里持有的ETH和USDT的“枚数”乘积,必须始终等于20万。现在有10.5ETH了,我们用20万除以10.5,得到.62
也就意味着,在接收了0.5ETH之后,机器人地址上只能保留.62枚USDT。
之前他有个USDT,差值的那一部分,自然就打给这0.5ETH的原主人,作为它卖出ETH的对价。共计.38USDT。
接下来,我们看一下币价的变化。“恒定乘积模型”默认机器人地址持有的两种币的总价值相等,那就是10.5ETH=.62USDT,1枚ETH现在价值.06USDT,比之前的U少了。
这也符合我们一般的认知,有人卖出ETH,导致ETH降价了。
细心的朋友可能会发现一个问题:开始的时候ETH价格是U,按说0.5ETH价格应该是0U,但是卖出0.5ETH的人只到手了.38U,比0U要少。
这个就是“恒定乘积模型”的算法本身决定的,一个不完美的地方。
它的公式是X·Y=K,是一个双曲线,而不是严格线性。.38和0之间的误差,就是我们上节课讲到的滑点!
交易对的深度越好,恒定乘积越大,双曲线在特定交易范围内就越近似直线,这种误差也就越小,而这种误差,就是我们上面简单提到的滑点的由来。
03
如何降低滑点?
滑点是个不讨人喜欢的东西,谁都希望减少这种误差,多换点钱在自己手里。
回到刚才的案例里,这一次,我们让机器人手里事先多拿点币。
比如0ETH,和万USDT。这时候,恒定乘积=0X万=20亿。
一枚ETH的数量,依然是U。
A向机器人卖出0.5ETH,机器人手里的ETH变成了0.5枚。
20亿除以0.5,约等于.5,代表着交易完成后,机器人应该保留.5USDT
因此,机器人应该支付.5USDT给A。和前面的.38USDT项目,已经完美接近0,几乎没有滑点。
所以降低滑点、让交易价格更平滑的办法,就是增加这个机器人手里币的数量。
如果用DeFi的专业术语表达,就是增加交易对的流动性。
流动性越好,币的价格越稳定,币所代表项目的市值就越稳定。
04
流动性提供者
稳定市值,是每个项目方最迫切的需求。因此,他们都会希望有更多的资金,来为他们的交易对提供流动性。让机器人手里的持币越来越多,币价越来越稳。
好在去中心化交易所里,人人都可以提供流动性。
我们还以ETH和USDT的交易对为例。机器人手持10ETH和USDT,此时有一个人想来为这个交易对提供流动性,他需要同时注入一些ETH和USDT给机器人,并满足一个条件:
注入的ETH和USDT,数量比例要符合当下交易对的比例(1:),比如他想注入1ETH,就必须同时注入USDT
然后,机器人手里的两种币都变多了,变成了11ETH和2USDT。恒定乘积也随之增大到24。
前面我们已经看到了,恒定乘积越大,交易滑点越低,标志着流动性越好。
当然,流动性不是白白提供的。Uniswap给流动性提供者提供两个好处:一是按照提供流动性占总流动性的比例,瓜分散户交易的手续费;二是发放一个流动性提供凭证给提供者,哪天提供者不想玩了,可以融解这个凭证,取回相应的代币。
这个流动性提供凭证(相当于收据),被称为LP代币,来自英文“liquidityprovider”。
而流动性提供的好处,远不止如此。
项目方为了吸引大众来为它提供流动性,会在LP代币上下足功夫,提供各种福利。
DeFi世界的神来之作:LP挖矿,就诞生于此。请期待我们后续的教程。
若对Defi有道感兴趣,可以私信我们,我们有数不尽的干货等着你