Uniswap

為什麼我的@uniswap/sdk DAI/USDT 價格影響為 100 並返回不正確的價格?

  • July 2, 2021

遵循此處的文件:https ://uniswap.org/docs/v2/javascript-SDK/pricing/

我已經能夠使用 WETH 複製結果,並且我決定嘗試使用 DAI 和 USDT 獲得類似的結果。

const { ChainId, Fetcher, Route, Trade, TokenAmount, TradeType, WETH } = require('@uniswap/sdk');

const init = async () => {
   const dai = await Fetcher.fetchTokenData(ChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F');
   const tether = await Fetcher.fetchTokenData(ChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7');
   
   const pair = await Fetcher.fetchPairData(dai, tether);
   const route = new Route([pair], tether);

   const trade = new Trade(route, new TokenAmount(tether, '1000000000000000000'), TradeType.EXACT_INPUT);
};

init();

我檢索 Dai 和 Tether 的令牌數據,然後獲取對數據,然後將其放入路由中。

這些上述步驟必須是正確的,因為它的功能日誌

console.log(route.midPrice.toSignificant(6));
console.log(route.midPrice.invert().toSignificant(6));

返回有意義的值。

事情變得奇怪的地方是

console.log(trade.priceImpact.toSignificant(6));
console.log(trade.executionPrice.toSignificant(6));
console.log(trade.outputAmount.toSignificant(6));

根據這些結果,我的價格影響在100,執行價格在0.000000278029左右,輸出量在278028。

這聽起來根本不對。

我的程式碼中導致此錯誤的錯誤是什麼?

TokenAmount 有小數錯誤。檢查任何特定令牌有多少小數是很重要的。雖然 1000000000000000000 wei 是 1 個乙太幣,但為 USDT 指定的 1000000000000000000(有 6 位小數)將等於 1000000000000,這比 Uniswap 上目前的流動性供應量要大得多。為 USDT 指定的 1000000 將等於 1 USDT 並返回合理的結果

console.log(trade.priceImpact.toSignificant(6));
console.log(trade.executionPrice.toSignificant(6));
console.log(trade.outputAmount.toSignificant(6));

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