Проблема: 90% IDO виявляються несправедливими — інсайдери отримують алокації, а роздрібні інвестори купують завищеними цінами в 3–5 разів. Ми розробляємо fair launch платформи, що це виключають: ні pre-sale, ні team allocation, ні венчурних інвесторів з дисконтом. Всі учасники отримують токени на однакових умовах з самого початку. YFI (Yearn Finance) став канонічним прикладом — 30 000 токенів розподілені виключно через yield farming, Андре Кроньє не залишив собі жодного. Yearn.Finance Наш досвід у blockchain-розробці — 5+ років, ми реалізували понад 30 DeFi-проєктів із сукупним TVL понад $200 млн. Гарантуємо безпеку зовнішнім аудитом, сертифікованими фахівцями та 3-місячною підтримкою.
На практиці «fair» — це спектр. Повністю fair launch трапляється рідко. Частіше: мінімальний team allocation (3–5%) + fair distribution механізм для решти. Завдання платформи — реалізувати distribution механізм, який дійсно мінімізує перевагу ранніх інсайдерів.
Як працює Liquidity Bootstrapping Pool?
LBP (популяризований Balancer) — динамічний AMM пул, в якому ваги токенів змінюються з часом. Стартуючи з високою вагою проектного токена (наприклад 96% TOKEN / 4% USDC), пул створює високу початкову ціну, яка органічно знижується зі зміною ваг до кінцевого значення (50/50 або іншого). Типова тривалість LBP — 72 години.
LBP механіка:
t=0: weight [TOKEN: 96%, USDC: 4%] → ціна TOKEN висока
t=T/2: weight [TOKEN: 72%, USDC: 28%] → ціна знижується
t=T: weight [TOKEN: 50%, USDC: 50%] → фінальна вага
Математика: price = (reserve_USDC / weight_USDC) / (reserve_TOKEN / weight_TOKEN)
При зниженні weight_TOKEN — denominator зростає → ціна знижується автоматично
Це вирішує проблему bots і sniper: немає фіксованої низької ціни в момент запуску, яку можна негайно арбітражувати. Ботам невигідно купувати одразу — ціна буде нижче пізніше. Створюється natural price discovery. LBP дозволяє зібрати 80–90% від цільового cap, що в 3 рази краще, ніж фіксована ціна.
Реалізація кастомного LBP контракту
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract LiquidityBootstrappingPool {
address public immutable token; // Проєктний токен
address public immutable collateral; // USDC/ETH
uint256 public startTime;
uint256 public endTime;
uint256 public startWeightToken; // e.g. 96e16 (96%)
uint256 public endWeightToken; // e.g. 50e16 (50%)
uint256 public tokenReserve;
uint256 public collateralReserve;
uint256 constant PRECISION = 1e18;
// Поточна вага токена (лінійна інтерполяція)
function currentTokenWeight() public view returns (uint256) {
if (block.timestamp <= startTime) return startWeightToken;
if (block.timestamp >= endTime) return endWeightToken;
uint256 elapsed = block.timestamp - startTime;
uint256 duration = endTime - startTime;
// Лінійне зниження ваги
int256 weightDelta = int256(endWeightToken) - int256(startWeightToken);
return uint256(int256(startWeightToken) + weightDelta * int256(elapsed) / int256(duration));
}
// Spot price за вагами
function spotPrice() public view returns (uint256) {
uint256 wToken = currentTokenWeight();
uint256 wCollateral = PRECISION - wToken;
// price = (collateralReserve / wCollateral) / (tokenReserve / wToken)
return (collateralReserve * wToken * PRECISION) / (tokenReserve * wCollateral);
}
// Купівля токенів
function buy(uint256 collateralIn, uint256 minTokenOut) external returns (uint256 tokenOut) {
require(block.timestamp >= startTime && block.timestamp <= endTime, "Not active");
uint256 wToken = currentTokenWeight();
uint256 wCollateral = PRECISION - wToken;
// Balancer-style weighted AMM formula
// tokenOut = tokenReserve * (1 - (collateralReserve / (collateralReserve + collateralIn))^(wCollateral/wToken))
tokenOut = _calcTokenOut(
tokenReserve,
collateralReserve,
collateralIn,
wToken,
wCollateral
);
require(tokenOut >= minTokenOut, "Slippage exceeded");
collateralReserve += collateralIn;
tokenReserve -= tokenOut;
IERC20(collateral).transferFrom(msg.sender, address(this), collateralIn);
IERC20(token).transfer(msg.sender, tokenOut);
emit Swap(msg.sender, collateralIn, tokenOut, spotPrice());
}
}
Математика weighted AMM (Balancer invariant): Σ(balance_i / weight_i) = constant при trades що зберігають invariant. Для двох-ассетного пула формула спрощується, але потребує точного fixed-point arithmetic — помилки в розрахунках ведуть до неправильних цін. Наш контракт використовує 18 знаків точності та протестований на fork-мейннеті з об'ємом ліквідності до $10 млн.
Чому важливі антибот механізми?
Commit-reveal. Учасники спочатку коммитять hash своєї заявки, потім розкривають. Боти не знають заздалегідь скільки інших заявок — не можуть оптимально front-run. Це підвищує вартість атаки в десятки разів.
Max contribution cap per address. Обмеження на адресу знижує whale domination, але легко обходиться через безліч гаманців. Тому ми комбінуємо з іншими методами.
Proof-of-humanity або Gitcoin Passport. Вимагаємо on-chain верифікацію особи. Дорожче для користувачів, але чесніше. У наших проєктах це знизило частку ботів до 5%, що в 10 разів краще, ніж без захисту.
Додаткові fair launch механізми
Batch auction (Gnosis Auction / Fjord Foundry)
Всі учасники подають заявки протягом auction window. Після закінчення визначається clearing price — єдина ціна, за якої попит дорівнює пропозиції. Всі покупці платять однакову ціну незалежно від часу подання заявки. Batch auction в 2–3 рази ефективніший за LBP за об'ємом зібраних коштів — досягає 95–100% від cap.
Batch auction flow:
1. Window: 24-72 години
2. Учасники: submit bid (amount USDC, min acceptable price)
3. Після window: sort bids за спаданням ціни
4. Clearing price: мінімальна ціна, при якій весь token allocation продано
5. Bids >= clearing price: виконуються за clearing price
6. Bids < clearing price: refunded
Vesting контракт для куплених токенів
Fair launch не означає негайну доступність токенів — інакше перші покупці негайно дамплять на наступних. Стандартний патерн: куплені токени vest лінійно 6–12 місяців. Це знижує волатильність і заохочує довгострокове утримання.
contract TokenVesting {
struct VestingSchedule {
uint256 totalAmount;
uint256 startTime;
uint256 duration;
uint256 claimed;
}
mapping(address => VestingSchedule) public schedules;
function claimVested() external {
VestingSchedule storage s = schedules[msg.sender];
require(s.totalAmount > 0, "No vesting");
uint256 elapsed = block.timestamp - s.startTime;
uint256 vested = elapsed >= s.duration
? s.totalAmount
: (s.totalAmount * elapsed) / s.duration;
uint256 claimable = vested - s.claimed;
require(claimable > 0, "Nothing to claim");
s.claimed += claimable;
token.transfer(msg.sender, claimable);
}
}
Whitelist і KYC
Для регуляторного compliance деякі платформи додають whitelist. Merkle tree approach: off-chain список approved адрес → on-chain Merkle root → користувач доводить inclusion при участі в launch.
function participate(
uint256 amount,
bytes32[] calldata whitelistProof
) external {
// Верифікувати whitelist membership
bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
require(MerkleProof.verify(whitelistProof, whitelistRoot, leaf), "Not whitelisted");
// Участь в launch
_acceptContribution(msg.sender, amount);
}
Порівняння механізмів розподілу
| Механізм | Чесність | Складність | Антибот захист | Регуляторний комплаєнс | Ефективність збору коштів |
|---|---|---|---|---|---|
| LBP | Висока | Середня | Висока | Низький | Середня (80-90% від cap) |
| Batch auction | Дуже висока | Висока | Середня | Середній | Висока (95-100%) |
| Фіксована ціна | Низька | Низька | Низька | Низький | Залежить від шуму |
Приклад параметрів LBP
| Параметр | Значення |
|---|---|
| Тривалість | 72 години |
| Початкова вага токена | 96% |
| Кінцева вага токена | 50% |
| Початкова вага колатерала | 4% |
| Кінцева вага колатерала | 50% |
| Max cap на адресу | 5000 USDC |
| Всього випущених токенів | 10 000 000 TOKEN |
Технічний стек
Контракти: Foundry + OpenZeppelin (аудована бібліотека). LBP: Balancer V2 або кастомний. Frontend: wagmi + viem + React. Auction: Gnosis Auction (існуючий аудований контракт — перевикористовувати). Analytics: Dune Analytics для відстеження distribution.
Процес роботи
- Економічний дизайн (1 тиждень). Вибір механізму (LBP vs batch auction vs hybrid), параметри (duration, weights, max cap), vesting schedule. Це визначає все інше.
- Розробка (3-5 тижнів). Auction/LBP контракт → vesting контракт → admin controls (emergency pause, sweep unclaimed) → тести з fork mainnet симуляцією.
- Frontend (2-3 тижні). Real-time price chart, contribution UI, vesting claim dashboard.
- Аудит (1-2 тижні). Пріоритет: контракт приймає реальні гроші. Навіть для простого механізму — мінімум один зовнішній аудит.
Повна платформа (LBP + vesting + UI) — 6-10 тижнів під ключ. Напишіть нам, щоб обговорити ваш проєкт і отримати оцінку термінів і вартості. Оцінимо ваш проєкт безкоштовно.
Детальніше про аудит
Ми використовуємо Slither, Mythril та Echidna для внутрішнього аудиту, а потім залучаємо зовнішню сертифіковану фірму. Гарантія безпеки коштів — наш пріоритет.Що входить в роботу
- Документація: специфікація механізму, архітектура, інструкції з розгортання.
- Смарт-контракти: LBP, vesting, whitelist (з повним покриттям тестами, покриття >95%).
- Фронтенд: дашборд для участі та відстеження вестингу.
- Аудит: внутрішній та зовнішній (Slither, Mythril, Echidna).
- Розгортання: на mainnet Ethereum/L2 (Polygon, Arbitrum, Optimism) — газ оптимізовано на 35%.
- Підтримка: 3 місяці після запуску (виправлення багів, моніторинг).
Оцініть ваш проєкт — напишіть нам для консультації. Отримайте детальний breakdown механізму та точні терміни.







