Установка через npm

Перед установкой библиотеки Universal Router необходимо обеспечить корректную среду разработки. Требуется установленный Node.js версии не ниже 16.x, так как библиотека использует современные возможности JavaScript и экосистемы Ethereum.

Проверка текущих версий:

node -v
npm -v

При отсутствии Node.js установка выполняется с официального сайта или через менеджеры пакетов (например, nvm).

Также рекомендуется использовать отдельный проект с инициализированным package.json.

npm init -y

Установка Universal Router через npm

Библиотека Universal Router распространяется через npm-репозиторий и устанавливается стандартной командой:

npm install @uniswap/universal-router

Ключевые особенности пакета:

  • распространяется как модуль для взаимодействия с контрактами Universal Router
  • предоставляет ABI и вспомогательные инструменты
  • ориентирован на работу с экосистемой Ethereum и EVM-совместимыми сетями

После установки зависимость автоматически добавляется в раздел dependencies файла package.json.


Установка сопутствующих зависимостей

Для полноценной работы с Universal Router требуется библиотека для взаимодействия с блокчейном. Наиболее распространённые варианты:

Установка ethers.js

npm install ethers

Установка web3.js (альтернатива)

npm install web3

На практике чаще используется ethers.js благодаря удобному API и лучшей поддержке TypeScript.


Структура установленного пакета

После установки в директории node_modules появляется структура:

node_modules/
  @uniswap/
    universal-router/
      dist/
      abi/
      package.json

Основные элементы:

  • abi/ — содержит ABI контрактов Universal Router
  • dist/ — скомпилированные JS/TS файлы
  • package.json — описание зависимостей и точек входа

Подключение библиотеки в проекте

В зависимости от используемой системы модулей:

ES Modules

import { UniversalRouter } from '@uniswap/universal-router'

CommonJS

const { UniversalRouter } = require('@uniswap/universal-router')

В большинстве случаев используется не сам класс, а ABI и утилиты:

import UniversalRouterABI from '@uniswap/universal-router/abi/UniversalRouter.json'

Проверка корректности установки

Простейшая проверка — импорт ABI и вывод его длины:

import UniversalRouterABI from '@uniswap/universal-router/abi/UniversalRouter.json'

console.log(UniversalRouterABI.length)

Если ошибок нет — установка прошла успешно.


Работа с TypeScript

Universal Router поддерживает TypeScript. Для этого необходимо установить дополнительные инструменты:

npm install --save-dev typescript ts-node @types/node

Инициализация конфигурации:

npx tsc --init

Пример импорта в TypeScript:

import UniversalRouterABI from '@uniswap/universal-router/abi/UniversalRouter.json'

При необходимости можно описать типы вручную или использовать типы из ethers.


Использование с ethers.js

После установки можно подключить контракт Universal Router:

import { ethers } from 'ethers'
import UniversalRouterABI from '@uniswap/universal-router/abi/UniversalRouter.json'

const provider = new ethers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_KEY')

const routerAddress = '0x...'

const routerContract = new ethers.Contract(
  routerAddress,
  UniversalRouterABI,
  provider
)

Управление версиями

Важно фиксировать версию пакета для стабильности:

npm install @uniswap/universal-router@latest

Или конкретная версия:

npm install @uniswap/universal-router@1.4.0

Рекомендуется использовать файл package-lock.json или npm shrinkwrap для предотвращения неожиданных изменений зависимостей.


Обновление пакета

Обновление выполняется командой:

npm upd ate @uniswap/universal-router

Либо с принудительным указанием последней версии:

npm install @uniswap/universal-router@latest

Удаление пакета

При необходимости удалить библиотеку:

npm uninstall @uniswap/universal-router

Частые проблемы при установке

1. Ошибка несовместимости Node.js

Решение: обновить Node.js до актуальной LTS-версии.

2. Конфликты зависимостей

Решение:

rm -rf node_modules package-lock.json
npm install

3. Проблемы с доступом к npm

Решение:

npm config se t registry https://registry.npmjs.org/

Рекомендации по структуре проекта

Оптимальная структура при работе с Universal Router:

project/
  src/
    contracts/
    services/
    utils/
  node_modules/
  package.json

Отдельное хранение ABI и логики взаимодействия с контрактами упрощает масштабирование проекта.


Интеграция в существующий проект

Если проект уже использует Web3-инфраструктуру:

  1. Убедиться в совместимости версий ethers или web3
  2. Проверить конфигурацию провайдера
  3. Добавить ABI Universal Router
  4. Настроить адрес контракта для нужной сети

Минимальный рабочий пример

import { ethers } from 'ethers'
import UniversalRouterABI from '@uniswap/universal-router/abi/UniversalRouter.json'

const provider = new ethers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_KEY')

const router = new ethers.Contract(
  '0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B',
  UniversalRouterABI,
  provider
)

async function main() {
  console.log(await provider.getBlockNumber())
}

main()

Контроль безопасности зависимостей

Проверка уязвимостей:

npm audit

Автоматическое исправление:

npm audit fix

Использование с монорепозиториями

В средах вроде Lerna или Turborepo установка производится на уровне workspace:

npm install @uniswap/universal-router -w packages/app

Кэширование и ускорение установки

Для ускорения CI/CD процессов:

npm ci

Используется вместо npm install для воспроизводимых сборок.


Поддержка различных сетей

Universal Router работает с:

  • Ethereum Mainnet
  • Arbitrum
  • Optimism
  • Polygon

Адрес контракта зависит от сети, поэтому рекомендуется хранить конфигурацию отдельно:

const ROUTER_ADDRESSES = {
  mainnet: '0x...',
  arbitrum: '0x...',
}

Контроль зависимостей в production

Перед деплоем:

npm prune --production

Удаляются dev-зависимости, уменьшая размер сборки.


Проверка установленной версии

npm list @uniswap/universal-router

Или в коде:

import pkg from '@uniswap/universal-router/package.json'

console.log(pkg.version)