Uniswap
如何通過 uniswap-v2 API 獲取目前貨幣對價格?
我需要通過 uniswap-v2 API 報價不同代幣對的線上價格。如下圖所示,我傾向於將代幣對(可能帶有所需的基本代幣數量)傳遞給 API,並獲取所有與價格相關的值作為結果。
我在uniswap 文件
Fetcher.fetchPairData
中找到了方法,但它沒有返回正確的值。我是使用正確的方法還是必須為此使用其他方法?
很長一段時間以來,這一直是我的痛苦。您基本上必須比較不同貨幣對的流動性並執行 Uniswap 公式來計算價格。
Y * I / (X + I)
- 我是您輸入的源令牌數量
- X 是源代幣中池的餘額
- Y 是目標代幣中池子的餘額
最後,我們得出所有 Uniswap 對的價格的過程如下。
- 通過查看所有歷史 PairCreated 事件來查找所有令牌對。
- 從該對中讀取 token0 和 token1 的儲備金
- 根據 uniswap 公式計算 token0 和 token1 的美元價格。
這需要我們做很多工作,特別是當您需要它用於多個令牌和多個鏈時(也許您希望在煎餅上相同)。
無論如何,我們採用了我們的解決方案,並將其變成了一個您可以根據需要使用的 API。這是Moralis深度索引 API。你只需執行
/token/ERC20/{TOKEN_ADDRESS}/price
這將為您提供與您在 Etherscan 上看到的完全相同的價格。它目前支持乙太坊、bsc 和多邊形。它是免費的。
免責聲明,我在moralis 工作,我們開發了這個API。
堅持 Uniswap SDK 術語,嚴格來說不存在“配對價格”。最接近它的是給定Route的**MidPrice。
但是,您的螢幕截圖表明您真正要尋找的是交易的ExecutionPrice:
import { ChainId, Token, WETH, Fetcher, Trade, Route, TokenAmount, TradeType } from '@uniswap/sdk' const DAI = new Token(ChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18) const pair = await Fetcher.fetchPairData(DAI, WETH[DAI.chainId]) const route = new Route([pair], WETH[DAI.chainId]) const trade = new Trade(route, new TokenAmount(WETH[DAI.chainId], '1000000000000000000'), TradeType.EXACT_INPUT) console.log(trade.executionPrice.toSignificant(6))