Uniswap V2 是該鏈上交易所的新一版迭代

Uniswap 是一個運行在以太坊區塊鏈上的流動性協議,支持免信任的代幣互換,也即是說,該交易所上的所有交易都是由智能合約自動執行的,用戶無需依靠某個中介也無需信任某個第三方。這種去中心化的代幣互換方案已經證實在ERC20 代幣的持有者群體中很吃香,他們願意使用Uniswap 來交易代幣並為不同的交易對提供流動性。

Uniswap 在2020 年3 月19 日在以太坊主網上推出了一個新版本,還配合著公開了核心合約的1.0.1 版;在發行之前,該版本已經在Rinkeby 測試網上測試過一段時間了。截至撰文之時,這個新版本在以太坊主網上已經使用超過了兩個月時間,而且迄今為止,沒有出現任何損壞智能合約完整性的問題。

不論你是持有還是在交易密碼學貨幣,是在搞以太坊開發還是做寬泛的金融科技業務,都有必要了解一下Uniswap,它在2020 年的第三季度隨著DeFi 概念的崛起迎來了快速的增長。所謂一項獨立的服務,Uniswap 也可以集成到第三方的數字錢包和dApp 中。此外,其它智能合約也可以拿Uniswap 作為基礎來開展服務。

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

Uniswap V1 定下的基調

Uniswap V1 為鏈上代幣互換和去中心化流動性池定下了基調,就是向交易代幣的用戶收取少量手續費、以此給提供流動性用戶以獎勵。

Uniswap V1 使用的不是鏈上訂單簿,正相反,代幣的交換比率是用一個叫做“恆定乘積公式” 的算法來確定的,相當於提供了一種機制來保持一種代幣的體量在所在交易對中的平衡。這個我們後面會進一步介紹。

底層的代幣交易對(例如DAI 對ETH,或者DAI 對USDC)各有各的流動性池,用戶可以通過同時存入兩種相應的代幣來提供流動性。流動性提供者可以得到所在流動性池中代幣交易的手續費作為獎勵,手續費率為0.3%,流動性提供者之間按份額分配—— 份額的大小,端看你注入流動性池的代幣數量佔整個流動性池數量的比重。

要是讀者不太了解Uniswap,我曾寫過的一篇基於Uniswap V1 的解釋性文章肯定有所幫助—— 在那篇文章中我解釋了協議的整個機制、交易比例是如何計算出來的、流動性提供者如何能賺到佣金、使用Uniswap 的好處和缺點,等等。見此處。

(編者註:想了解更多關於Uniswap 的細節,可見文末超鏈接)

Uniswap V2 有什麼新東西

Uniswap V2 給協議帶來了一系列的升級和增強功能。主要的更新包括:

ERC20 對ERC20 代幣的交易對。即,不再需要ETH 作為中介代幣來協助兩種ERC2O 代幣的互換過程。移除這個硬性要求可以減少一半的交易數量,也能節約交易的Gas 費。也因此,dApp 可以在缺乏直接的代幣互換池子的時候,更高效地發現從一種代幣到另一種代幣的“路由”。這一部分我們後文還會詳細講。價格信息傳輸功能,每個區塊都能基於按時間加權平均的定價方式為交易對刷新價格。這一部分我們後文也會詳細講解。閃電互換,或者說你可以從Uniswap 流動性池中“借出” 代幣、用於與任意的外部服務交互、然後 還清 你的初始貸款,所有操作都要放在一筆交易內。這樣的交易是原子化的,意思是說,交易中的任何一個操作失敗,都是導致整筆交易失敗、被改動的狀態完全回复。這種功能的一個顯而易見的用途就是利用流動性來做套利交易,但也有別的用途,比如為特定的DeFi 操作節約Gas 費,例如關閉Maker 金庫。 (編者註:想進一步理解閃電互換的原理,可見文末超鏈接《一筆交易能做什麼》)支持不標準的ERC20 代幣。辦法是將返回 void 類型的 transfer() 和 transferFrom() 的函數調用也視作成功的transfer (轉移)操作。這個功能看起來毫不起眼,但其實,許多主流代幣比如USDT(Tether)和BNB(幣安幣)的transfer 方法都會產生這樣的返回值。支持這些廣泛接受、但不完全遵守ERC20 標準的代幣,增強了Uniswap 在鏈上交易所中的優勢。額外的功能性方法,用於防止用戶所轉移的代幣數量超過Solidity 編程語言所能支持的最大數量時出現溢出錯誤(overflow)

注意:不標準的ERC20 代幣即支持正式的EIP 詳述所指定的方法,但返回值的類型(以及相應地,方法的簽名)迥異於詳述的代幣(合約)。這種缺陷會讓一種代幣變成不標準的代幣。類似的,重命名或者移除了詳述所指定的方法也會讓代幣變成不標準的,但這種情況在實踐中很少見,如果像Uniswap 這樣的協議希望支持這樣的變種,還需要大量的開發工作才能解決。

Uniswap V2 還引入了一個可啟用的0.05% 的協議層收費,就是從流動性提供者的0.3% 的手續費中分一杯羹。不過,現在這個機制是關閉的—— 而且只能夠通過一個去中心化的治理機制來觸發。我們後文還會再說。

