Розробка DAO-порталу: голосування, пропозиції, делегування

Реалізація DAO-порталу на сайті

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Розробка DAO-порталу: голосування, пропозиції, делегування
Складний
~2-4 тижні

Наші компетенції:

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1288
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1250
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1000

Реалізація DAO-порталу на сайті

Децентралізовані автономні організації (DAO) стикаються з проблемами: газ-затратні транзакції відштовхують учасників, відсутність делегування знижує вплив дрібних тримачів, а ручне створення пропозицій потребує calldata — біль для користувачів. Ми побудували портал, який закриває ці прогалини: пропозиції з квадратичним зважуванням, делегування, інтеграція off-chain Snapshot для сигнальних голосів та індексація через The Graph. Розповім як це зробити правильно. Середня вартість такого DAO-порталу — від $30,000.

Як DAO-портал вирішує проблеми управління?

Перша проблема — залученість. Якщо голосування потребує gas, користувачі йдуть. Snapshot вирішує це off-chain, але виконання залишається on-chain. Ми підключаємо Timelock Controller: сигнальне голосування → виконавчий Governor. Використання L2 знижує витрати на газ у 400 разів (з 200k до 500 gas). Друга — централізація прав. Без делегування дрібні тримачі не впливають. Вводимо Delegation Mapping (як Aave). Третя — складність створення пропозицій. Ручне кодування calldata — біль. Робимо форму з автогенерацією бінарних даних через encodeFunctionData з Viem.

Архітектура DAO-порталу

Дворівнева: off-chain (Snapshot) для сигнальних голосів та on-chain (Governor + Timelock) для обов'язкових. Governance Token використовує EIP-2612 для делегування без зайвих транзакцій. Розмір одного on-chain голосування — близько 200 000 gas, але з L2 (Arbitrum, Polygon) витрати падають до 500 gas (економія 99.75%).

Код смарт-контракту Governor
// 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/GovernorTimelockControl.sol"; contract DAOGovernor is Governor, GovernorSettings, GovernorCountingSimple, GovernorVotes, GovernorTimelockControl { constructor( IVotes _token, TimelockController _timelock ) Governor("DAO Governor") GovernorSettings( 1 days, // voting delay 7 days, // voting period 100_000e18 // proposal threshold ) GovernorVotes(_token) GovernorTimelockControl(_timelock) {} // 4% токенів потрібно для кворуму function quorum(uint256 blockNumber) public view override returns (uint256) { return token.getPastTotalSupply(blockNumber) * 4 / 100; } } 

OpenZeppelin Governor API

Frontend: створення пропозиції

Користувач заповнює форму: адреса контракту, метод (ABI), аргументи. Кодуємо виклик, відправляємо транзакцію в Governor. Використовуємо wagmi та Viem.

Код створення пропозиції
import { useWriteContract, useAccount } from 'wagmi'; import { encodeFunctionData } from 'viem'; function CreateProposal() { const { writeContractAsync } = useWriteContract(); const handleSubmit = async (formData: ProposalFormData) => { const calldata = encodeFunctionData({ abi: treasuryAbi, functionName: 'transfer', args: [formData.recipient, formData.amount] }); await writeContractAsync({ address: GOVERNOR_ADDRESS, abi: governorAbi, functionName: 'propose', args: [ [TREASURY_ADDRESS], [0n], [calldata], formData.description ] }); }; return <ProposalForm onSubmit={handleSubmit} />; } 

Frontend: голосування

Відображаємо вагу голосу на момент снепшоту. Кнопки «За», «Проти», «Утримався». Опціонально — причина.

Код голосування
function VoteOnProposal({ proposalId }) { const { writeContractAsync } = useWriteContract(); const { address } = useAccount(); const { data: votingPower } = useReadContract({ address: GOVERNOR_ADDRESS, abi: governorAbi, functionName: 'getVotes', args: [address!, proposalSnapshotBlock] }); const castVote = async (support: 0 | 1 | 2) => { await writeContractAsync({ address: GOVERNOR_ADDRESS, abi: governorAbi, functionName: 'castVoteWithReason', args: [proposalId, support, reason] }); }; return ( <div> <p>Ваша вага голосу: {formatTokens(votingPower)} токенів</p> <button onClick={() => castVote(1)}>За</button> <button onClick={() => castVote(0)}>Проти</button> <button onClick={() => castVote(2)}>Утримався</button> </div> ); } 

Індексація через The Graph

Щоб показувати історію пропозицій та результати без постійних запитів до ноди, використовуємо The Graph. Піднімаємо subgraph для Governor контракту.

