The VirtuSwap SDKnpm package provides access to the VirtuSwap API and can be used to find and execute trading routes on supported chains.
To get started, install the latest version of the VirtuSwap SDK:
npm install @virtuswap/v1-sdk
Quick Start
Firstly, create a new Router instance:
import { Router } from '@virtuswap/v1-sdk';
const router = new Router();
Now you can request a route:
const chain = 137; // Polygon (Mainnet)
const tokenIn = '0x0000000000000000000000000000000000000000'; // use zero address for native token (ETH, POL (MATIC), etc.)
const tokenOut = '0x57999936fC9A9EC0751a8D146CcE11901Be8beD0'; // VRSW on Polygon
const amount = '5000000000000000000'; // 5 POL (MATIC)
const route = await router.getRoute(tokenIn, tokenOut, amount, chain, { isExactInput: true });
The received Route object can be used to visualize the trading route steps, generate transaction data or execute the route.
The latest versions of SDK support routers of versions 3 (vRouter 1.3, preferable) and 2 (vRouter 1.2).
A TransactionRequest object can be created using the generateTransactionDataV3 method:
// userAddress is the address that will receive tokens from the vRouter
const txRequest = router.generateTransactionDataV3(route, userAddress);
This object can be transferred to client and used to send a transaction using ethers.js v5:
// signer is the wallet that will send the transaction to the vRouter
const tx = await signer.sendTransaction(txRequest);
await tx.wait();
You can also prepare the multiswap data and execute the multiswap:
// userAddress is the address that will receive tokens from the vRouter
const multiSwapData = router.generateMultiSwapDataV3(route, userAddress);
// amount of native tokens to send
const value = route.tokenIn.isNative ? route.isExactInput ? route.tokenIn.balanceBN : route.slippageThresholdAmount.balanceBN : undefined;
// signer is the wallet that will send the transaction to the vRouter
const tx = await router.executeMultiSwapV3(route.chain, multiSwapData, signer, value);
await tx.wait();
A TransactionRequest object can be created using the generateTransactionDataV2 method:
// userAddress is the address that will receive tokens from the vRouter
const txRequest = router.generateTransactionDataV2(route, userAddress);
This object can be transferred to client and used to send a transaction using ethers.js v5:
// signer is the wallet that will send the transaction to the vRouter
const tx = await signer.sendTransaction(txRequest);
await tx.wait();
You can also prepare the multicall data and execute the multicall:
// userAddress is the address that will receive tokens from the vRouter
const multicallData = router.generateMulticallDataV2(route, userAddress);
// amount of native tokens to send
const value = route.tokenIn.isNative ? route.isExactInput ? route.tokenIn.balanceBN : route.slippageThresholdAmount.balanceBN : undefined;
// signer is the wallet that will send the transaction to the vRouter
const tx = await router.executeMulticallV2(route.chain, multicallData, signer, value);
await tx.wait();
Complete Examples
You can check out our complete examples in the following repositories: