Uniswap
為什麼我的@uniswap/sdk DAI/USDT 價格影響為 100 並返回不正確的價格?
遵循此處的文件: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));