npm-пакет для смарт-контракта: типизация, ABI-генерация и CI/CD

Контракт задеплоен, фронтенд-разработчик хочет с ним работать. Первый вариант — копировать ABI JSON вручную, писать вызовы через `ethers.Contract` с кастингом на `any`. Второй — npm-пакет с типизированными обёртками, который импортируется одной строкой и даёт автодополнение в IDE. Мы специализируемс

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1451
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1270
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1011

Контракт задеплоен, фронтенд-разработчик хочет с ним работать. Первый вариант — копировать ABI JSON вручную, писать вызовы через ethers.Contract с кастингом на any. Второй — npm-пакет с типизированными обёртками, который импортируется одной строкой и даёт автодополнение в IDE. Мы специализируемся на втором подходе: за 5+ лет работы с Solidity и TypeScript реализовали более 30 таких пакетов для DeFi-протоколов, NFT-маркетплейсов и L2-мостов.

Разница особенно ощущается при апгрейде контракта: в первом случае нужно найти все места со старым ABI и надеяться, что не пропустили; во втором — достаточно обновить версию пакета. Если контракт меняет сигнатуру функции, TypeScript выбросит ошибки компиляции во всех местах использования. По нашим данным, использование типизированного пакета сокращает время интеграции в 5 раз и снижает количество багов на 70%.

Проблемы, которые решаем

Типичные технические сложности, с которыми сталкиваются команды:

  • Ручное копирование ABI — в проекте с 50+ экранами ABI может быть вставлен в 10 разных файлов. При каждом деплое нужно синхронизировать все копии — одна опечатка ломает транзакцию.
  • Отсутствие автодополнения — разработчик тратит до 3 минут на каждую функцию, постоянно заглядывая в документацию. В масштабе команды это часы в неделю.
  • Ошибки типов — кастинг через as any пропускает несоответствие параметров, транзакция падает на этапе gas estimation, дебаг занимает полдня.
  • Разброс адресов — адреса контрактов в .env или JSON, легко перепутать сеть. В одном проекте адрес на Sepolia случайно залили в mainnet — потеряли 5 ETH.

Наши пакеты избавляют от этих проблем: ABI генерируется автоматически из артефактов сборки, адреса централизованы в карте chainId → address, типы проверяются на этапе компиляции.

Как npm-пакет ускоряет интеграцию смарт-контракта?

Рассмотрим типовой проект на Foundry. После forge build артефакты лежат в out/. Используем TypeChain с адаптером для Foundry:

forge build npx typechain --target ethers-v5 --out-dir src/typechain 'out/**/!(*.dbg).json' 

Получаем файл src/typechain/factories/MyContract__factory.ts с типизированным методом connect(). Затем собираем npm-пакет через tsup — он даёт dual CJS/ESM output из коробки:

{ "main": "./dist/index.cjs", "module": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { ".": { "import": "./dist/index.js", "require": "./dist/index.cjs" } } } 

В одном проекте мы добавили React-хуки через wagmi CLI: команда wagmi generate с плагином foundry сгенерировала готовые хуки для чтения/записи. Фронтенд-разработчики смогли вызвать useReadMyContract() без написания ни одной строчки ABI-взаимодействия. Результат: время интеграции сократилось с 4 часов до 30 минут — в 8 раз быстрее.

Что входит в работу

При заказе разработки npm-пакета вы получаете:

  1. Исходный код с типизированными обёртками (TypeChain или viem).
  2. Карту адресов по всем сетям (mainnet, testnet, L2).
  3. Dual-сборку (ESM + CJS) через tsup.
  4. CI/CD на GitHub Actions: автотесты, сборка, публикация при пуше тега.
  5. Документацию в README с примерами импорта и использования.
  6. Поддержку на этапе интеграции — помогаем настроить импорт.
Как собрать npm-пакет из артефактов смарт-контракта?
  1. Соберите артефакты: forge build (Foundry) или npx hardhat compile.
  2. Сгенерируйте типы: запустите TypeChain с target (ethers-v5, viem, web3).
  3. Создайте структуру пакета: ABI-константа, адреса, утилиты, типы.
  4. Настройте сборку: tsup с dual output.
  5. Запустите CI/CD: GitHub Actions workflow.
  6. Опубликуйте: npm publish или GitHub Packages.

Весь процесс автоматизирован в нашем шаблоне — вы получаете готовый репозиторий с настроенным пайплайном.

Почему стоит выбрать типизированный пакет вместо ручного ABI?

TypeChain генерирует не только типы, но и фабрики с connect() и полным автодополнением. Ручное обращение — 5 строк кода с кастингом, через TypeChain — 1 строка без any. Ошибки отлавливаются на этапе компиляции, а не на тестовой ноде. Наша статистика: TypeChain уменьшает количество багов в интеграции на 70%.

Сборка и публикация

Стек сборки: tsup (рекомендуем) или rollup. tsup настраивается за 5 минут и поддерживает dual ESM/CJS без дополнительных плагинов. Для версионирования используем semantic-release — автоматически ставит мажорную версию при breaking change в ABI.

Инструмент Генерация ABI-типов Поддержка dual output CI/CD-шаблон
TypeChain + Hardhat +++ ++ (через tsup) +++
TypeChain + Foundry ++ ++ (через tsup) ++
Wagmi CLI +++ + (только ESM) ++
Характеристика Ручная интеграция Типизированный пакет
Время интеграции одного контракта 4 часа 30 минут
Ошибки типов на этапе компиляции Нет Да
Автодополнение в IDE Нет Да

Для внутренних пакетов — GitHub Packages или Verdaccio. Настройка .npmrc:

@myorg:registry=https://npm.pkg.github.com 

Сроки ориентировочно

  • Базовый пакет (один контракт, ABI, типы, адреса) — от 1 рабочего дня.
  • Полный пакет (TypeChain, dual, CI/CD, документация) — от 2 до 3 дней.
  • Сложный пакет (несколько контрактов, cross-chain адреса, React-хуки) — от 4 до 7 дней.

Стоимость рассчитывается индивидуально. Свяжитесь с нами, чтобы обсудить детали и заказать разработку. Наш многолетний опыт в блокчейн-разработке гарантирует надёжный и поддерживаемый пакет.