Розподіл прибутку криптофонду: HWM, performance fee, LP

Відзначимо: коли криптофонд фіксує прибуток і потрібно розподілити його між десятками LP з різними датами входу, частковими виходами та накопиченим performance fee, простий пропорційний розрахунок призводить до несправедливості та дір у математиці. Наприклад, фонд із трьома LP, які зайшли в різні дн

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

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

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

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

Відзначимо: коли криптофонд фіксує прибуток і потрібно розподілити його між десятками LP з різними датами входу, частковими виходами та накопиченим performance fee, простий пропорційний розрахунок призводить до несправедливості та дір у математиці. Наприклад, фонд із трьома LP, які зайшли в різні дні, при квартальній виплаті без урахування часу внеску дасть одним LP незаслужені доходи, а іншим — втрати. Ми проектуємо та реалізуємо систему розподілу прибутку криптофонду, яка математично точна, аудитована та захищена від маніпуляцій. Під ключ — від вибору моделі до деплою з документацією та підтримкою. Наша компанія має 5+ років досвіду в блокчейн-розробці, реалізувала 30+ успішних проектів для криптофондів та DeFi-протоколів. Середня економія на комісіях мережі для фонду з 500 LP оцінюється в $3000–$5000 на місяць. В одному з проектів з нашого портфоліо така оптимізація дозволила клієнту заощадити понад $3500 щомісяця. Оцінимо ваш проект за 1–2 дні, зв'яжіться з нами.

Завдання системи розподілу прибутку

Система зобов'язана справедливо враховувати час внеску кожного LP, коректно нараховувати performance fee лише на новий прибуток і підтримувати масштабування до тисяч учасників. Без продуманої архітектури виникають проблеми: reentrancy при виплатах, no-loss of precision і вразливості до flash loan атак через маніпуляцію оракулами. Наше рішення використовує перевірені патерни з DeFi — EIP-4626 vaults та Synthetix staking rewards — і доповнює їх інваріантним тестуванням на Foundry.

Як вибрати модель обліку часток?

Перш ніж писати контракти, обираємо фундаментальну модель обліку часток. Два основні підходи.

Share-based (токенізовані частки)

LP отримують ERC-20 shares при вході. Прибуток відображається через зростання NAV per share — один share коштує більше, але кількість shares не змінюється. Розподіл прибутку означає або зростання вартості shares (capital appreciation), або виплату дивідендів із зменшенням NAV per share. «EIP-4626 defines a standard for tokenized vaults that simplifies integration with DeFi protocols» — стандарт спрощує інтеграцію з DeFi, але створює складнощі при часткових виходах та interim distributions.

Point-based (накопичувальні бали)

Кожен LP накопичує «бали» пропорційно часу та сумі депозиту. Прибуток ділиться пропорційно балам. Цей підхід підходить для yield-фондів з регулярними виплатами. Патерн «Rewards per token» — перевірений спосіб ефективно рахувати накопичені rewards без ітерації по всіх LP. Point-based модель використовує в 1.5 рази менше газу на вхід/вихід, ніж share-based, але поступається в прозорості.

contract ProfitDistributor { uint256 public rewardPerShareStored; uint256 public lastUpdateTime; uint256 public totalShares; mapping(address => uint256) public rewardPerSharePaid; mapping(address => uint256) public pendingRewards; mapping(address => uint256) public shares; modifier updateReward(address account) { rewardPerShareStored = rewardPerShare(); lastUpdateTime = block.timestamp; if (account != address(0)) { pendingRewards[account] = earned(account); rewardPerSharePaid[account] = rewardPerShareStored; } _; } function earned(address account) public view returns (uint256) { return shares[account] * (rewardPerShare() - rewardPerSharePaid[account]) / 1e18 + pendingRewards[account]; } } 
Характеристика Share-based Point-based
Прозорість Висока (вартість shares видна) Середня (бали розраховуються off-chain)
Газ на вхід/вихід ~80k (ERC-20 transfer) ~50k (оновлення mapping)
Підтримка часткового виходу Складно (доводиться спалювати shares) Просто (зменшення балів)
Аудит смарт-контракту Простіше (стандарт EIP-4626) Складніше (розрахунки балів)

Чому прості системи ламаються на складних кейсах?

Входи та виходи в середині періоду

Якщо LP зайшов у середині кварталу, він не повинен отримувати прибуток за період до його входу. І навпаки — при виході в середині періоду він повинен отримати свою частку нарахованого, але ще не розподіленого. Рішення: snapshot-based distribution. При кожній зміні стану фіксуємо checkpoint з поточним rewardPerShare. При розрахунку використовуємо різницю між поточним та checkpoint-значенням.

function _updateCheckpoint(address lp) internal { uint256 currentRPS = rewardPerShareStored; uint256 lpShares = shares[lp]; uint256 lastRPS = checkpoints[lp].rewardPerShare; if (lpShares > 0 && currentRPS > lastRPS) { uint256 accrued = lpShares * (currentRPS - lastRPS) / PRECISION; checkpoints[lp].pendingReward += accrued; } checkpoints[lp].rewardPerShare = currentRPS; } 

Performance fee з High Water Mark

