Як створити npm-пакет для смарт-контракту з типізацією ABI

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

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1004
  • 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 років досвіду у блокчейн-розробці та реалізувала більше 30 проєктів з типізованими пакетами для DeFi-протоколів, NFT-маркетплейсів та L2-мостів.

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

Проблеми, які вирішуємо

Типові технічні складності, з якими стикаються команди:

  • Ручне копіювання 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 разів швидше. Економія на команді з 3 розробників — до $2000 на місяць за рахунок скорочення часу інтеграції.

Що входить в роботу

При замовленні розробки 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 днів.

Вартість розраховується індивідуально. Пропонуємо готове рішення під ключ. Оцінимо ваш проект безкоштовно. Напишіть нам, і ми розрахуємо вартість за 1 день. Наш багаторічний досвід у блокчейн-розробці гарантує надійний та підтримуваний пакет. Ми також налаштовуємо інтеграцію Hardhat з npm для автоматичної генерації типів.