Catalog npm
Back to packageRELEASE DETAILS

1.0.1

npm

@0xabcdefg/universal-router-sdk

sdk for integrating with the Universal Router contracts

ethereumuniswap
Published30 Aug 2025
Direct dependencies22
Transitive dependenciesNot calculated

README

Current package documentation

universal-router-sdk

This SDK facilitates interactions with the contracts in Universal Router

Usage

Install latest version of universal-router-sdk. Then import the corresponding Trade class and Data object for each protocol you'd like to interact with.

Trading NFTs

warning: swapNFTCallParameters() to be deprecated in favor of swapCallParameters()

import {
  LooksRareTrade,
  LooksRareData,
  SeaportTrade,
  SeaportData
} from "@uniswap/universal-router-sdk";

// Each protocol data object contains 1 call to that protocol. Some protocols can fit
// many NFT purchase within 1 call, like seaport. Others require multiple calls per NFT (like LooksRare).
const looksRareTrades = new LooksRareTrade([looksrareData1, looksrareData2])
const seaportTrades = new SeaportTrade([seaportData1])

// Use the raw calldata and value returned to call into Universal Swap Router contracts
// Trades will happen in the order that they are handed in
const { calldata, value } = SwapRouter.swapCallParameters([looksRareTrades, seaportTrades])

Trading ERC20s on Uniswap

warning: swapERC20CallParameters() to be deprecated in favor of swapCallParameters()

import { TradeType } from '@uniswap/sdk-core'
import { Trade as V2TradeSDK } from '@uniswap/v2-sdk'
import { Trade as V3TradeSDK } from '@uniswap/v3-sdk'
import { MixedRouteTrade, MixedRouteSDK, Trade as RouterTrade } from '@uniswap/router-sdk'

