日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Uniswap原理

發布時間:2023/12/16 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Uniswap原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 Uniswap簡介

1.1 Uniswap是什么

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是一個基于以太坊的自動代幣交換協議,它的設計目標是:易用性、gas高利用率、抗審查性和零抽租。

  • Ease-Of-Use(易用性): TokenA換TokenB,在Uniswap也只要發出一筆交易就能完成兌換,在其它交易所中可能需要發兩筆交易:第一筆將TokenA換成某種媒介貨幣,如ETH, DAI 等,然后再發第二筆交易換成TokenB。
  • Gas Efficiency(gas高利用率): 在Uniswap上消耗的gas量是以太坊上的幾家主流去中化交易所中最低的,也就代表在Uniswap交易要付的礦工費最少。
  • Censorship Resistance(抗審查性): 抗審查性體現在Uniswap上架新Token沒有門檻,任何人都能在Uniswap上架任何Token。這在去中心交易所中很少見,雖然大多數的去中心化交易所不會像中心化交易所那樣向你收取上幣費,但還是需要提交上幣申請,通過審查后運營團隊才會讓你的Token可以在他們的交易所上交易。
  • zero rent extraction(零抽租): 在Uniswap協議設計中,開發團隊不會從交易中抽取費用,交易中的所有費用都歸還給流動性提供者。

1.2 Uniswap特點

  • A simple smart contract interface for swapping ERC20 tokens.
    Uniswap是一種自動流動性協議,用于基于以太坊的ERC-20代幣交換。
  • A formalized model for pooling liquidity reserves.
    Uniswap采用了固定的算法,并在以太坊區塊鏈上的不可升級智能合約系統中實施,它取消了對受信任的中介機構的需求,從而優先考慮了權力下放和安全性。
  • An open source frontend interface for traders and liquidity providers.
    是一個為交易者和流動性提供者提供的開源的前端接口,基于GPL許可的開源軟件。
  • A commitment to free and decentralized asset exchange
    致力于免費且分布式的資產交換。每個Uniswap智能合約(或交易對合約)管理由兩個ERC-20代幣的儲備組成的流動代幣池。

2 做市

在前面的部分我們知道Uniswap可以實現將一種token換成另外一種token,那uniswap是怎么做到的呢?他和傳統的做市商有什么區別呢?

2.1 傳統市場上的交易

傳統的交易所一般采用的是訂單簿來撮合買賣雙方,如下圖所示:

簡單來說就是:買方掛自己的購買數量和價格、賣方掛出自己的賣出數量和價格,交易所對買賣雙方進行配對,當買價>=賣價時就促成交易,同時產生一個當前最新價。其特點是:

  • 市場上必須要有用戶進行掛單,沒有訂單就沒有流動性(市場流動)。
  • 訂單必須重疊才能成交,即買價高于或等于賣價。
  • 需要將資產存儲在交易所。

2.2 做市商

傳統的交易所(訂單薄模型市場)中,買家期望買入某一資產,則賣家必須賣出同一種資產,并且要在價格上達成共識,而買家期望以最低的價格購買,賣家期望以最高的價格賣出,如果兩者在價格上無法達成共識,那么將無法達成交易,此時如果想達成交易,要么是買家提價、要么是賣家降價,但當市場上此種資產的流通性較小時,價格達成共識將變得困難,市場流通性變差,此時就需要依靠做市商的參與。簡單來說,做市商會在買賣兩個方向上掛單,讓交易得以達成,避免出現因一方沒有掛單而導致流動性降低。資產的流動性對其價值影響極其巨大,如果資產無法在需要的時候變現,那么和白紙無異。在金融市場中,做市商扮演著非常重要的角色,它負責為市場提供充分的流動性,撮合買家和賣家以促成交易。

2017年涌現出的眾多DEX都采用傳統的訂單簿形式(OrderBook)做市商,即由做市商在交易所中上不斷創建和調整訂單,等待對手吃單,因此也叫被動做市商。

3 Uniswap上的交易

Uniswap是一個運行在以太坊區塊鏈上的流動性協議,支持免信任的代幣互換,也即是說,該交易所上的所有交易都是由智能合約自動執行的,用戶無需依靠某個中介也無需信任某個第三方。

3.1 提供流動性

在uniswap上,我們也可以查看當前的流動性情況,如下圖所示:

我們可以為某一個交易對增加流動性,點擊圖中「增加流動性」按鈕;也可以看某一個交易對流動性的詳細信息,如下圖所示:

