Request Swap with Router

In this simple example, we request a swap with the router.

// JavaScript
// ...

// Encode path data.
const pathData: SwapPathData[] = route.paths.map(path => {
   
    const pathTokenInRoute = path.stepsWithAmount[0].tokenIn;
    const pathTokenIn = ethIn ? ZERO_ADDRESS : pathTokenInRoute;

    // Path data
    return {
        steps: path.stepsWithAmount.map((step, i) => {
            const isLastStep: boolean = i == (path.stepsWithAmount.length - 1);

            // send to next step or recipient for last step
            const stepTo: string = (
                isLastStep ? to : path.stepsWithAmount[i + 1].pool.pool
            );

            // Determine withdraw mode, to withdraw native ETH or wETH on last step.
            // 0 - vault internal transfer
            // 1 - withdraw and unwrap to naitve ETH
            // 2 - withdraw and wrap to wETH
            const withdrawMode: number = (isLastStep ? (ethOut ? 1 : 2) : 0);

            const data: string = defaultAbiCoder.encode(
                ["address", "address", "uint8"],
                [step.tokenIn, stepTo, withdrawMode], // tokenIn, to, withdraw mode
            );

            // Step data
            return {
                pool: step.pool.pool,
                data: data,
                callback: ZERO_ADDRESS, // we don't have a callback
                callbackData: '0x',
            };
        }),

        tokenIn: pathTokenIn,

        amountIn: path.amountIn,
    };
});

const args: any[] = [
    pathData,
    amountOutMin,
    deadline,
];

// Request the swap.
await router.swap(...args);

// ...

Last updated