12 KiB
English | Русский
Задание: Реализация мульти-чейн 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. Логика создания предложений
- Определение сетей: Получение списка
deployedNetworksчерез API/dle-v2 - Параллельное создание: Предложения создаются одновременно во ВСЕХ сетях DLE
- Кодирование операции:
_transferTokens(address,uint256)для перевода токенов от инициатора
3. Логика голосования
- Независимое голосование: Каждая сеть голосует отдельно
- Локальный кворум: Кворум считается по формуле
(forVotes / totalSupply) >= quorumPercentage - Голосование токенами: Вес голоса = баланс токенов избирателя
4. Логика исполнения
- Локальное исполнение: Каждый контракт проверяет свой локальный кворум
- Серверная координация: Backend собирает результаты кворумов из всех сетей
- Криптографические доказательства: Сервер подписывает глобальный статус кворума
- Глобальное исполнение: Контракт проверяет подпись и выполняет операцию
Техническая спецификация
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 - Отображение статуса по каждой сети
- Кнопки голосования для каждой активной сети
- Кнопка исполнения при глобальном кворуме
Алгоритм работы
Сценарий использования
-
Пользователь открывает форму
/management/transfer-tokens?address=0xdD27...9386 -
Вводит данные:
- Получатель:
0x123...abc - Сумма:
1000токенов - Описание:
"Перевод средств подрядчику" - Время:
7дней
- Получатель:
-
Нажимает "Создать"
-
Система:
- Определяет сети: Sepolia, Arbitrum Sepolia, Base Sepolia
- Создает предложения в каждой сети параллельно
- Кодирует
_transferTokens(инициатор, получатель, сумма)
-
На странице предложений появляется одна карточка с статусом по сетям
-
Пользователи голосуют в каждой сети отдельно
-
При локальном кворуме контракт эмитирует
QuorumReached -
Backend собирает результаты из всех сетей
-
При глобальном кворуме сервер подписывает доказательство
-
Пользователь вызывает
executeWithGlobalQuorum()с подписью -
Контракт проверяет подпись и выполняет перевод
Безопасность
Уровни защиты
- On-chain проверки: Баланс токенов, сроки голосования, кворум
- Криптографические доказательства: Подпись сервера для глобального кворума
- Многоуровневая валидация: Локальный + глобальный кворум
- Отказоустойчивость: Graceful degradation при недоступности сетей
Риски и mitigation
- Сервер скомпрометирован: Проверка подписи предотвращает подделку
- Сеть недоступна: Локальное голосование работает независимо
- Replay attacks: Проверка ID предложения и chainId
- Front-running: Использование commit-reveal схемы при необходимости
Тестирование
Критерии приемки
- Форма создания предложения работает
- Предложение создается во всех цепочках DLE
- Голосование происходит отдельно в каждой цепочке
- Кворум считается отдельно для каждой цепочки
- Перевод токенов происходит от инициатора предложения
- Серверная координация с криптографическими доказательствами
- Группировка предложений в интерфейсе
- Обработка ошибок и edge cases
Test cases
- Создание предложения в мульти-чейн среде
- Голосование в одной сети при недоступности других
- Исполнение при глобальном кворуме
- Исполнение при частичном кворуме (должен fail)
- Перевод токенов от инициатора с достаточным балансом
- Попытка перевода с недостаточным балансом (должен 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 с криптографическими доказательствами, обеспечивая баланс между удобством использования и безопасностью.