原文標題:《Uniswap —— 一家不走尋常路的交易所》

一文讀懂完全鏈上運行的去中心化交易平臺 Uniswap

Uniswap 是在以太坊上推出的一個極有意思的項目。它是一個去中心化代幣交易所的協議,但與目前看到的一般協議很不一樣。幾年前,Vitalik 在 reddit 上發了一條帖子,Uniswap 的創始人 Hayden Adams 因此受到啓發,但他一開始只是抱着學習 Solidity 的想法。不過很快,這項編程練習就收到了一筆來自以太坊基金會的獎金。Uniswap 是一組部署到以太坊網絡上的智能合約,這意味着整個過程都是在鏈上進行的。Uniswap 沒有自己的代幣,完全去中心化,也沒有任何手續費流向創始人。雖然 Uniswap 的機制需要一些時間來習慣,但我們會發現,與傳統的去中心化交易所(DEX)相比,這種代幣交易協議擁有一些顯著的優點。

一文讀懂完全鏈上運行的去中心化交易平臺 Uniswap

簡介

Uniswap 獨特的架構完全擺脫了限價訂單的概念。不同尋常的是,做市商在提供流動性時不再指定交易價格,而是隻提供資金,然後 Uniswap 會負責餘下的事情。

在 Coinbase 這樣典型的傳統交易所上,做市商常常按不同價位提供不同的流動性。假設一位交易者手頭有 1000 美元和 10ETH。他可能會以 80 美元買 5ETH 以及 60 美元買 10ETH 來掛買單。同時,他可能會以 120 美元賣 4ETH 以及 140 美元賣 6ETH 來掛賣單。他們會選擇以自己樂意交易的各種價位做市。總的來說,所有交易者的掛單就組成了交易所的限價訂單簿。隨着市場行情的上漲或下跌,交易者可能會以其指定的價格成交,也可能不會成交。通常來說,ETH 的「行情報價」爲最高買單和最低賣單的中間值。

現在假設 Coinbase 把每個人的買單和賣單彙集到兩個大的交易池中——可以想象,有的交易者可能不太喜歡這種做法。他們不希望自己的訂單與其他人的混在一起,或者不希望讓 Coinbase 代表他們以任意價位執行交易。

然而,Uniswap 卻正是這麼做的。做市商不再指定他們願意買入或賣出 ETH 的價格。相反,Uniswap 會將每個人的流動資產彙集在一起,並根據某種確定性的算法做市。該算法稱爲「自動做市商」(AMM),它會根據某些預定義的規則集向最終用戶報價。舉個非常簡單的 AMM 例子:某種交易機器人(bot)策略會以市場價格的中間值爲基準,每隔 1 美元(低於 1 美元)提供買單和賣單(高於 1 美元),並隨着市場的變化不斷修改下單。

AMM 並不是死板的,不同的算法各有權衡取捨。Uniswap 使用了一種被稱爲「恆定乘積做市商模型」的算法。這種 AMM 的其中一大特點是,無論訂單簿規模有多大,或者流動性資金池有多小,它都能提供流動性。其中的竅門是隨着需方數量(買單)的增加,漸進式地增加代幣的價格。雖然這對較大的訂單不太友好(稍後會詳述),但系統永遠不必擔心流動性不足,它幾乎能一直有效運作。

交易者需知

舉個 ETH / DAI 交易對的簡單例子。假設做市商已經爲這一流動性池注入了 100,000 DAI 和 1,000 ETH 的資金。Uniswap 將這兩個數量相乘(100,000 x 1,000 = 100,000,000)。

一文讀懂完全鏈上運行的去中心化交易平臺 Uniswap

Uniswap 針對這一特定交易對的目標是:無論交易活動多少,該產品都將始終保持 1 億的交易對乘積數量(因此稱爲「恆定乘積做市商」)。要記住 x * y = k 這一關鍵公式,其中 x 和 y 是流動性池中的代幣數量,k 是乘積。要想保持 k 恆定,x 和 y 只能相互反向變動。比如某一交易者在此合約中用 DAI 購買 ETH,則他們正在增加 x (因爲增加了流動池中的 DAI),同時也減少了 y (因爲減少了流動池中的 ETH)。但這個反向變化不是線性增長的關係。如果現在你要購買 100ETH 而不是 10ETH,那麼在購買 10ETH 所需的 DAI 的基礎上增加 10 倍,可能並不夠用。事實上所需的 DAI 是漸進式增加的。最簡單的理解方法是繪製 x * y = k 曲線。

一文讀懂完全鏈上運行的去中心化交易平臺 Uniswap如圖所示,水平方向衡量花費的幣 A 的數量,越往右移,單位數量得到的收益(即收到的幣 B 的數量)越少(Y 值變動越小)

在這個系統中需要注意的是關鍵點在於:報價直接取決於訂單的大小。越往曲線右端移動,單位投入獲得的收益越少。假設當前的 ETH / DAI 價格爲 100,不同數量訂單所需支付的溢價見下表:

一文讀懂完全鏈上運行的去中心化交易平臺 Uniswap

如表所示,當購買 ETH 的數量超過流動性池的 2% 時,購買大量的 ETH 就會很昂貴。不過要記住,這些溢價乃是由當前流動性池的規模決定的。如果流動性池大了 100 倍(即 1000 萬 DAI 和 10 萬 ETH),這時候只購買 50ETH 就沒那麼貴了。最終,支付價格反映的是交易規模對 x / y 比率的改變程度。流動性池越大,處理大訂單就越容易(這正是我們所期望的)。

