Зауважимо: коли токен запускається через bonding curve без правильного налаштування параметрів, перші ж транзакції можуть бути спам-атаками снайперів, а крива може дати несправедливу перевагу раннім покупцям. Ми в кожному проекті налаштовуємо форму кривої, комісії, пороги graduation та захисні механізми під конкретну економіку токена — чи то мем-токен, чи utility. Наша команда працює більше 5 років і реалізувала більше 30 контрактів bonding curve на Ethereum, BNB Chain та Solana.
Pump.fun зробив bonding curve масовим продуктом: будь-хто може запустити токен без seed liquidity, без лістингу на CEX, без алокації інсайдерам. Ціна зростає за детермінованою кривою в міру покупок — і падає в міру продажів. Це не магія, це математика AMM без пулу контрагентів.
Але за простотою інтерфейсу ховається нетривіальний вибір: форма кривої, параметри, механіка graduation (перехід на DEX), захист від sniper ботів. Неправильні рішення тут — токен помирає в перші години. Ми пропонуємо комплексну розробку під ключ: від аналітики до деплою, з документацією та підтримкою. Отримайте консультацію по вашому проекту — оцінимо токеноміку та запропонуємо оптимальні налаштування кривої. Наш підхід дозволяє заощадити до 30% на комісіях за рахунок оптимізації контракту. Завдяки правильному налаштуванню кривої, ви знижуєте витрати на ліквідність на 20–40%.
Форми кривих та їх поведінка
Linear bonding curve
P(x) = a * x + b
Ціна лінійно зростає з supply. Просто, передбачувано. Проблема: при низькому a ранні покупці отримують мінімальну перевагу; при високому — пізні вхідні переплачують непропорційно.
Exponential / Power curve
P(x) = a * x^n
При n > 1 — зростання прискорюється. Сильно винагороджує ранніх учасників. Експоненціальна крива дає раннім покупцям до 10x більше прибутку порівняно з лінійною кривою при тій самій кінцевій капіталізації. Pump.fun використовує варіант цієї кривої. Для мем-токенів це особливо актуально.
Bancor formula (constant reserve ratio)
P = Balance / (Supply * CRR)
Зауважимо: де CRR — частка резерву. При CRR = 0.5 ціна зростає як x². Bancor зробив цю математику популярною, Uniswap v3 використовує схожі ідеї в concentrated liquidity.
Sigmoid curve
Повільне зростання на початку, швидке в середині, уповільнення до максимуму. Імітує S-криву adoption. Складніше в реалізації, але більш «органічне» ціноутворення для utility-токенів.
Як реалізувати bonding curve: ключові контрактні рішення
Інваріант vs. обчислення при кожній транзакції
Два підходи:
- Аналітичний — формула задана точно, ціна обчислюється математично для будь-якого x. Вимагає точної арифметики великих чисел без втрати precision.
- Дискретний — ціна оновлюється по сходинках. Простіше, менш gas-intensive, але менш точний.
Для production переважний аналітичний з використанням fixed-point бібліотек (PRBMath, ABDKMath):
import { PRBMathUD60x18 } from "@prb/math/UD60x18.sol"; contract BondingCurve { using PRBMathUD60x18 for uint256; uint256 public constant INITIAL_PRICE = 0.000001 ether; // в wei uint256 public constant K = 1e15; // коэффициент крутизни кривой uint256 public totalSupply; uint256 public reserveBalance; // Цена текущего токена при supply = x function currentPrice() public view returns (uint256) { // P(x) = INITIAL_PRICE + K * x^2 return INITIAL_PRICE + K.mul(totalSupply.powu(2)); } // Стоимость покупки amount токенов (интеграл кривой) function getBuyPrice(uint256 amount) public view returns (uint256) { // Интеграл P(x)dx от totalSupply до totalSupply + amount uint256 newSupply = totalSupply + amount; // ∫(INITIAL_PRICE + K*x^2)dx = INITIAL_PRICE*x + K*x^3/3 return _integral(newSupply) - _integral(totalSupply); } function _integral(uint256 x) internal pure returns (uint256) { return INITIAL_PRICE * x + K.mul(x.powu(3)) / 3; } function buy(uint256 minTokens) external payable { uint256 tokensToMint = _calculatePurchaseReturn(msg.value); require(tokensToMint >= minTokens, "Slippage exceeded"); reserveBalance += msg.value; totalSupply += tokensToMint; token.mint(msg.sender, tokensToMint); emit Buy(msg.sender, msg.value, tokensToMint); } function sell(uint256 tokenAmount, uint256 minEth) external { uint256 ethToReturn = _calculateSaleReturn(tokenAmount); require(ethToReturn >= minEth, "Slippage exceeded"); token.burnFrom(msg.sender, tokenAmount); totalSupply -= tokenAmount; reserveBalance -= ethToReturn; payable(msg.sender).transfer(ethToReturn); emit Sell(msg.sender, tokenAmount, ethToReturn); } } Slippage protection
Параметри minTokens / minEth — обов'язкові. Без них транзакція вразлива до sandwich атаки: бот бачить велику покупку в mempool, купує перед нею (підвищує ціну), продає після (отримує різницю).
Fee structure
Bonding curve заробляє через fee при buy/sell:
uint256 public buyFeeBps = 100; // 1% uint256 public sellFeeBps = 100; // 1% function buy(uint256 minTokens) external payable { uint256 fee = msg.value * buyFeeBps / 10000; uint256 netValue = msg.value - fee; protocolFees += fee; // ... расчёт tokenAmount на основе netValue } Pump.fun бере 1% з кожної транзакції + 0.5 SOL при graduation. Це генерує значний protocol revenue.
Навіщо потрібен graduation і як його реалізувати?
Graduation — момент, коли токен досягає target market cap і переходить з bonding curve на Uniswap/Raydium. Це ключовий момент: крива припиняє роботу, ліквідність мігрує в пул.
uint256 public constant GRADUATION_THRESHOLD = 69000 ether; // market cap в wei uint256 public constant GRADUATION_LIQUIDITY = 12000 ether; // резерв для DEX pool function _checkGraduation() internal { uint256 marketCap = totalSupply * currentPrice(); if (marketCap >= GRADUATION_THRESHOLD && !graduated) { graduated = true; _graduate(); } } function _graduate() internal { // 1. Создаём Uniswap v2 pair address pair = IUniswapV2Factory(UNISWAP_FACTORY).createPair( address(token), WETH ); // 2. Добавляем ликвидность из резерва uint256 ethForLiquidity = GRADUATION_LIQUIDITY; uint256 tokensForLiquidity = _calculateTokensForLiquidity(ethForLiquidity); token.mint(address(this), tokensForLiquidity); IUniswapV2Router(UNISWAP_ROUTER).addLiquidityETH{value: ethForLiquidity}( address(token), tokensForLiquidity, 0, 0, // min amounts (можно сделать строже) DEAD_ADDRESS, // LP токены сжигаем — ликвидность навсегда block.timestamp + 300 ); emit Graduated(pair, ethForLiquidity, tokensForLiquidity); } Важно: LP токени відправляються на 0xdead (burn). Це гарантує, що ліквідність не може бути вилучена. Без цього rug pull можливий в момент graduation.
Як захистити криву від снайперів?
Sniper боти моніторять mempool або події і купують в момент запуску з максимальним gas. Вони захоплюють велику частку раннього supply.
Кілька механік захисту:
- Cooldown між покупками — мінімальний інтервал між транзакціями одного адреса.
- Max buy per transaction — ліміт на одну транзакцію в перші N блоків.
- Launch delay з commit-reveal — адреса контракту не відома до моменту запуску (деплоїться через CREATE2 з salt, відомим тільки в момент launch).
| Метод захисту | Опис | Ефективність проти снайперів |
|---|---|---|
| Cooldown | Мінімальний інтервал між покупками одного адреса | Середня |
| Max buy per tx | Ліміт на суму першої покупки | Висока |
| Commit-reveal launch | Прихована адреса до запуску | Дуже висока |
Параметри кривої: практичні орієнтири
| Параметр | Значення для мем-токена | Значення для utility-токена |
|---|---|---|
| Initial price | 0.000001 ETH | 0.001 ETH |
| Graduation market cap | $50K–$100K | $500K–$2M |
| Buy fee | 1–2% | 0.3–1% |
| Sell fee | 1–2% | 0.3–1% |
| Curve shape | Exponential (n=2) | Linear або sigmoid |
| Max buy (launch) | 0.5–1 ETH | 5–10 ETH |
Що входить в роботу
Комплексна розробка bonding curve включає:
- Аналіз економіки токена та підбір параметрів кривої
- Розробка смарт-контракту на Solidity (Foundry/Hardhat) з урахуванням gas-оптимізацій
- Реалізація механіки graduation з міграцією на Uniswap v2/v3 або Raydium
- Налаштування захисту від снайперів та антибот-механік
- Аудит контракту за допомогою Slither, Mythril та Echidna (fuzzing)
- Документація API для інтеграції фронтенду
- Деплой та верифікація на Etherscan/Solscan
- Технічна підтримка після запуску (2 тижні)
Процес розробки
Ми дотримуємося поетапного підходу: аналітика → проектування → реалізація → тестування → деплой. Кожен етап завершується внутрішнім рев'ю та документуванням.
Bonding curve — це не просто smart contract, це механізм price discovery без orderbook. Правильно налаштована крива створює органічне зростання ціни, чесну винагороду ранніх учасників та плавний перехід на класичний AMM. Замовте розробку — ми підберемо оптимальні параметри під ваш проект.
Отримайте консультацію: зв'яжіться з нами, щоб обговорити ваш токен і отримати попередню оцінку. Ми допоможемо реалізувати надійний та ефективний контракт.







