Розробка системи fair price discovery для нових токенів
Ми вирішуємо одну з найскладніших задач при запуску токена — чесне визначення початкової ціни. Класичні механізми — фіксована ціна на IDO або лістинг через CEX — системно несправедливі: інсайдери знають ціну заздалегідь, боти скуповують перші блоки, роздрібні покупці входять у хайп. Результат передбачуваний: різкий pump на старті, дамп через кілька годин, спільнота зі збитками. У практиці ми бачили проєкти, де ціна падала на 80% за 24 години після лістингу, знищуючи довіру та капітал.
Fair price discovery — це не просто «чесна ціна», а механізм, при якому вартість формується агрегованим ринковим сигналом, а не позицією команди або великих учасників. Реалізацій кілька, і вибір залежить від специфіки проєкту. Ми розробили десятки таких систем для DeFi проєктів, гарантуючи прозорість і стійкість до маніпуляцій. Замовте оцінку вашого проєкту — підберемо оптимальний спосіб. Розробка під ключ займає від 2 до 8 тижнів.
Як вибрати механізм fair price discovery?
Порівняння підходів
| Механізм | Принцип | Захист від MEV | Складність | Підходить для |
|---|---|---|---|---|
| Dutch Auction | Ціна знижується з часом | Низька (rush в кінці) | Середня | Разові IDO |
| LBP (Balancer) | Ваги пулу змінюються | Висока (кити не впливають) | Середня | DeFi launch |
| TWAMM | Великі заявки дробляться | Висока (немає єдиного моменту) | Висока | Поступове розміщення |
| VRGDA | Ціна залежить від попиту | Середня | Висока | Continuous emission |
| Bonding curve + commit-reveal | Попит прихований до розкриття | Дуже висока | Висока | Чутливі токени |
Dutch Auction (низхідний аукціон)
Вартість починається високою і лінійно (або експоненційно) знижується доти, доки не набереться достатній попит. Учасники бачать поточну ціну і вирішують: купувати зараз або чекати зниження. Рівноважна ціна — та, при якій весь обсяг розміщення розкуповується.
Реалізація в Solidity:
contract DutchAuction {
uint256 public immutable startPrice;
uint256 public immutable endPrice;
uint256 public immutable startTime;
uint256 public immutable duration;
uint256 public immutable totalTokens;
uint256 public tokensSold;
function currentPrice() public view returns (uint256) {
if (block.timestamp >= startTime + duration) return endPrice;
uint256 elapsed = block.timestamp - startTime;
uint256 priceDrop = (startPrice - endPrice) * elapsed / duration;
return startPrice - priceDrop;
}
function buy(uint256 tokenAmount) external payable {
uint256 price = currentPrice();
uint256 cost = price * tokenAmount / 1e18;
require(msg.value >= cost, "Insufficient ETH");
require(tokensSold + tokenAmount <= totalTokens, "Sold out");
tokensSold += tokenAmount;
// transfer tokens + refund excess
}
}
Переваги: ціноутворення визначається ринком, немає фіксованої алокації. Недоліки: стратегія «зачекати до останнього моменту» створює rush в кінці аукціону — всі чекають мінімальної ціни, потім одночасно купують. Це MEV-рай. Gnosis використовував Dutch Auction для розміщення GNO. Результат був змішаним: механіка працювала, але газові війни в останні блоки нівелювали частину переваг для роздрібних учасників.
Liquidity Bootstrapping Pool (LBP)
Механізм Balancer: пул зі змінними вагами. Стартує з перевагою токена проєкту (наприклад, 96/4 TOKEN/USDC), поступово переходить до рівноважного розподілу (50/50). Початкова висока ціна знижується в міру продажів та зміни ваг.
Ключова відмінність від Dutch Auction: вартість реагує на реальний попит у реальному часі. Немає визначеної кривої зниження — є AMM, який коригується під покупки та продажі.
// Параметри LBP в Balancer v2
const poolParams = {
tokens: [projectToken, USDC],
startWeights: [0.96, 0.04], // 96% TOKEN, 4% USDC на початку
endWeights: [0.50, 0.50], // 50/50 в кінці
swapFeePercentage: ethers.utils.parseEther("0.01"), // 1%
duration: 3 * 24 * 60 * 60, // 72 години
};
Чому це чесніше: великий кит не може скупити все в першому блоці — високий початковий вес токена піднімає ціну експоненційно при великих покупках. Боти без інформаційної переваги не можуть передбачити, де буде рівновага. LBP у 5 разів стійкіший до маніпуляцій китів, ніж Dutch Auction. Проєкти, що використовували LBP: Gitcoin, Radicle, numerous DeFi launches через Copper. Це де-факто стандарт для DeFi token launch на Ethereum. Balancer Protocol надає відкритий код для LBP на GitHub.
Як захистити Dutch Auction від MEV?
MEV на фінальних блоках Dutch Auction — критична проблема. Рішення: випадковий deadline через Chainlink VRF, або continuous Dutch Auction без фіксованого кінця. У наших реалізаціях ми також використовуємо Flashbots Protect RPC для приватного виконання транзакцій, що знижує витрати на газ на 30-50% для учасників. Середній обсяг ліквідності, що бере участь у Dutch Auction наших проєктів, становить $200k-$500k.
TWAMM (Time-Weighted Average Market Maker)
Концептуально інший підхід: великі заявки виконуються невеликими шматками протягом тривалого періоду (години, дні). Жодного єдиного моменту «лістингу» — ціна формується поступово через безперервну торгівлю. FraxSwap реалізував TWAMM on-chain. Для fair launch це означає: замість «лістинг у п'ятницю о 14:00 UTC», є «розміщення триває з понеділка по п'ятницю, кожен блок невеликий обсяг». Боти втрачають перевагу — немає одного моменту атаки.
Bonding Curve з commit-reveal
Ще один спосіб: bonding curve з фазою commit-reveal для боротьби з frontrunning. Учасники у фазі commit відправляють keccak256(amount + salt) без розкриття суми. Після закінчення commit-фази — reveal: всі розкривають свої заявки, фінальна ціна визначається за кривою з урахуванням повного попиту.
// Фаза commit
mapping(address => bytes32) public commitments;
function commit(bytes32 commitment) external payable {
require(block.timestamp < commitDeadline, "Commit phase ended");
commitments[msg.sender] = commitment;
// ETH депозит — максимально можлива сума
}
// Фаза reveal
function reveal(uint256 amount, bytes32 salt) external {
require(block.timestamp >= revealStart, "Reveal not started");
bytes32 expected = keccak256(abi.encodePacked(amount, salt, msg.sender));
require(commitments[msg.sender] == expected, "Invalid reveal");
// записуємо реальний попит для розрахунку фінальної ціни
}
Захист від специфічних атак
Sybil-атаки
Один учасник створює тисячі адрес, щоб здаватися «широкою базою» та отримати непропорційну частку. Рішення:
- Proof of Humanity / Worldcoin: верифікація унікальності особи. Складно інтегрувати в контракт, але можливо через Merkle-докази.
- Quadratic funding weighting: алокація пропорційна квадратному кореню від суми, а не сумі. Sybil втрачає сенс: 100 адрес по $1 дають $10 «ваги», одна адреса на $100 — $10 «ваги». Рівнозначно для чесних, збитково для Sybil.
- Snapshot + whitelist: використовувати off-chain критерії (on-chain activity, NFT ownership) для формування whitelist через Merkle tree.
Whale manipulation
Кит вносить величезний обсяг в останній момент аукціону, зсуваючи ціну. Захист:
- Max allocation per address: обмеження частки на одну адресу. Не вирішує Sybil, але обмежує явний whale impact.
- Gradual price adjustment: LBP механічно стійкий до цього — експоненційне зростання ціни при великих покупках.
- Time-locked participation: учасники повинні зареєструватися за N днів до аукціону. Знижує можливість останнього моменту.
Як впровадити Dutch Auction: покрокова інструкція
- Визначте параметри: стартова та кінцева ціна, тривалість (зазвичай 24-72 години), загальний обсяг токенів.
- Розгорніть смарт-контракт за шаблоном вище, додавши захист від reentrancy та перевірку на
totalTokens. - Налаштуйте фронтенд з реальним відображенням
currentPrice()через wagmi + viem. - Інтегруйте захист від MEV: підключіть Flashbots RPC та опціонально Chainlink VRF для випадкового кінця.
- Проведіть тестування на форку мейннету (наприклад, Tenderly Fork) з обсягом у 10-20% від очікуваного.
- Запустіть аудит смарт-контрактів — обов'язковий для кастомних реалізацій; LBP на Balancer успадковує аудит Balancer.
- Після аукціону автоматично додайте ліквідність в DEX (Uniswap v3 або Balancer) через скрипти.
VRGDA (Variable Rate Gradual Dutch Auction)
Механізм, розроблений командою Art Gobblers. Ціна регулюється залежно від відхилення реальних продажів від запланованого графіка. Якщо токени продаються швидше плану — вартість зростає, повільніше — падає.
function getVRGDAPrice(
int256 timeSinceStart, // в секундах, signed
uint256 sold // вже продано токенів
) public view returns (uint256) {
return targetPrice.mulWadUp(
decayConstant.mulWadUp(timeSinceStart - getTargetSaleTime(sold + 1)).expWad()
);
}
VRGDA підходить для continuous emission (NFT серії, governance токени з ongoing distribution), менш застосовний для разового IDO.
Що входить у роботу
При замовленні розробки системи fair price discovery ви отримуєте:
- Аналіз токеноміки та підбір механізму
- Написання смарт-контрактів з урахуванням gas optimization та security best practices
- Інтеграція з фронтендом (wagmi + viem) та DEX (Uniswap v3, Balancer)
- Налаштування захисту від MEV та Sybil
- Тестування на форку мейннету
- Зовнішній аудит контрактів сертифікованими аудиторами
- Автоматичне seed ліквідності після аукціону
- Документація та технічна підтримка на етапі запуску
Стек та процес розробки
| Компонент | Технологія |
|---|---|
| LBP контракт | Balancer v2 SDK + кастомні параметри |
| Dutch Auction | Solidity + Foundry |
| Batch settlement | Gnosis Auction fork або кастомний |
| Price oracle | Chainlink + Uniswap v3 TWAP |
| Frontend | wagmi + viem + React, реальний час ціни через WebSocket |
| MEV захист | Flashbots Protect RPC |
Фаза 1 (1-2 тижні): вибір механізму під конкретний токеномікс, аудит параметрів (starting price, duration, min/max allocation), юридичний аналіз (не всі механізми регуляторно нейтральні у всіх юрисдикціях).
Фаза 2 (3-4 тижні): розробка контрактів, інтеграція з Balancer або кастомний auction контракт, тестування на fork mainnet.
Фаза 3 (1-2 тижні): frontend для участі, моніторинг, скрипти для post-auction ліквідності.
Фаза 4: зовнішній аудит контрактів — обов'язковий, особливо для кастомних механізмів. LBP на Balancer успадковує аудит Balancer, кастомні реалізації — ні.
Чесний price discovery безпосередньо впливає на довіру спільноти до проєкту. Технічно це вирішувано, і вибір правильного механізму під конкретний проєкт важливіший, ніж ідеальна реалізація непідходящого. Пишіть нам для безкоштовної консультації — ми допоможемо розробити безпечний і прозорий токенсейл під ключ за 4-6 тижнів. Вартість починається від $5,000. Оцінимо ваш проєкт безкоштовно.







