Uniswap

作者:扎克-赫斯, Zack Hess https://github.com/zack-bitcoin/amoveo-docs/blob/master/other_blockchains/uniswap.md


擁有一個鏈上市場是一個糟糕的策略。礦工們可以在搶先交易(front run)。如果你甚至不打算讓它安全,使用區塊鏈真的很奇怪。區塊鏈技術是如此昂貴。如果人們想在一個依賴信任的市場進行交易,還不如使用一箇中心化的市場。鏈上市場的價格也可以被礦工操縱。所以我們不能把它們作爲一個可靠的價格信號。 你可以使用區塊鏈技術來保障市場的安全,而不把這個市場放在鏈上。這樣實際上是不依賴於信任(trust-free)的。

子貨幣(subcurrency)是不好的 #

它只允許2個子貨幣(subcurrency)之間的市場,所以它只能適用於使用多個子貨幣(subcurrency)的區塊鏈,這是一個破損的設計。最好的設計是一個單一的貨幣,並使用它來交易人們關心的任何風險。 如果你把一種貨幣分解成較小的不可替換(non-fungible)的子貨幣(subcurrency),它們的波動性都比你使用單一貨幣要大。 而最終,市場對各種子貨幣的風險對沖需求非常少。人們真正想要的是對沖石油、棉花或橙汁等方面的風險。當他們試圖經營一個爲真正的客戶提供服務的企業時,就會出現這類風險。

可變的鏈上狀態 mutible on-chain state #

擁有鏈上子貨幣(subcurrency)迫使你採用具有鏈上可變狀態的設計,以存儲關於子貨幣(subcurrency)的賬戶信息。這就阻礙了可擴展性(scalability)

恆定的產品做市商 Constant Product Market Maker #

這裏有一篇解釋恆定產品做市商的論文https://web.stanford.edu/~guillean/papers/uniswap_analysis.pdf。

  • 讓我們插入一些例子。
    • 如果市場上有100個A幣,和100個B幣。我想買20個B幣。

    • (100 - 20) * (100 + Cost) = 100 * 100 100 + Cost = 10000/80 Cost = 125 - 100 Cost = 25

    • 所以我將支付25個A幣來購買20個B幣。

      Uniswap沒有訂單簿。因此,假設我想購買1000個B幣,我願意支付5個A幣來獲得4個B幣。 我必須在鏈上進行交易,購買20個B幣。然後等待別人做相反的交易,這樣價格就會回落。然後我再做一次鏈上交易,再買20個B幣。然後我等着別人做相反的交易。

      這個循環將繼續下去,直到每個人都完成了50個鏈上的txs。 因此,在這個例子中,假設我願意支付高於市場價格20%的價格來購買B幣,只需要50個鏈上TXS就可以完成購買。

      現在讓我們考慮一下我不願意多付這麼多錢的情況。如果我每輪只買10個B幣。

      (100-10)*(100+成本)=10000/成本=(1000/9)-100成本=11.1

      所以在這種情況下,我只多付了11%的錢。而這需要100個鏈上txs來完成購買。

      在實踐中,交易者通常不願意支付甚至1%的費用。 所以,讓我們試着從中得到一個概括性的公式。如果鏈上鎖定的流動性是L,而我願意多付P,我想買B多的幣,那麼鏈上txs的數量是T。

      LP ~=每次購買的金額。T = B/(每次購買的金額) T = B/(LP)

      因此,如果你想在1個Tx中購買10 000美元的東西,而你只願意多付1%,那麼uniswap就需要鎖定1 000 000美元左右。

      把大量的錢鎖在合同裏,按利息計算是很昂貴的。特別是uniswap使用的是低市值的子貨幣。 Uniswap的恆定產品市場設計要麼有大量的鎖定成本,這使得它的利率很高。或者它有令人望而卻步的高額交易費用,或者它涉及在鏈上做過多的txs。或者這些失敗模式的組合。

安全市場需要單一價格的批次 Secure markets need single price batches #

https://youtu.be/mAtD0ba-hXU