
Uniswap是DeFi中最著名的協(xié)議之一,Uniswap本質(zhì)是一個(gè)自動(dòng)化做市商(AMM),它舍棄了傳統(tǒng)訂單薄的撮合方式,采用流動(dòng)池加恒定乘積公式算法(
什么是Uniswap
關(guān)于什么是Uniswap,先看一下Uniswap白皮書(shū)中的定義:
Uniswap is a protocol for automated token exchange on Ethereum. It is designed around ease-of-use, gas efficiency, censorship resistance, and zero rent extraction.
Uniswap是一個(gè)基于以太坊的自動(dòng)代幣交換協(xié)議,它的設(shè)計(jì)目標(biāo)是:易用性、gas高利用率、抗審查性和零抽租。
ease-of-use(易用性):
Token A換Token B,在Uniswap也只要發(fā)出一筆交易就能完成兌換,在其它交易所中可能需要發(fā)兩筆交易:第一筆將Token A換成某種媒介貨幣,如ETH,DAI等,然后再發(fā)第二筆交易換成Token B。-
gas efficiency(gas高利用率):在Uniswap上消耗的gas量是以太坊上的幾家主流去中化交易所中最低的,也就代表在Uniswap交易要付的礦工費(fèi)最少。 censorship resistance(抗審查性):抗審查性體現(xiàn)在Uniswap上架新Token沒(méi)有門(mén)檻,任何人都能在Uniswap上架任何Token。這在去中心交易所中很少見(jiàn),雖然大多數(shù)的去中心化交易所不會(huì)像中心化交易所那樣向你收取上幣費(fèi),但還是需要提交上幣申請(qǐng),通過(guò)審查后運(yùn)營(yíng)團(tuán)隊(duì)才會(huì)讓你的Token可以在他們的交易所上交易。下面是各去中心化交易所上幣規(guī)則的詳情:KyberSwap上幣規(guī)則:https://developer.kyber.network/docs/Reserves-ListingProcess/
EtherDelta上幣規(guī)則:https://steemit.com/cryptocurrency/@mindseye69/new-etherdelta-coin-listing-rules
IDEX上幣規(guī)則:https://medium.com/@forrestwhaling/idex-token-listing-guidelines-eae00785fdd2
Uniswap上幣規(guī)則:https://uniswap.org/docs/v1/frontend-integration/token-listing/
zero rent extraction(零抽租):在Uniswap協(xié)議設(shè)計(jì)中,開(kāi)發(fā)團(tuán)隊(duì)不會(huì)從交易中抽取費(fèi)用,交易中的所有費(fèi)用都?xì)w還給流動(dòng)性提供者。
自動(dòng)化做市商(AMM)
傳統(tǒng)的交易所有一個(gè)訂單薄(Order Book),訂單薄上記錄著買賣方向,數(shù)量和出價(jià),交易所負(fù)責(zé)對(duì)買賣雙方進(jìn)行配對(duì),一旦訂單薄中最高價(jià)格低于或等于最低價(jià)格,就會(huì)促成交易,同時(shí)會(huì)產(chǎn)生一個(gè)新的成交價(jià),傳統(tǒng)交易所有以下特點(diǎn):
市場(chǎng)上必須要有用戶進(jìn)行掛單,要有一定量的訂單(市場(chǎng)流動(dòng))。
訂單必須重疊才能成交,即買價(jià)高于或等于賣價(jià)。
-
需要將資產(chǎn)存儲(chǔ)在交易所。
在訂單薄模型市場(chǎng)中,買家期望用最低的價(jià)格買到想要的資產(chǎn),而賣家則是期望用最高價(jià)格賣出同一項(xiàng)資產(chǎn),如果交易要成立,買賣雙方必須要在價(jià)格上達(dá)成共識(shí),一是買家提高出價(jià),二是賣家降低出價(jià),如果雙方都不要改變出價(jià),這時(shí)候就要依靠做市商的參與,簡(jiǎn)單來(lái)說(shuō),做市商是一個(gè)促進(jìn)交易的實(shí)體,它會(huì)在買賣兩個(gè)方向上掛單,讓想要交易的參與方只要跟做市商的訂單撮合就能完成交易,而不需要等待對(duì)手方出現(xiàn)才能交易,極大的提高了市場(chǎng)的流動(dòng)性。
為什么Uniswap不采用訂單薄模型?
Uniswap部署在以太坊上,而以太坊每秒可以出來(lái)15筆左右的交易,這對(duì)于訂單薄交易所來(lái)不可行,主要原因是:“訂單薄模型依賴一個(gè)或多個(gè)外部做市商對(duì)某項(xiàng)資產(chǎn)一直不斷的做市,而以太坊的TPS過(guò)低不支持做市商高頻的交易,如果缺少了做市商,那么交易所的流動(dòng)性立刻會(huì)降低,對(duì)于用戶來(lái)說(shuō)這樣的交易所體驗(yàn)很差?!?/p>
Uniswap采用流動(dòng)池加恒定乘法公式這種自動(dòng)化做市商(AMM)模式實(shí)現(xiàn)了資產(chǎn)的交換,自動(dòng)化做市商模式方式不需要買賣雙方進(jìn)行掛單,也不要買賣雙方的訂單重疊,可以進(jìn)行自由買賣。
流動(dòng)池:使用流動(dòng)池來(lái)提供買賣雙方交易,做市商只要把資金放入流動(dòng)池即可
恒定乘法公式:按照流動(dòng)池中
Token的數(shù)量,自動(dòng)計(jì)算買賣價(jià)格
流動(dòng)池
流動(dòng)池就是鎖定在智能合約中所有的代幣以及資金的總稱,流動(dòng)是資金轉(zhuǎn)為代幣,或代幣轉(zhuǎn)為資金的意思。
一個(gè)完整的流動(dòng)池分為2個(gè)部份,分別表示不同的貨幣,成為一個(gè)交易對(duì),在Uniswap V1中就是ETH及ERC20代幣,在Uniswap V2中是支持不同ERC20代幣直接交換,所以在Uniswap V2中的流動(dòng)池可以允許兩邊是不相同的ERC20代幣,其中ETH會(huì)自動(dòng)轉(zhuǎn)換成以WETH代幣。為了簡(jiǎn)化,直接以ETH-ERC20交易對(duì)作為例子。
如下圖所示,Uniswap將所有做市商的ETH集合在一起放在流動(dòng)池左邊, 將所有ERC20集合在一起放在流動(dòng)池的右邊。如果有用戶要買ERC20代幣,就從流動(dòng)池的右邊將ERC20代幣轉(zhuǎn)給用戶,同時(shí)將用戶支付的ETH添加的流動(dòng)池的左邊,然后重新計(jì)算流動(dòng)池中的價(jià)格,等待下次交易。
Uniswap是無(wú)法自己變出錢(qián)來(lái),因此需要依賴外部資金向合約中提供流動(dòng)性,向Uniswap流動(dòng)池中提供流動(dòng)性的用戶被稱為流動(dòng)性提供者,當(dāng)流動(dòng)性提供者向Uniswap中注入流動(dòng)性的時(shí)候,Uniswap會(huì)鑄造出一個(gè)流動(dòng)性代幣(LP),鑄出LP代幣數(shù)量是與用戶注入的資金所占流動(dòng)池中的資金比例相關(guān),動(dòng)性提供者可以選擇在任何時(shí)間銷毀自己持有的流動(dòng)性代幣。為了鼓勵(lì)用于向Uniswap的流動(dòng)池中提供更多的流動(dòng)性,Uniswap會(huì)從每筆交易總額中抽取0.3%當(dāng)成交易手續(xù)費(fèi),并將手續(xù)費(fèi)全額交給那些將注資金到Uniswap資金池提供流動(dòng)性的流動(dòng)性提供者。
恒定乘積公式
假設(shè)在Uniswap中存在一個(gè)ETH-DAI交易對(duì)的流動(dòng)池,用戶在使用DAI與ETH兌換時(shí)需要一個(gè)方法來(lái)決定交易價(jià)格。
Uniswap定價(jià)模型非常簡(jiǎn)潔,它的核心思想是一個(gè)恒定乘積公式
x和 y分別代表流動(dòng)池中兩種資產(chǎn)的數(shù)量,k是兩種資產(chǎn)數(shù)量的乘積。
假設(shè)乘積k是一個(gè)固定不變的常量,當(dāng)用戶使用x資產(chǎn)從流動(dòng)池中兌換y資產(chǎn)時(shí),流動(dòng)池中x資產(chǎn)的數(shù)量會(huì)增加,y資產(chǎn)的數(shù)量會(huì)減少。由于k是恒定的,所以當(dāng)x增長(zhǎng)
y減少這里沒(méi)有考慮到手續(xù)費(fèi)的問(wèn)題,如果要計(jì)算手續(xù)費(fèi)的話,公式如下:
k'會(huì)大于k,詳細(xì)過(guò)程會(huì)在后面推導(dǎo)。
接下來(lái)會(huì)有一些數(shù)學(xué)公式的推導(dǎo),為了方便理解,我們先對(duì)不含手續(xù)費(fèi)的情況進(jìn)行推導(dǎo),包含手續(xù)費(fèi)的推導(dǎo)過(guò)程放在最后。
不含手續(xù)費(fèi)
交易價(jià)格計(jì)算
交易價(jià)格的計(jì)算分成兩種:
-
InputPrice:向流動(dòng)池中放入
個(gè)Token可以兌換出多少個(gè)Token -
OutputPrice:從流動(dòng)池中取出
個(gè)imageToken,需要向流動(dòng)池中放入多少個(gè)Token







