
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 (其中x 和 y分彆代表交易池中兩種代幣的可用數量)自動計算的。對應的曲線代表所有可能的彙率。每個交易對都有自己的曲線,用來調節當前彙率。
如果 代幣 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