如果说区块链技术出现以来,真正带来行业变革的,一定是区块链技术与金融的结合——DeFi出现。而DeFi的基石,则是去中心化交易所DEX(Decentralized Exchanges)。与之相对的则是传统的中心化交易所CEX(centralized Exchanges)。
CEX顾名思义,是由平台负责维护交易系统、用户账户、订单,以及上文提及的交易可靠性担保,所以这一类交易所又被称为中心化交易所。
采用订单簿的交易模式,实时收集市场上还未被撮合的买单和卖单,这是数字交易平台的基本模式。交易平台的内部系统会通过订单簿来撮合买单和卖单。
可以类比于我们所熟知的淘宝,现在比较出名的CEX有币安、CoinBase等等。
值得注意的是CEX你的所有trade是不上链的,用户所有数据存储在交易所的数据库中,只有转出到钱包时才会有链上资产转移。
DEX而是一个基于区块链的交易所,它不将用户资金和个人数据存储在服务器上,而是通过授权智能合约来匹配希望买卖数字资产的买家和卖家。在匹配引擎的帮助下,这种交易直接发生在参与者(点对点)之间。简而言之,没有中间商。所有功能均由智能合约完成,功能全部去中心化。
当匹配完成后,双方的交易信息都会上链,上链成功后,将会由系统通知用户该笔订单已完成的信息。
DEX的优势:
安全性。DEX 通常通过分散的服务器网络进行大量交易对的低成本交易,降低了黑客攻击的风险。
匿名性。没有身份验证程序,没有 KYC,也没有上传到服务器的个人文件。
劣势:
效率低。由于区块链分布式记账特性,完成交易的速度上十分缓慢,全世界最大的公链ETH每秒的TPS只有15笔。
相较于CEX功能有限。
CEX 的优势:
劣势:
如果说DEX是DeFi的基石,那么AMM则是DEX的灵魂,驱动DEX的核心。AMM最早被Uniswap提出并应用,已经迭代了多个版本。
AMM(Automated Market Makers) 自动做市商。顾名思义,自动的为交易用户提供交易,并且兑换价格可以跟随当前市场价格。并且自动运行,无需第三方维护。都是用智能合约进行实现,无任何人工干预。
传统的CEX交易,你想买TokenA,必须存在卖方,才可完成交易,这就是所谓的订单薄交易。但是在DEX中,AMM 的作用下,传统的订单簿被流动性池(Liquidity Pool)所取代;买家、卖家、做市商不复存在,取而代之的是流动性提供者、交易者和套利者。由于是全自动地撮合交易,交易者也失去了报价的权力,只能接受 AMM 所提供地价格。
交易者
交易者可以与流动性池发生交易,向池子中投入一种资产,以换取另一种资产,这个交换的过程需要支付交易手续费。
套利者
套利者负责修正交易价格,以保证流动性池中的资产交易价和市场价一致,并从中套利,他们会给流动性提供者带来无常损失(Impermanent Loss)。
流动性池(Liquidity Pool)和 流动性提供者(Liquidity Provider)
流动性池可以理解为一个大池子,里面有许多的加密货币资产,一种DEX中提供的交易对拥有一个LP池,例如在BSC中BNB/BUSD交易对有 BNB/BUSD LP池。BNB/USDT 有BNB/USDT LP池,不同池子的深浅取决于流动性提供者所提供的币总价值,并不统一。
流动性提供者将自己的资产注入到流动性池中,为交易提供流动性,通过交易手续费获取一定收益。任何人都可以成为流动性提供者,只要他向池子里注入了资金。流动性提供者将资金注入流动池又被成为流动性挖矿,提供者又被称为矿工。这个会在接下来的无偿损失概念中进行详细介绍。
在这个特殊的自动做市商(AMM)机制中,存入的Token对需要由两种等值代币构成。流动性提供者必须按照当前Token对的价格进行注入,如当前注入BNB/BUSD LP池,假设此时的1BNB可以兑换10BUSD,那么注入LP中的则是 K个BNB和K*10个BUSD。
值得注意的是,流动性添加者通过质押Token对,也会获得流动性提供者代币(Liquidity Providers Token),也就是我们经常说的 LP 代币。作为凭证,获得流动性挖矿奖励。
运行机制
值的注意的是,当TokenA/TokenB 的 LP池中的资金为0时,将无法在当前DEX中进行TokenA、TokenB互换的交易。
流动性池解决了能否进行交易的问题,交易中Token价格问题则是交给了恒定乘积做市商 CPMM 来解决。
提出一种基于反比例函数作为价格曲线的LP池模式,
K = A * B
其中A和 B 分别是当前池中TokenA和TokenB的数量,K是一个由初始TokenA、TokenB数量决定常数。
如果没有流动性注入LP池,K不会随着交易的变化而变化。
恒定乘积做市:有自己的定价机制,价格由供需关系决定,流动性不会被耗尽。
当K确定时,交易的发生时,对应TokenA和TokenB的价格如何计算呢?
我们假设当前1BNB=100BUSD,此时A向流动性资金池中存入了1枚BNB和100枚BUSD。
此时K = 100*1 = 100
如果B想利用该交易对,用20BUSD换取BNB,他可以换取多少BNB呢?
利用K = A*B => 100 = (100+20)*(1-x)=> x = 0.166
则B可以得到0.166个bnb。
此时根据池中的代币对等价值原则。
得到 120BUSD = 0.833BNB => 1BNB = 144BUSD
在AMM模型规则下,当前DEX交易对下 BNB涨幅 44BUSD。从而高于市场价格,套利者出现开始套利。
池子越浅,每次交易对池中Token的价格影响越大。
假设此时的池子中有100个BNB和1w个BUSD。汇率依旧是1BNB=100BUSD
则B可以用100BUSD换到
100*10000= (10000+20)*(100-x) => x = 0.1996
此时此LP中BNB价格为:
10020*1 = 99.8*P => P = 100.4
汇率为:1BNB = 100.4BUSD
汇率波动微乎其微。
优势:
当交易量显著小于资金池量的时候,基本可以实现以市场价的双向交易,而且兑换价格能够自动跟踪市场价格。
部署完成后无须额外人为维护。可以注意到,在新增或减少资金池量时,需要对k=a*b值进行改变,除此情况下,k是恒定不变的。而且这一过程也是可以较容易实现自动化的,不需要调动别的价格接口,可以完全独立运行。
AMM利用恒定乘积做市商CPMM的价格曲线非常简单,计算过程也不复杂,早期Uniswap所部署的AMM仅使用大约300行代码。
劣势
会给流动性提供者带来无偿损失,需要通过其他手段进行补偿
那么什么是无偿损失和滑点呢? 我们将在下一篇文章中进行讲解。
这里是coolberwin的Mirror,创作不易,希望看完顺手关注我的Twitter,感激不尽。