Розробляючи dApp, ми постійно бачимо одну й ту саму помилку: команди намагаються перенести всю логіку в смарт-контракти, забуваючи, що кожен байт коштує газу. Наш клієнт хотів запустити NFT маркетплейс і спочатку заклав зберігання метаданих у контракт — після оцінки gas cost ми перепроектували систему на гібридну архітектуру, скоротивши витрати на 60% (економія до 60% на газі). dApp (децентралізований застосунок) відрізняється від звичайного веб-застосунку не тим, що «використовує блокчейн», а тим, що критична бізнес-логіка виконується on-chain, і користувач взаємодіє з нею напряму через свій гаманець, без посередника. Це принципово інша архітектура: немає backend-сервера, який «володіє» даними, немає бази даних з балансами — тільки смарт-контракти та події.
Ми спеціалізуємося на розробці dApp понад 10 років досвіду, реалізували 50+ успішних проєктів — від DeFi застосунків до ігор. Використовуємо актуальні версії інструментів та забезпечуємо аудит контрактів. Платформа Ethereum залишається основним вибором для розгортання смарт-контрактів, але ми також працюємо з Polygon, Arbitrum і Solana (мультичейн розробка). В одному з проєктів ми зменшили газові витрати на 40% за рахунок використання ERC-2612 Permit замість стандартного approve (Permit замість approve — економить одну транзакцію). Ми гарантуємо якість та надаємо сертифікат аудиту для кожного проєкту.
Який стек обрати для dApp?
Перше чесне питання — що має бути on-chain, а що off-chain. Кожен байт у смарт-контракті коштує газу.
| Архітектура | On-chain | Off-chain | Коли обирати |
|---|---|---|---|
| Повністю on-chain | Логіка та дані | немає | Фінансові примітиви (AMM, lending) |
| Гібрид | Критична логіка | UI, індексація, нотифікації | 90% dApps |
| Light dApp | Тільки платежі/ownership | Основний функціонал | Перша версія продукту |
Стандартний стек: React 18 + TypeScript + Vite, Wagmi v2 + Viem для блокчейну, RainbowKit або ConnectKit для інтеграції гаманців, TanStack Query для кешування. Для SSR — Next.js з обережним налаштуванням server components. State management — Zustand або Jotai. Для смарт-контрактів використовуємо Solidity 0.8.x з останніми паттернами безпеки. Весь Web3 застосунок будується на цих технологіях.
Як ефективно отримувати on-chain дані?
Multicall3 — упаковує N викликів в один RPC-запит. Адреса 0xcA11bde05977b3631167028862bE2a173976CA11. Wagmi автоматично батчить useReadContracts через нього. Multicall3 у 5 разів швидший за послідовні виклики — особливо помітно при завантаженні балансів 10+ токенів.
const results = await client.multicall({ contracts: tokens.map(token => ({ address: token.address, abi: erc20Abi, functionName: 'balanceOf', args: [userAddress], })), }); Для історичних даних використовуйте The Graph (надійно, але затримка кілька блоків), Alchemy/Moralis API (швидкий старт, дорожче в масштабі) або власний indexer (повний контроль, але витрати на інфраструктуру). Ми частіше обираємо The Graph для прототипів і власний indexer для продакшену з високим навантаженням.
| Інструмент | Затримка | Простота | Вартість масштабування |
|---|---|---|---|
| The Graph | 1–2 блоків | Висока | Помірна |
| Alchemy API | Низька (реалтайм) | Дуже висока | Висока при великих обсягах |
| Власний indexer | Повний контроль | Низька (потребує інфраструктури) | Середня (потрібен сервер) |
Перемикання мереж і RPC
Chain switching: автоматично пропонуйте зміну мережі через useSwitchChain. Для нових мереж додавайте через wallet_addEthereumChain. RPC resilience: налаштуйте fallback transport з кількома провайдерами — Alchemy primary, Infura secondary, public RPC tertiary.
SIWE (Sign-In with Ethereum) — аутентифікація без пароля для off-chain компонентів (профілі, налаштування). Користувач підписує текстове повідомлення з nonce, backend верифікує та видає JWT. Це стандартний метод, схвалений EIP-4361.
const message = new SiweMessage({ domain: window.location.host, address: account.address, statement: 'Sign in with Ethereum to MyDApp.', uri: window.location.origin, version: '1', chainId: chain.id, nonce: await getNonce(), }); Як забезпечити плавний UX транзакцій?
Транзакції — головне джерело тертя. Повний lifecycle: idle → signing → pending → confirming → success/error. Кожен стан потребує UI-зворотного зв'язку.
const { writeContractAsync, isPending } = useWriteContract(); const { isLoading: isConfirming, isSuccess } = useWaitForTransactionReceipt({ hash: txHash, }); Gas estimation: Viem за замовчуванням використовує EIP-1559. Показуйте fee в USD до підтвердження. Додавайте 20% буфер до estimated gas — на практиці це дозволяє уникнути до 40% помилок типу 'out of gas'. Approve flow: для ERC-20 використовуйте Permit (EIP-2612) — один підпис замість двох транзакцій. Якщо токен не підтримує — точний approve на суму операції.
Які практики безпеки впроваджуємо?
- Приватні ключі ніколи не потрапляють у фронтенд.
- Адреси контрактів — з env, не хардкод.
- Content Security Policy проти XSS (може призвести до крадіжки коштів).
- Перевірка chainId у кожній транзакції проти replay attacks.
- ENS resolution з зворотним lookup.
- Аудит контрактів для забезпечення безпеки dApp.
Що входить до роботи?
- Архітектурне проєктування (on-chain/off-chain, стек).
- Розробка смарт-контрактів на Solidity або Rust (Anchor), їх тестування (Foundry, Hardhat) та аудит.
- Фронтенд на React/Next.js з інтеграцією гаманців (RainbowKit).
- Індексація даних (The Graph або власний indexer).
- Оптимізація газу (multicall, batched запити, Permits).
- Деплой, моніторинг, підтримка.
| Етап | Тривалість | Результат |
|---|---|---|
| Архітектура та специфікація | 1–2 тижні | Документ з вибором стека та on-chain/off-chain меж |
| Розробка смарт-контрактів | 2–4 тижні | Протестовані контракти на Foundry/Hardhat |
| Фронтенд та інтеграція | 2–3 тижні | React-застосунок з підключенням гаманця |
| Індексація та тестування | 1–2 тижні | The Graph subgraph або свій indexer |
| Аудит та деплой | 1–2 тижні | Аудований контракт на mainnet |
Строки: MVP — від 2 тижнів, повноцінний продукт — 2–3 місяці. Вартість розраховується індивідуально. Оцінимо ваш проєкт після знайомства з вимогами.
Зв'яжіться з нами, щоб обговорити задачу — ми допоможемо обрати правильну архітектуру та уникнути типових помилок. Замовте аудит контрактів для вашого dApp.







