Розробка блокчейн-проекту
"Блокчейн-проект" — навмисне широке визначення. Перш ніж говорити про технології, потрібно відповісти на конкретне питання: що саме блокчейн вирішує у вашому продукті, чого не вирішує традиційна база даних? Якщо відповідь розмита — ймовірно, вам потрібна просто розподілена система, а не блокчейн. Якщо відповідь чітка — безпосередня виконання логіки, верифікованість даних, токенізація активів, безпермісійна участь — тоді починаємо проектувати.
Вибір блокчейна: архітектурне рішення з довгостроковими наслідками
Не існує "найкращого блокчейна" — є правильний для конкретного use case.
EVM-сумісні мережі
Ethereum mainnet — максимальна децентралізація та безпека, інструменти розробки першого рівня (Foundry, Hardhat, Slither, Echidna). Виправдано для: протоколів з великим TVL, де безпека > вартість; фінансових примітивів, які мають бути сумісні з екосистемою DeFi.
Arbitrum / Optimism — Optimistic Rollups. EVM-еквівалентність (Arbitrum One) або EVM-сумісність (OP Stack). Gas у 10–50x дешевше за mainnet, фіналізація ~7 днів для withdrawals (fraud proof window). Виправдано для додатків з високою частотою транзакцій: торгівля, ігри, соціальні додатки.
Base — OP Stack L2 від Coinbase. Швидко зростаюча екосистема, хороший onramp через Coinbase. Придатна для додатків, орієнтованих на користувачів.
Polygon PoS — не L2, а sidechain з мостом до Ethereum. Швидка, дешева, але інша модель безпеки. Добра для NFT-проектів з частими транзакціями.
zkSync Era / Polygon zkEVM / Scroll — ZK Rollups. Сильніші гарантії безпеки ніж Optimistic (без fraud window), але ZK proofs створюють overhead виконання. zkSync має Native Account Abstraction (AA) на рівні протоколу — важлива архітектурна перевага для UX.
Не-EVM
Solana — високий throughput (65k TPS теоретично, ~3–5k TPS насправді), паралельне виконання транзакцій через Sealevel, низькі комісії. Програмування на Rust через Anchor framework. Інструменти значно менш зрілі ніж EVM, debugger примітивний, помилки гірше читаються. Виправдано для: high-frequency trading, ігор з real-time механіками, додатків де gas cost критичний.
TON — нативна інтеграція з Telegram (900M MAU). FunC/Tact для смарт-контрактів. Якщо ваша аудиторія в Telegram — серйозний аргумент на користь TON.
Cosmos SDK — для випадків, коли потрібен власний blockchain (application-specific chain). IBC для міжмережевої взаємодії. Високий поріг входу, але повний контроль над консенсусом, управлінням, газовим токеном.
Смарт-контракти: від архітектури до деплойменту
Архітектурні паттерни
Proxy upgradeable patterns — більшість production контрактів використовують апгрейдуємість. Три основні паттерни:
- Transparent Proxy (OpenZeppelin) — адміністратор і користувачі викликають різні функції. Проблема: адміністратор не може використовувати протокол як користувач.
- UUPS (EIP-1822) — логіка апгрейду в implementation контракті. Менше gas overhead, гнучкіше. Ризик: якщо задеплоїти implementation без функції апгрейду — контракт навіки заблокується.
- Diamond (EIP-2535) — множество "facets" (реалізацій) за одним прокси. Вирішує ліміт розміру контракту (24KB), але складно в аудиті.
Для більшості проектів — UUPS через @openzeppelin/contracts-upgradeable це правильний вибір.
Access control — не Ownable, а AccessControl від OpenZeppelin для проектів з кількома ролями:
bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE");
bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
Pausable — аварійна пауза завжди потрібна в DeFi контрактах. Паузер має бути multisig або timelock, не EOA.
Типові уразливості
З багаторічного досвіду роботи з аудитами, ось що зустрічається найчастіше:
Reentrancy — класика. У 2024 році все ще трапляється. Захист: ReentrancyGuard від OZ + CEI паттерн (Checks-Effects-Interactions):
// НЕПРАВИЛЬНО:
function withdraw(uint256 amount) external {
token.transfer(msg.sender, amount); // interaction до effect
balances[msg.sender] -= amount; // effect після
}
// ПРАВИЛЬНО:
function withdraw(uint256 amount) external nonReentrant {
balances[msg.sender] -= amount; // effect
token.transfer(msg.sender, amount); // interaction
}
Маніпуляція ціною через flash loans — якщо контракт читає ціну з Uniswap spot price. Рішення: TWAP (Time-Weighted Average Price) через IUniswapV3Pool.observe() або Chainlink Price Feed.
Integer overflow/underflow — у Solidity 0.8.x вбудована захист, але при unchecked блоках і при кастомній математиці з downcast — все ще актуально.
Signature replay — при використанні ecrecover без nonce або chain ID у підписаному повідомленні. EIP-712 + EIP-2612 (Permit) вирішують це стандартним способом.
Front-running — MEV. Для AMM-подібних контрактів: deadline + slippage tolerance. Для чутливих операцій: commit-reveal схема.
Інструменти розробки
Foundry — переважний інструмент для серйозної розробки. Тести на Solidity, fuzz testing з коробки, форки mainnet в один флаг:
forge test --fork-url $ETH_RPC --fork-block-number 19000000 -vvv
Fuzz тестування знаходить edge cases, які ручні тести пропускають:
function testFuzz_deposit(uint256 amount) public {
amount = bound(amount, 1, type(uint128).max); // розумні границі
deal(address(token), user, amount);
vm.prank(user);
vault.deposit(amount, user);
assertEq(vault.totalAssets(), amount);
}
Slither — статичний аналізатор. Запускаємо в CI на кожний PR, критичні знахідки блокують мердж.
Echidna — property-based fuzzer. Для інваріантів: "totalSupply завжди дорівнює сумі всіх балансів", "здоров'я протоколу ніколи не йде в мінус".
Інфраструктура та DevOps
Деплойментт і multisig
Ніяких деплойментів з EOA у production. Схема:
Developer EOA → Gnosis Safe 3/5 multisig → Timelock (48h delay) → Contract
Timelock дає користувачам час реагувати на зловмисний апгрейд. Для DeFi протоколів з TVL > $1M — обов'язково.
Hardhat Ignition або Foundry Deploy Scripts для відтворюваних деплойментів. Всі параметри деплойменту — у версійному контролі, не у голові розробників.
On-Chain моніторинг
OpenZeppelin Defender — моніторинг транзакцій, автоматичні реакції (пауза при аномалії), безпечне управління ключами для автоматизації.
Tenderly — симуляція транзакцій, alerts, debugger. Незамінний для отладки складних multi-contract взаємодій.
The Graph — індексування подій для фронтенду та аналітики. Subgraph пишеться один раз, деплоїться в децентралізовану мережу, дані доступні через GraphQL.
Аудит
Аудит — не фінальний крок, а частина процесу. Для серйозних протоколів: внутрішній review (Slither + Echidna + ручний аналіз) → попередній аудит від однієї фірми → основний аудит → виправлення знахідок → повторний аудит змін. Терміни: 4–8 тижнів для типового mid-complexity DeFi протоколу. Бюджет: $20k–$150k залежно від аудитора (Trail of Bits, Spearbit, Code4rena contest).
Етапи проекту
| Фаза | Зміст | Термін |
|---|---|---|
| Architecture & design | Вибір мережі, архітектура контрактів, tokenomics | 1–2 тижні |
| Core contracts | Розробка та unit тести | 2–6 тижнів |
| Integration testing | Fork тести, інтеграційні сценарії | 1–2 тижні |
| Frontend | dApp, wallet інтеграція | 2–6 тижнів |
| Audit | Зовнішній аудит + виправлення | 4–8 тижнів |
| Testnet deployment | Публічний тестнет, bug bounty | 2–4 тижні |
| Mainnet | Деплойментт, моніторинг | 1 тиждень |
Реалістичний термін від ідеї до mainnet: 3–6 місяців для протоколу середної складності. Проекти, які "запускаються за 2 тижні", зазвичай мають незакриті критичні уразливості.







