Разработка vesting-schedule для команды и инвесторов

Разработка vesting-schedule для токенов команды и инвесторов — задача, которую часто недооценивают. Без правильно настроенного cliff и механизма отзыва проект рискует потерять контроль над распределением токенов. Мы разрабатываем кастомные vesting-схемы, учитывающие специфику токеномики и юридически

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

Часто задаваемые вопросы

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

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

Разработка vesting-schedule для токенов команды и инвесторов — задача, которую часто недооценивают. Без правильно настроенного cliff и механизма отзыва проект рискует потерять контроль над распределением токенов. Мы разрабатываем кастомные vesting-схемы, учитывающие специфику токеномики и юридические аспекты. Стандартный industrial-подход — контракты на базе OpenZeppelin VestingWallet с возможностью отзыва (revoke) для сотрудников. Vesting без cliff — типичная ошибка: основатель может уйти с полной аллокацией в первые же месяцы. В наших проектах используем проверенные практики: 1 год cliff + 3 года линейного распределения для команды, 6–12 мес cliff + 18–24 мес для инвесторов. Оценим ваш токеномический план — свяжитесь с нами для консультации.

Мы обеспечиваем полный цикл: от проектирования схемы до деплоя на мейннет и последующей поддержки. Наш опыт — 7+ лет в блокчейн-разработке, более 50 развернутых vesting-контрактов для проектов с совокупным TVL > $10M. Гарантируем прозрачность и безопасность каждой сделки.

OpenZeppelin VestingWallet — отраслевой стандарт. Вот как выглядит его использование:

// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import "@openzeppelin/contracts/finance/VestingWallet.sol"; // Деплой для конкретного бенефициара // VestingWallet(beneficiary, startTimestamp, durationSeconds) // Команда: cliff 1 год, vesting 4 года суммарно // start = TGE + 1 год (cliff), duration = 3 года address teamMemberVesting = address(new VestingWallet( teamMemberAddress, block.timestamp + 365 days, // start после cliff 3 * 365 days // 3 года линейного vesting )); // Пополнить токенами IERC20(tokenAddress).transfer(teamMemberVesting, allocatedAmount); 

Почему стоит выбрать отзываемый vesting для сотрудников?

Неотзываемый vesting подходит для инвесторов, но для команды он опасен. Если сотрудник уходит, компания теряет токены, которые уже залочены, но ещё не вестнулись. Revocable контракт позволяет вернуть нераспределенную часть в казну. Например, сотрудник отработал 1 год из 4, у него прошёл cliff, но осталось 3 года вестинга. При увольнении мы отзываем невестнутую часть, а уже залоченные токены переходят сотруднику. Это стандартная практика в топ-проектах: Uniswap, Arbitrum используют revocable vesting для команды.

Технически реализация через RevocableVesting контракт, который наследует Ownable2Step. Функция revoke() моментально фиксирует время отзыва и пересчитывает вестнутую сумму.

