header-langage
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
掃碼下載APP
Partnered With:

有關 Uniswap V2 的一切 | Part 2

閱讀本文需 26 分鐘
本文旨在向讀者介紹 Uniswap V2 帶來的增強功能,並詳細介紹其主要特性。

原文作者:Ross Bulat

原文編譯:曾汨, 閔敏 & 阿劍,以太坊愛好者


Uniswap V2 上的交易選擇


如上文所述,Uniswap V1 上的每個交易對中都有 ETH。如果要將代幣 A 兌換成代幣 B,必須先用代幣 A 買入 ETH,然後再用 ETH 買入代幣 B。因此,交易者需要支付兩筆交易費和 gas 費。


Uniswap 的文檔將 V1 稱爲去中心化自動交易所的「原型」。這有可能是因爲開發人員發現了 V2 提供的更高效的交易執行方法。不再將 ETH 作爲中介代幣就是優化之一。


如下圖所示,ETH 不再作爲中介代幣之後,交易對之間可以進行直接交易:




- 兩種 ERC20 代幣直接互換 -


這種方式似乎既合理又直觀,或許 V1 就應該採取這種運作方式。只需調用路由合約上的 swapExactTokensForTokens 和 swapTokensForExactTokens 方法即可交易。


上述方法名稱中的 Exact 表示你希望爲交換中的哪一種代幣設置限額。如果你想用 DAI 買入一定數量的 ETH,就要使用 swapTokensForExactTokens ;另一方面,如果你想用一定數量的 DAI 買入 ETH,就要使用 swapExactTokensForTokens。Uniswap V2 的智能合約就採用了這兩種方法。


除了直接交易外,用戶依然可以選擇使用 ETH 作爲中介代幣來實現兩種代幣之間的交易。用戶無需直接在輸入代幣和輸出代幣之間創建流動性池,只要這兩種代幣與 ETH 之間存在流動性池即可。


例如,以 ETH 作爲中介代幣來實現 DAI 和 LINK 之間的交易,其流程如下圖所示:



- 以 ETH 作爲中介代幣實現間接互換(類似於 Uniswp V1)-


與之對應的 Solidity 方法是 swapExactETHForTokens 和 swapETHForExactTokens,以及 swapTokensForExactETH 和 swapExactTokensForETH。


實現代幣交易的最後一種方法就是,在多個 ERC20 代幣之間進行交易,直至獲得你想要的輸出代幣爲止,也就是白皮書中所說的「任意 ERC20 交易對」。當然了,所謂的任意代幣對中也可以包含 ETH。


下圖顯示瞭如何通過一系列代幣將 DAI 的價值轉移到理想的輸出代幣 Link 中:




-對於沒有直接交易對的代幣,可以通過一系列中介代幣交易來獲得輸出代幣-


如果你的輸入代幣和你想獲得的輸出代幣之間沒有流動性池,就可以採取這種方法,而且不一定需要上文所述的 ETH 作爲中介代幣。


雖然這種交易方法是可行的,但是目前沒有智能合約能自動實現這麼多筆代幣交易,只能手動將這個功能寫入前端應用的代碼中,並對 Uniswap 進行多個交易調用。


這個辦法的使用頻率可能不高,因爲在通過一至兩個中介代幣轉移價值後,額外的 Gas 費會讓迂迴交易變得很不划算。或許通過中心化交易所交易成本反而更低。儘管如此,一旦 ETH 2.0 主網上線,採用更加高效的 PoS 機制,再加上可擴展性功能,讓迂迴交易變得更加可行,這種方法將得到更廣泛的使用。


價格信息傳輸機制


Uniswap 的價格信息傳輸機制可以讓開發者基於某個代幣在幾個區塊(也可以表示成兩個時間戳之間的時間區間)內的價格波動性來計算該代幣的平均價格。


這個時間區間可以是前 1 小時,前 24 小時乃至更久。


雖然 Uniswap 會提供代幣價格,但是它不會在鏈上存儲任何歷史價格。需要 dApp 開發者自選基於一段時間的累積價格,來計算某個代幣在這段時間的平均價格。


