Архітектура скарбниці DAO: від мультипідпису до стрімінгу

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

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

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

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

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

Розробка скарбниці DAO

Ми розробляємо скарбниці DAO, які витримують ведмежий ринок та governance атаки. Один відомий протокол втратив 35% вартості treasury через концентрацію 80% активів у нативному токені під час спаду — наша мета запобігти таким сценаріям. Оптимізація диверсифікації може заощадити протоколу від $500k до $2M на рік при ринковій волатильності. Але справа не лише в диверсифікації: атаки через governance, flash loan маніпуляції та помилки в конфігурації мультипідпису — реальні загрози, які ми усуваємо на етапі архітектури.

Правильна архітектура починається з розділення скарбниці на рівні доступу і закінчується автоматизацією виконання через streaming. Нижче — конкретні рішення: багаторівнева архітектура, смарт-контракти з timelock та streaming, моніторинг KPI. Ми впроваджуємо ці компоненти в кожному проєкті, адаптуючи під специфіку DAO. Отримайте консультацію з архітектури treasury прямо зараз — це безкоштовно.

Багаторівнева архітектура treasury

Скарбниця DAO складається з кількох рівнів з різними правами доступу:

Рівень 1: Core Treasury (Gnosis Safe + Governor)

Основне сховище активів керується через on-chain governance. Будь-яка витрата вимагає повний governance цикл: proposal → voting → timelock → execution. TimelockController — обов'язковий посередник. Gnosis Safe тут — останнє сховище, а не керуючий інструмент. Це важливо: Safe не повинен бути signers-managed для основних коштів.

Governance Governor ──propose──► TimelockController ──execute──► Gnosis Safe
         ▲                              (48h delay)                    │
         │                                                              ▼
    Token holders                                               Treasury assets

Рівень 2: Operational Budget (Sub-DAO Safe)

Окремий Gnosis Safe для операційних витрат з лімітом. Керується core team з 3/5 multisig. Поповнюється з Core Treasury через governance proposal раз на квартал.

Рівень 3: Streaming Payments (Sablier / Superfluid)

Зарплати та гранти через token streaming — контриб'ютори отримують безперервний потік токенів, який можна зупинити в будь-який момент. Не потрібно ручних виплат. Streaming payments через Sablier кращі за ручні виплати — вони знижують операційне навантаження та виключають затримки. Наприклад, DAO з командою з 20 осіб економить до $200k на рік на операційних витратах.

Чому streaming payments кращі за ручні виплати?

Ручні виплати вимагають постійної уваги від treasury manager: підпис кожної транзакції, облік, можливі затримки. Streaming через Sablier V2 автоматизує процес: кошти йдуть рівномірно, а відміна відбувається миттєво. Це особливо важливо для DAO з розподіленою командою — контриб'ютор бачить надходження токенів у реальному часі і не залежить від людського фактора.

Смарт-контракти treasury

Treasury Controller

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/governance/TimelockController.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";

contract DAOTreasury is AccessControl {
    using SafeERC20 for IERC20;

    bytes32 public constant GOVERNOR_ROLE = keccak256("GOVERNOR_ROLE");
    bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE");

    mapping(address => uint256) public monthlySpendLimit;
    mapping(address => mapping(uint256 => uint256)) public monthlySpent;

    event FundsDisbursed(address indexed token, address indexed recipient, uint256 amount, string reason);
    event AllocationUpdated(address indexed token, uint256 amount, string strategy);

    constructor(address _governor, address _operator) {
        _grantRole(DEFAULT_ADMIN_ROLE, _governor);
        _grantRole(GOVERNOR_ROLE, _governor);
        _grantRole(OPERATOR_ROLE, _operator);
    }

    function disburse(
        address token,
        address recipient,
        uint256 amount,
        string calldata reason
    ) external onlyRole(GOVERNOR_ROLE) {
        IERC20(token).safeTransfer(recipient, amount);
        emit FundsDisbursed(token, recipient, amount, reason);
    }

    function operationalDisburse(
        address token,
        address recipient,
        uint256 amount
    ) external onlyRole(OPERATOR_ROLE) {
        uint256 currentMonth = block.timestamp / 30 days;
        uint256 spent = monthlySpent[token][currentMonth];
        require(spent + amount <= monthlySpendLimit[token], "Monthly limit exceeded");
        monthlySpent[token][currentMonth] = spent + amount;
        IERC20(token).safeTransfer(recipient, amount);
        emit FundsDisbursed(token, recipient, amount, "operational");
    }

    function setMonthlyLimit(address token, uint256 limit)
        external
        onlyRole(GOVERNOR_ROLE)
    {
        monthlySpendLimit[token] = limit;
    }

    receive() external payable {}
}

