Files
DLE/docs/TASK_REQUIREMENTS.md

12 KiB
Raw Blame History

Задание: Реализация мульти-чейн governance системы для DLE

Статус выполнения

  • Форма создания предложения работает
  • Предложение создается во всех цепочках DLE
  • Голосование происходит отдельно в каждой цепочке
  • Кворум считается отдельно для каждой цепочки
  • Личный перевод токенов от инициатора предложения
  • Группировка предложений по description + initiator
  • Серверная координация с криптографическими доказательствами
  • Убрана хардкод цепочек - используются deployedNetworks из API

Контекст

DLE (Digital Legal Entity) - децентрализованная юридическая сущность с контрактами в нескольких блокчейн-сетях. Необходимо реализовать систему управления токенами через мульти-чейн governance, где холдеры токенов могут переводить токены через голосование с кворумом.

Архитектура системы

Мульти-чейн компоненты

  • Frontend: Vue.js приложение с Web3 интеграцией
  • Backend: Node.js сервер для координации и API
  • Smart Contracts: DLE контракты в каждой поддерживаемой сети
  • Database: PostgreSQL для хранения метаданных
  • WebSocket: Real-time синхронизация между сетями

Поддерживаемые сети

  • Ethereum Sepolia (chainId: 11155111)
  • Arbitrum Sepolia (chainId: 421614)
  • Base Sepolia (chainId: 84532)

Требования к функционалу

1. Форма создания предложения о переводе токенов

URL: /management/transfer-tokens?address=<DLE_ADDRESS>

Поля формы:

  • Адрес получателя (обязательное, address)
  • Сумма перевода (обязательное, number в токенах)
  • Описание предложения (опциональное, string)
  • Время голосования (обязательное, number в днях)

2. Логика создания предложений

  1. Определение сетей: Получение списка deployedNetworks через API /dle-v2
  2. Параллельное создание: Предложения создаются одновременно во ВСЕХ сетях DLE
  3. Кодирование операции: _transferTokens(address,uint256) для перевода токенов от инициатора

3. Логика голосования

  1. Независимое голосование: Каждая сеть голосует отдельно
  2. Локальный кворум: Кворум считается по формуле (forVotes / totalSupply) >= quorumPercentage
  3. Голосование токенами: Вес голоса = баланс токенов избирателя

4. Логика исполнения

  1. Локальное исполнение: Каждый контракт проверяет свой локальный кворум
  2. Серверная координация: Backend собирает результаты кворумов из всех сетей
  3. Криптографические доказательства: Сервер подписывает глобальный статус кворума
  4. Глобальное исполнение: Контракт проверяет подпись и выполняет операцию

Техническая спецификация

Smart Contract (DLE.sol)

Структура Proposal

struct Proposal {
    uint256 id;
    string description;
    uint256 forVotes;
    uint256 againstVotes;
    bool executed;
    bool canceled;
    uint256 deadline;
    address initiator;           // Создатель предложения
    bytes operation;             // Закодированная операция
    uint256[] targetChains;      // Целевые сети для исполнения
    uint256 snapshotTimepoint;   // Точка снимка для голосования
    mapping(address => bool) hasVoted;
}

Функция _transferTokens

function _transferTokens(address _sender, address _recipient, uint256 _amount) internal {
    require(balanceOf(_sender) >= _amount, "Insufficient balance");
    _transfer(_sender, _recipient, _amount);
    emit TokensTransferredByGovernance(_recipient, _amount);
}

События

event ProposalCreated(uint256 proposalId, address initiator, string description);
event QuorumReached(uint256 proposalId, uint256 chainId);
event ProposalExecuted(uint256 proposalId, bytes operation);

Backend (Node.js)

Сервис координации кворумов

class QuorumCoordinator {
    // Сбор результатов голосования из всех сетей
    async collectQuorumResults(proposalId) {
        // Слушать события QuorumReached из всех сетей
        // Сохранять в базу данных
    }

    // Генерация криптографических доказательств
    async generateGlobalQuorumProof(proposalId) {
        // Подписать глобальный статус кворума
        // Вернуть подпись для контрактов
    }
}