這些平均價格稱爲時間加權平均價格(Time Weighted Average Price,TWAP)。


所謂的 TWAP 就是在鏈上選定一段區塊作爲時間區間,將某個代幣在這段區塊內的累積價格(該代幣在每個區塊的價格)除以時間戳區間(結束區塊的時間戳減去起始區塊的時間戳),得出該代幣在這段區塊的平均價格。圖解如下:




- TWAP 是基於一段區塊內的累積代幣價格計算得出的 -


TWAP 是可靠的,反映了一段時間內的代幣價格(別忘了,這是基於特定代幣對的)。採取這種方式可以避免閃電崩盤和劇烈的價格波動,這些在加密貨幣市場上很常見。當市場出現價格波動時,TWAP 可以更準確地反映代幣的情況。


如果需要,開發者可以通過 Uniswap 的 JavaScript SDK 免費獲取價格信息。詳情見下文。


閃電交易


閃電交易(Flash Swap)指的是通過一個交易來完成從 Uniswap 的流動性池中借出代幣、使用這些代幣進行某項操作並償還這些代幣這一多階段流程。如果這個流程中的任意一階段失敗,所有狀態更改都會撤銷,相關代幣重新回到對應的 Uniswap 流動池中。


下圖顯示了交易者如何能夠不持有代幣而執行閃電交易。這是因爲從流動性池中借出的價值一定會歸還到池內,要麼交易失敗,要麼交易者歸還借出的代幣:




閃電交易的一大用例就是套利交易,而且交易者一定能在獲利的同時將之前借得的代幣價值歸還至 Uniswap 流動性池內。交易者每次都能通過套利交易輕鬆獲得收益。


另一個用例是使用 Uniswap 流動性池結算 Maker 金庫,你可以償還債務,並取出 Maker 金庫中作爲擔保品的 ETH(或其它代幣)來償還 Uniswap 流動性池。相比直接使用自己持有的代幣來還款,這種方式消耗的 gas 較少。


閃電交易是 Uniswap 上一項比較新的功能,不過我們很快就能看到更多 dApp 整合這一功能。


在交易機器人這一用例中,閃電交易還可以用來自動執行套利交易。交易機器人不需要資金來執行交易,只需要識別套利機會並執行閃電交易即可。


新的 0.05% 的協議收費和治理


Uniswap V2 還爲協議引入了一種新的費用,叫做「協議費(protocol fee)」,啓用這一機制後,Uniswap 上發生的交易額的 0.05% 就會轉移到一個由 Uniswap 持有的地址上。這個 0.05% 是從 Uniswap 標準的 0.3% 手續費中抽出來的,所以啓動這一機制會導致流動性提供者的利益受損。


當前這一機制還是關閉狀態,而且 Uniswap 項目方也沒有任何公開聲明表示有啓用這一機制的計劃。


添加這個機制似乎有點可疑,但 Uniswap 開發者認爲,這是爲了支持 Uniswap 的增長和可持續性的必要功能。而且,還有一個事實可以爲他們辯護:啓用這一機制需要一個治理機制,由社區來投票決定要不要啓動這一機制。


雖然啓動這一功能需要先達成社區共識,這樣做會給予 Uniswap 項目方巨大的利益和競爭優勢。


從好的一面來說,這筆費用可用於升級協議和整個生態系統、提高接受度,最終能夠讓流動性提供者獲得更大的利益;理論上來說,可以彌補他們在這一機制中的利益受損。整個過程如下圖所示:




- 收取 0.05% 的協議費用的積極結果 -


現在還未有該治理機制的公開信息,但不妨假設會有利用 ERC20 代幣來收集投票,類似於 Maker 的治理和投票機制。


爲管理協議收費機制,Uniswap Factory 合約包含了 feeTo 和 feeToSetter 方法來設置接收資金的地址,以及有權更改 feeTo 地址的賬戶。

 

JavaScript SDK

 

本文有意避免過度技術化,但還是有必要提及 Uniswap 的 JavaScript SDK。這個開源庫給 NodeJS、JavaScript 框架及所有基於瀏覽器的應用提供了 JavaScript API 來集成 Uniswap。


