金融是貨幣資金融通的總稱,主要是指與貨幣流通和銀行相關的各種活動(百度百科)
在鏈下的世界裏,掌握金融命脈的是政府和政府管理下的中央銀行。儘管有來自市場先生的調控,再加上每個有金融市場的國家都有一套相對成熟的金融市場監管體系,但當危機發生時,我們都會知道誰纔是最有Power那個角色-----政府。
當貨幣被密碼學帶到區塊鏈上,這意味着金融也被帶到了區塊鏈上。密碼學和互聯網技術給予大衆在一定程度上探索代碼取代法律法規(政府)的可能性,即Code is law的可能性。
爲什麼要研究Uniswap協議(代幣UNI)?
如果把各條鏈比作不同的國家,以太坊必然是一個綜合實力排名最靠前的國家,那麼我認爲Uniswap就是這個國家上最大的“證券”交易所,它承載着以太坊上大量token的流動性,滿足了大量用戶買賣ERC20代幣的需求。

這篇文章從哪幾個角度去研究Uniswap?
寫Uniswap的文章已經有很多,本文主要從用戶需求,Uniswap v2 AMM實現原理,以及激勵機制去學習和討論。
什麼是Uniswap協議?
Uniswap是一個開源的,去中心化的,用於在以太坊上提交流動和交易ERC20代幣,也即是我們常說的去中心化交易所(DEX)
Uniswap解決了什麼問題?滿足了用戶什麼需求?
中心化交易所的弊端:用戶資產不安全
中心化交易所(CEX)相較於去中心化交易所,流動性好,而且更容易上手,交互更人性化,出入金更方便,再加上部分交易所經常搞活動比如IEO,理財,所以中心化交易所在這個圈子裏擁有大量的用戶和交易量。並且絕大部分用戶習慣把自己的token存放在交易所裏。
但中心化交易所存在一個經常爲人詬病的問題,就是資產負債不透明。現在這個圈子缺乏監管,資產負債不透明就容易會催生徇私舞弊的行爲,最典型的莫過於挪用用戶資產,這次FTX爆雷的導火線是SBF在今年年中挪用41億美元用戶資產去救Almeda Research。
我們知道token的所有權是歸屬於錢包私鑰的所有者(Not your key, Not your coin)當我們把token轉移到中心化交易所那一刻開始,由於缺乏監管,你的token資產本質上已經是屬於交易所,你的資產能拿回來的前提是這個交易所不作惡。對於交易所來說,token幣價就只是一個數字,對於那些市值較小的山寨幣更是如此,這就是爲什麼某些交易所在代幣還沒發行就可以開盤給用戶參與買賣。
Uniswap如何解決用戶交易token和資產不安全的問題?
資產安全問題
首先Uniswap並不需要像中心化交易所那樣需要用戶先把token充值到平臺再進行交易,Uniswap在執行用戶交易行爲之前,用戶的token一直存放在自己的錢包中比如Metamask,Tokenpocket。除非用戶泄露自己錢包的私鑰或錢包被黑,否則token在錢包裏都是安全的。
交易
一筆token的買與賣需要有買家和賣家,若這筆交易發生在中心化交易所裏,交易所充當中介的形式撮合交易並收取手續費。交易所一般使用中央訂單簿的形式撮合買家和賣家的交易,因此就有了做市商的存在(Wintermute/Almeda Research),具體見下圖。
在Uniswap裏沒有中央服務器,沒有訂單簿,它使用一個叫自動化做市商的東西(下稱AMM)來撮合用戶的交易。下文將會詳細討論Uniswap的AMM機制。
因此Uniswap爲區塊鏈用戶提供了一個去中心化的,安全的,用來交易ERC20 token的場所,滿足人們交易token且錢包資產的安全得以保障的需求。
Uniswap AMM實現原理
Uniswap的流動性池是通過一個公式來計算價格的,我們稱這個公式爲恆定乘積公式:
x * y = k,k是常數(一個數值不變的常量)
在討論這個公式之前,需要先理解以下幾個概念:
流動性:由兩種token組合而成,比如token1和token2組稱一對(pair),注意這裏組合成pair以後,pair是一種ERC20的token
流動性池(Pool):流動性彙集的池子,即AMM的資產池
流動性提供者:向流動性池中提供流動性的人,稱爲Liquidity Provider/LP
流動性代幣(Pool Token也叫做Liquidity Token):UniswapV2裏的Pair是一種ERC20的token,是LP提供/提取流動性的一種“憑證”,在LP提供流動性時自動生成代幣給LP,在LP提取流動性時燃燒LP的代幣
流動性池份額(Liquidity Pool Share/LPS):通過計算得到的,用來記錄每個LP的流動性貢獻比例
建立流動性池子和Token兌換的流程
在部署好一個流動性池的合約以後,比如token1和token2這一pair,然後需要有流動性提供者LP向池子裏放入一定量的代幣去啓動流動性池,這時候LP會獲得流動性代幣Pool Token。第一個LP能設定這個流動性池的初始金額,並且擁有100%的LPS。在完成上述流程後,流動性池就擁有了流動性,可以開始供trader兌換代幣,流程示意圖參考下圖:
x * y = k計算token兌換價格
Token兌換時的價格是通過公式x * y = k(k是常數)計算得來的
x和y分別代表流動性池裏兩種token的數量,兩種代幣的總價值需要相同,假設現在一個ETH的價格是1000 USDT,那麼建立流動性池的時候需要比如5ETH - 5000USDT(其他穩定幣也可以)或者 10ETH - 10000USDT
從公式可以看出兌換token的價格是由x和y兩種token的數量來決定的
x代表token1的數量,即reserve1
y代表token2的數量,即reserve2
由於k是常數,
如果增加reserve1,那必須要減少reserve2
如果增加reserve2,那必須要減少reserve1
舉一個具體的例子:
假設ETH的價格爲1ETH=1000USDT,由於兩種代幣的總價值需要相同
x=流動性池ETH數量=5ETH
y=流動性池USDT數量=5000USDT
k=x * y
k=5*5000
k=25000
現在有人要從該流動性池子中買入(抽走)1個ETH
x=流動性池ETH數量
x=5-1
x=4ETH
由於k保持不變
y=k/x
y=25000/4
y=6250
那麼這個人需要支付的USDT爲
6250-5000=1250USDT
拋開交易手續費不談,1ETH=1000USDT,但在這個流動性池裏購買1ETH需要支付1250USDT,這就是我們常說的交易滑點(slippage)。但一般來說流動性池越大,兌換token的數量相對流動性池越小,交易滑點就越小。
還是用上面的例子,但現在流動性池變成:x=500ETH,y=500000USDT
k=x * y
k=500*500000
k=250,000,000
現在也有人要從該流動性池子中買入(抽走)1個ETH
x=流動性池ETH數量
x=500-1
x=499ETH
由於k保持不變
y=k/x
y=250,000,000/499
y=501,002
那麼這個人需要支付的USDT爲
501002-500000=1002USDT
拋開手續費,在這個相對更大的流動性裏交易1ETH,交易滑點爲2USDT,比上一筆交易裏的250USDT的滑點明顯要小得多。
但一個流動性池裏通常有不止一個人在進行token的兌換,也就是說交易滑點一直處於一個動態的變化,而流動性池越小,交易滑點變化的波動越大。如下圖,在一個token兌換者(Trader)的視角下,一筆交易進行完畢,流動性池裏的token的價格是變化的。
激勵機制
用查理芒格的話來說,一個人的決策是由這個人的激勵機制決定的,也就是他在《窮查理寶典》提到的獎勵和懲罰超級反應傾向。
站在token兌換者Trader的角度,因爲Uniswap滿足了用戶對資產安全的追求和交換ERC20 token的需求,所以會有人來使用它。如果情況允許,沒有人會願意冒着資產會被挪用的風險去使用一個平臺來交易代幣。
站在Uniswap中流動性提供者的角度,那是什麼吸引着他們去建立流動性池或在流動性池裏添加代幣?
在Uniswap v2,token兌換者在交易的過程中,協議會提取交易token數量的0.3%作爲交易費用,並把這些交易費用放回到流動性池子中,用來獎勵那些流動性提供者。提供越多流動性的流動性提供者,所擁有的流動性代幣就越多(Pool token),即代表所擁有的流動性池份額越大(LPS),所以最後能獲得的交易費用獎勵就越多。
流動性提供者LP一般有三個主要羣體:被動性流動性提供者,項目方,專業做市商
被動性流動性提供者:爲了賺取被動收入的token持有者
項目方:他們添加流動性是爲了方便Trader進行買賣,也就是俗稱的項目方加池子
專業做市商:完成他們做市任務的一種策略
Uniswap(v2)的缺點
Uniswap v2的一個優點是通過激勵機制集中了許多流動性,但缺點是流動性的使用效率比較低。在v2中,x * y = k這條公式,並沒有特別限定x和y的範圍,那麼x和y的數量可以趨向於0或者無窮大,即說明x和y代表的兩種token的價格也可以趨向0或者無窮大,但實際情況是:在一定的時間裏,某個代幣的價格會在一個區間裏波動,因此導致了LP提供的流動性中有一部分是處於休眠狀態的(如下圖),無法爲LP賺取交易費用。
在Uniswap v3中,項目方增加了一個集中流動性(流動性區間)的概念來解決這個問題。這個以後咱們再另外寫一篇來介紹。
本文章參考文獻:
文章基本都是自己碼的,內容如有侵權請聯繫我刪除。