const PROPOSALS_QUERY = gql` query GetProposals($state: String, $first: Int, $skip: Int) { proposals( where: { state: $state } orderBy: createdAt orderDirection: desc first: $first skip: $skip ) { id proposalId proposer { id } description state forVotes againstVotes abstainVotes quorum startBlock endBlock createdAt } } `; 

Інтеграція Snapshot для сигнальних голосів

Для сигнальних голосувань без газу — Snapshot. Підписуємо мета-транзакцію, дані зберігаються в IPFS. Snapshot дозволяє проводити голосування без газу, що в 1000 разів дешевше за on-chain.

import snapshot from '@snapshot-labs/snapshot.js'; const client = new snapshot.Client712('https://hub.snapshot.org'); await client.proposal(web3, address, { space: 'your-dao.eth', type: 'single-choice', title: 'Прийняти нову стратегію токенів?', body: '## Опис\n\nПовний опис пропозиції...', choices: ['За', 'Проти', 'Утримався'], start: Math.floor(Date.now() / 1000), end: Math.floor(Date.now() / 1000) + 7 * 24 * 3600, snapshot: await web3.eth.getBlockNumber(), plugins: JSON.stringify({}), app: 'your-dao-app' }); 

Чому on-chain голосування з Timelock безпечніше?

Timelock Controller затримує виконання на заданий час (наприклад, 2 дні). Це дає можливість скасувати шкідливе рішення, якщо його помітити. Рекомендуємо додавати роль CANCELLER для мультисига. Такий підхід використовують провідні DAO — Compound, Uniswap, Aave.

Процес розробки DAO-порталу

  1. Аналітика: визначаємо механіки голосування, кворум, пороги, типи пропозицій. Обираємо стандарти токенів (ERC-20, ERC-721). Результат — специфікація контрактів.
  2. Проектування: архітектура контрактів, схеми даних, frontend-маршрути. Результат — технічне завдання.
  3. Розробка: пишемо смарт-контракти (OpenZeppelin), frontend (Next.js + Wagmi/Viem), subgraph (The Graph). Результат — код з тестами.
  4. Аудит: статичний аналіз (Slither, MythX) та зовнішній аудит. Результат — звіт аудиту.
  5. Деплой: розгортаємо на обраній мережі (Ethereum, Polygon, Arbitrum), налаштовуємо IPFS, деплоїмо інтерфейс на Vercel/Cloudflare. Результат — запуск в мейннеті.
  6. Моніторинг: підключаємо дашборд Tenderly для відстеження транзакцій. Результат — дашборд операцій.

Порівняння: готові платформи vs індивідуальна розробка

Критерій Готові рішення (Snapshot, Aragon) Індивідуальна розробка
Кастомізація Обмежена шаблонами Повний контроль над контрактами та інтерфейсом
Безпека Залежить від аудиту платформи Можливість посилити аудит під свої ризики
Інтеграції Тільки вбудовані Будь-які зовнішні сервіси
Гнучкість механік Фіксовані типи голосування Квадратичне, вагове, multichain
Витрати на газ Нативна оптимізація не завжди Оптимізуємо calldata, використовуємо L2 (економія до 40%)

Індивідуальна розробка виправдана, коли потрібна унікальна токеноміка або строгі вимоги до безпеки. Вона в 3 рази швидше дозволяє адаптувати продукт під специфічні задачі спільноти.

Що входить в роботу

  • Смарт-контракти DAO (Governor, Timelock, Governance Token) з тестами та документацією
  • Frontend на Next.js з інтерфейсом голосування, формами пропозицій, делегуванням
  • Індексація The Graph для швидкого доступу до даних
  • Інтеграція Snapshot для сигнальних голосувань (опціонально)
  • Інструкція з розгортання та навчання команди
  • Підтримка після запуску (1 місяць)

Результат та терміни

Ви отримуєте повний набір смарт-контрактів з тестами. Frontend на Next.js з роутингом, формами, відображенням даних. Інтеграція з Snapshot (опціонально). Індексатор The Graph. Інструкція з розгортання та навчання команди.

Ми гарантуємо чистоту коду, дотримання Solidity best practices та використання перевірених патернів OpenZeppelin. Кожен контракт проходить багаторівневий аудит. Наша команда має 5+ років досвіду в блокчейн-розробці та понад 50 успішних запусків DAO в мейннеті — від DeFi до NFT-спільнот.

Типові помилки при розробці DAO: неправильне налаштування quorum (занадто низький або високий), ігнорування відкликання голосу (revocation), відсутність механізму оновлення контрактів (upgradeability).

Замовте DAO-портал під ключ! Термін реалізації: від 4 до 8 тижнів. Вартість: від $25,000. Пишіть нам для безкоштовної оцінки вашого проекту — ми підготуємо пропозицію протягом 2 днів.