上述的操作可以通過api來實現,Uniswap是一種基于以太坊的協議,旨在促進ETH和ERC20 代幣數字資產之間的自動兌換交易。Uniswap完全部署在鏈上,任何個人用戶,只要安裝了去中心化錢包軟件(當前已經支持的錢包包括MetaMask、WalletConnect、Coinbase Wallet、Fortmatic、Portis),都可以使用這個協議。

3.2 換幣

在uniswap上我們可以方便的將我們的ERC20 token換成另外一種ERC20 token,如下所示:

4 uniswap交易做市原理

4.1 整體模型

以Dai-ETH交易對為例,其整體模型如下:

  • 任何人可以在uniswap上建立一個雙幣種之間兌換的池子,由創建者往這個池子里添加這兩個幣種,添加的數量由第一個創建者決定。池子的創建者也屬于流動性提供者。
  • 做市商即流動性添加者。以DAI-ETH的池子為例,做市商往池子里添加這兩種幣種,并獲得LP Token(做市憑證)。
  • 在做市商提供了流動性以后,用戶就可以和這個池子進行交易了,可以選擇把DAI換成ETH,也可以把ETH換成DAI。
  • 交易的過程中,需要給流動性提供者支付手續費,目前是收取支付幣種的0.3%。由于交易用戶的手續費直接全部分給做市商,吸引了大資金的玩家進入uniswap提供流動性,大資金的進入會使得用戶在交易的時候以更優的價格進行成交,進一步吸引用戶進入uniswap進行交易,繁榮了交易的生態。
  • LP token用于跟蹤用戶資產在總資產池的比率,當用戶取消做市時,通過LP token確定贖回資產的份額,同時將LP Token換成DAI和ETH,并同時獲得做市期間獲得的交易手續費。

4.2 智能合約

Uniswap是通過智能合約來管理兩種ERC20代幣組成的代幣池,每一筆存入、兌換記錄都可查可追溯。下圖為uniswap網站ETH-DAI兌換的一個截圖:

進入以太坊區塊查詢網站查找區塊,其中可以看到這一筆兌換記錄(0xeebec7874f46c4452610a11fa6be0264f7f0557f),如下圖所示:

4.3 AMM(Automated Market Maker,自動化做市機制)

4.3.1 恒定乘積

uniswap中,代幣交易對示例如下圖所示:

對uniswap中的任意一個代幣交易對,其都遵守:

x*y=k

公式,x、y分別代表交易對的兩種代幣。協議保證:

當用戶要從一個資金池中換出資產時,交易前和交易后池內兩種資產的具體數量的乘積相等。

此公式的曲線圖如下所示:

從上述圖可以看出,由于曲線的斜率是變化的,當交易的數量不同時,價格是不同的。假設交易使得池子里的數量從old position點移動到了new position點,交易的價格等于A tokens spent/B tokens spent( price=△x /△y )。從圖可得,若支付2倍的A token,獲得的B token小于原來的2倍,根據公式可得價格是變大的。
此機制的核心在于:

報價直接取決于訂單的大小
越往曲線右端移動,單位投入獲得的收益越少

4.3.2 價格變動推演(不考慮手續費)

接下來以ETH/DAI交易對為例,推演一下在進行代幣兌換過程中,兩種代幣的價格變化。假設做市商已經為這一流動性池注入了10000 DAI(x)和100 ETH(y)的資金,初始時k = 10000 x 100 = 1,000,000。根據公式x*y=k可知,在代幣兌換過程中,x、y不斷變化,但是k一直保持不變。

4.3.2.1 通過Dai兌換ETH

價格變化如下:

兌換兌換數量ETH(x)數量Dai(Y)數量price(ETH/Dai)花費ETHK
初始01001000010001000000
第1次兌換19910101.01102.030102.0301000000
第2次兌換49510526.316110.803443.2131000000
第3次兌換59011111.111123.457617.2841000000
第4次兌換108012500156.251562.51000000
第5次兌換206016666.667277.7785555.5561000000
第6次兌換204025000625125001000000
第7次兌換2020500002500500001000000
第8次兌換1010100000100001000001000000
第9次兌換911000000100000090000001000000

價格變化趨勢如下所示:

說明:x軸為ETH數量

4.3.2.2 通過ETH兌換Dai

價格變化如下:

兌換兌換數量ETH(x)數量Dai(Y)數量price(ETH/Dai)花費ETHK
初始0100100000.0101000000
第1次兌換100101.0199000.0101.0201000000
第2次兌換400105.26395000.0114.4321000000
第3次兌換500111.11190000.0126.1731000000
第4次兌換100012580000.01615.6251000000
第5次兌換2000166.66760000.02855.5561000000
第6次兌換200025040000.06251251000000
第7次兌換200050020000.255001000000
第8次兌換100010001000110001000000
第9次兌換90010000100100900001000000

