Javascript

試圖了解 defi 交換池的定價 (x*y=k)

  • April 22, 2022

我試圖了解掉期如何影響像 uniswap 這樣的 defi 流動性池的價格。我是加密新手,沒有財務背景,所以如果我說的是廢話,我提前道歉。

我創建了這個腳本https://jsfiddle.net/9fz0ac6n/來查看計算的實時範例。該腳本假設一個儲備池為2000000 Token A / 1000 Token B ,將 10000 Token A交換為 Token B 的結果如下

---------------------------------------------

[Prices before swap]

reserveA: 2000000
reserveB: 1000
1 TokenA: 0.0005 TokenB
1 TokenB: 2000 TokenA

---------------------------------------------

[Swap prices]

newReserveA: 2010000
newReserveB: 995.0248756218906
Received: 4.975124378109399
1 TokenA: 0.0004975124378109399 TokenB
1 TokenB: 2010.0000000000216 TokenA

---------------------------------------------

[Prices after swap]

newReserveA: 2010000
newReserveB: 995.0248756218906
1 TokenA: 0.0004950372515531794 TokenB
1 TokenB: 2020.05 TokenA

---------------------------------------------

[Prices before swap]部分對我來說很有意義,在不考慮價格影響的情況下,您必須支付 0.0005 Token B才能獲得 1 Token A和 2000 Token A才能獲得 1 Token B

[Swap prices]也有道理。為了保持不變數不變,交易量越大,您需要支付的費用就越多,因為掉期會導致準備金發生變化。

但是為什麼不[Prices after swap]一樣[Swap prices]呢?我預計掉期的價格影響會決定掉期後的新價格。

我的程式碼/計算中有錯誤嗎?我不明白的是什麼?

價格影響不是新舊中間價的比值(中間價是儲量的比值)。而是中間價與市場價之間的差額:price_impact = 1 - (mid_price / market_price).

amountInWithFee = amount_traded * (1 - fee);
constant_product = reserve_a_initial * reserve_b_initial;
reserve_b_after_execution = constant_product / (reserve_a_initial + amountInWithFee);
amountOut = reserve_b_initial - reserve_b_after_execution;
market_price = amountInWithFee / amountOut;
mid_price = reserve_a_initial / reserve_b_initial;
price_impact = 1 - (mid_price / market_price);
// this simplifies to
price_impact = amountInWithFee / (reserve_a_initial + amountInWithFee);

有關計算價格影響的更詳細說明,請查看此答案

這是正確的,但是掉期價格只是從交換者的角度來看,顯然一旦交換完成,池中就會有新的比率。

引用自:https://ethereum.stackexchange.com/questions/112507