Розробка DAO (децентралізованої автономної організації)

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка DAO (децентралізованої автономної організації)
Складний
від 2 тижнів до 3 місяців
Часті запитання

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

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

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1306
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1218
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    920
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1147
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    610
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    885

Розробка DAO

DAO — це смарт-контракти + соціальний шар. Контракти забезпечують виконання рішень без довіри до конкретних людей; соціальний шар формує консенсус перед тим, як що-небудь йде on-chain. Технічно ви можете побудувати DAO за тиждень, використовуючи Governor Bravo або OpenZeppelin Governor. Але більшість DAO з якісним кодом помирають саме через погану архітектуру управління, а не через код.

Тут ми розглянемо обидва шари: що саме реалізується on-chain, які паттерни працюють у production, і де дизайн управління важливіший за код.

On-chain архітектура Governor

OpenZeppelin Governor як основа

OpenZeppelin Governor (OZ 4.x+) — це модульний фреймворк: базова логіка плюс взаємозамінні модулі для голосування, підрахунку, кворуму та timelock. Більшість production DAO зараз використовують його або Governor Bravo (Compound).

Мінімальна конфігурація:

contract MyDAO is
    Governor,
    GovernorSettings,        // votingDelay, votingPeriod, proposalThreshold
    GovernorCountingSimple,  // FOR / AGAINST / ABSTAIN
    GovernorVotes,           // ERC20Votes або ERC721Votes
    GovernorVotesQuorumFraction, // кворум як % загального пропозиції
    GovernorTimelockControl  // інтеграція з TimelockController
{
    constructor(IVotes _token, TimelockController _timelock)
        Governor("MyDAO")
        GovernorSettings(7200, 50400, 1000e18) // 1 день затримки, 1 тиждень голосування, 1000 токенів поріг
        GovernorVotes(_token)
        GovernorVotesQuorumFraction(4) // 4% кворум
        GovernorTimelockControl(_timelock)
    {}
}

ERC20Votes: Снапшоти голосування

ERC20Votes розширює стандартний ERC-20, додаючи механізм _delegate та історію чекпоїнтів. Кожна передача чи делегування створює чекпоїнт. Голосування використовує голосувальну силу на блоці proposalSnapshot, не поточний баланс — це запобігає купівлі токенів спеціально для голосування.

// Користувачі повинні делегувати себе (або інших) для активації голосувальної сили
token.delegate(msg.sender);

// Голосувальна сила в момент снапшоту
uint256 power = token.getPastVotes(account, proposalSnapshot);

Важливо: токени без делегування не беруть участь у голосуванні. Це часто дивує нових користувачів. UX повинен нагадати користувачам про делегування при першому використанні гаманця.

TimelockController: Затримка виконання

Timelock обов'язковий для production DAO. Затвердене пропозиція не виконується негайно; воно ставиться в чергу й виконується після затримки (зазвичай 2-7 днів). Це вікно дозволяє спільноті помітити потенційно небезпечні пропозиції й вийти з протоколу перед виконанням.

Ролі TimelockController:

  • PROPOSER — хто може ставити пропозиції в чергу (звичайно лише контракт Governor)
  • EXECUTOR — хто може виконувати (часто address(0) — будь-хто)
  • CANCELLER — хто може скасовувати (мультисиг команди як клапан безпеки)

Мінімальна затримка — параметр безпеки. 48 годин — абсолютний мінімум для протоколів з реальними коштами. Compound та Aave використовують 2-7 днів.

Життєвий цикл пропозиції

Створення пропозиції → votingDelay (щоб зафіксувати снапшот) → 
votingPeriod (FOR/AGAINST/ABSTAIN) → 
(якщо пройшла) черга в timelock → 
timelockDelay → 
виконання

Пропозиція містить масиви викликів: targets[], values[], calldatas[]. Одна пропозиція може виконати довільну кількість on-chain дій атомарно — змінити параметри протоколу, перевести казну, оновити контракти.

// Пропозиція: змінити комісію протоколу з 0.3% на 0.5%
address[] memory targets = new address[](1);
targets[0] = address(protocolFeeManager);

uint256[] memory values = new uint256[](1);
values[0] = 0;

bytes[] memory calldatas = new bytes[](1);
calldatas[0] = abi.encodeWithSignature("setFee(uint256)", 50); // 0.5% = 50 bps

governor.propose(targets, values, calldatas, "Increase protocol fee to 0.5%");

Управління казною

DAO зазвичай управляє казною — резервами протоколу. Стандартний паттерн: казна — це сам TimelockController (тримає ETH та токени) або окремий контракт як Gnosis Safe з Governor як єдиним власником.

Інтеграція Gnosis Safe + Governor