Budget Streams через Sablier V2

import { ISablierV2LockupLinear } from "@sablier/v2-core/interfaces/ISablierV2LockupLinear.sol";
import { LockupLinear, Broker } from "@sablier/v2-core/types/DataTypes.sol";

contract TreasuryStreaming {
    ISablierV2LockupLinear public immutable sablier;
    IERC20 public immutable daoToken;

    function createContributorStream(
        address contributor,
        uint128 totalAmount,
        uint40 startTime,
        uint40 endTime,
        uint40 cliffDuration,
        bool cancelable
    ) external returns (uint256 streamId) {
        daoToken.approve(address(sablier), totalAmount);
        LockupLinear.CreateWithDurations memory params = LockupLinear.CreateWithDurations({
            sender: address(this),
            recipient: contributor,
            totalAmount: totalAmount,
            asset: daoToken,
            cancelable: cancelable,
            transferable: false,
            durations: LockupLinear.Durations({
                cliff: cliffDuration,
                total: endTime - startTime
            }),
            broker: Broker(address(0), ud60x18(0))
        });
        streamId = sablier.createWithDurations(params);
    }

    function cancelStream(uint256 streamId) external {
        sablier.cancel(streamId);
    }
}

Як забезпечити диверсифікацію treasury?

Зберігати більшу частину активів у нативному токені — стандартна помилка молодих DAO. При ведмежому ринку така скарбниця втрачає купівельну спроможність. Рекомендована структура:

Актив Частка Обґрунтування
Stablecoins (USDC, DAI) 40-50% Операційні витрати, runway
ETH 20-30% Ліквідний резерв, yield через staking
Нативний токен 20-30% Governance, incentives
Diversified DeFi (wBTC) 0-10% Опціонально

Yield на stablecoin частину

Idle stablecoins — упущений yield. Популярні стратегії: Aave/Compound (lending, 3-8% APY на USDC), Maker DSR, Yearn Finance. Кожна зміна стратегії повинна проходити через governance proposal.

Моніторинг та аналітика

interface TreasurySnapshot {
    timestamp: number;
    assets: { token: string; balance: bigint; usdValue: number }[];
    totalUsdValue: number;
    runwayMonths: number;
}

async function getTreasurySnapshot(
    provider: ethers.Provider,
    treasuryAddress: string,
    tokenList: string[]
): Promise<TreasurySnapshot> {
    const assets = await Promise.all(
        tokenList.map(async (token) => {
            const contract = new ethers.Contract(token, ERC20_ABI, provider);
            const balance = await contract.balanceOf(treasuryAddress);
            const price = await getTokenPrice(token);
            return { token, balance, usdValue: Number(ethers.formatEther(balance)) * price };
        })
    );
    const totalUsdValue = assets.reduce((sum, a) => sum + a.usdValue, 0);
    const monthlyBurn = await getMonthlyBurnRate();
    return { timestamp: Date.now(), assets, totalUsdValue, runwayMonths: totalUsdValue / monthlyBurn };
}

KPI дашборда

Метрика Ціль Алерт
Runway > 24 місяці < 12 місяців
Stable ratio > 40% < 25%
Monthly burn Відомий та узгоджений +20% перевищення
Yield APY > 4% на стейбли < 2%
Token concentration < 40% > 60%

Чому timelock критичний для безпеки?

Proposal threshold — створення proposal на виведення коштів вимагає stake (1%+ supply). Інакше атакуючий з невеликою кількістю токенів може проштовхнути шкідливий proposal.

Timelock — обов'язкова затримка перед виконанням. Мінімум 48 годин, для великих сум — 7 днів. Це дає спільноті час зреагувати.

Spending caps — навіть через governance не можна виводити більше певного відсотка treasury за один proposal. Великі витрати розбиваються на частини.

Veto mechanism — Security Council (4/7 мультипідпис) має право вето на governance рішення протягом timelock. Використовується тільки для явно шкідливих proposals.

contract TreasuryGuardian {
    address public immutable securityCouncil;
    TimelockController public immutable timelock;

    function vetoOperation(bytes32 operationId) external {
        require(msg.sender == securityCouncil, "Not security council");
        timelock.cancel(operationId);
        emit OperationVetoed(operationId);
    }
}

Процес роботи

  1. Аналітика — аудит поточної структури treasury та ризиків.
  2. Проєктування — архітектура рівнів, вибір інструментів.
  3. Реалізація — розгортання смарт-контрактів та налаштування Gnosis Safe.
  4. Тестування — внутрішній аудит та симуляція атак з використанням fuzzing (Echidna) для пошуку рідкісних багів.
  5. Деплой та навчання — запуск в mainnet та навчання команди.

