【深度知識(shí)】Uniswap協(xié)議原理分析

UniswapDeFi中最著名的協(xié)議之一,Uniswap本質(zhì)是一個(gè)自動(dòng)化做市商(AMM),它舍棄了傳統(tǒng)訂單薄的撮合方式,采用流動(dòng)池加恒定乘積公式算法(

)為不同加密資產(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 AToken B,在Uniswap也只要發(fā)出一筆交易就能完成兌換,在其它交易所中可能需要發(fā)兩筆交易:第一筆將Token A換成某種媒介貨幣,如ETH, DAI 等,然后再發(fā)第二筆交易換成Token B。

  • gas efficiencygas高利用率):在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中就是ETHERC20代幣,在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)池,用戶在使用DAIETH兌換時(shí)需要一個(gè)方法來(lái)決定交易價(jià)格。

Uniswap定價(jià)模型非常簡(jiǎn)潔,它的核心思想是一個(gè)恒定乘積公式

。其中xy分別代表流動(dòng)池中兩種資產(chǎn)的數(shù)量,k是兩種資產(chǎn)數(shù)量的乘積。

的函數(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)

時(shí),需要將y減少
才能保持等式的恒定。

這里沒(méi)有考慮到手續(xù)費(fèi)的問(wèn)題,如果要計(jì)算手續(xù)費(fèi)的話,公式如下:

其中:

,
image

表示扣除手續(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)池中放入

    個(gè)Token可以兌換出多少個(gè)
    Token

  • OutputPrice:從流動(dòng)池中取出

    image
    個(gè)Token,需要向流動(dòng)池中放入多少個(gè)
    Token

其中:

,
image.gif

下面是Input price的函數(shù)圖像:

從上圖可以看出向流動(dòng)池中注入的

越多,可以從流動(dòng)池中取出的
也會(huì)越多,但是
只會(huì)不斷地逼近流動(dòng)池中現(xiàn)有的代幣數(shù)量,并不會(huì)超過(guò),也就是說(shuō)你永遠(yuǎn)無(wú)法一次性買斷流動(dòng)池中所有的。可以看出,恒等乘積公式可以提供無(wú)限的流動(dòng)性,只要你想買就一定可以買到。
交易滑點(diǎn)

交易滑點(diǎn)是指:“在買賣

時(shí),實(shí)際支付的價(jià)格和期望的交易價(jià)格之間的差別,稱為交易滑點(diǎn)”。

從流動(dòng)池中購(gòu)買

Token需要支付
,所以本次購(gòu)買的價(jià)格為:

其中:

表示當(dāng)前流動(dòng)池中的價(jià)格

從公式可以看出交易的滑點(diǎn)是與

成線性關(guān)系。

下圖是滑點(diǎn)的函數(shù)圖像:

滑點(diǎn)(偏離幅度)取決于

image
, 當(dāng)資金池中足夠大時(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)買

代幣后一定會(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à)賣給Uniswap

  • Uniswap中的價(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)了。

其中:

,
,
,

,目前交易費(fèi)為:
交易滑點(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à)格

開(kāi)始用戶向流動(dòng)池中注入

,
,當(dāng)前市場(chǎng)的價(jià)格:

假設(shè)現(xiàn)在外部市場(chǎng)價(jià)格發(fā)生了變化,價(jià)格變成:
image

,由于發(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ì)有損失。

再看黃色的曲線,由于黃色曲線是計(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的公式

其中: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。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容