下面是Input price的函數(shù)圖像:
交易滑點(diǎn)
交易滑點(diǎn)是指:“在買賣時(shí),實(shí)際支付的價(jià)格和期望的交易價(jià)格之間的差別,稱為交易滑點(diǎn)”。
從流動(dòng)池中購(gòu)買
Token需要支付表示當(dāng)前流動(dòng)池中的價(jià)格
從公式可以看出交易的滑點(diǎn)是與成線性關(guān)系。
下圖是滑點(diǎn)的函數(shù)圖像:滑點(diǎn)(偏離幅度)取決于
Uniswap恒定乘積做市的滑點(diǎn)與下面三個(gè)因素高度相關(guān):
資金池的大小
區(qū)塊確認(rèn)速度
市場(chǎng)波動(dòng)率
流動(dòng)池幣價(jià)
當(dāng)從流動(dòng)池中購(gòu)買代幣后一定會(huì)引起當(dāng)前流動(dòng)池中的價(jià)格波動(dòng):
其中:是購(gòu)買代幣后流動(dòng)池中的幣價(jià)
從公式可以看出流動(dòng)池中的幣價(jià)與成二次函數(shù)關(guān)系
下圖是價(jià)格的函數(shù)圖像:當(dāng)流動(dòng)池中的價(jià)格與外部市場(chǎng)價(jià)格不一致時(shí)就會(huì)有套利者出現(xiàn),套利者監(jiān)控全球各家交易所的價(jià)格,一旦發(fā)現(xiàn)兩家交易所存在價(jià)差,就會(huì)同時(shí)在兩邊低買高賣賺取中間差價(jià)。由于套利者的存在,才使得Uniswap幣價(jià)不會(huì)與全球市場(chǎng)脫節(jié)。
Uniswap中的價(jià)格高于外部市場(chǎng)時(shí),套利者從外部市場(chǎng)低價(jià)買入 ,然后高價(jià)賣給UniswapUniswap中的價(jià)格低于外部市場(chǎng)時(shí),套利者從Uniswap低價(jià)買入,然后高價(jià)賣給外部市場(chǎng)
表格
對(duì)于不理解上面公式的同學(xué),可以參考以下表格中的數(shù)據(jù)自己在excel中手動(dòng)演算一遍,可以更直觀的理解Uniswap的工作原理。
加入手續(xù)費(fèi)的恒定乘積公式
以下過(guò)程是在計(jì)算手續(xù)費(fèi)的情況下,將上面的公式重新推導(dǎo)了一遍。
計(jì)算交易價(jià)格
其中:
k除了在有交易手續(xù)費(fèi)的情況會(huì)變大,還有一個(gè)情況也會(huì)使k值產(chǎn)生變化,當(dāng)向流動(dòng)池中增加流動(dòng)性的時(shí)候k會(huì)變大,當(dāng)從流動(dòng)池中取回流動(dòng)資金時(shí)k會(huì)變小。具體變化比例可以參考Uniswap白皮書(shū),這里就不做推導(dǎo)了。
交易滑點(diǎn)
流動(dòng)池的幣價(jià)
流動(dòng)池收益與風(fēng)險(xiǎn)
在Uniswap中流動(dòng)性提供者的收益主要來(lái)自于交易抽成,Uniswap會(huì)從每筆交易中抽取0.3%的手續(xù)費(fèi),并將手續(xù)費(fèi)按流動(dòng)性提供者所占流動(dòng)池的比例分配給流動(dòng)性提供者。
impermanent loss
向Uniswap中提供流動(dòng)性的人會(huì)發(fā)現(xiàn)一個(gè)現(xiàn)象:“目前在流動(dòng)池中資金的價(jià)值比放入流動(dòng)池之前的資金價(jià)值少了,也就是資金縮水了”,這種現(xiàn)象被稱為“impermanent loss”,impermanent loss中文翻譯成“無(wú)常損失”,簡(jiǎn)單來(lái)說(shuō)impermanent loss是指你將加密貨幣放入uniswap中賺取的收益與你將加密貨幣放入錢(qián)包中的收益之間的差,公式為:
hodl指不看幣價(jià)漲跌長(zhǎng)期持有某種加密貨幣(hold on for dear life)
impermanent loss通常是由于流動(dòng)池中的價(jià)格發(fā)生波動(dòng)引起的,下面看一個(gè)例子:
其中:表示流動(dòng)池中ETH數(shù)量,表示流動(dòng)池中DAI數(shù)量,表示流動(dòng)池中的價(jià)格
,由于發(fā)生價(jià)格差,這時(shí)套利者開(kāi)始工作,套利者通過(guò)搬磚將流動(dòng)池中的價(jià)格維持與外部是市場(chǎng)一致。這時(shí)流動(dòng)池中最新的數(shù)量為:
計(jì)算HODL時(shí)的資金 :
計(jì)算放入流動(dòng)池后的資金:
計(jì)算impermanent loss:
可以看出價(jià)格從100變成120后我們的資金只有之前的99.59%,損失了4%左右。只要這時(shí)候我們不將資金從流動(dòng)池中取出,一旦流動(dòng)池中的幣價(jià)回到100時(shí),我們是沒(méi)有損失的,這是為什么叫impermanent loss無(wú)常損失的原因。
下圖演示impermanant loss的比率與當(dāng)前價(jià)格變化的關(guān)系,O列表示資金剛放入流動(dòng)池的情況,O->H表示價(jià)格上漲時(shí)impermanent loss的變化,A<-O表示價(jià)格下跌時(shí)impermanent loss的變化。
下圖是根據(jù)上面數(shù)據(jù)畫(huà)出的函數(shù)圖像,藍(lán)色的曲線是不包含手續(xù)費(fèi)的,黃色的圖像包含手續(xù)費(fèi),紅色的線條是我手動(dòng)添加上去的為了方便說(shuō)明。
先看藍(lán)色曲線,當(dāng)不計(jì)算手續(xù)費(fèi)收益的情況下,無(wú)論幣價(jià)上漲或下跌,流動(dòng)性提供者100%會(huì)有損失。
由此可以得出一個(gè)結(jié)論要介紹impermanent loss對(duì)流動(dòng)性提供者的影響,可以為兩個(gè)幣價(jià)之間波動(dòng)小的流動(dòng)池提供流動(dòng)性。
mean-reverting pairs:均值回歸的交易對(duì),比如穩(wěn)定幣交易對(duì)兩者波動(dòng)是最小的,可以最大程度減少impermanent losscorrelated pairs:有正相關(guān)性的交易對(duì),例如ETH/ZRX,這兩個(gè)幣的波動(dòng)方向基本上是一致的,同漲同跌,兩者之間的相對(duì)波動(dòng)小Uncorrelated pairs:非相關(guān)性的交易對(duì),如ETH/DAI,為這種交易對(duì)提供流動(dòng)性,賺取的交易費(fèi)有可能會(huì)覆蓋impermanent lossInverse correlated pairs:負(fù)相關(guān)的交易對(duì),是最危險(xiǎn)的,他們之間波動(dòng)方向相反,兩者之間的相對(duì)波動(dòng)范圍最大。
下面是計(jì)算impermanent loss的公式
其中:priceRatio是價(jià)格變化比例
以下是不計(jì)算手續(xù)費(fèi)情況下推導(dǎo)過(guò)程:

總結(jié)
優(yōu)點(diǎn)
完全去中心化,不依賴第三方,任何人都可以基于
uniswap構(gòu)建自己的應(yīng)用可以自由地創(chuàng)建任何
ERC20交易對(duì)與其他去中心化交易所相比
gas費(fèi)用更低任何人都可以向
uniswap流動(dòng)池中提供流動(dòng)性,人人都可以是做市商
缺點(diǎn)
需要依賴套利者去平衡
uniswap與外部交易所之間的匯率對(duì)大戶不友好,進(jìn)行大額的交易會(huì)造成很大的滑點(diǎn)
本文轉(zhuǎn)載自吳壽鶴的精通Uniswap。
