Разработка системы token holder revenue sharing для DeFi

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка системы token holder revenue sharing для DeFi
Средний
~3-5 дней
Часто задаваемые вопросы

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

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1375
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1257
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    966
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1209
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    668
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    957

Представьте: ваш DeFi-протокол приносит миллионы долларов комиссий в месяц, но вы не знаете, как честно распределить их между 50 000 холдеров токенов без переплаты за газ и риска flash loan атак. Одна из частых ошибок — использование наивного цикла for для распределения, что при большом числе холдеров приводит к газовым затратам в сотни ETH. Мы используем Merkle tree или rewardPerToken индекс, что сокращает затраты в 5–10 раз. За последние 5 лет мы реализовали более 20 проектов, включая протоколы с TVL до $500M. В этой статье разберём ключевые модели распределения доходов и методы защиты от атак. Система revenue sharing должна быть гибкой: поддерживать мультитокенность, time-weighted balance и минимизировать газ. Наш опыт показывает, что правильно спроектированная архитектура экономит до 80% gas на операциях claim. Нужна система token holder revenue sharing? Обратитесь к нам — мы разработаем решение под ваш проект.

Как работает система token holder revenue sharing?

Система распределения доходов между держателями токенов требует учета количества холдеров, частоты выплат и безопасности. Рассмотрим три популярных подхода.

Как выбрать модель revenue sharing?

Выбор модели зависит от числа холдеров и частоты выплат.

Continuous streaming (Superfluid/Sablier)

Доход «течёт» к держателям постоянно пропорционально балансу. Теоретически идеально — практически сложно: для каждого трансфера токена нужно пересчитывать потоки. На Ethereum это дорого при большом числе холдеров. Подходит для небольшого числа участников и высокой частоты выплат.

Snapshot + Merkle Distribution

Самая распространённая модель. Раз в период (неделя/месяц) делается snapshot балансов, вычисляется каждая доля, строится Merkle tree. Держатели сами клеймят свою долю, предоставляя Merkle proof.

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. Merkle distribution в 5 раз дешевле по газу, чем continuous streaming при 10 000 холдеров. Согласно документации OpenZeppelin, Merkle tree обеспечивает верификацию без раскрытия всех данных, что критично для конфиденциальности. Gas cost per claim при Merkle distribution составляет около 0.01 ETH.

Dividend-bearing token (Synthetix Rewards)

Модель MasterChef / Synthetix Rewards: контракт хранит rewardPerTokenStored. При каждом новом поступлении дохода индекс обновляется. При claim пользователь получает разницу между текущим индексом и тем, что был при последнем claim.

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 контрактов. Synthetix rewards позволяет сократить газовые затраты до 0.001 ETH за claim против 0.01 ETH у Merkle.

Сравнение моделей
Параметр 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 атаку неэффективной — среднее значение будет близким к нулю. Экономия на gas достигает 80% при использовании off-chain snapshot.

Решение 2: Minimum holding period. Право на revenue sharing получают только адреса, держащие токены дольше N дней. Реализуется через timestamp последнего transfer.

Решение 3: Commit-reveal snapshot. Момент snapshot не известен заранее, определяется случайно или с задержкой. Атакующий не может подготовиться.

// Пример 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.

Что входит в разработку системы revenue sharing?

Наша команда предоставляет полный цикл работ:

  • Архитектурный дизайн: выбор модели, расчёты gas, анализ безопасности
  • Разработка смарт-контрактов на Solidity с полным покрытием тестами (Foundry, Hardhat)
  • Off-chain инфраструктура: snapshot pipeline, генерация Merkle tree, API для proof (Node.js/Python)
  • Аудит безопасности: статический анализ (Slither, Mythril), фаззинг (Echidna), ручной ревью
  • Развёртывание и настройка: mainnet/testnet, мультисиг, Timelock
  • Документация: техническая спецификация, руководство пользователя, комментарии к коду
  • Поддержка после запуска: мониторинг, обновления, хотфиксы

Пошаговый план разработки

  1. Анализ требований — определяем число холдеров, частоту выплат, токены для распределения.
  2. Проектирование архитектуры — выбираем модель, проектируем смарт-контракты и off-chain компоненты.
  3. Разработка смарт-контрактов — пишем код на Solidity с тестами в Foundry/Hardhat.
  4. Интеграция off-chain — реализуем snapshot pipeline, генерацию Merkle tree, API.
  5. Аудит безопасности — проводим статический анализ и фаззинг.
  6. Развёртывание и настройка — деплоим на mainnet, настраиваем мультисиг и Timelock.
  7. Поддержка и мониторинг — обеспечиваем стабильную работу после запуска.

