如何計算 UniSwap V3 Pair 的虛擬 (50/50 & x*y=k) 儲備?
我知道如何從一對中獲取每個代幣的餘額,如果我沒記錯的話——這些代幣餘額確實是一個真正的儲備。此外,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 - 以防萬一您需要查看我使用的是哪一對
這是正確的?