API Endpoints

  • GET /dle-v2 - получение информации о DLE и сетях
  • POST /api/dle-proposals/get-proposals - получение списка предложений
  • POST /api/dle-proposals/create-proposal - создание предложения
  • POST /api/dle-proposals/vote-proposal - голосование
  • POST /api/dle-proposals/execute-proposal - исполнение

Frontend (Vue.js)

Компонент TransferTokensFormView

  • Валидация формы
  • Кодирование операции перевода
  • Параллельное создание предложений во всех сетях
  • Обработка ошибок и отображение результатов

Компонент DleProposalsView

  • Группировка предложений по description + initiator
  • Отображение статуса по каждой сети
  • Кнопки голосования для каждой активной сети
  • Кнопка исполнения при глобальном кворуме

Алгоритм работы

Сценарий использования

  1. Пользователь открывает форму /management/transfer-tokens?address=0xdD27...9386

  2. Вводит данные:

    • Получатель: 0x123...abc
    • Сумма: 1000 токенов
    • Описание: "Перевод средств подрядчику"
    • Время: 7 дней
  3. Нажимает "Создать"

  4. Система:

    • Определяет сети: Sepolia, Arbitrum Sepolia, Base Sepolia
    • Создает предложения в каждой сети параллельно
    • Кодирует _transferTokens(инициатор, получатель, сумма)
  5. На странице предложений появляется одна карточка с статусом по сетям

  6. Пользователи голосуют в каждой сети отдельно

  7. При локальном кворуме контракт эмитирует QuorumReached

  8. Backend собирает результаты из всех сетей

  9. При глобальном кворуме сервер подписывает доказательство

  10. Пользователь вызывает executeWithGlobalQuorum() с подписью

  11. Контракт проверяет подпись и выполняет перевод

Безопасность

Уровни защиты

  1. On-chain проверки: Баланс токенов, сроки голосования, кворум
  2. Криптографические доказательства: Подпись сервера для глобального кворума
  3. Многоуровневая валидация: Локальный + глобальный кворум
  4. Отказоустойчивость: Graceful degradation при недоступности сетей

Риски и mitigation

  • Сервер скомпрометирован: Проверка подписи предотвращает подделку
  • Сеть недоступна: Локальное голосование работает независимо
  • Replay attacks: Проверка ID предложения и chainId
  • Front-running: Использование commit-reveal схемы при необходимости

Тестирование

Критерии приемки

  • Форма создания предложения работает
  • Предложение создается во всех цепочках DLE
  • Голосование происходит отдельно в каждой цепочке
  • Кворум считается отдельно для каждой цепочки
  • Перевод токенов происходит от инициатора предложения
  • Серверная координация с криптографическими доказательствами
  • Группировка предложений в интерфейсе
  • Обработка ошибок и edge cases

Test cases

  1. Создание предложения в мульти-чейн среде
  2. Голосование в одной сети при недоступности других
  3. Исполнение при глобальном кворуме
  4. Исполнение при частичном кворуме (должен fail)
  5. Перевод токенов от инициатора с достаточным балансом
  6. Попытка перевода с недостаточным балансом (должен fail)

Развертывание

Требования к инфраструктуре

  • Backend сервер с доступом к RPC всех сетей
  • Database для хранения метаданных предложений
  • SSL сертификаты для безопасной коммуникации
  • Monitoring для отслеживания состояния сетей

Переменные окружения

# RPC URLs
SEPOLIA_RPC_URL=https://1rpc.io/sepolia
ARBITRUM_SEPOLIA_RPC_URL=https://sepolia-rollup.arbitrum.io/rpc
BASE_SEPOLIA_RPC_URL=https://sepolia.base.org

# Database
DATABASE_URL=postgresql://user:pass@localhost:5432/dle

# Server keys for signing
SERVER_PRIVATE_KEY=0x...

Заключение

Реализована полнофункциональная мульти-чейн governance система для управления токенами DLE. Система обеспечивает децентрализованное принятие решений с координацией через trusted server с криптографическими доказательствами, обеспечивая баланс между удобством использования и безопасностью.