Для оценки вашего проекта напишите нам — мы подготовим предложение за 1 день. Получите консультацию по архитектуре revenue sharing, обсудим детали вашего проекта.

Практические параметры выбора

Если холдеров < 1000 и доход распределяется часто — Synthetix-style staking rewards. Если холдеров > 10,000 и распределение периодическое — Merkle distribution. Если нужна гибкость (разные токены, разные правила eligibility) — гибридная схема с off-chain snapshot и on-chain verification.

Метод защиты Сложность Эффективность
Time-weighted balance Средняя Высокая
Minimum holding period Низкая Средняя
Commit-reveal snapshot Высокая Очень высокая

Сроки разработки: 3-5 недель на базовую систему, 6-9 недель с multi-reward, anti-flash-loan защитой и frontend dashboard. Для точной оценки свяжитесь с нами — мы проанализируем ваши требования за 1 день.

Получите консультацию по архитектуре revenue sharing — пишите, обсудим детали вашего проекта. Свяжитесь с нами, чтобы заказать разработку.

Разработка токенов: ERC-20, токеномика, вестинг

«ERC-20 — это просто» — фраза, после которой начинаются проблемы. Базовый transfer написать несложно. Но токен, у которого через шесть месяцев не происходит инфляционный коллапс, governance работает как задумано, а вестинг нельзя обойти через хитрую схему с делегированием — это уже проектирование.

ERC-20: что под капотом

Стандарт ERC-20 — девять функций. Сложность начинается с расширений:

ERC-20Permit (EIP-2612) — gasless approve через подпись. Пользователь подписывает permit(owner, spender, value, deadline, v, r, s) off-chain, spender вызывает permit() + transferFrom() в одной транзакции. Это убирает отдельный approve step. Но: подпись можно перехватить и использовать — нужен deadline и проверка nonce.

ERC-20Votes (EIP-5805) — snapshot балансов для governance. Checkpoint-система хранит историю балансов по номеру блока. getPastVotes(address, blockNumber) — баланс на момент создания proposal, а не текущий. Это предотвращает flash loan governance attack: нельзя занять токены и проголосовать ими в одной транзакции.

Rebasing токены (stETH, Ampleforth) — balanceOf меняется автоматически через изменение internal shares ratio. Высокая сложность интеграции: большинство DeFi протоколов не работают корректно с rebasing без wrapping в non-rebasing версию.

Fee-on-transfer токены — при каждом transfer снимается процент. Ломают AMM расчёты: пул получает меньше, чем ожидал. Uniswap v2/v3 не поддерживают fee-on-transfer нативно — нужны специальные pair/router.

Tokenomics: где математика превращается в экономику

Токеномика — это не таблица в Excel с суммой 100%. Это модель инцентивов, которая либо работает в долгосрочной перспективе, либо создаёт давление продаж которое убьёт проект.

Emission schedule и инфляция

Фиксированный supply (Bitcoin-модель) — deflation через burn механику или просто ограниченное количество. Подходит для store-of-value или utility токенов с ограниченным спросом на новые токены.

Инфляционная модель (Ethereum post-Merge, Curve) — новые токены выпускаются для стимулирования участников. Нужен баланс: emission должен быть ниже или равен value capture протоколом. Если протокол зарабатывает $100k/месяц, а эмиссия в рыночной стоимости $500k/месяц — постоянное давление продаж неизбежно.

Halving schedules (Bitcoin-style) — уменьшение emission со временем. Создаёт предсказуемость, но требует что утилити токена росла чтобы компенсировать падающие rewards для stakers/validators.

Supply distribution

Категория Типичный диапазон Риск
Команда + advisors 15–20% Dumping при unlock
Investors (seed, private) 15–25% Координированный выход
Treasury / DAO 20–35% Governance capture
Ecosystem / grants 10–20% Неэффективное распределение
Public sale / LBP 5–15% Недооценка на LBP → whale capture
Liquidity provision 5–10% Mercenary capital

Нет универсальной формулы. Есть принцип: никакой одной сущности не должно принадлежать >33% voting power при запуске. Иначе governance — фикция.

Vesting контракты: детали имеют значение

