Dapps

如何計算 UniSwap V3 Pair 的虛擬 (50/50 & x*y=k) 儲備?

  • November 23, 2022

我知道如何從一對中獲取每個代幣的餘額,如果我沒記錯的話——這些代幣餘額確實是一個真正的儲備。此外,L 儲存在契約資訊中,但我懷疑一件事 - 這個 L 只是一個 L 或 L^2 或一個 srqt(L)。從 sqrtRatioX96 價格可以成立。

發現 (x(real) + L / sqrt(Pb))*(y(real) + L * sqrt(Pa)) = L**2

(x(真實) + x(虛擬)) * (y(真實) + y(虛擬)) = L**2

所以 x(virtual) = L / sqrt(Pb) y(virtual) = L * sqrt(Pa) 但是 (Pa) & (Pb) 到底是什麼?P(a) 是一個 token0Price & (Pb) 是一個 token1Price?或 (Pa) & (Pb) 是此刻度/集中區的高價和低價。我認為 (Pa) 和 (Pb) 是目前報價/頭寸的“價格範圍”,但不知道如何找到這個 (Pa) 和 (Pb)。If Pa = token0Price (from sqrtRatioX96) & If Pb = token1Price (from sqrtRatioX96) I’ve got: x(virtual) = L / sqrt(token0Price) x(virtual) = 776218541774739337116335 / sqrt(0.0008191556417896165) x(virtual) = 776218541774739337116335 / 0.02862089519 x(虛擬)= 2.7120694046143822e+25 x(虛擬)= 27120694046143822000000000(十進制 18)

y(virtual) = L * sqrt(P) y(virtual) = 776218541774739337116335 * sqrt(1220.7692274636495) y(virtual) = 776218541774739337116335 * 34.9395081171 y(virtual) = 2.7120694040982028e+25 y(virtual) = 27120694040982028000000000 (18 decimal)

x(虛擬)(token0Price)= 27120694046143822000000000 = 27120694.046143822 y(虛擬)(token1Price)= 27120694040982028000000000

是的,看起來很漂亮 50/50,但這些數字到底是多少?那是 DAI/WETH 對(0.5 手續費),如果那是“以美元計價”的儲備——那是不可能的,因為當時 DAI 的實際儲備是 2591437.269710515203595384 和 2838.497576725882781612 的 WETH。

有什麼我錯過的嗎?

首先,你的第二個公式不正確,這意味著其餘的計算也可能是錯誤的。P_a是報價區間的低價(或頭寸的低價,取決於上下文)。P_b是區間(頭寸)的最高價。

如果您的刻度範圍從 tick_A 到 tick_B,則:

P_a = 1.0001 ^ tick_A
P_b = 1.0001 ^ tick_B

然後,一旦知道P_a和,就可以使用Uniswap v3 白皮書P_b中的公式 2.2 計算資產的虛擬數量:

x_virtual = x_real + L / sqrt(P_b)
y_virtual = y_real + L * sqrt(P_a)

來自https://uniswap.org/whitepaper-v3.pdf

(x(real) + L / sqrt(Pb))*(y(real) + L * sqrt(Pa)) = L**2:
x_virtual = L / sqrt(Pb) & y_virtual = L * sqrt(Pa)

At the momment
L = 629666507025852065455329
DAI Reserves (balanceOf) 1319679676310680369741279
WETH Reserves (balanceOf) 3660663192506322781740


x_virtual =(629666507025852065455329/sqrt(1128.50448824))
x_virtual = (629666507025852065455329/33.5932208673)
x_virtual = 1.8743856372485445e+22
x_virtual = 18743856372485445000000
x_virtual = 18743.856372485445 


y_virtual = 629666507025852065455329 * sqrt(0.0008861285))
y_virtual = (629666507025852065455329 * 0.02976791057)
y_virtual = 1.8743856270069843e+22
y_virtual = 18743856270069843000000 
y_virtual = 18743.856270069843

x_virtual = 18743856372485445000000
y_virtual = 18743856270069843000000

0x60594a405d53811d3BC4766596EFD80fd545A270 - 以防萬一您需要查看我使用的是哪一對

這是正確的?

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