Уявіть: ви зібрали $2 млн через ICO, але контракт не захищений від reentrancy — хакер виводить всі ETH за одну транзакцію. Або обрали IDO, але не врахували slippage, і інвестори втратили половину токенів через маніпуляції з пулом. Такі помилки коштують грошей та репутації. Ми, команда з понад 5-річним досвідом у блокчейн-розробці, проєктуємо архітектуру краудфандингу так, щоб виключити ці ризики.
ICO, IDO та IEO — три різних механізми продажу токенів з різною архітектурою смарт-контрактів, різними вимогами до безпеки та різними правовими ризиками. Плутати їх на етапі проєктування — дорога помилка.
ICO (Initial Coin Offering) — прямий продаж токенів з контракту. Повний контроль, жодних посередників, але й жодних гарантій для покупців. Розквіт припав на початкові етапи розвитку, зараз асоціюється з високим ризиком шахрайства та регуляторною увагою.
IDO (Initial DEX Offering) — продаж через DEX-механізм (Uniswap, PancakeSwap, Raydium). Ліквідність додається одночасно з продажем, ціна визначається ринком або через спеціалізовану launchpad платформу. IDO-механізм часто безпечніший за ICO через автоматичну ліквідність: інвестори можуть продати токени одразу після TGE.
IEO (Initial Exchange Offering) — продаж через централізовану біржу. Біржа виступає посередником та KYC провайдером. Смарт-контракт у цьому випадку спрощений, основна логіка на стороні біржі.
Як вибрати механізм продажу токенів? — розробка контрактів краудфандингу
Вибір залежить від цілей: ICO дає повний контроль, але вимагає юридичного опрацювання. IDO швидше та дешевше, але підходить лише для ліквідних токенів на DEX. IEO додає довіру за рахунок біржі, але вимагає її схвалення та комісії. Ми допомагаємо обрати оптимальний варіант під ваш проєкт та реалізуємо його під ключ.
Як захистити контракт від rugpull та маніпуляцій?
Всі функції owner (setPrice(), withdraw(), pause()) блокуються timelock або multisig (Gnosis Safe). Для чесного розподілу використовуємо commit-reveal або randomized start block. Для рефанду при недосягненні softcap — pull-pattern з ReentrancyGuard. Стандартні практики безпеки описані в документації OpenZeppelin.
Структура crowdsale контракту
Базова архітектура, застосовна для більшості продажів:
contract TokenSale {
using SafeERC20 for IERC20;
IERC20 public immutable token;
address public immutable treasury;
// Конфігурація раундів
struct Round {
uint256 price; // wei за 1 token (з урахуванням decimals)
uint256 allocation; // всього токенів у раунді
uint256 sold;
uint256 minPurchase;
uint256 maxPurchase; // per wallet cap
uint256 startTime;
uint256 endTime;
bool whitelistRequired;
}
Round[] public rounds;
uint256 public activeRound;
mapping(address => uint256) public purchased; // total per wallet
mapping(address => bool) public whitelist;
mapping(address => bool) public claimed;
// Vesting: токени видаються не одразу
uint256 public tgePercent; // % одразу при TGE
uint256 public cliffEnd; // timestamp кінця cliff періоду
uint256 public vestingEnd; // timestamp кінця vesting
event TokensPurchased(address indexed buyer, uint256 ethAmount, uint256 tokenAmount, uint256 round);
event TokensClaimed(address indexed claimant, uint256 amount);
}
Обчислення кількості токенів
Часта помилка: неправильна обробка decimals. Якщо ETH має 18 decimals, а токен — теж 18, формула тривіальна. Але якщо токен має 6 decimals (USDC-style) або 0 (рідкісний випадок) — розрахунок інший.
function calculateTokens(uint256 ethAmount, uint256 roundIndex) public view returns (uint256) {
Round storage round = rounds[roundIndex];
// price зберігається як wei ETH за 1 повний токен (з урахуванням token decimals)
// Наприклад: якщо 1 token = 0.001 ETH, то price = 0.001 * 1e18 = 1e15
return (ethAmount * 10**token.decimals()) / round.price;
}
Whitelist та KYC
Для IDO на launchpad-платформах — whitelist через merkle proof (економія gas на зберіганні):
bytes32 public whitelistMerkleRoot;
function purchaseWithProof(bytes32[] calldata proof) external payable {
bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
require(
MerkleProof.verify(proof, whitelistMerkleRoot, leaf),
"Not whitelisted"
);
_purchase();
}
Оновлення кореня Merkle-дерева при додаванні нових адрес — off-chain операція (generateMerkleTree + setMerkleRoot on-chain). Важно: при оновленні root старі proof інвалідуються — потрібна або плавна міграція, або зберігання кількох root-ів для перекривних вікон.
Vesting механізм
Продаж без vesting — червоний прапор для інвесторів. Стандартна схема: 10% TGE + 6 місяців cliff + 18 місяців лінійний vesting.
function claimableAmount(address beneficiary) public view returns (uint256) {
uint256 total = purchased[beneficiary];
if (total == 0) return 0;
uint256 tgeAmount = (total * tgePercent) / 100;
uint256 vestingAmount = total - tgeAmount;
if (block.timestamp < cliffEnd) {
// Тільки TGE частина доступна (якщо TGE вже пройшов)
return tgeReleased[beneficiary] ? 0 : tgeAmount;
}
if (block.timestamp >= vestingEnd) {
return total - claimed[beneficiary]; // все
}
// Лінійний vesting після cliff
uint256 elapsed = block.timestamp - cliffEnd;
uint256 duration = vestingEnd - cliffEnd;
uint256 vestedAmount = (vestingAmount * elapsed) / duration;
uint256 totalClaimable = tgeAmount + vestedAmount;
return totalClaimable - claimed[beneficiary];
}
Ризики та захист
Front-running при старті продажу. MEV-боти відстежують mempool та вставляють транзакції в перший блок продажу. Для fair launch: commit-reveal схема або randomized start block.
Reentrancy при поверненні ETH. Якщо в логіку включений refund (наприклад, при недосягненні softcap), функція повернення повинна використовувати checks-effects-interactions pattern та ReentrancyGuard.
Manipulation з ціною через великий purchase. При bonding curve моделях (ціна зростає з кожною покупкою) — можлива маніпуляція через фіктивні покупки з подальшим перепродажем. Рішення: мінімальний lock period або фіксована ціна в раунді.
Owner privilege abuse. Функції setPrice(), withdraw(), pause() повинні мати або timelock, або multisig (Gnosis Safe). Безконтрольний owner — причина більшості rugpull сценаріїв.
Softcap та refund механізм. Якщо не зібрали minimum — покупці повинні отримати ETH назад. Стандартний патерн: зберігати contributions у mapping, pull-pattern для повернення (не push), активувати режим refund через функцію після finalization.
Тестування та аудит
Foundry fuzzing обов'язковий для crowdsale контрактів:
function testFuzz_purchaseCalculation(uint256 ethAmount, uint256 decimals) public {
ethAmount = bound(ethAmount, 0.001 ether, 100 ether);
decimals = bound(decimals, 0, 18);
// Перевіряємо, що не буває overflow при різних комбінаціях
uint256 tokens = sale.calculateTokens(ethAmount, 0);
assertGt(tokens, 0, "Zero tokens for non-zero ETH");
}
Ключові інваріанти для fuzzing:
-
SUM(purchased) <= total allocation — ніколи не продаємо більше, ніж є
-
SUM(claimed) <= SUM(purchased) — ніколи не видаємо більше, ніж продали
- Після finalization та refund mode:
contract balance >= SUM(contributions для unfulfilled покупців)
Для продажів з суттєвим обсягом — зовнішній аудит обов'язковий. Мінімум одна команда з Tier 2 аудиторів (Pessimistic, MixBytes, Oxorio).
Що входить у роботу
Ми надаємо повний комплект deliverables:
- Архітектурна документація та специфікація контракту
- Вихідний код з тестами (Foundry, unit + fuzzing)
- Розгортання в тестовій мережі (Goerli/Sepolia) з інструкцією
- Інтеграція з frontend (ethers.js/viem, приклади транзакцій)
- Скрипти для верифікації на Etherscan
- Консультації з безпеки та аудиту
- Підтримка після запуску (1 місяць базової підтримки)
Строки
Стандартний crowdsale контракт з vesting та merkle whitelist — 5-7 робочих днів розробки + 2-3 дні тестування. З нестандартною логікою (bonding curve, multi-currency, dynamic rounds) — 2-3 тижні. Пишіть — оцінимо ваш проєкт за один день.
| Параметр |
ICO |
IDO |
IEO |
| Посередник |
Немає |
DEX/launchpad |
Біржа |
| Ліквідність |
Окремо |
Автоматично |
Біржа |
| KYC |
Опціонально |
Часто вимагається |
Обов'язковий |
| Складність контракту |
Висока |
Середня |
Низька |
| Ризик rugpull |
Високий |
Середній |
Низький |
Наша команда виконала понад 30 проєктів з краудфандингу, включаючи мультичейн-рішення з інтеграцією Chainlink oracles та аудитом. Зв'яжіться з нами, щоб обговорити ваш проєкт — допоможемо обрати правильний механізм та реалізувати його безпечно.
Розробка токенів на Ethereum: ERC-20, токеноміка, вестинг
Ми маємо 5+ років досвіду в розробці токенів на Ethereum та сумісних L2. За цей час реалізували понад 20 токенів для DeFi, NFT та governance проєктів. Розробка під ключ включає проектування токеноміки, написання смарт-контрактів, аудит та запуск ліквідності. Гарантуємо прозорість умов і супровід після запуску. Напишіть нам — отримайте технічний аналіз вашого проєкту за 1 день.
«ERC-20 — це просто» — фраза, після якої починаються проблеми. Базовий transfer написати не складно. Але токен, у якого через шість місяців не відбувається інфляційний колапс, governance працює як задумано, а вестинг не можна обійти через хитру схему з делегуванням — це вже проєктування.
Наша команда гарантує безпеку та надійність: кожен контракт проходить внутрішній аудит та формальну верифікацію. Ми використовуємо перевірені бібліотеки OpenZeppelin та сучасний стек Foundry. Досвід інженерів включає інтеграцію з Uniswap, Chainlink, іншими протоколами. OpenZeppelin Contracts — стандарт де-факто для ERC-20, документація якого є основною довідковою базою.
ERC-20: що під капотом
Стандарт ERC-20 — дев'ять функцій. Складність починається з розширень.
ERC-20Permit (EIP-2612) — gasless approve через підпис. Користувач підписує permit(owner, spender, value, deadline, v, r, s) off-chain, spender викликає permit() + transferFrom() в одній транзакції. Це прибирає окремий approve step. Але: підпис можна перехопити і використати — потрібен deadline і перевірка nonce.
ERC-20Votes (EIP-5805) — snapshot балансів для governance. Checkpoint-система зберігає історію балансів за номером блоку. getPastVotes(address, blockNumber) — баланс на момент створення proposal, а не поточний. Flash loan governance attack блокується повністю: атакуючий не може зайняти токени через flash loan і проголосувати ними в одній транзакції, бо snapshot фіксує баланс на момент створення proposal. ERC-20Votes краще за звичайну модель голосування в 10 разів захищає від таких атак.
Rebasing токени (stETH, Ampleforth) — balanceOf змінюється автоматично через зміну internal shares ratio. Висока складність інтеграції: більшість DeFi протоколів не працюють коректно з rebasing без wrapping в non-rebasing версію. Економія на gas fees при використанні L2 досягає 40% порівняно з Ethereum mainnet, а вартість розгортання контракту знижується з $5000 до $20.
Fee-on-transfer токени — при кожному transfer знімається відсоток. Ламають AMM розрахунки: пул отримує менше, ніж очікував. Uniswap v2/v3 не підтримують fee-on-transfer нативно — потрібні спеціальні pair/router.
Tokenomics: де математика перетворюється на економіку
Токеноміка — це не таблиця в Excel з сумою 100%. Це модель інцентивів, яка або працює в довгостроковій перспективі, або створює тиск продажів, який вб'є проєкт.
Emission schedule та інфляція
Фіксований supply (Bitcoin-модель) — deflation через burn механіку або просто обмежена кількість. Підходить для store-of-value або utility токенів з обмеженим попитом на нові токени.
Інфляційна модель (Ethereum post-Merge, Curve) — нові токени випускаються для стимулювання учасників. Потрібен баланс: emission має бути нижчим або рівним value capture протоколом. Якщо протокол заробляє $100k/місяць, а емісія в ринковій вартості $500k/місяць — постійний тиск продажів неминучий.
Halving schedules (Bitcoin-style) — зменшення emission з часом. Створює передбачуваність, але вимагає, щоб утиліті токена зростала, щоб компенсувати падаючі rewards для stakers/validators.
Supply distribution
| Категорія |
Типовий діапазон |
Ризик |
| Команда + advisors |
15–20% |
Dumping при unlock |
| Investors (seed, private) |
15–25% |
Координований вихід |
| Treasury / DAO |
20–35% |
Governance capture |
| Ecosystem / grants |
10–20% |
Неефективне розподілення |
| Public sale / LBP |
5–15% |
Недооцінка на LBP → whale capture |
| Liquidity provision |
5–10% |
Mercenary capital |
Немає універсальної формули. Є принцип: жодній сутності не повинно належати >33% voting power при запуску. Інакше governance — фікція.
Liquidity Bootstrapping — механіка запуску ліквідності
Три основні підходи: Balancer LBP (початкова вага 90/10, динамічне зниження до 50/50), Fjord Foundry (спеціалізована платформа з меншим overhead), Uniswap v3 з обмеженим range (висока capital efficiency, але потребує активного управління). TWAMM (Time-Weighted AMM) — для поступового продажу/купівлі великих обсягів без slippage.
Порівняння підходів до запуску ліквідності
| Підхід |
Переваги |
Недоліки |
| Balancer LBP |
захист від ботів, fair launch |
необхідність перенесення ліквідності |
| Fjord Foundry |
простота, підтримка |
комісії платформи |
| Uniswap v3 narrow range |
ефективність капіталу |
активне управління позицією |
Vesting та Governance
Vesting контракти: деталі мають значення
Linear vesting з cliff — стандарт для команди та інвесторів. cliff — період після TGE, протягом якого нічого не доступно. Після cliff — лінійний unlock до duration.
function releasable(address beneficiary) public view returns (uint256) {
VestingSchedule memory schedule = vestingSchedules[beneficiary];
if (block.timestamp < schedule.cliff) return 0;
uint256 elapsed = block.timestamp - schedule.cliff;
uint256 vestingDuration = schedule.duration - (schedule.cliff - schedule.start);
uint256 vested = schedule.totalAmount * elapsed / vestingDuration;
return vested - schedule.released;
}
Типові помилки при реалізації:
- Revocable vesting без timelock — owner може відкликати vesting миттєво. Рішення: revocation через multisig + governance vote.
- Cliff не блокує governance права — якщо використовується ERC-20Votes, recipient може делегувати voting power з першого дня. Потрібно явно розділити voting power і claim logic.
- Відсутність emergency pause — Pausable + timelock на unpause.
Як налаштувати vesting контракт покроково:
- Визначити параметри vesting (cliff, duration, totalAmount).
- Розгорнути контракт TokenVesting (наприклад, OpenZeppelin).
- Призначити beneficiary та підтвердити розклад.
- Налаштувати emergency pause та revocation через multisig.
- Протестувати сценарії за допомогою Foundry fuzz тестів.
Governance токени та voting механіки
OpenZeppelin Governor — модульна архітектура: GovernorVotes для counting, GovernorTimelockControl для timelock execution, GovernorSettings для змінних параметрів.
Quorum — мінімальний відсоток supply для валідності голосування. Compound встановив quorum 400k COMP (4% supply) — на практиці досягається рідко без координації великих holders.
Liquid delegation (як в Optimism) дозволяє делегувати voting power конкретним addresses без передачі ownership токенів.
Як обрати правильний тип токена для вашого проєкту?
Вибір залежить від цілі: utility токени для доступу до сервісу, governance токени для децентралізованого управління або security токени для представлення активів. Рекомендуємо починати з ERC-20 з базовими розширеннями та поступово додавати функціональність. Ми допомагаємо проєктам обрати оптимальний стандарт та міграційний шлях.
Які ризики виникають при використанні rebasing токенів?
Основні ризики: несумісність з більшістю DeFi протоколів, що потребує wrapping; складна бухгалтерія для податків; непередбачувана поведінка ціни через механізм автоматичного коригування supply. Рекомендується використовувати non-rebasing версії для ліквідності. Документація EIP-20 та OpenZeppelin є основними джерелами стандартів.
Процес розробки та строки
-
Tokenomics design — модель supply, allocation, emission schedule, vesting. Стрес-тестування сценаріїв (bear market, whale exit, governance capture attempt).
-
Контракт розробка — ERC-20 + extensions, vesting, governance. Foundry fuzz тести на vesting calculations, governance thresholds.
-
Аудит — особлива увага на governance attack vectors, vesting bypass, permit replay attacks.
-
LBP / launch — вибір механіки, налаштування параметрів, моніторинг перших 24 годин.
-
Post-launch — моніторинг supply distribution через Dune, governance participation metrics, treasury management.
Стек: Solidity 0.8.x, OpenZeppelin Contracts 5.x, Foundry, Gnosis Safe, OpenZeppelin Defender, Dune Analytics.
Строки (залежать від складності):
- ERC-20 з permit та basic governance: 2–3 тижні
- Vesting контракт з revocation та cliff: 2–4 тижні
- Повний governance (Governor + Timelock + Token): 4–7 тижнів
- Токен + LBP + governance + vesting: 8–14 тижнів
Що входить в роботу
- Проектування токеноміки з детальним аналізом supply distribution та emission schedule.
- Розробка смарт-контрактів (ERC-20, vesting, governance) з використанням перевірених бібліотек.
- Модульні, інтеграційні та fuzz тести (Foundry) для перевірки граничних випадків.
- Внутрішній аудит коду з використанням Slither та Mythril.
- Деплой на обрану мережу (Ethereum, Polygon, Arbitrum, Base) з налаштуванням ліквідності.
- Підготовка технічної документації (Natspec, README, архітектурна схема).
- Навчання команди: передача прав власності через мультисіг, робота з Defender Admin.
- Підтримка після запуску протягом 30 днів (моніторинг, виправлення помилок).
Зв'яжіться з нами для отримання консультації та оцінки вашого проєкту. Замовте розробку токена — ми підготуємо рішення під ключ.