這已經足以讓第三方應用直接將 Uniswap 集成到自己的產品和服務中。


Agent Wallet、Switcheo Exchange 和 Streamr Marketplace 是其中 3 個已經直接集成了 Uniswap 的產品。

該 JavaScript SDK 的文檔講解了用於提取代幣對數據和代幣對地址的 API,還有啓動交易和獲取定價的 API,應用可以藉此使用上文所述的價格信息傳輸功能。


注意,API 不能自動執行交易,只能幫你 準備 一筆交易,把你願意接受的市場價格中位數和交換所得的最低數量(也就是所謂的「滑點」考慮進去。


交易準備好之後,用戶必須手動使用錢包軟件(比如 MetaMask)發起和簽名交易。

 

關於 Uniswap 的代幣列表

 

如果你好奇 Uniswap.exchange 上的代幣列表是如何決定的,很簡單,這是人工操作的,Uniswap 團隊會用視頻會議討論要加入哪些代幣。因此,即使某種 ERC20 代幣的交易池已經出現了,也並不代表這種代幣會出現在 Uniswap 官方網站的代幣列表上。


如果你是某種代幣的發行者,你想要讓你的代幣出現在 [Uniswap.exchange] 默認的代幣列表上,你需要在 Default Token List repository 上提交一個 Github issue。


Uniswap.exchange 上還有一個功能:你可以在一個搜索框內輸入某個 ERC20 代幣的地址來找出這種代幣,然後添加到你自定義的列表中。這樣一來你就能在 dApp 中交易這種代幣了,但這不代表別人也能看到這種代幣,因此也不會提高這種代幣的曝光度。


開發者也可以在自己的 Uniswap 集成中創建定製化的代幣列表,只需遵循一個簡單的 JSON 結構即可。更多操作細節可見 Uniswap 的 Token Lists repository。


總結


本文完整地考察了 Uniswap V2,揭開了它的改進項目及其工作原理。更高效的代幣互換、按時間來加權的價格信息標識機制、閃電兌換功能,都是重大改進,在這些改進的背後,是遷移到基於 Solidity 來編寫合約的技術工作,這些技術工作讓 Uniswap V2 得以利用最新的操作碼來實現更高效率的執行。


Uniswap V2 保持了免信任、去中心化的本色,它存在於以太坊區塊鏈上,除非爆破底層協議,不然就無從破壞它。到目前爲止,沒有這樣的事情發生,而且,看現在的礦工羣體規模(以及驗證者的規模),以後也不太可能發生。


以太坊 2.0 的測試網 Medalla 啓動時有 2 萬名驗證者——我估計這個數字在主網啓動時還會更高,因爲到時候的驗證者可以得到經濟回報。


另一方面,Uniswap V2 作爲一個代幣交易所,也還不能說是完美的。在撰文之時,以太坊網絡的 Gas 費正處於歷史上最高的時期,這使得使用 Uniswap 的 Gas 費異常昂貴。Uniswap 沒有實時訂單簿功能,因此交易員要使用交易策略還是隻能找上中心化交易所。如前所述,Uniswap 需要用戶套利來保持交易所內代幣價格與市場價格的一致,中心化交易所仍舊在平衡 Uniswap 的匯率上發揮着不可替代的作用。


Uniswap V2 是朝着正確的方向邁出的積極一步,但若想讓去中心化交易所能夠完全取代中心化交易所,還是長路漫漫。雖說如此,密碼學貨幣社區(尤其是以太坊生態)的意見還是非常樂觀的——我們可以有把握地說,DeFi 的進展,不論從技術能力還是接受度來看,在短期內都不會放緩。


原文鏈接 


歡迎加入律動 BlockBeats 官方社群:

Telegram 訂閱群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方帳號:https://twitter.com/BlockBeatsAsia

举报 糾錯/舉報
選擇文庫
新增文庫
取消
完成
新增文庫
僅自己可見
公開
保存
糾錯/舉報
提交