Для малих DAO або на ранній стадії: Gnosis Safe з мультисигом плюс модуль Zodiac SafeSnap, який виконує голосування Snapshot.org on-chain. Це дешевше (безгазові off-chain голосування) й достатньо, доки не накопичиться достатньо активних емітентів токенів для on-chain управління.

Перехід від мультисигу до повного on-chain управління — це окремий мільйон. Типовий шлях: мультисиг (запуск) → мультисиг + Snapshot (зростання спільноти) → повний on-chain Governor (зрілий протокол).

Диверсифікація та стабільність

Казна, що складається на 100% з нативних токенів — це високий ризик. Ведмежий ринок руйнує доріжку запасу. Production DAO диверсифікують: 20-30% USDC/DAI для операцій, рештою як нативні токени. Диверсифікація відбувається через затвердені пропозиції управління для DEX свопів або OTC угод.

Делегування та Off-chain координація

Система делегатів

Більшість емітентів токенів не голосують прямо. Compound запровадив концепцію делегата: емітенти токенів делегують голосувальну силу відомим учасникам (дослідники, основні контрибьютори, спеціалісти DAO), які активно беруть участь у управлінні.

Профіль делегата — це пост Discourse/Mirror з позиціями щодо ключових питань. Реалізується через ERC20Votes.delegate(). Делегування не передає токени — лише голосувальну силу.

Off-chain управління (Snapshot)

Snapshot.org дозволяє безгазове голосування через підписи повідомлень. Використовується для сигнальних голосувань (перевірка температури) не пов'язаних з on-chain діями. Стратегії: erc20-balance-of, erc20-votes-with-overrides, delegation та десятки користувацьких стратегій.

Типовий двоступеневий процес:

  1. Перевірка температури на Snapshot — оцінка настроїв, безгазове
  2. On-chain пропозиція — якщо перевірка температури пройде з 60%+ підтримкою

Безпека управління

Атака Flash Loan на управління

Атака: flash loan → отримати тимчасовий контроль великої кількості токенів → делегувати собі → створити або просунути пропозицію → повернути кредит. Для створення пропозиції: proposalThreshold повинен бути достатньо високим. Для голосування: proposalSnapshot фіксується в минулому; flash loan не допомагає (немає історії делегування в поточному блоці).

ERC20Votes захищений від атак flash loan голосування саме через механізм чекпоїнтів. Уразливість існує тільки в proposalThreshold, якщо встановлено занадто низько.

Спам пропозицій і DOS

Без порога створення пропозицій, протоколи потопають у спаму. proposalThreshold (мінімум токенів для створення пропозицій) обов'язковий. Типові значення: 0.1% - 1% загального пропозиції.

Захоплення управління

Якщо зловмисник накопичує >50% голосувальної сили (або >кворум при низькій явці), він може пройти будь-яку пропозицію. Захисти:

  • Високий кворум (4-10% пропозиції)
  • Timelock з достатньою затримкою (7 днів)
  • Мультисиг Гранди з роллю CANCELLER у TimelockController
  • GovernorPreventLateQuorum — розширює період голосування, якщо кворум набраний в останні моменти (запобігає останній-хвилинним качаннями китів)

Оновлення через DAO

Смарт-контракти оновлюються через пропозицію DAO плюс timelock. Паттерни оновлення:

UUPS/Transparent Proxy + власник DAO. Governor — власник проксі. Пропозиція викликає upgradeTo(newImplementation). Timelock дає спільноті час перевірити новий код перед активацією.

Модульна архітектура без проксі. Кожен модуль замінюється через управління: пропозиція змінює адресу модуля в реєстровому контракті. Менш ризиковано, ніж повне оновлення.

Стек і типовий графік

Базовий on-chain DAO: OpenZeppelin Governor + TimelockController + ERC20Votes. 2-3 тижні розробки, 2-3 тижні аудиту.

DAO з управління казною, UI делегування, інтеграцією Snapshot, мультисигом Гранди: 6-10 тижнів розробки.

Повна платформа DAO з користувацькими модулями, veToken управління, системою калібрування, ринком мотузок: 3-6 місяців.

Компонент Технологія Обов'язковий
Governor OZ Governor / Governor Bravo Так
Токен голосування ERC20Votes Так
Timelock TimelockController Так, для production
Off-chain голосування Snapshot.org Рекомендується
Казна Safe мультисиг або Timelock Так
Delegation UI Tally / Boardroom / Custom Рекомендується
Форум Discourse / Commonwealth Так (соціальний шар)

Технічний стек: Solidity 0.8.x + Foundry + OpenZeppelin 5.x. Frontend: wagmi + viem + React. Індексація: The Graph subgraph для пропозицій і голосів (frontend не може показати історію без subgraph без ітерації подій).

Вартість розраховується після визначення моделі управління та обсягу.