Dapps

為什麼 Uniswap V3 勾選平方根價格公式與 Etherscan 的實際值不匹配?

  • December 21, 2021

試圖了解 Uniswap V3 的工作原理,並正在閱讀白皮書。假設,從目前平方根價格獲取報價的公式應該是:在此處輸入圖像描述

白皮書說,您可以從合約中請求的變數包括以下內容:在此處輸入圖像描述

然而,在 Etherscan 上獲取池的目前值會顯示這些值是實際的平方根價格和刻度值:

在此處輸入圖像描述

1360350530493305778931717664053685 用於 sqrtPriceX96,195028 用於複製粘貼文本格式的勾選。

當我將 sqrtPriceX96 代入 sqrt(P) 的公式時,我希望刻度為 1,525,937 而不是 195,028。這些數字顯然是非常不同的,我對合約何時更新這些值的理解是錯誤的,還是完全與我對公式的理解有關?

我嘗試了對不同數字求平方然後重新執行公式的不同變體,但似乎沒有什麼比這更接近了。

sqrtPriceX96 儲存為 uint160,但從數學角度來看,它表現為 Q64.96 值,而不是整數。Q64.96 是一種表示定點數的方式,對於如何操作和不能操作它有自己的規則。

在後台,與對數公式有關的所有轉換都由TickMath 庫處理。如果你去看看它,你就會明白為什麼我不在這裡討論它是如何工作的細節。(主要是因為我自己幾乎看不懂。)

我們只是假設所有這些裝配線和按位操作都已正確編碼並按照開發人員聲稱的方式進行操作。

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