價格變化趨勢如下所示:

說明:x軸為Dai數量

4.3.3 價格變動推演(考慮手續費)

為了鼓勵用于向Uniswap的流動池中提供更多的流動性,Uniswap會從每筆交易總額中抽取0.3%當成交易手續費,并將手續費全額交給那些將注資金到Uniswap資金池提供流動性的流動性提供者。Uniswap需要手續的地方包括:

  • 用ETH兌換ERC20代幣,其手續費為ETH的0.3%;
  • ERC20代幣兌換ETH,其手續費為ERC20代幣的0.3%;
  • Uniswap v1中,ERC20代幣兌換ERC20代幣,其手續費包括了兩部分:一是從ERC20代幣兌換為ETH的交易,手續費為ERC20代幣的0.3%;從將兌換來的ETH兌換為新ERC20代幣,手續費為ETH的0.3%。

注意:Uniswap v1中所有的換幣操作都要以ETH為媒介,不過在Uniswap v2中,不依賴ETH就可以換幣。

這里還繼續使用上面的示例,我們推演一下價格。

4.3.3.1 通過Dai兌換ETH

價格變化如下:

第N次兌換兌換數量ETH(x)數量Dai(Y)數量price(Dai/ETH)花費Dai手續費(Dai)K(兌換前)K(兌換后)
初始0100100001000010000001000000
第1次兌換19910101.010102.030102.03031.2311000000.0001000031.231
第2次兌換49510526.645110.807443.227147.3381000031.2311000178.568
第3次兌換59011113.095123.479617.394228.7051000178.5681000407.274
第4次兌換108012505.091156.3141563.136733.0191000407.2741001140.292
第5次兌換206016685.672278.0955561.8914640.1941001140.2921005780.486
第6次兌換204025144.512628.61312572.25623709.2431005780.4861029489.730
第7次兌換202051474.4862573.72451474.486397443.4141029489.7301426933.143
第8次兌換1010142693.31414269.331142693.3146108414.5871426933.1437535347.730
第9次兌換917535347.7307535347.73067818129.5731533099566240.8707535347.7301533107101588.600

價格變化趨勢如下所示:

說明:x軸為ETH數量

4.3.3.2 通過ETH兌換Dai

價格變化如下:

兌換兌換數量ETH(x)數量Dai(Y)數量price(Dai/ETH)花費Dai手續費(Dai)K(兌換前)K(兌換后)
初始0100100000.010010000001000000
第1次兌換100101.01099000.0101.0200.3061000000.0001000000.306
第2次兌換400105.26395000.0114.4325.3191000000.3061000005.625
第3次兌換500111.11290000.0126.1739.2591000005.6251000014.884
第4次兌換1000125.00280000.01615.62546.8761000014.8841000061.760
第5次兌換2000166.67760000.02855.559333.3541000061.7601000395.114
第6次兌換2000250.09940000.063125.049750.2961000395.1141001145.410
第7次兌換2000500.57320000.250500.5733003.4361001145.4101004148.846
第8次兌換10001004.14910001.0041004.1493012.4471004148.8461007161.293
第9次兌換90010071.613100100.71690644.516244740.1941007161.2931251901.487

價格變化趨勢如下所示:

說明:x軸為ETH數量。這里是兩條線,只是藍色和橙色幾乎完全重疊

從上面分析可以看到,大單交易并不是很適合在uniswap上進行,隨著一種幣種的減少,價格變動劇烈,而大單交易容易滑點從而導致價格變化加劇。

更多信息,參考uniswap-數據推演.xlsx

5 Uniswap V2

Uniswap V1上的每個交易對中都有ETH,如果要將代幣兌換成代幣B,必須先用代幣A買入ETH,然后再用ETH買入代幣B,因此,交易者需要支付兩筆交易費和gas費,Uniswap V2將不受此限制。具體見下圖(這里的圖來自有關 Uniswap V2 的一切,因為別人畫的比較好,所以就沒有自己畫)。

  • 在Uniswap V2中,直接通過Dai兌換Link幣
  • 在Uniswap V2中,通過Dai兌換ETH然后兌換Link幣。
  • 在Uniswap V2中,實現任意幣種之間的兌換。

6 流動性資產損失

6.1 示例說明

Uniswap中存在流動性資產損失,下面以ETH(X)-DAI(Y)作為示例進行解釋。繼續使用上面表格中的數據,假設開始的時候X=100、Y=10000,其中有個流動性提供者往池中注入了1個ETH和100個DAI,占整個流動性池中代幣總量的 1%。經過幾筆交易之后,價格發生了變化(交易費忽略不計)。第三次兌換后,池子中ETH減少5個,DAI增加23.457個。如下所示:

