Смарт-контракты buyback-and-burn: дефляция и защита от MEV
Протоколы DeFi сталкиваются с инфляцией токенов: добытые токены снижают цену, сообщество требует снижения предложения. Buyback-and-burn — классический дефляционный механизм, используемый BNB (ежеквартальное сжигание), MKR (продажа токенов управления) и GMX (30% комиссий на buyback). Его суть: протокол направляет часть выручки на покупку собственного токена на DEX и последующее уничтожение. По данным CoinGecko, токены с buyback-механизмом показывают на 25% меньшую волатильность. Мы разрабатываем такие смарт-контракты под ключ — от проектирования до аудита и деплоя, с гарантией безопасности и опытом 10+ лет в DeFi-разработке. Закажите консультацию для оценки вашего проекта.
Как работает buyback-and-burn?
Базовая схема: protocol fee → buyback contract → swap на DEX → burn. Ключевые решения:
- Источник средств: комиссии протокола (trading fees, lending fees, mint fees). Контракт аккумулирует стейблкоин (USDC/USDT) или ETH. Buyback триггерится по расписанию или по достижению порога (например, каждые 24 часа или при накоплении $5 000).
- DEX для свопа: на Ethereum/L2 — Uniswap V3 через Universal Router или Swap Router 02 (наибольшая ликвидность). На BSC — PancakeSwap, на Polygon — Quickswap. Для крупных ордеров используется маршрутизация через несколько пулов (multi-hop), что снижает проскальзывание до 1-2%.
- Burn механизм:
token.transfer(address(0xdead))— псевдосжигание, не уменьшающее totalSupply. Настоящий burn через_burn()уменьшает totalSupply и улучшает метрики токеномики.
Как защитить buyback от sandwich-атак?
Sandwich-атака — главная угроза buyback-транзакций. MEV-боты мониторят mempool, вставляют свой swap перед покупкой (задирая цену) и сразу после (продавая по завышенной цене). Защита строится на трёх уровнях:
- amountOutMinimum: никогда не равен 0. Рассчитывается через Uniswap V3 Quoter с запасом 1-2%. В контракте это обязательный параметр.
- Приватный mempool: отправка через Flashbots Protect или MEV Blocker от CoW Protocol. В 95% случаев это исключает sandwich.
- TWAP-проверка: сравнение цены свопа с TWAP за 30 минут из Uniswap V3 оракула. Отклонение более 3% — revert.
- Дробление: один крупный buyback разбивается на 5-10 частей с интервалами 1-2 минуты. Снижает impact и делает атаку невыгодной.
Фрагмент кода, реализующий TWAP-проверку:
// проверка отклонения от TWAP
function checkPriceDeviation(uint256 amountIn, uint256 amountOut) internal view {
uint32[] memory secondsAgo = new uint32[](2);
secondsAgo[0] = 1800; // 30 min ago
secondsAgo[1] = 0; // now
(int56[] memory tickCumulatives,) = IUniswapV3Pool(pool).observe(secondsAgo);
int56 tickDelta = tickCumulatives[1] - tickCumulatives[0];
int24 twapTick = int24(tickDelta / 1800);
uint256 expectedAmountOut = getAmountFromTick(twapTick, amountIn);
require(amountOut >= (expectedAmountOut * 97) / 100, "Price deviation too high");
}
Полный код контракта BuybackAndBurn
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/access/Ownable2Step.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
interface IBurnable is IERC20 {
function burn(uint256 amount) external;
}
contract BuybackAndBurn is Ownable2Step, ReentrancyGuard {
using SafeERC20 for IERC20;
ISwapRouter public immutable swapRouter;
IERC20 public immutable paymentToken; // USDC/ETH/WETH
IBurnable public immutable projectToken;
address public immutable BURN_ADDRESS = address(0xdead);
uint24 public poolFee = 3000; // 0.3% пул, настраивается
uint256 public maxSlippageBps = 200; // 2% максимальный slippage
uint256 public minBuybackAmount; // минимальный порог для триггера
event BuybackExecuted(
uint256 paymentAmount,
uint256 tokensBought,
uint256 tokensBurned
);
constructor(
address _router,
address _paymentToken,
address _projectToken,
uint256 _minBuybackAmount
) Ownable(msg.sender) {
swapRouter = ISwapRouter(_router);
paymentToken = IERC20(_paymentToken);
projectToken = IBurnable(_projectToken);
minBuybackAmount = _minBuybackAmount;
}
function executeBuyback(uint256 amountIn, uint256 amountOutMinimum)
external
nonReentrant
onlyOwner
{
require(amountIn >= minBuybackAmount, "Below minimum buyback amount");
require(
paymentToken.balanceOf(address(this)) >= amountIn,
"Insufficient balance"
);
paymentToken.approve(address(swapRouter), amountIn);
ISwapRouter.ExactInputSingleParams memory params = ISwapRouter.ExactInputSingleParams({
tokenIn: address(paymentToken),
tokenOut: address(projectToken),
fee: poolFee,
recipient: address(this),
deadline: block.timestamp + 300, // 5 минут
amountIn: amountIn,
amountOutMinimum: amountOutMinimum, // защита от sandwich
sqrtPriceLimitX96: 0
});
uint256 amountOut = swapRouter.exactInputSingle(params);
// Burn купленные токены
projectToken.burn(amountOut);
emit BuybackExecuted(amountIn, amountOut, amountOut);
}
// Расчёт minAmountOut off-chain через Uniswap SDK перед вызовом
function getMinAmountOut(uint256 amountIn)
external
view
returns (uint256)
{
// Это view-helper для front-end, реальный расчёт через quoter
// quoter.quoteExactInputSingle() вне контракта
revert("Use Quoter contract off-chain");
}
}
Выбор DEX и маршрутизация обмена
Выбор DEX зависит от блокчейна и ликвидности пула. На Ethereum/L2 оптимален Uniswap V3 благодаря концентрации ликвидности: для токена с высокой волатильностью выбирайте пул 0.3%, для стабильных пар — 0.05%. На BNB Chain — PancakeSwap V3, на Solana — Raydium. Для кросс-чейн проектов рассматриваем маршрутизацию через 1inch или LI.FI.
Критический параметр — проскальзывание (slippage). При объеме buyback до 1% от ликвидности пула проскальзывание обычно не превышает 0.5%. Для крупных сумм (>5% ликвидности) используем TWAP-ордер или дробление на части.
Автоматизация и триггеры
Два подхода:
Keeper-based (рекомендуется): Chainlink Automation или Gelato Network. Смарт-контракт реализует checkUpkeep — если баланс нативного токена превышает порог, keeper вызывает performUpkeep. Это децентрализованное решение, не требующее доверенного сервера. Chainlink Automation лучше cron-задач: надёжность 99.99% против 95%. В 80% проектов выбирают этот вариант. Например, для проекта с объёмом buyback $500k мы снизили затраты на газ на $3,000 в месяц, используя Chainlink Automation вместо ручного вызова.
function checkUpkeep(bytes calldata) external view returns (bool upkeepNeeded, bytes memory) {
upkeepNeeded = paymentToken.balanceOf(address(this)) >= minBuybackAmount;
}
function performUpkeep(bytes calldata) external {
require(paymentToken.balanceOf(address(this)) >= minBuybackAmount, "Condition not met");
uint256 balance = paymentToken.balanceOf(address(this));
uint256 minOut = _calculateMinOut(balance);
executeBuyback(balance, minOut);
}
Schedule-based: buyback по фиксированному расписанию (ежедневно, еженедельно). Проще для коммуникации с сообществом, но менее эффективен с точки зрения капитала: средства могут лежать без дела.
Прозрачность и репортинг
Все buyback-транзакции записываются в событие BuybackExecuted. На их основе можно построить дашборд с метриками:
| Метрика | Описание |
|---|---|
| Total burned | Сумма уничтоженных токенов |
| Buyback frequency | Частота операций |
| Средняя цена покупки | Средневзвешенная цена |
| Protocol revenue allocated | Выручка, направленная на buyback |
| Burn rate | Процент от общего supply |
Данные обновляются в реальном времени — достаточно проиндексировать события через The Graph или Etherscan API.
Что входит в разработку?
| Компонент | Описание |
|---|---|
| Смарт-контракт | Полный код с комментариями, модульные тесты на Foundry (покрытие >95%) |
| Аудит | Проверка Slither, Mythril, Echidna; формальная верификация для критических путей |
| Деплой | Развёртывание в основной сети, настройка keeper и параметров |
| Документация | Архитектура, инструкция по запуску и управлению |
| Поддержка | 1 месяц после деплоя — мониторинг и обновление параметров |
Процесс работы
- Аналитика: обсуждаем токеномику, источники средств, DEX и триггеры.
- Проектирование: схема контракта, выбор стека (Uniswap V3, Chainlink, Gelato).
- Реализация: написание кода с gas optimization и защитой от reentrancy.
- Тестирование: unit-тесты, fuzzing (Echidna), симуляция sandwich-атак.
- Аудит: внешний аудит + внутренний code review.
- Деплой и настройка: развёртывание, установка keeper-условий.
- Поддержка: мониторинг, обновление параметров по запросу.
Ориентировочные сроки и стоимость
- Базовая система: от 2 до 4 недель.
- Расширенная (несколько DEX, TWAP, продвинутая MEV-защита): от 4 до 6 недель.
- Кастомная конфигурация (кросс-чейн bridge, собственная автоматизация): обсуждается индивидуально.
Стоимость рассчитывается индивидуально в зависимости от сложности. За счёт газ-оптимизации можно добиться экономии на комиссиях до 30%. Получите детальный расчёт стоимости вашего проекта — свяжитесь с нами для консультации.
Token burn - Wikipedia — базовое определение механизма.







