AMM 是如何做到的呢?
作者:ZAN Team
原用标题:Web3 新手系列:DEX 為啥不做訂單配對也能搭配交易
封面: Photo by Vishal Bansal on Unsplash
DEX 也就是去中心化交易所,典型代表就是 Uniswap、Curve。對應的中心化交易所有幣安、OKX 等。去中心化和中心化最核心的差別大家應該也都知道,中心化的交易所的交易是透過交易所的伺服器來實現交易的,而去中心化的交易所則是透過運行在區塊鏈上的智能合約交易的。
然而除了是否是去中心化以外,大部分 DEX 相比中心化交易所對比,還有一個巨大的差異,那就是他們撮合交易的方式也不同。中心化交易所撮合交易的方式和傳統的股票交易類似,他們都是訂單簿交易所。有人要賣,有人要賣,交易所在中間撮合。
但是這樣的模式在 DEX 上就行不通了,為啥?因為這樣消耗的 GAS 貴啊,效率也不高。想想看如果合約中要記錄每個人的訂單,然後去做撮合,中間得來來回回執行好多運算,另外有的代幣可能流動性不高,能上中心化交易所的代幣可能就沒這個問題了,但是很多流動性較小的代幣,可能還沒辦法完成交易。
於是就發明了 AMM(自動化做市商,Automated Market Maker),可以做到不用配對訂單也可以實現交易。大家可能會好奇,這怎麼做到的,交易通常就是有人賣才有人買?沒錯 AMM 就是做到了沒人賣你也可以買。接下來就具體展開講講 AMM 是如何做到這一點的。
AMM 是如何做到的呢?沒有訂單如何交易?那就要引進一個概念 Liquidity Provider(LP),也就是流動性提供者。
簡單一句話說:交易不再是透過訂單配對買賣雙方交易,而是直接在 LP 提供的流動性池子中交易。
就比如說我作為 LP 在池子中放了 1 個 ETH 和 3000 個 USDT(當前市價正好是 1 ETH = 3000 USDT),那你作為交易方就可以把 0.01 嗯 ETH 放進池子,然後拿出來 30 個 USDT。
這樣池子裡面就變成 0.99 個 ETH 和 3030 USDT 了,所以作為交易者你不需要等待,直接就能換。
但是價格要怎麼訂呢?不能由 LP 來即時調整價格吧,這樣行不通,價格應該是市場驅動的。那如何讓市場的交易行為體現在架構上呢?這裡就很巧妙了,其實核心就下面一個公式:
X * Y = K
其中 X 和 Y 是一個交易對(上面例子就是 ETH 和 USDT)中兩種代幣的數量,K 是這兩者相乘得到的值,我們要求交易者每次取出 X 存入 Y 或存入 X 取出 Y(也就是發生了代幣交換),但是 K 必須保持不變。
這樣就能做到市場自動調節價格了嗎?沒錯,我們繼續看上面的例子。
1 * 3000 = 3000
0.99 * 3030 = 2999.7
K 從 3000 變成 2999.7 了,但基本上認為還是 3000。但下次再交換 ETH 的價格就不再是 3000 了,而是 3000 / 0.99 = 3030.3... 了,ETH 漲價了。這樣是不是很合理,有人要換 ETH,ETH 變得稀缺,所以漲價了,下次要換 ETH 就需要更多的 USDT,只要保證池子中的 ETH * USDT 等於一個常量,這樣自然就會此消彼長,當 ETH 變少時,你要透過 USDT 換取 ETH 時候就需要消耗更多 USDT,反之亦然。
![圖片](https://web3caff.com/wp-content/uploads/2024/06/21_640wx_fmtpngampfromappmsgamptpwebpampwxfrom5ampwx_lazy1ampwx_co1.png)
如上圖,x * y = K 的曲線如上,當 x 越少,y 越多,x 的價格就是 y/x 其實就是斜率,斜率越高,x 越貴。
當然上面的例子只是為了方便理解,實際上的價格並不是交易後才重新計算,而是當前交易造成的 x 和 y 的變化會影響價格。這裡會引出一個比較重要的概念,就是滑點。在上面的例子中,真實情況是,為了保證 K 不變,你買入 ETH 就會導致 ETH 價格上漲,而這個上漲在當前交易中就會體現,你會發現最終成交的價格和交易前看到的價格不一致,這就是滑點。當一個交易對流動性越大的時候滑點就越小,反正滑點越大。另外交易量越大,滑點也會越大。
除了滑點外,在真正的實現中還有很多細節要考慮,例如取整問題,手續費,跨池子交易問題等等。這裡就不展開了,如果有興趣的同學可以閱讀 https://github.com/WTFAcademy/WTF-Dapp/blob/main/P002_WhatIsUniswap/readme.md 這篇解析 Uniswap 程式碼的文章具體了解。
總的來說,基於智能合約可以做到不依賴中心化的服務進行交易,但是智能合約交易成本的考慮(主要是 gas)和交易效率的要求,使得訂單薄不適用於它。於是有了 AMM,AMM 核心就是基於 X * Y = K 這個邏輯,所以需要 LP 來提供流動性。流動性提供者收取手續費,交易方基於流動性池子來交易。
免責聲明:作為區塊鏈資訊平台,本站所發布文章僅代表作者及來賓個人觀點,與 Web3Caff 立場無關。文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。