Uniswap V2 經過充分的測試和審計之後方才推出

智能合約一經部署就不可改變的特性所帶來的風險(代碼問題可能導致資產損失/凍結),已經是老生常談了。如果一個合約包含了會導致資產鎖定的錯誤,那是沒有辦法讓這些發送資產的交易都撤銷的(除非對整條區塊鏈實施一次硬分叉—— 按以太坊當前的體量和復雜的依賴關係,幾乎是不可能這樣做的)。

Uniswap 團隊遵照了行業的標準實踐以盡可能地消除bug 風險和邏輯錯誤。值得稱讚!

從V1 轉成V2,團隊也用Solidity 語言重寫了他們的智能合約(第一版的智能合約是用Vyper 語言寫的)。 Uniswap 的開發者因此得以跨越Vyper 語言的局限性、利用最新版本的Solidity 語言中的更新的操作碼,進一步優化了合約執行的CPU 消耗(因此也節約了Gas 費)。

Uniswap V2 由多個智能合約組成,包括Factory 、Router V2、Pair 和Pari ERC20,還有一個負責功能的Library。

驅動Uniswap 工作的幾個主要的合約如下圖所示:

Router 2 是Router 1 優化之後的版本,不過它們的功能是一樣的。 Uniswap 建議所有的開發者都切換去用Router 2 合約。

重寫後的所有合約都得到了行內值得尊敬的開發團隊的審核,也在模擬現實運行場景的測試網上做了廣泛的測試。 Consensys Diligence 聯合多方撰寫了對Uniswap V2 源代碼的完整報告。完整的審核報告可見此處。

顯然的是,Uniswap V2 在上線主網之前經過了充分的測試和審核。貫徹對源代碼的盡職審核 很有可能 保證了未來不會發現任何重大的問題,雖然Uniswap 還是發布了一個Bug 懸賞,任何人發現了重大漏洞都可以獲得獎金。

安全是區塊鏈生態永不可能繞開的一個話題,而且這種擔心也是可以理解的,畢竟有這麼大的資金體量在這裡交易。對底層區塊鏈的攻擊(與共識、區塊生產和交易驗證有關的攻擊)已經出現了大量的學術研究,但智能合約的完整性似乎僅僅在以太坊生態中才被人重視,因為被鎖在合約中的資產仰賴於智能合約的邏輯來保證其安全性和可觸達性。

好的,接下來我們就深入了解下Uniswap V2 的機制,感受一下這個協議的潛力。

Uniswap V2 的工作原理

每個代幣交易對都要通過工廠合約(factory contract)建立自己的流動性池。建立流動性池時,需在其中存入初始資金,以提供流動性。

流動性池中代幣對的匯率是基於供需量計算得出的,即所謂的 恆定乘積公式(constant product formula) 。配合恆定乘積公式,一個交易對(也即一個流動性池)中的一種代幣的價格,根據池中的供給量和交易者的需求量得出。因此,價格會在根據該公式畫出的一條曲線上變動:

- Uniswap V2 上的匯率取決於恆定乘積公式-匯率是基於一個簡單的公式x * y = k (其中xy分別代表交易池中兩種代幣的可用數量)自動計算的。對應的曲線代表所有可能的匯率。每個交易對都有自己的曲線,用來調節當前匯率。

如果代幣B的需求量很大,以至於流動性乾涸,其價格將成倍增長,導致k點向曲線左側上移(如上圖所示)(譯者註:即更多的A 只能換來更少的B)。如果代幣B的供應量很大,需求比代幣A少得多, k點就會向曲線右側下移(譯者註:即更少的A 就可換來更多的B)。要注意的是,這種供需平衡僅限於代幣A 與代幣B 的流動性池。如果是代幣B 與代幣C 的流動性池,會形成自己的供需平衡,匯率也會不同。

(譯者註:簡而言之,Uniswap 並不使用訂單簿模式來決定代幣的價格,相反,代幣的價格會在用戶交易的過程中連續且自動地根據公式來變動,讓交易者的行為,包括注入流動性和套利交易,來找出沒有套利空間的價格,即市價。)

受到這些機制的影響,Uniswap(以及其它使用恆定乘積公式的去中心化交易所)依賴套利交易來讓流動性池中的代幣價格與市場價格保持一致。從本質上來說,這些協議依然需要通過外部交易系統來調控流動性池中代幣的價格。每個代幣對的匯率將根據市場價格不斷波動,為交易者帶來巨大的套利機會。

當用戶在Uniswap.exchange 的代幣對流動性池中進行交易時,使用的是實時匯率。 JavaScript SDK(會在下文作進一步介紹)會為其它應用提供API ,再由這些應用提供自己的界面來訪問不同的代幣對及其匯率。這些匯率應用於ETH 和ERC20 代幣:

- Uniswap V2 用戶界面上ETH/DAI 交易對的匯率-

現在,讓我們深入探究可在Uniswap V2 上執行的交易類型。 Uniswap V2 提供了更多交易選擇,因為它不再像Uniswap V1 那樣使用ETH 作為中介代幣來實現“ETH 搭橋”。

(未完)

原文鏈接:

https://medium.com/@rossbulat/uniswap-v2-everything-new-with-the-decentralised-exchange-52b4bb2093ab

作者: Ross Bulat