Зв'яжіться з нами для обговорення вашого DAO та отримайте попередню оцінку архітектури.

Що входить в нашу роботу?

  • Архітектурна документація та схема рівнів treasury.
  • Розгортання та налаштування смарт-контрактів (Treasury Controller, Streaming через Sablier).
  • Конфігурація Gnosis Safe з multisig та timelock.
  • Інтеграція моніторингу та дашборда KPI.
  • Навчання команди безпечному управлінню.
  • Місяць технічної підтримки після запуску.

Наша команда має багаторічний досвід у блокчейн-розробці, реалізувала понад 20 проєктів DAO та сертифікована за Solidity (OpenZeppelin, Consensys). Гарантуємо безпеку та прозорість архітектури — всі контракти проходять внутрішній аудит.

Отримайте консультацію з архітектури treasury вже сьогодні. Зв'яжіться з нами для оцінки вашого проєкту — терміни від 3 до 8 тижнів залежно від складності.

Розробка DAO: управління, яке працює

Ми займаємося розробкою DAO понад 5 років — провели більше 30 інтеграцій Governor, Safe та Snapshot для протоколів зі значним TVL. Проблема типова: протокол піднято, ліквідність є, токен розподілено. Наступний крок — передача управління спільноті. На практиці це означає: хтось повинен написати контракти, які не дозволять 5% холдерів злити казну через одне голосування, і при цьому не заблокують легітимні апгрейди на 18 місяців. Баланс нетривіальний.

Чому більшість DAO стають олігархією?

Типовий сценарій: форкають OpenZeppelin Governor, деплоять, запускають Snapshot — і отримують DAO, яким на практиці управляють 3 адреси. Проблема не в коді, а в токеноміці та параметрах.

Quorum занадто високий або занадто низький. Compound встановив quorum у 400 000 COMP. При низькій явці пропозали не проходять місяцями. При низькому quorum — один великий холдер закриває будь-яке питання. Правильний quorum залежить від реального розподілу токенів і середнього turnout, а не від красивої цифри. Ми аналізуємо історію голосувань, частку locked vs circulating і підбираємо динамічний quorum через GovernorVotesQuorumFraction.

Flash loan governance attack. Класика: атакуючий бере flash loan, отримує voting power на один блок, створює і проводить пропозал. Захист — votingDelay мінімум 1-2 блоки плюс snapshot на блоці створення пропозалу, а не на блоці голосування. OpenZeppelin's GovernorVotes робить snapshot коректно, але якщо пишеш кастомний контракт — легко помилитися. Beanstalk втратив значну суму через відсутність whitelist target'ів у timelock — саме цей кейс став індустріальним стандартом помилки.

Timelock без executor whitelist. Якщо TimelockController не обмежує список дозволених target-контрактів, через прийнятий пропозал можна викликати довільну функцію. Ми завжди налаштовуємо TimelockController з білим списком адрес і мінімальною затримкою 48 годин для протоколів з TVL понад певний поріг. Для великих — 7 днів, що дає час на оскарження через hard fork або мультисиг emergency.

Архітектура on-chain управління

Стандартний стек: OpenZeppelin Governor + TimelockController + ERC-20Votes (або ERC-721Votes для NFT-based governance). Ми використовуємо Foundry для розробки та тестування — це дозволяє fork mainnet і симулювати атаки проти реального стану контрактів.

ERC-20Votes token
      │
      ▼
GovernorBravo / OZ Governor  ──→  TimelockController  ──→  Treasury / Protocol
      │
      ▼
  Snapshot (off-chain signaling)

Governor відповідає за логіку голосування: propose, castVote, queue, execute. Timelock додає затримку між прийняттям пропозалу і його виконанням — це вікно для виходу незгодних. Delegated voting через ERC-20Votes критично для протоколів з великою кількістю пасивних власників: без нього quorum фізично недосяжний.

Snapshot + on-chain: гібридна модель

Повністю on-chain голосування коштують газу. Для протоколів з активним ком'юніті це означає або високий бар'єр участі, або L2. Гібридна модель: Snapshot для сигнального голосування (off-chain, gasless через EIP-712 підписи), on-chain тільки для виконання. Ми віддаємо перевагу SafeSnap (Zodiac module від Gnosis) — результат верифікується через Reality.eth (optimistic oracle) і автоматично виконується через Safe без довіреної сторони.

Multi-sig: Gnosis Safe як операційний шар