兌換兌換數量ETH(x)數量Dai(Y)數量price(ETH/Dai)花費ETHK
初始01001000010001000000
第1次兌換19910101.01102.030102.0301000000
第2次兌換49510526.316110.803443.2131000000
第3次兌換59011111.111123.457617.2841000000

流動性提供者投入的代幣價值(占總量的1%),即擁有ETH=0.9、DAI=111.111,假設此時提取并這算成DAI,折算后=222.324DAI;對于此時擁有1ETH、100DAI的用戶,折算后其擁有223.457DAI,二者對比即少了1.124DAI,這就是Uniswap中的流動性資產損失。

實際中,因為每次兌換都有手續費,手續費的累加將比較客觀,所以流動性提供者最終的收益是手續費收益 - 流動性資產損失的結果。

收益分析

流動性提供者實際可獲得的收益是用累計的交易費減去由價格差導致的暫時性虧損所得的余額。
如果長期以來價格起伏過大,造成的損失將遠遠超過交易費帶來的收益。
如果Uniswap能夠能夠吸引到足夠多的流動資金,流動性提供者就能從價格波動中獲得收益。

6.2 公式解釋

這里暫不考慮費用的影響。

6.2.1 恒定乘積公式

恒定乘積公式: X * Y = K;X、Y代表兩種代幣在池子中的數量,即流動性
uniswap中價格取決于兌換關系,所以有:
X兌換Y的價格: Pxy = X / Y
Y兌換X的價格: Pyx = Y / X

uniswap提供的服務其實就是用X來換Y或者用Y來換X,這里我們假設通過X來換Y,經過一段時間以后X減少了△x、Y增加了△y,同時需要保持恒定乘積,即

恒定乘積公式:(X-△x) * (Y+△y) = K;

假設我們用Pxy表示uniswap池子中X兌換Y的價格,那么有:

結論:被兌換的token越多,uniswap中兌換價格越高。

6.2.2 流動性公式

由以上公式可以得出,在總流動性恒定的情況下,我們可以計算出特定價格下每個流動性池的大小。
X的流動性為:

Y的流動性為:

整理一下上面公式后得到:
X的流動性變化值:

Y的流動性變化值:

結論:uniswap池中token流動性受兌換價格影響。

6.2.3 資產損益公式

假設期初時候X的價格為Px1,Y的價格為Py1,經過一段時間后X的價格為Px2,Y的價格是Py2,那么最開始時存入資產價值為:

期初存入價值:M1 = X * Px1 + Y * Py1
提現時(假設全部提出)存入價值:M2 = (X - △x) * Px2 + (Y + △y) * Py2
價值變化△m = M2 - M1

整理后的公式為:

假設Y是DAI,而DAI是穩定幣,那么公式可以調整為:

結論:

  • 資產損益受X期初、期末價格以及uniswap中x-y兌換價格影響;
  • 如果uniswap池中的x-y兌換價格較大和市場上二者價格偏離,會有套利者進場從而逐步拉平兌換價格,最終價值變化還是收x價格變化影響。

更多信息可以參考:Uniswap 會是下一個聚寶盆嗎?、最強Defi協議Uniswap原理分析

7 閑話

Uniswap協議本質是在搶交易所的生意,用戶不用依賴任何交易所即可完成代幣之間的兌換;在Uniswap上,無需掛買單或賣單,也不用進行繁重的計算。流動性提供者也可以一勞永逸,訂單和倉位管理方面的開銷也明顯減少。
值得注意的一點是:既然可以不依賴交易所就能完成代幣兌換,那么必然可以實現發幣功能,即,可以簡單地認為,即便是沒有任何中心化的交易所,也可以發幣了。當然uniswap上的發幣還是有一些規則和規范的。

對于用戶而言,uniswap提供了兩種能力:

對于希望通過提供流動性來進行獲益的用戶而言,用戶可以將自己擁有的ERC20存入uniswap的流動性提供池,通過提供流動性而獲益。
對于需要流動性的用戶而言,用戶可以在uniswap上將自己的一種ERC20 token換成另外一種ERC20 token,這個過程中不用有任何人掛賣單,因為另一種token由流動性提供者提供。

8 參考文檔

Uniswap是什么、工作原理?Uniswap最全解釋

uniswap的工作原理(上)

最強Defi協議Uniswap原理分析

一文詳解Uniswap V2的新功能和工作原理

什么是 Uniswap

Uniswap —— 一家不走尋常路的交易所

有關 Uniswap V2 的一切

總結

以上是生活随笔為你收集整理的Uniswap原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。