Вступление
Мы разрабатываем систему proposals DAO с нуля или интегрируем с существующими токенами. В основе — OpenZeppelin Governor, модульный фреймворк для on-chain governance, совместимый с Compound Governor Bravo. Большинство DeFi-протоколов — Uniswap, Compound, Gitcoin, ENS — используют Governor-совместимые контракты. Интеграция с Governor даёт не только встроенное управление, но и совместимость с экосистемой инструментов: Tally, Boardroom, Snapshot. Закажите разработку DAO под ключ — смарт-контракты DAO любой сложности. Gasless voting снижает затраты на газ для держателей токенов на 90%, что особенно критично при высокой цене Ethereum.
Как работает жизненный цикл пропозала?
Пропозал проходит строго определённые состояния: Pending → Active → Succeeded/Defeated/Canceled → Queued → Executed. Жизненный цикл выглядит так:
Создание → [voting delay] → Голосование → [voting period] → Подсчёт → [timelock delay] → Исполнение Voting delay защищает от flash loan атак: голосование начинается не сразу после создания пропозала, а через 1–2 дня. За это время атакующий не может купить, проголосовать и продать токены в одном блоке. GovernorVotes фиксирует вес голоса каждого адреса на блоке начала голосования через ERC-20Votes checkpoint механизм. Изменения баланса после этого блока не влияют на vote weight.
| Параметр | Значение по умолчанию | Рекомендация |
|---|---|---|
| voting delay | 1 day | 1–3 дней для защиты от флеш-лоанов |
| voting period | 1 week | 3–7 дней (короткий период снижает явку) |
| proposal threshold | 10,000 токенов | 1% от circulating supply или делегированный порог |
| quorum | 4% от total supply | 4–10% от делегированного supply, а не total |
Почему важна интеграция с Timelock?
DAO без Timelock теряет защиту от мгновенных атак. TimelockController — отдельный контракт, который становится владельцем протокольных контрактов. Governor ставит исполнение в очередь, а после задержки (обычно 48–72 часа) оно становится возможным. Это даёт участникам время перепроверить код и, если нужно, отменить пропозал. Governor без Timelock в 25 раз опаснее: злоумышленник может исполнить вредоносный пропозал сразу после голосования. Мы всегда отзываем admin-роль у deployer, иначе он может обойти governance.
// Деплой TimelockController TimelockController timelock = new TimelockController( 2 days, // minDelay proposers, // только Governor может ставить в очередь executors, // любой может исполнить (или конкретный адрес) admin // после setup admin = address(0), убираем admin права ); // Governor получает PROPOSER_ROLE timelock.grantRole(timelock.PROPOSER_ROLE(), address(governor)); // Executor — open (address(0)) или конкретный address timelock.grantRole(timelock.EXECUTOR_ROLE(), address(0)); // Отзываем admin (важно!) timelock.revokeRole(timelock.DEFAULT_ADMIN_ROLE(), deployer); Какие механизмы голосования можно настроить?
По умолчанию GovernorCountingSimple подсчитывает For, Against, Abstain. Если нужно квадратичное голосование или weighted voting — заменяем этот модуль своей реализацией. Voting power можно брать не только из ERC-20Votes, но и из NFT (ERC-721Votes), locked tokens (veToken) или custom weighting. Мы поддерживаем кастомные voting механики, например квадратичное голосование (quadratic voting) или квадратичное финансирование.
| Тип voting power | Используемый контракт | Особенности |
|---|---|---|
| ERC-20Votes | OZ Votes | Чекпоинты на каждый блок, совместимость с Tally |
| ERC-721Votes | OZ Votes | Голосование по уникальным NFT, один голос на токен |
| veToken | Custom voting escrow | Взвешенное по времени блокировки голосование |
Quorum по умолчанию считается от total supply, но если большая часть токенов не делегирована, кворум недостижим. Решение — override функции quorum() для подсчёта от delegated supply.
// Пример кастомного quorum от delegated supply function quorum(uint256 blockNumber) public view override returns (uint256) { return totalDelegatedSupply(blockNumber) * 4 / 100; } Proposal threshold можно установить высоким (1% supply) для защиты от спама, но лучше использовать delegation threshold — любой holder может создать пропозал, если соберёт достаточно делегатов.
Как настроить gasless voting?
Gasless voting позволяет участникам голосовать без затрат на газ: подпись EIP-712 отправляется релею, который пулит транзакцию. Мы интегрируем релеи через Gelato или Biconomy. Для этого Governor должен поддерживать мета-транзакции — достаточно унаследовать GovernorCompatibilityBravo и добавить EIP-712 домен. Это снижает барьер входа для сообщества и увеличивает явку.
Этапы разработки системы proposals DAO
- Анализ существующей архитектуры и токеномики (ERC-20Votes или кастомный).
- Выбор модулей Governor (voting, quorum, timelock) в зависимости от требований.
- Разработка и тестирование смарт-контрактов на Solidity с использованием Foundry.
- Аудит безопасности статическим анализатором Slither и фаззингом Echidna.
- Деплой на выбранную сеть (Ethereum, Polygon, Arbitrum) с передачей управления Timelock.
- Настройка интеграции с Tally (автоматически) и Snapshot (off-chain signaling).
- Обучение команды и двухнедельная пост-деплой поддержка.
Типичные ошибки при интеграции: забыть передать ownership протокольных контрактов на Timelock, неправильный quorum (4% от total supply при 30% circulation rate), отсутствие ERC-20Votes в токене. Мы учитываем все эти моменты на этапе проектирования.
Что входит в работу?
Мы предоставляем:
- Архитектурную документацию и диаграммы.
- Код смарт-контрактов на Solidity 0.8.x с тестами (Foundry) и формальной верификацией (Slither, Mythril).
- Интеграцию с Tally (out of the box) и Snapshot (off-chain signaling).
- Деплой и настройку TimelockController с отзывом admin-роли.
- Gasless voting через relayers (EIP-712).
- Обучение команды и двухнедельную поддержку.
Оценим ваш проект за 1–2 дня. Свяжитесь с нами, чтобы обсудить детали и получить консультацию. Закажите разработку системы proposals DAO с гарантией безопасности. Более 50 реализованных проектов по смарт-контрактам — гарантируем надёжную и безопасную архитектуру.