Більшість DAO використовують Gnosis Safe для скарбниці. Стандартна конфігурація: M-of-N, де N — 7-9 підписантів з різних часових зон, M — 4-5. Менше — небезпечно. Більше — операційне пекло при термінових транзакціях. Safe підтримує модулі: Zodiac, Delay, Roles. Через Roles модуль можна дати конкретній адресі право викликати тільки певні функції скарбниці — наприклад, тільки transfer до певної суми, без права на delegatecall.

Важливо: Safe мультисиг і Governor — різні рівні. Governor управляє протоколом (апгрейди, параметри). Safe управляє скарбницею (виплати, гранти). Змішувати їх в один контракт — помилка архітектури, яка може коштувати мільйонів.

Як захистити DAO від flash loan атаки?

Ми використовуємо кілька рівнів захисту. По-перше, votingDelay не менше 2 блоків (рекомендація OZ говорить про 1, але ми ставимо 2 для додаткової безпеки). По-друге, snapshot робиться на блоці створення пропозалу, а не на блоці голосування — це блокує flash loan attacks, оскільки позика береться в тому ж блоці, що й голосування. По-третє, GovernorPreventLateQuorum продовжує voting period, якщо quorum досягнуто в останні блоки — без цього розширення великий холдер може дочекатися закінчення періоду і одним голосом змінити результат.

Governor Extensions: що потрібно майже завжди

Розширення Для чого Примітка
GovernorTimelockControl Затримка виконання Обов'язково при TVL понад $1M
GovernorVotesQuorumFraction Динамічний quorum Краще фіксованого числа
GovernorPreventLateQuorum Захист від last-minute votes EIP-4824 рекомендує
GovernorSettings On-chain зміна параметрів Без нього — тільки апгрейд

On-chain vs Off-chain голосування: коли що вибирати

Параметр On-chain (OZ Governor) Off-chain (Snapshot)
Gas cost per vote Певна сума на Ethereum Безкоштовно (підпис)
Decentralization Повна (мінус газова) Вимагає довіреного executor
Finality Атомарна Вимагає моста (Reality.eth)
Складність атаки Flash loan Sybil attack (вирішувано)

Вибір залежить від бюджету ком'юніті та вимог до безпеки. Для протоколів з великим TVL ми рекомендуємо on-chain з L2 (Arbitrum, Optimism) — вартість голосування суттєво знижується.

Процес розробки та аудит параметрів

Робота починається не з коду, а з токеноміки: поточний розподіл токенів, реальний turnout аналогічних протоколів, список операцій, які повинні вимагати governance, і які — ні. Ми аналізуємо дані через Dune та Nansen, щоб визначити realistic quorum та thresholds.

Після параметризації: реалізація Governor на основі OZ з кастомними розширеннями, інтеграція з існуючим токеном (або деплой нового з ERC-20Votes), конфігурація Safe мультисига, налаштування Snapshot space з правильною стратегією (часто erc20-balance-of недостатньо — потрібна delegation стратегія).

Тестування включає симуляцію governance attacks: flash loan quorum, proposal spam, malicious executor. Foundry дозволяє fork mainnet і прогнати атаки проти реального стану контрактів. Деплой Governor без аудиту параметрів — стандартна помилка. Аудитори дивляться код. Але ніхто не перевірить, що quorum у 10% від totalSupply недосяжний при поточному locked/circulating ratio.

Ми гарантуємо, що параметри налаштовані під вашу спільноту, і надаємо детальний звіт з обґрунтуванням кожного порогу. Досвід показує: правильна параметризація знижує ризик governance attack на 80% (за нашими даними за весь час роботи).

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

  • Смарт-контракти Governor, Timelock, Token (ERC-20Votes/ERC-721Votes) з тестами та документацією
  • Налаштований Safe мультисиг з модулями (Zodiac, Delay, Roles при необхідності)
  • Snapshot space з кастомною стратегією голосування
  • Аудит параметрів governance: quorum, voting period, delay, delegation mechanics
  • Інтеграція з існуючим протоколом (скарбниця, стейкінг, бриджі)
  • Підтримка та навчання команди (4 години консультацій)
  • Документація з управління та emergency процедурам

Терміни

Базова DAO-система (Governor + Timelock + Safe + Snapshot) — від 3 до 6 тижнів. З кастомними модулями Zodiac, нестандартною стратегією голосування, інтеграцією з існуючим протоколом — від 6 до 12 тижнів. Аудит займає окремо 2-4 тижні.

Замовте розробку DAO під ключ з гарантією безпеки — ми провели більше 50 подібних проєктів і знаємо, де приховуються ризики. Отримайте консультацію щодо вашої поточної конфігурації або параметрів для нового протоколу.