Linear vesting с cliff — стандарт для команды и инвесторов. cliff — период после TGE, в течение которого ничего не доступно. После cliff: линейный unlock до duration.

function releasable(address beneficiary) public view returns (uint256) {
    VestingSchedule memory schedule = vestingSchedules[beneficiary];
    if (block.timestamp < schedule.cliff) return 0;

    uint256 elapsed = block.timestamp - schedule.cliff;
    uint256 vestingDuration = schedule.duration - (schedule.cliff - schedule.start);
    uint256 vested = schedule.totalAmount * elapsed / vestingDuration;

    return vested - schedule.released;
}

Типичные ошибки при реализации:

Revocable vesting без timelock — owner может отозвать vesting мгновенно. Если owner key скомпрометирован или команда недобросовестна — все unvested токены могут быть отозваны. Решение: revocation через multisig + governance vote.

Cliff не блокирует governance права — если используется ERC-20Votes, recipient может делегировать voting power с первого дня, даже если токены ещё не unlocked. Нужно явно разделить voting power и claim logic.

Отсутствие emergency pause — если обнаружена уязвимость в vesting контракте, нужна возможность приостановить claim. Pausable + timelock на unpause.

Liquidity Bootstrapping

Запуск ликвидности — критический момент. Три основных подхода:

Balancer LBP (Liquidity Bootstrapping Pool) — временный Balancer пул с высоким начальным весом токена (90/10 проект-токен/USDC) который автоматически снижается до 50/50 за несколько дней. Создаёт нисходящее ценовое давление, препятствуя ботам скупить всё по одной цене. После LBP ликвидность переносится в постоянный пул.

Fjord Foundry — специализированная платформа для LBP и fair launches. Меньше операционного overhead чем прямая интеграция с Balancer.

Uniswap v3 с ограниченным range — добавить ликвидность в узкий диапазон вокруг начальной цены. Высокая capital efficiency, но требует активного управления range.

TWAMM (Time-Weighted AMM) — механика для постепенной продажи/покупки больших объёмов без slippage. Paradigm предложил, реализован в FraxSwap.

Governance токены и voting механики

OpenZeppelin Governor — стандартная реализация on-chain governance. Модульная архитектура: GovernorVotes для counting, GovernorTimelockControl для timelock execution, GovernorSettings для изменяемых параметров.

Quorum — минимальный процент supply для валидности голосования. Слишком высокий quorum = apathy failure (не набирается голосов). Слишком низкий = whale capture. Compound установил quorum 400k COMP (4% supply) — на практике достигается редко без координации крупных holders.

Flash loan governance attack — атакующий занимает токены через flash loan, делегирует их себе, создаёт proposal или голосует, возвращает токены. ERC-20Votes с snapshot по номеру блока полностью блокирует это: нужно иметь токены на момент создания snapshot, который берётся в момент создания proposal.

Delegation — пользователи с малыми балансами часто не голосуют. Liquid delegation (как в Optimism) позволяет делегировать voting power конкретным addresses (delegates) без передачи ownership токенов.

Стек для токен-разработки

Контракты: Solidity 0.8.x, OpenZeppelin Contracts 5.x (ERC20, ERC20Permit, ERC20Votes, Governor, TimelockController, TokenVesting)

Аудит токеномики: Python модели с симуляцией emission/demand, cadCAD для complex systems modeling

Деплой и управление: Foundry scripts, Gnosis Safe для treasury, OpenZeppelin Defender для автоматизации

Аналитика: Dune Analytics для on-chain метрик, Token Terminal для protocol revenue

Процесс

Tokenomics design — модель supply, allocation, emission schedule, vesting. Стресс-тестирование сценариев (bear market, whale exit, governance capture attempt).

Контракт разработка — ERC-20 + extensions, vesting, governance. Foundry fuzz тесты на vesting calculations, governance thresholds.

Аудит — особое внимание на governance attack vectors, vesting bypass, permit replay attacks.

LBP / launch — выбор механики, настройка параметров, мониторинг первых 24 часов.

Post-launch — мониторинг supply distribution через Dune, governance participation metrics, treasury management.

Сроки

  • ERC-20 с permit и basic governance: 2–3 недели
  • Vesting контракт с revocation и cliff: 2–4 недели
  • Полный governance (Governor + Timelock + Token): 4–7 недель
  • Токен + LBP + governance + vesting: 8–14 недель