10 KiB
10 KiB
Архитектура проекта DLE
🎯 Общий принцип
Backend - только для чтения данных из блокчейна Frontend - для выполнения транзакций через MetaMask
📋 Что у нас есть:
1. ✅ Смарт контракт DLE.sol
- Находится в
backend/contracts/DLE.sol - Содержит все функции для управления DLE
- Деплоится в сеть Sepolia (Chain ID: 11155111)
2. ✅ Backend API (модульная архитектура)
- Порт: 8000
- Принцип: Разделение по функциональности
- Функции только для чтения данных из блокчейна
3. ✅ Frontend (выполнение транзакций)
- Файл:
frontend/src/utils/dle-contract.js - Порт: 5173
- Функции для выполнения транзакций через MetaMask
🔄 Как это работает:
Чтение данных:
Frontend → Backend API → Blockchain
Выполнение транзакций:
Frontend → MetaMask → Blockchain
📚 Backend API (модульная архитектура):
🏗️ Структура модулей:
backend/routes/
├── dleCore.js # Основные функции DLE
├── dleProposals.js # Функции предложений
├── dleModules.js # Функции модулей
├── dleTokens.js # Функции токенов
├── dleAnalytics.js # Аналитика и история
├── dleMultichain.js # Мультичейн функции
└── blockchain.js # Устаревший монолитный файл
🔧 Модули и их функции:
dleCore.js - Основные функции DLE:
POST /dle-core/read-dle-info- информация о DLEPOST /dle-core/get-governance-params- параметры управленияPOST /dle-core/is-active- проверка активности DLEPOST /dle-core/deactivate-dle- проверка возможности деактивации
dleProposals.js - Функции предложений:
POST /dle-proposals/get-proposals- список предложенийPOST /dle-proposals/get-proposal-info- информация о предложенииPOST /dle-proposals/get-proposal-state- состояние предложенияPOST /dle-proposals/get-proposal-votes- голоса по предложениюPOST /dle-proposals/get-proposals-count- количество предложенийPOST /dle-proposals/list-proposals- список с пагинациейPOST /dle-proposals/get-voting-power-at- голосующая силаPOST /dle-proposals/get-quorum-at- требуемый кворум
dleModules.js - Функции модулей:
POST /dle-modules/is-module-active- активность модуляPOST /dle-modules/get-module-address- адрес модуляPOST /dle-modules/get-all-modules- все модулиPOST /dle-modules/create-add-module-proposal- предложение добавленияPOST /dle-modules/create-remove-module-proposal- предложение удаления
dleTokens.js - Функции токенов:
POST /dle-tokens/get-token-balance- баланс токеновPOST /dle-tokens/get-total-supply- общее предложениеPOST /dle-tokens/get-token-holders- держатели токенов
dleAnalytics.js - Аналитика и история:
POST /dle-analytics/get-dle-analytics- аналитика DLEPOST /dle-analytics/get-dle-history- история событий
dleMultichain.js - Мультичейн функции:
POST /dle-multichain/get-supported-chains- поддерживаемые сетиPOST /dle-multichain/is-chain-supported- проверка поддержки сетиPOST /dle-multichain/get-supported-chain-count- количество сетейPOST /dle-multichain/get-supported-chain-id- ID сети по индексуPOST /dle-multichain/check-chain-connection- подключение к сетиPOST /dle-multichain/check-sync-readiness- готовность синхронизацииPOST /dle-multichain/sync-to-all-chains- синхронизацияPOST /dle-multichain/execute-proposal-by-signatures- исполнение по подписям
Что НЕ делает backend:
- ❌ Не создает предложения
- ❌ Не голосует
- ❌ Не исполняет предложения
- ❌ Не требует приватные ключи
🔐 Frontend (транзакции через MetaMask):
Основные функции в dle-contract.js:
// Создание предложения
createProposal(dleAddress, proposalData)
// Голосование
voteForProposal(dleAddress, proposalId, support)
// Исполнение предложения
executeProposal(dleAddress, proposalId)
// Подключение к кошельку
checkWalletConnection()
Как использовать:
import { createProposal } from '@/utils/dle-contract.js';
// Создаем предложение через MetaMask
const result = await createProposal(dleAddress, {
description: "Новое предложение",
duration: 86400,
operation: "0x...",
governanceChainId: 11155111,
targetChains: [11155111, 137]
});
🔄 Frontend сервисы (модульная архитектура):
📁 Структура сервисов:
frontend/src/services/
├── dleV2Service.js # Основные функции DLE
├── proposalsService.js # Функции предложений
├── modulesService.js # Функции модулей
├── tokensService.js # Функции токенов
├── analyticsService.js # Аналитические данные
├── multichainService.js # Мультичейн функциональность
└── index.js # Индексный файл для импорта
🔗 Соответствие backend модулям:
| Backend модуль | Frontend сервис | Описание |
|---|---|---|
dleCore.js |
dleV2Service.js |
Основные функции DLE |
dleProposals.js |
proposalsService.js |
Управление предложениями |
dleModules.js |
modulesService.js |
Управление модулями |
dleTokens.js |
tokensService.js |
Работа с токенами |
dleAnalytics.js |
analyticsService.js |
Аналитика и история |
dleMultichain.js |
multichainService.js |
Мультичейн функции |
🚀 Пример полного цикла:
1. Чтение данных DLE:
// Frontend → Backend API (новые модульные endpoints)
const response = await fetch('/api/dle-core/read-dle-info', {
method: 'POST',
body: JSON.stringify({ dleAddress: '0x...' })
});
const dleInfo = response.data;
2. Создание предложения:
// Frontend → MetaMask → Blockchain
import { createProposal } from '@/utils/dle-contract.js';
const result = await createProposal(dleAddress, proposalData);
console.log('Предложение создано:', result.txHash);
3. Голосование:
// Frontend → MetaMask → Blockchain
import { voteForProposal } from '@/utils/dle-contract.js';
const result = await voteForProposal(dleAddress, proposalId, true);
console.log('Голосование выполнено:', result.txHash);
🔧 Порты и URL:
- Frontend:
http://localhost:5173 - Backend:
http://localhost:8000 - API через proxy:
http://localhost:5173/api
✅ Преимущества модульной архитектуры:
🔒 Безопасность:
- Нет приватных ключей на сервере
- Транзакции подписываются пользователем через MetaMask
🏗️ Модульность:
- Четкое разделение ответственности
- Легко поддерживать и тестировать
- Простое добавление новых функций
📈 Масштабируемость:
- Каждый модуль можно развивать независимо
- Возможность переиспользования кода
- Простое развертывание отдельных компонентов
🎯 Читаемость:
- Понятная структура файлов
- Логическое группирование функций
- Удобная навигация по коду
🎯 Итог:
📊 Статистика рефакторинга:
| Модуль | Endpoints | Строк кода | Описание |
|---|---|---|---|
dleCore.js |
4 | ~200 | Основные функции DLE |
dleProposals.js |
10 | ~400 | Управление предложениями |
dleModules.js |
5 | ~150 | Управление модулями |
dleTokens.js |
3 | ~100 | Работа с токенами |
dleAnalytics.js |
2 | ~150 | Аналитика и история |
dleMultichain.js |
8 | ~300 | Мультичейн функции |
✅ Результат:
Backend = модульная архитектура для чтения данных из блокчейна Frontend = модульные сервисы + выполнение транзакций через MetaMask
Преимущества новой архитектуры:
- 🏗️ Модульность - четкое разделение ответственности
- 🔒 Безопасность - нет приватных ключей на сервере
- 📈 Масштабируемость - легко добавлять новые функции
- 🎯 Читаемость - понятная структура и навигация
Это современная, безопасная и масштабируемая архитектура! 🚀