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







