Uniswap

如何通過 uniswap-v2 API 獲取目前貨幣對價格?

  • July 21, 2021

我需要通過 uniswap-v2 API 報價不同代幣對的線上價格。如下圖所示,我傾向於將代幣對(可能帶有所需的基本代幣數量)傳遞給 API,並獲取所有與價格相關的值作為結果。

在此處輸入圖像描述

我在uniswap 文件Fetcher.fetchPairData中找到了方法,但它沒有返回正確的值。我是使用正確的方法還是必須為此使用其他方法?

很長一段時間以來,這一直是我的痛苦。您基本上必須比較不同貨幣對的流動性並執行 Uniswap 公式來計算價格。

Y * I / (X + I)

  • 我是您輸入的源令牌數量
  • X 是源代幣中池的餘額
  • Y 是目標代幣中池子的餘額

最後,我們得出所有 Uniswap 對的價格的過程如下。

  1. 通過查看所有歷史 PairCreated 事件來查找所有令牌對。
  2. 從該對中讀取 token0 和 token1 的儲備金
  3. 根據 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))

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