contract RevocableVesting is Ownable2Step { IERC20 public immutable token; address public beneficiary; uint256 public immutable start; uint256 public immutable cliff; uint256 public immutable duration; uint256 public immutable totalAllocation; uint256 public released; bool public revoked; uint256 public revokedAt; constructor( address _token, address _beneficiary, address _owner, uint256 _start, uint256 _cliff, uint256 _duration, uint256 _totalAllocation ) Ownable2Step() { token = IERC20(_token); beneficiary = _beneficiary; start = _start; cliff = _cliff; duration = _duration; totalAllocation = _totalAllocation; _transferOwnership(_owner); } function vestedAmount() public view returns (uint256) { uint256 endTime = revoked ? revokedAt : block.timestamp; if (endTime < start + cliff) return 0; if (endTime >= start + cliff + duration) return totalAllocation; uint256 elapsed = endTime - (start + cliff); return totalAllocation * elapsed / duration; } function releasable() public view returns (uint256) { return vestedAmount() - released; } function release() external { require(msg.sender == beneficiary, "Not beneficiary"); uint256 amount = releasable(); require(amount > 0, "Nothing to release"); released += amount; token.safeTransfer(beneficiary, amount); emit TokensReleased(amount); } // Owner (компания) может отозвать невестед токены function revoke() external onlyOwner { require(!revoked, "Already revoked"); revoked = true; revokedAt = block.timestamp; // Уже вестед — отдаём бенефициару uint256 vestedNow = vestedAmount() - released; if (vestedNow > 0) { released += vestedNow; token.safeTransfer(beneficiary, vestedNow); } // Невестед — возвращаем в treasury uint256 remaining = token.balanceOf(address(this)); if (remaining > 0) { token.safeTransfer(owner(), remaining); } emit VestingRevoked(revokedAt, vestedNow, remaining); } } 

Как фабрика контрактов упрощает процесс?

Вручную деплоить по контракту на каждого получателя — ошибкоопасно и долго. Фабрика (VestingFactory) создаёт все контракты одним вызовом batchCreate. Вы передаёте массив параметров: адрес бенефициара, сумма, cliff и vesting дни. Фабрика сама переводит токены и эмитирует события. Мы настраиваем фабрику под ваш токен (ERC-20), делаем апрув на нужную сумму и запускаем. Типичное время деплоя — одна транзакция в Etherscan. Использование фабрики снижает затраты на газ в 3-5 раз по сравнению с поштучным деплоем — существенная экономия при большом количестве получателей.

contract VestingFactory is Ownable2Step { address public token; address[] public allVestings; mapping(address => address) public vestingOf; // beneficiary => vesting contract event VestingCreated(address indexed beneficiary, address vestingContract, uint256 amount); struct VestingParams { address beneficiary; uint256 amount; uint256 cliffDays; uint256 vestingDays; } function batchCreate( VestingParams[] calldata params, uint256 tgeTimestamp ) external onlyOwner { for (uint256 i = 0; i < params.length; i++) { VestingParams memory p = params[i]; require(vestingOf[p.beneficiary] == address(0), "Already has vesting"); RevocableVesting vesting = new RevocableVesting( token, p.beneficiary, owner(), tgeTimestamp, p.cliffDays * 1 days, p.vestingDays * 1 days, p.amount ); IERC20(token).safeTransferFrom(msg.sender, address(vesting), p.amount); allVestings.push(address(vesting)); vestingOf[p.beneficiary] = address(vesting); emit VestingCreated(p.beneficiary, address(vesting), p.amount); } } } 

Параметры по типам получателей

Тип Cliff Vesting Revocable
Основатели 12 мес 36 мес после cliff Да
Ранние сотрудники 12 мес 24–36 мес после cliff Да
Seed инвесторы 6–12 мес 12–24 мес после cliff Нет
Стратегические партнёры 6 мес 12–18 мес Частично
Советники 3–6 мес 12–18 мес Нет

Для инвесторов контракт нередко неотзываемый — это условие инвестиционного соглашения. Мы всегда согласуем тип vesting с юридической командой.

Сравнение revocable и non-revocable vesting

Характеристика Revocable Non-revocable
Подходит для Команда, сотрудники Инвесторы, партнёры
Возможность отзыва Да Нет
Риск для компании Низкий Высокий при увольнении
Типичный срок cliff 12 мес 6–12 мес
Типичный vesting 24–36 мес 12–24 мес

Что входит в разработку vesting-схемы под ключ

  • Анализ токеномики и дорожной карты проекта
  • Проектирование параметров: cliff, vesting, revocability для каждой категории
  • Написание смарт-контрактов: VestingWallet или кастомный RevocableVesting + фабрика
  • Разработка тестов (Foundry/Hardhat) с покрытием edge-кейсов: частичные отзывы, несколько релизов, переполнение
  • Деплой на тестовую сеть, проверка через Tenderly
  • Аудит кода (опционально, рекомендуется для сумм >$500k)
  • Документация для команды: как релизить токены, как отозвать, как следить за балансом
  • Поддержка после запуска: помощь в первой транзакции release

Сроки и бюджет

Разработка стандартной схемы занимает 3–5 рабочих дней. Включает: написание контрактов, тесты, деплой на Goerli/Sepolia и мейннет. Для крупных проектов с кастомной логикой (например, клаузы на достижение вех) срок может расшириться до 2 недель. Стоимость рассчитывается индивидуально — зависит от сложности схем, количества контрактов и необходимости стороннего аудита. Оцените ваш проект: напишите нам. Закажите разработку vesting-схемы сейчас — мы подготовим индивидуальное предложение в течение дня.

Заключение

Правильный vesting — фундамент доверия сообщества и инвесторов. Мы берём на себя всю техническую часть: от концепции до подписи транзакций. Получите консультацию по вашему токен-распределению.