const options = { slippageTolerance, recipient }
const routerTrade = new UniswapTrade(
  new RouterTrade({ v2Routes, v3Routes, mixedRoutes, tradeType: TradeType.EXACT_INPUT },
  options
)
// Use the raw calldata and value returned to call into Universal Swap Router contracts
const { calldata, value } = SwapRouter.swapCallParameters(routerTrade)

Using Uniswap for ERC20 NFT Trades

Send ETH to the router by trading an ERC20 for ETH with a Uniswap Trade and encoding the swap recipient as ROUTER_AS_RECIPIENT in the trade. Then subsequently list the NFT trades to use the ETH output to buy NFTs. Trades happen in the order they are listed.

Use trade_type: TradeType.EXACT_OUTPUT to cover the entire NFT price, alternatively the transaction will send supplemental ETH to fulfill the entire price if the swap does not cover it in full. Keep in mind that TradeType.EXACT_INPUT trades are subject to slippage on output, and ETH will be sent to cover potential slippage and any remaining ETH will be returned to sender.

import { TradeType } from '@uniswap/sdk-core'
import { Trade as V2TradeSDK } from '@uniswap/v2-sdk'
import { Trade as V3TradeSDK } from '@uniswap/v3-sdk'
import { MixedRouteTrade, MixedRouteSDK, Trade as RouterTrade } from '@uniswap/router-sdk'
import {
  ROUTER_AS_RECIPIENT,
  UniswapTrade,
  LooksRareTrade,
  LooksRareData,
  SeaportTrade,
  SeaportData
} from "@uniswap/universal-router-sdk";

const looksRareTrades = new LooksRareTrade([looksrareData1, looksrareData2])
const seaportTrades = new SeaportTrade([seaportData1])
// WARNING: never send funds to ROUTER_AS_RECIPIENT unless it is ETH that will be used in NFT trades, otherwise funds are lost.
const uniswapTrade = new UniswapTrade(
  new RouterTrade({ v2Routes, v3Routes, mixedRoutes, tradeType: TradeType.EXACT_OUTPUT }),
  { slippageTolerance, recipient:  ROUTER_AS_RECIPIENT}
)
// Use the raw calldata and value returned to call into Universal Swap Router contracts
const { calldata, value } = SwapRouter.swapCallParameters([uniswapTrade, seaportTrades, looksRareTrades])

Using WETH for NFT Trades

The current router purchases all NFTs with ETH, but you can send WETH to the router to be unwrapped for ETH right before the NFT commands. Similar to ERC20 Uniswap Trades for NFTs, supplemental ETH will be sent in the transaction if the WETH amount will not cover the NFT buys. You can also use ERC20s and WETH to cover the transaction by including both commands before the NFT purchase.

import {
  ROUTER_AS_RECIPIENT,
  UniswapTrade,
  LooksRareTrade,
  LooksRareData,
  SeaportTrade,
  SeaportData
} from "@uniswap/universal-router-sdk";

const looksRareTrades = new LooksRareTrade([looksrareData1, looksrareData2])
const seaportTrades = new SeaportTrade([seaportData1])
// if no Permit needed, omit the third var of type Permit2Permit
const unwrapWETH = new UnwrapWETH(amountWETH, chainId, optionalPermit2Params)

// Use the raw calldata and value returned to call into Universal Swap Router contracts
const { calldata, value } = SwapRouter.swapCallParameters([unwrapWETH, seaportTrades, looksRareTrades])

Running this package

Make sure you are running node v18 Install dependencies and run typescript unit tests

yarn install
yarn test:hardhat

Run forge integration tests

forge install
yarn test:forge

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 22

Native requirements
22 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
ethers
Environment
{
  "local_name": "ethers",
  "alias": false,
  "peer_metadata": null
}
^5.7.0runtime
bignumber.js
Environment
{
  "local_name": "bignumber.js",
  "alias": false,
  "peer_metadata": null
}
^9.0.2runtime
@0xabcdefg/v2-sdk
Environment
{
  "local_name": "@uniswap/v2-sdk",
  "alias": true,
  "peer_metadata": null
}
npm:@0xabcdefg/v2-sdk@^1.0.0runtime
@0xabcdefg/v3-sdk
Environment
{
  "local_name": "@uniswap/v3-sdk",
  "alias": true,
  "peer_metadata": null
}
npm:@0xabcdefg/v3-sdk@^1.0.0runtime
@0xabcdefg/sdk-core
Environment
{
  "local_name": "@uniswap/sdk-core",
  "alias": true,
  "peer_metadata": null
}
npm:@0xabcdefg/sdk-core@^1.0.0runtime
@0xabcdefg/router-sdk
Environment
{
  "local_name": "@uniswap/router-sdk",
  "alias": true,
  "peer_metadata": null
}
npm:@0xabcdefg/router-sdk@^1.0.0runtime
@uniswap/permit2-sdk
Environment
{
  "local_name": "@uniswap/permit2-sdk",
  "alias": false,
  "peer_metadata": null
}
^1.2.1runtime
@uniswap/universal-router
Environment
{
  "local_name": "@uniswap/universal-router",
  "alias": false,
  "peer_metadata": null
}
1.6.0runtime
chai
Environment
{
  "local_name": "chai",
  "alias": false,
  "peer_metadata": null
}
^4.3.6development
tsdx
Environment
{
  "local_name": "tsdx",
  "alias": false,
  "peer_metadata": null
}
^0.14.1development
tslib
Environment
{
  "local_name": "tslib",
  "alias": false,
  "peer_metadata": null
}
^2.3.0development
dotenv
Environment
{
  "local_name": "dotenv",
  "alias": false,
  "peer_metadata": null
}
^16.0.3development
hardhat
Environment
{
  "local_name": "hardhat",
  "alias": false,
  "peer_metadata": null
}
^2.14.0development
ts-node
Environment
{
  "local_name": "ts-node",
  "alias": false,
  "peer_metadata": null
}
^10.9.1development
typedoc
Environment
{
  "local_name": "typedoc",
  "alias": false,
  "peer_metadata": null
}
^0.21.2development
prettier
Environment
{
  "local_name": "prettier",
  "alias": false,
  "peer_metadata": null
}
^2.4.1development
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
^4.3.3development
@types/chai
Environment
{
  "local_name": "@types/chai",
  "alias": false,
  "peer_metadata": null
}
^4.3.3development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
^18.7.16development
@types/mocha
Environment
{
  "local_name": "@types/mocha",
  "alias": false,
  "peer_metadata": null
}
^9.1.1development
@types/node-fetch
Environment
{
  "local_name": "@types/node-fetch",
  "alias": false,
  "peer_metadata": null
}
^2.6.2development
eslint-plugin-prettier
Environment
{
  "local_name": "eslint-plugin-prettier",
  "alias": false,
  "peer_metadata": null
}
^3.4.1development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "b4021d03e47250c9cfb7b1f2d08f996d378f6009",
  "tarball": "https://registry.npmjs.org/@0xabcdefg/universal-router-sdk/-/universal-router-sdk-1.0.1.tgz",
  "fileCount": 42,
  "integrity": "sha512-JD/Wn4bZinW7CqbThR84K3YflxPkCrVLgxNGxyQfKVQQANHiJldA2cn46tqAtT6QmCbVkTR5NPhx4sFDlMi1PQ==",
  "signatures": [
    {
      "sig": "MEUCIQCCXBJZkUTMm1bYP4vIrFsuhCv74qZzVCGcTw5tXaYCpQIgfRcQfzrDo0lgsGBY2N113rjBg0KtnUby/7qQT/942T8=",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "unpackedSize": 995502
}

Repository

PENDING
uniswap/sdks

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 22:39 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:13fe6c27a5dc0fa05ce200a923c5f68100da206101855ac69bbf742a7d68cbca

Other collected versions

1.0.24 Sept1.0.030 AugView all collected versions →