Інтеграція ConnectKit у dApp: підключення гаманців та кастомізація

Інтеграція ConnectKit у dApp: підключення гаманців та кастомізація Ми — команда Web3-інженерів з більш ніж п'ятирічним досвідом у розробці DeFi-протоколів та NFT-маркетплейсів. За нашими плечима понад 50 успішних інтеграцій гаманців. Коли стикаєшся із завданням підключення гаманців до dApp, кожен

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Інтеграція ConnectKit у dApp: підключення гаманців та кастомізація

Ми — команда Web3-інженерів з більш ніж п'ятирічним досвідом у розробці DeFi-протоколів та NFT-маркетплейсів. За нашими плечима понад 50 успішних інтеграцій гаманців. Коли стикаєшся із завданням підключення гаманців до dApp, кожен провайдер тягне свої залежності, а UI-компоненти треба узгоджувати з дизайн-системою. ConnectKit від Family вирішує цю біль: це легка обгортка над wagmi, яка дає готовий, але повністю кастомний інтерфейс.

На відміну від RainbowKit, який має жорстку структуру, ConnectKit побудований на CSS-змінних. Ви перевизначаєте кольори, радіуси, шрифти — і отримуєте UI, який не відрізнити від вашого фірмового стилю. При цьому ConnectKit підтримує ті самі гаманці: MetaMask, Rabby, Frame, WalletConnect v2, Coinbase Wallet та інші.

Як ми налаштовуємо ConnectKit під ваш проєкт

Конфігурація починається з createConfig з wagmi 2.x та getDefaultConfig з connectkit. Нижче — типовий шаблон, який ми використовуємо в продакшені:

import { createConfig, http } from 'wagmi'; import { mainnet, polygon, base } from 'wagmi/chains'; import { getDefaultConfig } from 'connectkit'; const config = createConfig( getDefaultConfig({ chains: [mainnet, polygon, base], transports: { [mainnet.id]: http('https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY'), [polygon.id]: http('https://polygon-mainnet.g.alchemy.com/v2/YOUR_KEY'), [base.id]: http('https://base-mainnet.g.alchemy.com/v2/YOUR_KEY'), }, walletConnectProjectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID!, appName: 'Your dApp', appDescription: 'Description for wallet connection screen', appUrl: 'https://your-dapp.xyz', appIcon: 'https://your-dapp.xyz/icon.png', }) ); 

getDefaultConfig автоматично підключає інжектори (MetaMask, Rabby, Frame), WalletConnect v2, Coinbase Wallet. WalletConnect Project ID обов'язковий — отримати на cloud.walletconnect.com безкоштовно. Вказувати конкретний RPC-ключ необов'язково — можна використовувати публічні RPC, але для production ми рекомендуємо свій ключ Alchemy або Infura: так ви контролюєте ліміти та швидкість.

Provider обгортає додаток:

'use client'; // Next.js App Router export function Web3Provider({ children }: { children: React.ReactNode }) { return ( <WagmiProvider config={config}> <QueryClientProvider client={queryClient}> <ConnectKitProvider>{children}</ConnectKitProvider> </QueryClientProvider> </WagmiProvider> ); } 

Кнопка підключення: простий та кастомний варіант

ConnectKitButton — готовий компонент із повним станом:

import { ConnectKitButton } from 'connectkit'; // Готовий варіант — мінімум коду <ConnectKitButton /> // Кастомний рендер через render prop <ConnectKitButton.Custom> {({ isConnected, isConnecting, show, address, ensName }) => ( <button onClick={show} disabled={isConnecting}> {isConnected ? ensName ?? `${address?.slice(0, 6)}...${address?.slice(-4)}` : 'Підключити гаманець'} </button> )} </ConnectKitButton.Custom> 

Через render prop патерн ConnectKit повністю вписується в будь-яку дизайн-систему. show відкриває модальне вікно підключення. Ми часто використовуємо другий варіант, щоб уніфікувати кнопки з іншими елементами інтерфейсу.

Як кастомізувати тему ConnectKit?

ConnectKit підтримує вбудовані теми: auto, web95, retro, soft, midnight. Але справжня сила — у customTheme через CSS-змінні:

