Зауважимо: коли токен запускається через 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. Замовте розробку — ми підберемо оптимальні параметри під ваш проект.
Отримайте консультацію: зв'яжіться з нами, щоб обговорити ваш токен і отримати попередню оцінку. Ми допоможемо реалізувати надійний та ефективний контракт.







