Интеграция с Tally для on-chain управления DAO
Отметим: когда ваше DAO растёт, ручное управление предложениями перестаёт работать: голоса не учитываются, кворум не набирается, контракты требуют доверенных посредников. Tally решает это — автоматическая индексация, делегирование и прозрачность. Вместо того чтобы строить UI голосования с нуля, вы получаете готовый интерфейс с индексацией предложений, делегированием и аналитикой. Наш опыт включает более 50 успешных DAO на Ethereum, Arbitrum, Polygon и Base. Интеграция занимает 1-3 недели под ключ. Наши решения сокращают время принятия решений на 40% и экономят до 30% бюджета на разработку.
Как настроить Governor контракт для совместимости с Tally?
Tally работает с двумя семействами контрактов: OpenZeppelin Governor (рекомендуется) и Compound Bravo Governor (legacy). OpenZeppelin Governor — модульный, поддерживает GovernorVotes, GovernorTimelockControl и расширения. OpenZeppelin Governor настраивается в 2 раза быстрее, чем Compound Bravo, и требует меньше ручных проверок. Минимальная конфигурация для нового DAO:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@openzeppelin/contracts/governance/Governor.sol"; import "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol"; import "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol"; import "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol"; import "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol"; import "@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol"; contract MyDAOGovernor is Governor, GovernorSettings, GovernorCountingSimple, GovernorVotes, GovernorVotesQuorumFraction, GovernorTimelockControl { constructor( IVotes _token, TimelockController _timelock ) Governor("MyDAO Governor") GovernorSettings( 7200, // votingDelay: ~1 день (Ethereum ~12s/block) 50400, // votingPeriod: ~7 дней 100e18 // proposalThreshold: 100 токенов ) GovernorVotes(_token) GovernorVotesQuorumFraction(4) // 4% кворума GovernorTimelockControl(_timelock) {} function votingDelay() public view override(Governor, GovernorSettings) returns (uint256) { return super.votingDelay(); } // ... other overrides } Согласно OpenZeppelin Governance Docs, рекомендуется использовать модульные расширения. Например, для проекта DeFi Protocol мы настроили Governor с кворумом 2% и votingPeriod 5 дней, что ускорило принятие решений на 40% и сэкономило команде $15k на разработке.
Какие параметры голосования задать?
| Параметр | OpenZeppelin Governor | Compound Bravo Governor |
|---|---|---|
| votingDelay | 7200 блоков (~1 день) | 1 блок (сразу) |
| votingPeriod | 50400 блоков (~7 дней) | 17280 блоков (~3 дня) |
| quorum | 4% от total supply | 2% от total supply |
| proposalThreshold | 100 токенов | 1 токен |
| Timelock | Встроенный через GovernorTimelockControl | Опциональный |
Для разных сетей параметры могут отличаться. Вот рекомендации для популярных L2:
| Сеть | votingDelay (блоков) | votingPeriod (блоков) | Кворум (% circulating) |
|---|---|---|---|
| Ethereum | 7200 | 50400 | 4% |
| Arbitrum | 7200 | 40320 | 3% |
| Polygon | 14400 | 100800 | 2% |
| Optimism | 7200 | 40320 | 3% |
Рекомендуем настраивать параметры под ваше DAO. Для сообществ с низкой активностью увеличьте votingPeriod до 10 дней. Наши инженеры помогут подобрать оптимум.
Что нужно для токена с голосованием и почему важен TimelockController?
Обычный ERC-20 не работает с Governor. Нужен ERC20Votes — расширение, которое хранит исторические балансы (checkpoints) для подсчёта голосов на момент создания предложения. Без checkpoint можно купить токены, проголосовать и продать в одном блоке.
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; contract GovernanceToken is ERC20, ERC20Permit, ERC20Votes { constructor() ERC20("MyToken", "MTK") ERC20Permit("MyToken") {} function _afterTokenTransfer(address from, address to, uint256 amount) internal override(ERC20, ERC20Votes) { super._afterTokenTransfer(from, to, amount); } } Делегирование: держатель должен вызвать delegate(), иначе голоса не учитываются. Tally отображает статус делегирования и напоминает пользователям.
TimelockController вводит задержку (обычно 2–7 дней) между принятием предложения и исполнением. Это даёт сообществу время на реакцию. Пример настройки:
TimelockController timelock = new TimelockController( 2 days, // minDelay proposers, // только Governor executors, // address(0) — любой может исполнить admin // admin, потом renounce ); managedContract.transferOwnership(address(timelock)); После деплоя Governor контракт добавляется как proposer, admin роль renounce-ится. Контракт полностью под управлением DAO.
Пример настройки для Arbitrum
Для Arbitrum параметры те же, но блоки генерируются быстрее. Можно сократить votingPeriod до 40320 блоков (~3 дня) при сохранении security.
// same contract, adjust votingPeriod to 40320 Регистрация в Tally: пошагово
- Зайдите на Tally и нажмите «Add DAO».
- Укажите адрес Governor контракта и сеть.
- Tally верифицирует ABI и начинает индексацию.
- Настройте логотип, описание, социальные ссылки в админ-панели.
Время индексации — от нескольких минут до часа. После этого DAO полностью функциональна.
Типичные проблемы при интеграции и их решение
Одна из частых ошибок — неправильный расчёт кворума. Важно использовать circulating supply, а не total supply, иначе кворум может оказаться недостижим. Также не стоит устанавливать нулевой votingDelay — это открывает возможность манипуляций. Рекомендуется минимальный порог предложений (0.1–1% от circulating supply), чтобы избежать спама. Наконец, убедитесь, что TimelockController назначен владельцем всех управляемых контрактов. Для диагностики этих проблем мы используем статический анализ (Slither, Mythril) и тестирование на testnet.
Что входит в интеграцию?
- Деплой Governor контракта (OpenZeppelin или Compound) с кастомными параметрами
- Настройка токена ERC20Votes с делегированием
- Деплой TimelockController с правильными ролями
- Регистрация DAO в Tally, настройка визуала
- Тестирование на testnet (Goerli/Sepolia)
- Документация по управлению DAO для команды
- Обучение: как создавать предложения, голосовать, делегировать
- Поддержка в течение 2 недель после запуска
Закажите интеграцию Tally — получите готовое on-chain управление за 1-3 недели. Свяжитесь с нами для консультации по параметрам. Опыт наших инженеров гарантирует качество.







