Розробка системи fee distribution для протоколу

Розробка системи fee distribution для протоколу Уявіть: ваш DeFi-протокол генерує $100k комісій на день, але власники токена не отримують нічого. Uniswap V3 зіткнувся з цим до включення fee switch — governance перенаправив частину fees до treasury, знадобилася надійна система збору, акумуляції та

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1269
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    717
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1008

Розробка системи fee distribution для протоколу

Уявіть: ваш DeFi-протокол генерує $100k комісій на день, але власники токена не отримують нічого. Uniswap V3 зіткнувся з цим до включення fee switch — governance перенаправив частину fees до treasury, знадобилася надійна система збору, акумуляції та розподілу. Ми розробляємо такі системи під ключ з урахуванням gas optimization та безпеки. Synthetix StakingRewards — еталонний патерн, який ми адаптуємо під вашу архітектуру.

Два патерни розподілу: push vs pull

Чому pull distribution вигідніший за push?

Push distribution — розсилка всім. Контракт накопичує fees і періодично викликає distribute(), яка пробігає по списку стейкерів і переказує кожному частку. Просто в розумінні, складно в реалізації: unbounded loop — класичний gas griefing вектор. При 10 000 стейкерах транзакція перевищить block gas limit (потрібно ~3 млн газу замість типових 150 тис.).

Допустимо тільки для систем з явним cap на кількість учасників і batch обробкою (pagination). У більшості випадків — неправильний вибір. Pull distribution скорочує газові витрати на claim у 4 рази, що критично при масштабуванні до тисяч стейкерів.

Pull distribution — користувач сам забирає. Контракт веде rewardPerTokenStored — накопичений reward на одиницю стейку з моменту запуску. При кожному deposit/withdraw/claim оновлює userRewardPerTokenPaid для конкретного користувача. Винагорода = (rewardPerTokenStored - userRewardPerTokenPaid) * balance.

Це математика з Synthetix StakingRewards — одного з найбільш скопійованих патернів у DeFi. Ключова властивість: Gas-complexity O(1) для claim, не залежить від кількості стейкерів.

function earned(address account) public view returns (uint256) { return ( (balanceOf[account] * (rewardPerToken() - userRewardPerTokenPaid[account])) / 1e18 ) + rewards[account]; } 

Цей патерн ми використовуємо як базу для більшості fee distribution систем.

Характеристика Push distribution Pull distribution
Gas на claim ~200 000 + O(N) ~50 000 O(1)
Проблема при 10 000 стейкерах Перевищення limit Незначне зростання
Складність бага Висока (повтори, frontrun) Середня (математика)
Масштабованість Погана Відмінна

Збір fees та конвертація

Як конвертувати fees без втрат?

Протоколи генерують fees у різних токенах — swap fees у торгованих токенах, lending fees у debt-токенах. Перш ніж розподілити стейкерам, потрібно конвертувати в один target token (зазвичай protocol token або USDC).

FeeCollector контракт — агрегує fees з усіх source контрактів. Періодично викликається keeper (Chainlink Automation, Gelato) або будь-яким користувачем.

Конвертація через DEX — swap accumulated fees у target token через Uniswap V3. Важливо: конвертація великого обсягу за раз створює price impact і MEV-можливості. Рішення: конвертувати малими частинами через TWAP-орієнтовані свопи або використовувати Cow Protocol для MEV-захищених свопів. Це знижує прослизання на 20-30%.

Розподіл у кількох токенах — іноді правильніше не конвертувати, а розподіляти в оригінальних fee-токенах. Curve розподіляє 3CRV LP-токени (кошик стейблкоїнів) замість конвертації. Це дорожче в реалізації (multi-reward staking), але зберігає цінність без slippage.

Багатоканальний розподіл

Рідко весь fee йде тільки стейкерам. Типова схема:

Отримувач Частка Механізм
Стейкери токена 40-60% Pull-distribution, rewardPerToken
Treasury 20-30% Прямий переказ на multisig
Insurance fund 10-20% Накопичення для покриття bad debt
Burn 5-10% token.burn()

Пропорції задаються через governance-керовані параметри з timelock. FeeDistributor контракт читає актуальні пропорції при кожному виклику distribute().

veToken модель (vote-escrowed)

Curve ввела модель, де для отримання fees потрібно залочити CRV на термін до 4 років. Чим довший lock — тим більше veCRV, тим більша частка fees. Це вирівнює інтереси: довгострокові власники отримують більше. Реалізація складніша за базовий staking — потрібен decay розрахунок voting power, періодичні checkpoints, інтеграція з gauge voting.

Якщо потрібна veToken механіка — це окремий scope робіт поверх базового fee distribution.

Що входить у роботу

  • Аудит існуючої архітектури та вибір оптимального патерну (pull/push/hybrid).
  • Розробка смарт-контрактів: FeeCollector, FeeDistributor, Staking (з урахуванням reentrancy-захисту, перевірки на OpenZeppelin).
  • Інтеграція з DEX для конвертації (Uniswap V3, Cow Protocol).
  • Написання тестів (Foundry, fuzz, fork-тести) з покриттям edge cases.
  • Деплой та верифікація контрактів в Etherscan.
  • Документація для governance та аудиторів.
  • Підтримка після запуску (моніторинг, гарячі виправлення).

Гарантуємо відсутність reentrancy та frontrunning-вразливостей. Досвід команди: 7+ років у блокчейні, 50+ смарт-контрактів, 5 років на ринку. Зв'яжіться з нами для аудиту вашої архітектури — оцінимо проєкт за 1 день. Замовте розробку fee distribution системи — отримайте консультацію з архітектури.

Які ризики приховує push distribution?

Push distribution при великій кількості стейкерів може перевищити block gas limit, а також піддається frontrunning-атакам на момент виклику distribute(). Для великих протоколів pull distribution безпечніший.

Процес роботи та орієнтири за термінами

Проектування (2-3 дні). Визначаємо source контракти, target token, пропорції розподілу, keeper механізм для періодичної конвертації.

Розробка (5-8 днів). FeeCollector + FeeDistributor + Staking контракт. Тести з Foundry: коректність розрахунку earned() при зміні total supply, коректна обробка deposit/withdraw у тому ж блоці що distribute().

Інтеграційні тести. Fork-тест з реальним Uniswap V3 pool для перевірки конвертації fees. Fuzz-тести на математику розподілу — edge cases при дуже маленьких або дуже великих балансах.

Базова система (pull-distribution, один reward token, periodic collect) — 1 тиждень. З конвертацією через DEX і multi-reward — 1.5-2 тижні. veToken механіка — додаткові 2-3 тижні. Вартість розраховується індивідуально залежно від складності та необхідного аудиту.