从 Uniswap V2 获得合适的售价

Get proper sell price from Uniswap V2

我能够使用 Uniswap v2 SDK 获取将 1 WETH 兑换成 DAI 的正确交易结果。

现在我想获取我需要提供多少 DAI 才能获得 1 WETH。要在 Uniswap 界面上触发此操作,您只需创建交易 DAI -> WETH,然后在“to”输入中键入 1(然后您会在顶部获得 From (estimated))。不幸的是,它对我不起作用。我收到的是我猜测为 WETH 出售 1 DAI 的结果。

我该如何解决?

export async function buySellUni() {
        const DAI = new Token(ChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18)
        const WETH = new Token(ChainId.MAINNET, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 18)
        const pair = await Fetcher.fetchPairData(DAI, WETH)
    
        const buyRoute = new Route([pair], WETH);
        const buyTrade = Trade.exactIn(buyRoute, new TokenAmount(WETH, BigInt(1E18)));
        const sellRoute = new Route([pair], DAI);
        const sellTrade = Trade.exactOut(sellRoute, new TokenAmount(WETH, BigInt(1E18)));

        console.log("Get " + buyTrade.executionPrice.toSignificant(6) + " DAI for 1 WETH");
        console.log("Need " + sellTrade.executionPrice.toSignificant(6) + " DAI to get 1 WETH");
 };

我正在使用 exactOut 通过 WETH 令牌获得准确的 Out 而不是 In 值,但是我的路线已经过调整所以输入是 DAI 而不是 WETH .

What I'm receiving is I guess result of selling 1 DAI for WETH

它是“你可以用 1 DAI 购买多少 WETH”。您可以通过计算 (1 / X).

轻松地将此数字转换为“您需要多少 DAI 才能购买 1 WETH”
console.log("Need " + (1 / sellTrade.executionPrice.toSignificant(6)) + " DAI to get 1 WETH");

1 / 0.000366619 = 2727.6273188241744