值得注意的一點是是搶先交易(front running),當今以太坊上的所有 DEX 都存在這個問題。爲緩解這一問題,Uniswap 允許用戶在下單時指定最高價格。這樣,即便礦工搶先交易某一訂單,用戶也不會被迫接受更高的價格。雖然用戶可能會錯過這筆交易,但他們不需要支付更高價格。Uniswap 的另一個特點是「訂單到期」,該功能可以防止礦工擱置已簽名的交易並等到價格變動後再處理。

ERC-20 到 ERC-20 的代幣互換無需使用專門的流動性池。例如,在處理 REP <> ZRX 訂單時,系統將先通過 REP/ETH 交易對,再自動通過 ZRX/ETH 交易對。

流動性提供者需知

流動性提供者面臨的情況要更復雜。舉個 ETH/DAI 市場的例子。首先,流動性提供者(以及交易者)要注意,x/y 比率代表交易對的價格。在我們當前使用例子中,x/y = 100,000 DAI / 1,000 ETH = 100。假設 ETH 在 Coinbase 上價格是 100 美元。如果 x/y 不等於 100,那麼 Uniswap 和 Coinbase 之間將存在套利機會。

當流動性提供者向池中增加流動性時,他不能只向交易對的一方提供流動性,這樣會改變兩種代幣間的比率、設定出一個新交易價格(這是個危險操作,因爲他將立即被交易對手套利,從而賠錢)。例如,某一流動性提供者僅增加了 1,000ETH,則合約的新比率爲 100,000 / 2,000 = 50。套利者將蜂擁而至,直至該比率再次變成 100:1。流動性提供者必須爲交易對的兩個幣種提供等值的資金(Uniswap 接口將確保不會出現錯誤操作)。

假設在增加 10,000DAI 和 100ETH (總市值 20,000 美元)之後,流動性池現在總共有 100,000 DAI 和 1,000ETH。由於注入的金額相當於總流動性池的 10%,因此合約會產出一種「流動性代幣(liquidity token)」,將其提供給做市商,使其有權獲得池中可用流動性的 10%。這些代幣不是用於交易的投機幣,而只是一種用於記錄流動性提供方債權的會計或者說記賬工具。如果其他人隨後存幣或者取幣,則將會產生或者銷燬新的流動性代幣,保證每個人在流動資金池中的相對份額保持不變。

現在假設 Coinbase 上 ETH 的價格從 100 美元漲到 150 美元。在經過一番套利之後,Uniswap 合約也將反映出這一價格變化。交易者將增加 DAI,減少 ETH,直到新比率變成 150 : 1。這會對流動性提供者造成什麼影響呢?合約反映出的數字會接近 122,400DAI 和 817ETH (做個算數檢查一下這些數字的是否準確:122,400 * 817 = 100,000,000 (恆定乘積),122,400 / 817 = 150 (新價格))。如果把我們有權獲得的 10% 提取出來,那麼現在會變成 12,240DAI 和 81.7ETH。此時的總市值爲 24,500 美元。做市導致錯失了大約 500 美元的利潤。

顯然,沒有人願意抱着做慈善的心態提供流動性,收益又不能從炒幣中獲得(因爲也沒得炒)。所以,總交易量的 0.3% 會按比例分配給所有流動性提供者。默認情況下,這些費用會重新注入流動性池,但可隨時收取。在不知道中間交易量的情況下,很難說交易費的收入和做市的損失孰高孰低。對流動性提供者來說,顯然行情波動越多越好。

核心價值

好吧,和常規的基於限價訂單簿的交易所相比,Uniswap 這種機制聽上去要複雜得多。溢價也使得大型交易的成本過高。那它到底有什麼好處呢?簡而言之,流動性的彙集解決了訂單的深度問題,而且不再有較大的買賣價差。那些不想處理限價訂單的中小交易者會喜歡這一點(在我們看到的所有加密貨幣交易平臺中,Uniswap 的 UX 是最容易上手的)。在 Uniswap 上,無需掛買單或賣單,也不用進行繁重的計算。流動性提供者也可以一勞永逸,訂單和倉位管理方面的開銷也明顯減少。這是一種很佛系的提供流動性並賺取費用的方式。

Uniswap 還爲 dApp 之間(或計算機設備之間)的交易注入了活力。在一個擁有數百萬微交易的世界中,與讓人不得不留意特定價格的流動性需求相比,融入一個巨大的流動性池更有意義。提升小訂單的最佳報價變得不再有風險(想象一下賣方訂單爲空的 DEX)。另一個用例是證券型代幣用 Uniswap 支付分紅。

有些聰明的讀者可能已經意識到,其實這個模型與去年推出的 Bancor 網絡非常相似,但 Uniswap 不收取任何上幣費用,消耗的 Gas 少得多,並且更加去中心化。Bancor 要求上幣方抵押 BNT,同時要需要填寫上幣申請表,而且 BNT 很容易被隨意凍結。而 Uniswap 不存在這些問題, 只要以太坊網絡在,Uniswap 就會持續運轉下去。

目前,Uniswap 所有合約的流動 ETH 資金只有幾千,因此仍處於早期階段。由於總會有巨鱷想要交易大宗訂單,因此 Uniswap 不太可能取代其他類型的 DEX,但它的獨特功能肯定會吸引到許多想要快速、簡單獲取各種代幣的普通交易者。

來源鏈接:medium.com