Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Router – Uniswap SDK
Skip to content

Router

The Router class provides static methods to generate calldata for V2 Router contract interactions.

Import

import { Router, type TradeOptions, type TradeOptionsDeadline, type SwapParameters } from '@uniswap/v2-sdk-next'

Static Methods

Router.swapCallParameters(trade, options)

Generates the method name and arguments for executing a swap.

static swapCallParameters(
  trade: Trade<Currency, Currency, TradeType>,
  options: TradeOptions | TradeOptionsDeadline
): SwapParameters

Example

import { Router, Trade, Route, Pair } from '@uniswap/v2-sdk-next'
import { Percent, CurrencyAmount, Token } from '@uniswap/sdk-core-next'
 
// Create a trade
const trade = Trade.exactIn(route, inputAmount)
 
// Generate call parameters
const params = Router.swapCallParameters(trade, {
  allowedSlippage: new Percent(50, 10000), // 0.5%
  ttl: 60 * 20, // 20 minutes
  recipient: '0xYourAddress...',
})
 
console.log(params.methodName) // 'swapExactTokensForTokens'
console.log(params.args)       // [amountIn, amountOutMin, path, to, deadline]
console.log(params.value)      // '0x0' (or ETH value if swapping ETH)

Trade Options

TradeOptions

interface TradeOptions {
  allowedSlippage: Percent
  ttl: number              // Time to live in seconds
  recipient: string
  feeOnTransfer?: boolean
}

TradeOptionsDeadline

interface TradeOptionsDeadline {
  allowedSlippage: Percent
  deadline: number         // Unix timestamp
  recipient: string
  feeOnTransfer?: boolean
}

SwapParameters

interface SwapParameters {
  methodName: string
  args: (string | string[])[]
  value: string  // Wei amount in hex
}

Router Methods by Trade Type

Exact Input Trades

InputOutputMethod
TokenTokenswapExactTokensForTokens
TokenETHswapExactTokensForETH
ETHTokenswapExactETHForTokens

Exact Output Trades

InputOutputMethod
TokenTokenswapTokensForExactTokens
TokenETHswapTokensForExactETH
ETHTokenswapETHForExactTokens

Fee-on-Transfer Tokens

When feeOnTransfer: true:

InputOutputMethod
TokenTokenswapExactTokensForTokensSupportingFeeOnTransferTokens
TokenETHswapExactTokensForETHSupportingFeeOnTransferTokens
ETHTokenswapExactETHForTokensSupportingFeeOnTransferTokens

Note: FOT methods only support exact input trades.

Usage with ethers.js

import { ethers } from 'ethers'
import { Router, Trade } from '@uniswap/v2-sdk-next'
import { Percent } from '@uniswap/sdk-core-next'
 
// Create trade
const trade = Trade.exactIn(route, inputAmount)
 
// Get call parameters
const params = Router.swapCallParameters(trade, {
  allowedSlippage: new Percent(50, 10000),
  ttl: 60 * 20,
  recipient: wallet.address,
})
 
// V2 Router ABI (simplified)
const routerAbi = [
  'function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] path, address to, uint deadline) returns (uint[] amounts)',
  'function swapExactETHForTokens(uint amountOutMin, address[] path, address to, uint deadline) payable returns (uint[] amounts)',
  // ... other methods
]
 
const router = new ethers.Contract(ROUTER_ADDRESS, routerAbi, signer)
 
// Execute the swap
const tx = await router[params.methodName](...params.args, {
  value: params.value,
})

Usage with viem

import { createWalletClient, http } from 'viem'
import { mainnet } from 'viem/chains'
import { Router, Trade } from '@uniswap/v2-sdk-next'
 
const params = Router.swapCallParameters(trade, {
  allowedSlippage: new Percent(50, 10000),
  deadline: Math.floor(Date.now() / 1000) + 1200,
  recipient: account.address,
})
 
// Encode the function call
const data = encodeFunctionData({
  abi: routerAbi,
  functionName: params.methodName,
  args: params.args,
})
 
// Send transaction
const hash = await walletClient.sendTransaction({
  to: ROUTER_ADDRESS,
  data,
  value: BigInt(params.value),
})