Uniswap是DeFi中最著名的協(xié)議之一速梗,Uniswap本質(zhì)是一個(gè)自動(dòng)化做市商(AMM)够坐,它舍棄了傳統(tǒng)訂單薄的撮合方式,采用流動(dòng)池加恒定乘積公式算法($x times y=k$)為不同加密資產(chǎn)提供即時(shí)報(bào)價(jià)和兌換服務(wù)唁毒。
什么是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)纷责,訂單薄上記錄著買(mǎi)賣(mài)方向捍掺,數(shù)量和出價(jià),交易所負(fù)責(zé)對(duì)買(mǎi)賣(mài)雙方進(jìn)行配對(duì)再膳,一旦訂單薄中最高價(jià)格低于或等于最低價(jià)格挺勿,就會(huì)促成交易,同時(shí)會(huì)產(chǎn)生一個(gè)新的成交價(jià)喂柒,傳統(tǒng)交易所有以下特點(diǎn):
· 市場(chǎng)上必須要有用戶進(jìn)行掛單不瓶,要有一定量的訂單(市場(chǎng)流動(dòng))。
· 訂單必須重疊才能成交灾杰,即買(mǎi)價(jià)高于或等于賣(mài)價(jià)蚊丐。
· 需要將資產(chǎn)存儲(chǔ)在交易所。
在訂單薄模型市場(chǎng)中艳吠,買(mǎi)家期望用最低的價(jià)格買(mǎi)到想要的資產(chǎn)麦备,而賣(mài)家則是期望用最高價(jià)格賣(mài)出同一項(xiàng)資產(chǎn),如果交易要成立昭娩,買(mǎi)賣(mài)雙方必須要在價(jià)格上達(dá)成共識(shí)泥兰,一是買(mǎi)家提高出價(jià),而是賣(mài)家降低出價(jià)题禀,如果雙方都不要改變出價(jià),這時(shí)候就要依靠做市商的參與膀捷,簡(jiǎn)單來(lái)說(shuō)迈嘹,做市商是一個(gè)促進(jìn)交易的實(shí)體,它會(huì)在買(mǎi)賣(mài)兩個(gè)方向上掛單,讓想要交易的參與方只要跟做市商的訂單撮合就能完成交易秀仲,而不需要等待對(duì)手方出現(xiàn)才能交易融痛,極大的提高了市場(chǎng)的流動(dòng)性。
為什么Uniswap不采用訂單薄模型神僵?
Uniswap部署在以太坊上雁刷,而以太坊每秒可以出來(lái)15筆左右的交易,這對(duì)于訂單薄交易所來(lái)不可行保礼,主要原因是:“訂單薄模型依賴(lài)一個(gè)或多個(gè)外部做市商對(duì)某項(xiàng)資產(chǎn)一直不斷的做市沛励,而以太坊的TPS過(guò)低不支持做市商高頻的交易,如果缺少了做市商炮障,那么交易所的流動(dòng)性立刻會(huì)降低目派,對(duì)于用戶來(lái)說(shuō)這樣的交易所體驗(yàn)很差⌒灿”
Uniswap采用流動(dòng)池加恒定乘法公式這種自動(dòng)化做市商(AMM)模式實(shí)現(xiàn)了資產(chǎn)的交換企蹭,自動(dòng)化做市商模式方式不需要買(mǎi)賣(mài)雙方進(jìn)行掛單,也不要買(mǎi)賣(mài)雙方的訂單重疊智末,可以進(jìn)行自由買(mǎi)賣(mài)谅摄。
· 流動(dòng)池:使用流動(dòng)池來(lái)提供買(mǎi)賣(mài)雙方交易,做市商只要把資金放入流動(dòng)池即可
· 恒定乘法公式:按照流動(dòng)池中Token的數(shù)量系馆,自動(dòng)計(jì)算買(mǎi)賣(mài)價(jià)格
流動(dòng)池
流動(dòng)池就是鎖定在智能合約中所有的代幣以及資金的總稱(chē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)池的右邊抢野。如果有用戶要買(mǎi)ERC20代幣拷淘,就從流動(dòng)池的右邊將ERC20代幣轉(zhuǎn)給用戶,同時(shí)將用戶支付的ETH添加的流動(dòng)池的左邊指孤,然后重新計(jì)算流動(dòng)池中的價(jià)格启涯,等待下次交易贬堵。
Uniswap是無(wú)法自己變出錢(qián)來(lái),因此需要依賴(lài)外部資金向合約中提供流動(dòng)性结洼,向Uniswap流動(dòng)池中提供流動(dòng)性的用戶被稱(chē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í)間銷(xiāo)毀自己持有的流動(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 times y = k$ 。其中x和 y分別代表流動(dòng)池中兩種資產(chǎn)的數(shù)量更扁,k是兩種資產(chǎn)數(shù)量的乘積盖腕。
$x times y = k$的函數(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)$Delta X$ 時(shí)听隐,需要將y減少$Delta Y$才能保持等式的恒定。
[(x+Delta X ) times (y – Delta Y) =k]
這里沒(méi)有考慮到手續(xù)費(fèi)的問(wèn)題哄啄,如果要計(jì)算手續(xù)費(fèi)的話雅任,公式如下:
[(x+Delta X gamma) times (y – Delta Y) =k‘] [k’ gt k]
其中:$rho = 0.3% $,$gamma = 1- rho$
$Delta X gamma$表示扣除手續(xù)費(fèi)后加入到流動(dòng)池中的資產(chǎn)咨跌。由于在流動(dòng)池中增加了手續(xù)費(fèi)所以計(jì)算出來(lá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)池中放入$Delta X$個(gè)Token可以兌換出多少個(gè)$Delta Y$Token
· OutputPrice:從流動(dòng)池中取出$Delta Y$個(gè)Token殉摔,需要向流動(dòng)池中放入多少個(gè)$Delta X$Token
[x^{‘}=x+ Delta x =(1+ alpha)x= frac {1} {1 – beta} x] [y^{‘}=y- Delta y = frac {1} {1+alpha} y = (1 – beta)y] [xy=x’y’=k]
其中:$alpha = frac {Delta x} {x}$,$beta = frac {Delta y} {y}$
[Delta x= alpha x] [begin{aligned} {x’}&=(1+alpha)x=frac {1} {1-beta} x \ & implies 1+alpha=frac {1} {1-beta} \ & implies alpha=frac {beta} {1-beta} \ end{aligned}] [Delta x = frac {beta} {1 – beta} x tag{Output price}] [Delta y = frac {alpha} {1 + alpha} y tag{Input price}]
下面是Input price的函數(shù)圖像:
從上圖可以看出向流動(dòng)池中注入的$Delta X$越多记焊,可以從流動(dòng)池中取出的$Delta Y$也會(huì)越多逸月,但是$Delta Y$只會(huì)不斷地逼近流動(dòng)池中現(xiàn)有的$y$代幣數(shù)量,并不會(huì)超過(guò)遍膜,也就是說(shuō)你永遠(yuǎn)無(wú)法一次性買(mǎi)斷流動(dòng)池中所有的$y$彻采「停可以看出,恒等乘積公式可以提供無(wú)限的流動(dòng)性肛响,只要你想買(mǎi)就一定可以買(mǎi)到。
交易滑點(diǎn)
交易滑點(diǎn)是指:“在買(mǎi)賣(mài)$Token$時(shí)惜索,實(shí)際支付的價(jià)格和期望的交易價(jià)格之間的差別特笋,稱(chēng)為交易滑點(diǎn)”。
從流動(dòng)池中購(gòu)買(mǎi)$Delta Y$Token需要支付$Delta X$巾兆,所以本次購(gòu)買(mǎi)的價(jià)格為:$P=frac {Delta X} {Delta Y}$
[P=frac {Delta X} {Delta Y} = frac {alpha x} {frac {alpha} {1 + alpha} y}= ({1 + alpha}){frac x y}] [{P’}=frac x y] [滑點(diǎn)=P-P’=(1+alpha){P’} -{P’}=alpha {P’}]
其中:${P’}=frac x y$表示當(dāng)前流動(dòng)池中的價(jià)格
從公式可以看出交易的滑點(diǎn)是與$alpha = frac {Delta X} x$成線性關(guān)系猎物。
下圖是滑點(diǎn)的函數(shù)圖像:
滑點(diǎn)(偏離幅度)取決于$frac {Delta X} {x}$, 當(dāng)資金池中$x$足夠大時(shí),滑點(diǎn)越小角塑,資金池固定時(shí)蔫磨,一個(gè)區(qū)塊時(shí)間內(nèi)凈交易量越小,滑點(diǎn)越小圃伶,一個(gè)區(qū)塊時(shí)間內(nèi)的凈交易量又與兩個(gè)因素相關(guān)堤如,一個(gè)是區(qū)塊確認(rèn)速度,一個(gè)是市場(chǎng)價(jià)格波動(dòng)率窒朋,因此Uniswap恒定乘積做市的滑點(diǎn)與下面三個(gè)因素高度相關(guān):
· 資金池的大小
· 區(qū)塊確認(rèn)速度
· 市場(chǎng)波動(dòng)率
流動(dòng)池幣價(jià)
當(dāng)從流動(dòng)池中購(gòu)買(mǎi)$Delta Y$代幣后一定會(huì)引起當(dāng)前流動(dòng)池中的價(jià)格波動(dòng):
[P=frac {x’} {y’} = frac {(1+alpha)x} {frac {1} {1+alpha} y}= {(1+alpha)(1+alpha)} frac x y]
其中:$P$是購(gòu)買(mǎi)$Delta$代幣后流動(dòng)池中的幣價(jià)
從公式可以看出流動(dòng)池中的幣價(jià)與$alpha$成二次函數(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í)在兩邊低買(mǎi)高賣(mài)賺取中間差價(jià)榔至。由于套利者的存在,才使得Uniswap幣價(jià)不會(huì)與全球市場(chǎng)脫節(jié)欺劳。
· Uniswap中的價(jià)格高于外部市場(chǎng)時(shí)唧取,套利者從外部市場(chǎng)低價(jià)買(mǎi)入Y ,然后高價(jià)賣(mài)給Uniswap
· Uniswap中的價(jià)格低于外部市場(chǎng)時(shí)划提,套利者從Uniswap低價(jià)買(mǎi)入Y枫弟,然后高價(jià)賣(mài)給外部市場(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)了介褥。
流動(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)象被稱(chēng)為“impermanent loss”,impermanent loss中文翻譯成“無(wú)常損失”形真,簡(jiǎn)單來(lái)說(shuō)impermanent loss是指你將加密貨幣放入uniswap中賺取的收益與你將加密貨幣放入錢(qián)包中的收益之間的差杉编,公式為:$L={profit}{lp}- {profit}{hodl}$
hodl指不看幣價(jià)漲跌長(zhǎng)期持有某種加密貨幣(hold on for dear life)
impermanent loss通常是由于流動(dòng)池中的價(jià)格發(fā)生波動(dòng)引起的,下面看一個(gè)例子:
可以看出價(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ì)有損失。
再看黃色的曲線虏辫,由于黃色曲線是計(jì)算手續(xù)費(fèi)收益的蚌吸,所以只要幣價(jià)在一個(gè)范圍內(nèi)波動(dòng),流動(dòng)性提供者可以穩(wěn)賺手續(xù)費(fèi)收益砌庄。
由此可以得出一個(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 loss
· correlated 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 loss
· Inverse correlated pairs:負(fù)相關(guān)的交易對(duì),是最危險(xiǎn)的夺姑,他們之間波動(dòng)方向相反墩邀,兩者之間的相對(duì)波動(dòng)范圍最大。
下面是計(jì)算impermanent loss的公式
總結(jié)
優(yōu)點(diǎn)
完全去中心化盏浙,不依賴(lài)第三方磕蒲,任何人都可以基于uniswap構(gòu)建自己的應(yīng)用
可以自由地創(chuàng)建任何ERC20交易對(duì)
與其他去中心化交易所相比gas費(fèi)用更低
任何人都可以向uniswap流動(dòng)池中提供流動(dòng)性,人人都可以是做市商
缺點(diǎn)
需要依賴(lài)套利者去平衡uniswap與外部交易所之間的匯率
對(duì)大戶不友好只盹,進(jìn)行大額的交易會(huì)造成很大的滑點(diǎn)