Javascript
試圖了解 defi 交換池的定價 (x*y=k)
我試圖了解掉期如何影響像 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);
有關計算價格影響的更詳細說明,請查看此答案。
這是正確的,但是掉期價格只是從交換者的角度來看,顯然一旦交換完成,池中就會有新的比率。