Performance fee (зазвичай 20%) повинен братися лише з нового прибутку — вище попереднього HWM. Це захист LP від подвійного fee після просідання та відновлення. Вибір між Global HWM та Per-LP HWM: перший простіший, другий справедливіший, але дорожчий по газу. Якщо у фонді більше 50 LP, різниця в газі може перевищити 30%. Для фондів з капіталом від $5 млн економія від Per-LP HWM може скласти до $2000 на місяць за рахунок справедливого обліку.

mapping(address => uint256) public lpHighWaterMark; function calculatePerformanceFee(address lp, uint256 currentNAVPerShare) public view returns (uint256 feeAmount) { uint256 hwm = lpHighWaterMark[lp]; if (currentNAVPerShare <= hwm) return 0; uint256 profitPerShare = currentNAVPerShare - hwm; uint256 lpShareBalance = shares[lp]; feeAmount = profitPerShare * lpShareBalance * performanceFeeRate / (PRECISION * 10000); } 

Hurdle rate

Деякі фонди беруть performance fee лише якщо доходність перевищила benchmark (наприклад, 8% річних). Реалізується як додатковий поріг поверх HWM.

Захист від oracle manipulation при розрахунку performance fee

Використовуємо TWAP замість spot prices, вводимо cooldown між оновленням NAV та settleFee. Це запобігає flash loan атакам, коли зловмисник тимчасово спотворює ціну для нарахування fee. Додатково — multi-sig для операцій менеджера.

Методи організації виплат

Метод Газ на одну виплату Підходить для Ризики
Реінвестування Низький Будь-який масштаб Немає
Pull pattern (claim) ~50k gas До 1000 LP LP повинен клеймити сам
Merkle drop O(log N) ~60k Тисячі LP (в 10 разів дешевше push pattern) Потрібен off-chain розрахунок
Push pattern O(N) ~100k+ До ~50 LP Може впасти на контракті-отримувачі

Merkle distribution — оптимальний вибір для тисяч LP: менеджер обчислює виплати off-chain, будує Merkle tree, публікує root on-chain. Кожен LP клеймить свою виплату з proof, газ не залежить від кількості отримувачів. Uniswap використовує цей патерн для UNI-дистрибуції.

bytes32 public merkleRoot; function claimMerkle( uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof ) external { require(!isClaimed(index), "Already claimed"); bytes32 node = keccak256(abi.encodePacked(index, account, amount)); require(MerkleProof.verify(merkleProof, merkleRoot, node), "Invalid proof"); _setClaimed(index); IERC20(rewardToken).safeTransfer(account, amount); emit Claimed(index, account, amount); } 

Безпека та аудит: захист від маніпуляцій

Ключові вразливості:

  • Reentrancy при виплатах — обнуляємо pendingRewards до transfer.
  • Precision loss — використовуємо fixed-point арифметику з масштабом 1e18, округлення вниз.
  • Oracle manipulation — TWAP та cooldown між NAV update та fee settlement.
  • Centralization менеджера — timelock 24–48h та multi-sig для операції settleFee.

Деталі gas optimization: Використовуємо storage packing, зменшуємо число SSTORE, застосовуємо unchecked для overflow-safe операцій. Це знижує газ на 30–40% порівняно з наївною реалізацією. В одному з наших проектів з 500 LP економія склала значну суму на комісіях. Ми гарантуємо аудитованість контрактів: наша команда має досвід у смарт-контрактах на Solidity, Rust (Solana), Vyper. Кожен смарт-контракт проходить формальну верифікацію та інваріантне тестування на Foundry. Більше 30 успішних проектів: фонди, DEX, NFT-маркетплейси. Економія газу за рахунок оптимізації досягає 40% порівняно з наївними реалізаціями.

Що ви отримуєте: етапи та deliverables

  1. Проектування (3–5 днів): вибір моделі, структури fee, HWM per-LP vs global, механізму виплат. Формалізація інваріантів. Документація схеми.
  2. Розробка контрактів (7–10 днів): vault, distributor, fee module. Юніт-тести, fuzz-тести, інваріантні тести. Вихідний код + розгорнута документація.
  3. Off-chain компоненти (3–5 днів): NAV calculator, Merkle tree builder, скрипти клейму. Інтеграційні тести.
  4. Аудит (1–2 тижні): зовнішній аудит обов'язковий для систем, що керують чужими грошима. Звіт з рекомендаціями. Вартість зовнішнього аудиту варіюється від $10 000 до $25 000 залежно від складності — ми допомагаємо з вибором підрядника.
  5. Деплой та моніторинг (2–3 дні): graduated rollout, моніторинг інваріантів у реальному часі. Доступ до дашборду.

Після деплою передаємо повну технічну документацію, конфігурації та навчання команди. Підтримка на 30 днів. Гарантія на вразливості — 6 місяців. Отримайте консультацію — зв'яжіться з нами, оцінимо проект безкоштовно та вчасно. Замовте розробку системи розподілу прибутку для вашого криптофонду вже сьогодні.

Додатково: при фонді з капіталом $10 млн та 1000 LP економія на комісіях за рахунок оптимізації газу складе близько $4 000 на місяць.