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,反之亦然。
如上圖,x * y = K 的曲线如上,當 x 越少,y 就越多,x 的價格就是 y/x 其實就是斜率,斜率越高,x 越貴。
當然上面的例子只是爲了方便理解,實際上的價格並不是交易後才重新計算,而是當前交易造成的 x 和 y 的變化就會影響價格。這裏會引出一個比較重要的概念,就是滑點。在上面的例子中,真實情況是,爲了保證 K 不變,你买入 ETH 就會導致 ETH 價格上漲,而這個上漲在當前交易中就會體現,你會發現最終成交的價格和交易前看到的價格不一致,這就是滑點。當一個交易對流動性越大的時候滑點就越小,反正滑點越大。另外交易量越大,滑點也會越大。
除了滑點外,在真正的實現中還有很多細節要考慮,比如取整問題,手續費,跨池子交易問題等等。在這裏就不展开了,如果感興趣的同學可以閱讀來自 ZAN 團隊同學在开源社區貢獻的 https://github.com/WTFAcademy/WTF-Dapp/blob/main/P002_WhatIsUniswap/readme.md 這篇解析 Uniswap 代碼的文章具體了解。
相比 ERC20 或者 ERC721 這樣的合約,涉及到金融的合約往往更爲復雜,往往包含大量的復雜邏輯代碼,這裏推薦大家可以試用體驗我們的 ZAN AI Scan(https://zan.top/home/ai-scan?chInfo=ch_WZ)的合約審計服務。只需要輸入合約地址就能快速對合約進行安全分析,查看與其相似的鏈上代碼以及審計歷史,還可以體驗先進的形式化驗證和 GPT 安全分析功能。
總的來說,基於智能合約可以做到不依賴中心化的服務進行交易,但是智能合約交易成本的考慮(主要是 gas)和交易效率的要求,使得訂單薄不適用於它。於是有了 AMM,AMM 核心就是基於 X * Y = K 這個邏輯,於是需要 LP 來提供流動性。流動性提供方收取手續費,交易方基於流動性池子來交易。
本文由 ZAN Team(X 账號 @zan_team) 的愚指導(X 账號 @yudao1024)撰寫。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。