Интеграция с Tally для DAO: настройка Governor контракта и голосование

Интеграция с Tally для on-chain управления DAO Отметим: когда ваше DAO растёт, ручное управление предложениями перестаёт работать: голоса не учитываются, кворум не набирается, контракты требуют доверенных посредников. Tally решает это — автоматическая индексация, делегирование и прозрачность. Вме

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

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

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

  • 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

Интеграция с 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: пошагово

  1. Зайдите на Tally и нажмите «Add DAO».
  2. Укажите адрес Governor контракта и сеть.
  3. Tally верифицирует ABI и начинает индексацию.
  4. Настройте логотип, описание, социальные ссылки в админ-панели.

Время индексации — от нескольких минут до часа. После этого 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 недели. Свяжитесь с нами для консультации по параметрам. Опыт наших инженеров гарантирует качество.