*本文需要讀者對區(qū)塊鏈、以太坊和智能合約有一定的基礎珠闰。需要對交易所有一定的認知惜浅。
區(qū)塊鏈對實體性質的事物影響會滯后于對虛擬性質的事物,在區(qū)塊鏈上最先能發(fā)展起來的事物必定是形而上的伏嗜。那些我們看不見摸不著的“體系”坛悉、“制度”甚至是“法律”伐厌,會最快的在區(qū)塊鏈上試驗,其中貨幣和交易所是這些試驗的先行者裸影。
上次我簡單介紹了 Basis挣轨,一個在區(qū)塊鏈上基于中央銀行協(xié)議實現(xiàn)穩(wěn)定數(shù)字貨幣的項目(Basis,去中心化央行空民?)刃唐,這次我們來看看交易所在區(qū)塊鏈上的一種實現(xiàn)。
傳統(tǒng)的交易所一般是提供一個掛單平臺界轩,通過程序(撮合引擎)撮合買賣雙方達成交易画饥。它是一個自由買賣的市場,具有買賣意愿的人們自行掛出“買單”和“賣單”浊猾,通過交易所“中介”實現(xiàn)雙方訂單的成交抖甘。傳統(tǒng)交易所有以下特點:
- 市場上必須要有用戶進行掛單,要有一定量的訂單(市場深度)葫慎。
- 訂單必須重疊才能成交衔彻,即買價高于或等于賣價。
- 需要將資產存儲在交易所偷办。
Uniswap 實現(xiàn)了一種不需要考慮以上特點的去中心化交易所艰额。它不需要用戶進行掛單(沒有訂單),不需要存在需求重疊椒涯,可以隨買隨賣柄沮。得益于 ERC20 代幣的特性,它也不需要用戶將資產存入特定的賬戶(如中心化交易所的銀行賬戶或者智能合約等废岂,資產的存儲位置不是本文討論的重點)祖搓。
乘積恒定的穩(wěn)定系統(tǒng)
Uniswap 的運行機制的關鍵在于建立了供給池,這個供給池中存儲了 A 和 B 兩種貨幣資產湖苞。用戶在用 A 兌換 B 的過程中拯欧,用戶的 A 會發(fā)送到供給池,使供給池中的 A 增多财骨,同時镐作,供給池的 B 會發(fā)送給用戶。這里的關鍵的問題在于如何給 A 和 B 的兌換提供一個匯率(定價)隆箩。
Uniswap 定價模型非常簡潔滑肉,它的核心思想是一個簡單的公式 x * y = k
。其中 x 和 y 分別代表兩種資產的數(shù)量摘仅,k 是兩種資產數(shù)量的乘積靶庙。
假設乘積 k 是一個固定不變的常量,可以確定當變量 x 的值越大,那么 y 的值就越辛摹护姆;相反 x 的值越小,y 的值就越大掏击。據(jù)此可以得出當 x 被增大 p 時卵皂,需要將 y 減少 q 才能保持等式的恒定。
在 k 恒定的情況下砚亭,推導 q 的計算公式如下:
x * y = k
(x + p) * (y - q) = k
q = y - k/(x + p)
其中灯变,p 是 x 的增量,q 是 y 的減量捅膘。通過 k 的恒定不變就可以提供下圖所示的穩(wěn)定系統(tǒng):
由此我們已經有了一個數(shù)學上平衡穩(wěn)定的系統(tǒng)添祸。這個系統(tǒng)的目標是不管 x,y 分別是增加還是減少寻仗,必須要保證乘積 k 恒定刃泌。
實現(xiàn)兌換
為了做一些更實用的工作,將 x 和 y 替換為貨幣儲備金的儲備量署尤,這些儲備金將被存儲在智能合約中耙替。假設 x 是 USD 的儲備量,數(shù)量為 100曹体;y 是 CNY 的儲備量俗扇,數(shù)量為 700,儲備金的乘積就是 70000箕别。
用戶向合約發(fā)送 1 USD铜幽,合約中的 USD 儲備量就會增加,為了保證乘積 70000 不變究孕,根據(jù)保證 k 恒定的公式計算出合約中應當減少的 CNY 的數(shù)量 q:
q = y - k/(x + p)
q = 700 - 70000/(100 + 1)
q = 6.93 # 未完全精確計算
CNY 的減少數(shù)量 6.93 為用戶使用 1 USD 兌換應得的 CNY啥酱。當用戶需再次使用 1 USD 購買 CNY 時爹凹,根據(jù) 合約狀態(tài) 2
厨诸,此時 USD 儲備為 101,CNY 儲備為 693.07禾酱, 可以計算出新的 CNY 的減量 q 為:
q = 693.07 - 70000/(101 + 1)
q = 6.80
第二次兌換后微酬,用戶收到的 CNY 數(shù)量為 6.80,比第一次兌換所得 6.93 少颤陶。觀察公式 x * y = 70000
曲線可以看出颗管,隨著 x 的增加,y 的變化率越來越凶易摺(曲線沿0 x 軸向右趨于平滑)垦江。
所以在使用 USD 購買 CNY 的過程中,由于 USD(x)儲備量的增加搅方,會使 CNY 變化率縮小比吭,即 CNY 的價格會逐漸升高(price = 1/rate)绽族;相反,用 CNY 購買 USD衩藤,就會使 USD 的價格逐漸升高吧慢。可以發(fā)現(xiàn)購買的過程符合經濟學上的供需關系赏表,即購買量越多检诗,需求越旺盛,價格越高瓢剿。
如果在 Uniswap 系統(tǒng)中 CNY 的價格高于市面價格逢慌,那么就會有人在 系統(tǒng)中出售 CNY 購買 USD,使 CNY 價格降低跋选,反之亦然涕癣。通過這種反饋調節(jié),智能合約產生的兌換匯率總是趨近于市場真實匯率前标。
實際的 Uniswap 與上述介紹還有所區(qū)別坠韩。交易費率、費率對“常數(shù)”的影響炼列、任意 token 之間的兌換都不再上述討論范圍只搁。然而非常明確的是,通過智能合約和數(shù)學公式可以實現(xiàn)不需要掛單俭尖、不需要“市場深度”氢惋、隨買隨賣的交易兌換系統(tǒng)。
中心化方式建立系統(tǒng)
讀者會認為可以考慮使用傳統(tǒng)中心化的手段建立這樣的交易系統(tǒng)稽犁⊙嫱考慮以下兩點:
- 成本:傳統(tǒng)系統(tǒng)需要處理多方會計帳、風險控制已亥、儲備商接入熊赖、系統(tǒng)的安全等,構建成本高虑椎。區(qū)塊鏈的智能合約和代幣機制非常適合使用公式化手段建立系統(tǒng)震鹉,核心功能只需要百十行代碼即可實現(xiàn)(構建系統(tǒng)的其他難點實際上被區(qū)塊鏈底層解決)。
- 地域性:傳統(tǒng)系統(tǒng)的使用受到國家捆姜、地域限制传趾,所支持的兌換貨幣能力也限制于地方政策法規(guī)。區(qū)塊鏈構建的系統(tǒng)無邊界泥技,只需接入世界互聯(lián)網(wǎng)即可使用(合約代碼可以由任何人浆兰、任何機構編寫,運行在整個區(qū)塊網(wǎng)絡上供任何人使用)。
優(yōu)勢和不足
Uniswap 模型的優(yōu)點在于根據(jù)公式自動定價簸呈,通過供需關系實現(xiàn)自動調價宽涌。然而這也可能是模型的不足之處。自動反饋調節(jié)是把雙刃劍蝶棋,兌換的匯率需要根據(jù)合約中儲備金的比例進行計算卸亮,意味著最終的成交價格與兌換的數(shù)量相關。當兌換的數(shù)量越大玩裙,兌換的匯率就會變得越差兼贸。這樣所謂的即買即賣也可能變成“買不起”和“賣不起”。但這是市場供需關系的自然反饋吃溅,也許并不能算是缺陷溶诞。
然而更糟的是,假設一種貨幣價格持續(xù)降低决侈,儲備金中這種下跌貨幣的儲備量就會持續(xù)增加螺垢。考慮合約中的儲備金分別一種較好貨幣和一種處于泡沫中的較差貨幣赖歌,那么通過一段時間兌換后枉圃,整個儲備系統(tǒng)的較好貨幣被兌出,剩下大量的泡沫貨幣庐冯。這對提供儲備的儲備商是一件非常糟糕的事孽亲。
關于 Uniswap 的介紹就到這里,歡迎對區(qū)塊鏈和經濟感興趣的同學提出的你們寶貴的看法和見解展父。