<ConnectKitProvider theme="midnight" customTheme={{ '--ck-font-family': '"Inter", sans-serif', '--ck-accent-color': '#6366f1', '--ck-accent-text-color': '#ffffff', '--ck-border-radius': '12px', '--ck-overlay-backdrop-filter': 'blur(8px)', }} > 

Змінні покривають усе: фони, межі, тіні, розміри. Для адаптиву — mode: 'light' | 'dark' або 'auto'. У режимі auto тема перемикається слідом за системою без смикання. Ми гарантуємо, що кастомізація збереже доступність та читабельність.

Робота зі станом гаманця

Після підключення — стандартні wagmi хуки:

import { useAccount, useBalance, useChainId, useSwitchChain } from 'wagmi'; function WalletInfo() { const { address, isConnected, chain } = useAccount(); const { data: balance } = useBalance({ address }); const { switchChain } = useSwitchChain(); if (!isConnected) return null; return ( <div> <p>{address}</p> <p>{balance?.formatted} {balance?.symbol}</p> {chain?.id !== base.id && ( <button onClick={() => switchChain({ chainId: base.id })}> Переключитися на Base </button> )} </div> ); } 

useAccount дає адресу та ланцюжок, useBalance — баланс нативної монети, useSwitchChain — перемикання мережі. Усе працює з коробки, без додаткових конфігів.

Чому ConnectKit швидший та простіший за аналоги?

Один із ключових показників — обсяг коду. Для кастомізації теми RainbowKit вимагає перевизначення цілого об'єкта, а ConnectKit — лише набору CSS-змінних. На практиці це дає економію часу до 40% на етапі інтеграції та спрощує підтримку дизайн-системи.

Часті проблеми та їх вирішення

Проблема Причина Рішення
Hydration mismatch isConnected на сервері завжди false Використовуйте mounted state: рендеріть wallet-залежний UI тільки після useEffect
WalletConnect не відкривається на мобільному Невірний appUrl Перевірте, що appUrl збігається з origin сайту. WalletConnect v2 звіряє origin
Safe Wallet немає в списку ConnectKit не включає safeConnector Додайте його окремо з @gnosis.pm/safe-apps-wagmi

Hydration mismatch — класична проблема Next.js. Рішення: завести булевий стан mounted = useState(false) і виставляти true в useEffect. Усі компоненти, які залежать від isConnected, рендерити тільки коли mounted === true.

Safe Wallet підтримка актуальна, якщо ваше dApp використовується DAO або мультисигами. Ми підключаємо її вручну через окремий коннектор — це займає 15 хвилин.

Скільки часу займає інтеграція

Етап Час Що входить
Базова настройка 1-2 дні Встановлення, конфігурація, провайдери, кнопка
Кастомізація теми +0.5 дня CSS-змінні, темна тема, модальні вікна
Safe Wallet та тестування +1 день Обробка edge-кейсів, тести на 5+ гаманцях

Терміни орієнтовні — все залежить від складності вашого стеку. Ми розраховуємо вартість індивідуально, без прихованих платежів. Зв'яжіться з нами — обговоримо деталі та підготуємо комерційну пропозицію.

Що входить у повний обсяг роботи

  • Код інтеграції з коментарями
  • Документація з кастомізації для вашої команди
  • Доступ до тестового середовища на час розробки
  • Навчання фронтенд-розробників роботі з wagmi та ConnectKit
  • Пост-релізна підтримка протягом двох тижнів

Ми гарантуємо, що інтеграція не зламає існуючий функціонал. Замовте консультацію — покажемо приклади з 50+ реалізованих проєктів.

Чому варто довірити інтеграцію нам?

Ми більше п'яти років на ринку Web3-розробки. Виконали понад 50 інтеграцій гаманців для DeFi-протоколів, NFT-маркетплейсів та геймінгових платформ. Наші інженери — автори open-source контриб'юцій у wagmi та бібліотеку ConnectKit. Ми знаємо всі підводні камені: від багів з EIP-1193 до проблем з chain switching на мобільних пристроях. Отримайте консультацію прямо зараз — переконайтеся в нашому досвіді на 50+ реальних кейсах.