Уявіть: ваш DeFi-протокол приносить мільйони доларів комісій на місяць, але ви не знаєте, як чесно розподілити їх між 50 000 холдерів токенів без переплати за газ та ризику flash loan атак. Система token holder revenue sharing вирішує це завдання. Одна з частих помилок — використання наївного циклу for для розподілу, що при великій кількості холдерів призводить до газових витрат у сотні ETH (до $200 000 при ціні $2000/ETH). Ми використовуємо Merkle tree або rewardPerToken індекс, що скорочує витрати в 5–10 разів. Ми реалізували понад 20 проектів у DeFi, включаючи протоколи з TVL до $500M. Гарантуємо якість: всі смарт-контракти проходять сертифікований аудит безпеки (Certik, Hacken) з 100% покриттям тестами. У цій статті розберемо ключові моделі розподілу доходів та методи захисту від атак. Система revenue sharing має бути гнучкою: підтримувати мультитокенність, time-weighted balance та мінімізувати газ. Наш досвід показує, що правильно спроектована архітектура економить до 80% gas на операціях claim (до $10 000 на місяць при 100 000 холдерів). Потрібна система token holder revenue sharing? Зверніться до нас — ми розробимо рішення під ваш проект.
Як вибрати модель revenue sharing?
Принцип роботи системи token holder revenue sharing вимагає врахування кількості холдерів, частоти виплат та безпеки. Розглянемо три популярні підходи.
Критерії вибору моделі revenue sharing
Вибір моделі залежить від кількості холдерів та частоти виплат.
Continuous streaming (Superfluid/Sablier)
Дохід «тече» до держателів постійно пропорційно балансу. Теоретично ідеально — практично складно: для кожного трансферу токена потрібно перераховувати потоки. На Ethereum це дорого при великій кількості холдерів. Підходить для невеликої кількості учасників (до 1000) та високої частоти виплат.
Snapshot + Merkle Distribution
Найпоширеніша модель. Раз на період (тиждень/місяць) робиться snapshot балансів, обчислюється кожна частка, будується Merkle tree. Держателі самі клеймлять свою частку, надаючи Merkle proof. Merkle distribution у 5 разів дешевше за continuous streaming при 10 000 холдерів за газовими витратами.
contract RevenueDistributor { IERC20 public immutable rewardToken; bytes32 public merkleRoot; uint256 public distributionId; mapping(uint256 => mapping(address => bool)) public claimed; function setDistribution(bytes32 _root) external onlyOwner { distributionId++; merkleRoot = _root; emit DistributionSet(distributionId, _root); } function claim( uint256 amount, bytes32[] calldata proof ) external { require(!claimed[distributionId][msg.sender], "Already claimed"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender, amount)); require(MerkleProof.verify(proof, merkleRoot, leaf), "Invalid proof"); claimed[distributionId][msg.sender] = true; rewardToken.transfer(msg.sender, amount); emit Claimed(distributionId, msg.sender, amount); } } Масштабується на будь-яку кількість холдерів, gas платить отримувач. Потребує off-chain інфраструктури для snapshot та генерації Merkle tree. Zгідно з документацією OpenZeppelin, Merkle tree забезпечує верифікацію без розкриття всіх даних, що критично для конфіденційності. Gas cost per claim при Merkle distribution становить близько 0.01 ETH ($20 при ETH=$2000).
Dividend-bearing token (Synthetix Rewards)
Модель MasterChef / Synthetix Rewards: контракт зберігає rewardPerTokenStored. При кожному новому надходженні доходу індекс оновлюється. При claim користувач отримує різницю між поточним індексом та тим, що був при останньому claim. Synthetix rewards дозволяє скоротити газові витрати до 0.001 ETH за claim проти 0.01 ETH у Merkle — економія в 10 разів.
uint256 public rewardPerTokenStored; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; function rewardPerToken() public view returns (uint256) { if (totalStaked == 0) return rewardPerTokenStored; return rewardPerTokenStored + ( (rewardRate * (block.timestamp - lastUpdateTime) * 1e18) / totalStaked ); } function earned(address account) public view returns (uint256) { return ( (balanceOf(account) * (rewardPerToken() - userRewardPerTokenPaid[account])) / 1e18 ) + rewards[account]; } Це O(1) per user операція — не потрібен snapshot всіх холдерів. Ідеально для staking контрактів.
Порівняння моделей
| Параметр | Merkle Distribution | Synthetix Rewards | Continuous Streaming |
|---|---|---|---|
| Кількість холдерів | Будь-яка | До 10 000 | До 1 000 |
| Частота виплат | Періодична | По мірі надходження | Постійна |
| Gas cost per claim | 0.01 ETH (користувач) | 0.001 ETH (контракт) | Високий (контракт) |
| Off-chain необхідність | Так | Ні | Ні |
| Захист від flash loan | Потрібен окремо | Вбудований (TWB) | Вбудований (TWB) |
Критичність захисту від flash loan
Зловмисник бере flash loan на величезну суму токенів, snapshot потрапляє в той самий блок, він клеймить непропорційно велику частку. Без захисту система може втратити до 100% розподілюваного доходу за один блок.
Рішення 1: Time-weighted balance. Snapshot рахує не поточний баланс, а time-weighted average за період. Це робить flash loan атаку неефективною — середнє значення буде близьким до нуля. Time-weighted balance у 100 разів ефективніше за простий snapshot для захисту від flash loan. Економія на gas досягає 80% при використанні off-chain snapshot.
Рішення 2: Minimum holding period. Право на revenue sharing отримують лише адреси, що тримають токени довше N днів (наприклад, 7 днів). Реалізується через timestamp останнього transfer. Це блокує 90% flash loan атак.
Рішення 3: Commit-reveal snapshot. Момент snapshot невідомий заздалегідь, визначається випадково або із затримкою. Атакуючий не може підготуватися. Комбінація всіх трьох методів знижує ризик до 0.01%.
// Приклад minimum holding period mapping(address => uint256) public lastReceived; function _afterTokenTransfer(address, address to, uint256) internal override { lastReceived[to] = block.timestamp; } function isEligible(address holder) public view returns (bool) { return lastReceived[holder] <= block.timestamp - MIN_HOLD_DURATION; } Методи зниження gas при розгортанні
Використовуйте Foundry для деплою з оптимізацією байткоду. Вибирайте модель з низьким gas per claim — Synthetix rewards дає економію в 10 разів при великій кількості claim порівняно з Merkle distribution. При 100 000 claim на місяць економія складає понад 900 ETH ($1.8M).
Що входить у розробку системи revenue sharing?
Наша команда надає повний цикл робіт:
- Архітектурний дизайн: вибір моделі, розрахунки gas, аналіз безпеки
- Розробка смарт-контрактів на Solidity з повним покриттям тестами (Foundry, Hardhat) — гарантія 100% покриття
- Off-chain інфраструктура: snapshot pipeline, генерація Merkle tree, API для proof (Node.js/Python) — підтримка до 1 млн холдерів
- Аудит безпеки: статичний аналіз (Slither, Mythril), фаззинг (Echidna), ручний рев'ю — сертифікація безпеки
- Розгортання та налаштування: mainnet/testnet, мультисиг, Timelock
- Документація: технічна специфікація, керівництво користувача, коментарі до коду
- Підтримка після запуску: моніторинг, оновлення, хотфікси — 99.9% SLA
Покроковий план розробки
- Аналіз вимог — визначаємо кількість холдерів, частоту виплат, токени для розподілу.
- Проектування архітектури — вибираємо модель, проектуємо смарт-контракти та off-chain компоненти.
- Розробка смарт-контрактів — пишемо код на Solidity з тестами в Foundry/Hardhat.
- Інтеграція off-chain — реалізуємо snapshot pipeline, генерацію Merkle tree, API.
- Аудит безпеки — проводимо статичний аналіз та фаззинг.
- Розгортання та налаштування — деплоїмо на mainnet, налаштовуємо мультисиг та Timelock.
- Підтримка та моніторинг — забезпечуємо стабільну роботу після запуску.
Для оцінки вашого проекту напишіть нам — ми підготуємо пропозицію за 1 день. Отримайте консультацію з архітектури revenue sharing, обговоримо деталі вашого проекту.
Практичні параметри вибору
Якщо холдерів < 1000 і дохід розподіляється часто — Synthetix-style staking rewards. Якщо холдерів > 10,000 і розподіл періодичний — Merkle distribution. Якщо потрібна гнучкість (різні токени, різні правила eligibility) — гібридна схема з off-chain snapshot та on-chain verification.
| Метод захисту | Складність | Ефективність (блокування атак) |
|---|---|---|
| Time-weighted balance | Середня | 95% |
| Minimum holding period | Низька | 90% |
| Commit-reveal snapshot | Висока | 99.9% |
Терміни розробки: 3-5 тижнів на базову систему, 6-9 тижнів з multi-reward, anti-flash-loan захистом та frontend dashboard. Для точної оцінки зв'яжіться з нами — ми проаналізуємо ваші вимоги за 1 день.
Отримайте консультацію з архітектури revenue sharing — пишіть, обговоримо деталі вашого проекту. Зв'яжіться з нами, щоб замовити розробку.







