Files
DLE/docs/ARCHITECTURE.md
Alex de0f8aecf2 feat: Добавлены формы деплоя модулей DLE с полными настройками
- Создана форма деплоя TreasuryModule с детальными настройками казны
- Создана форма деплоя TimelockModule с настройками временных задержек
- Создана форма деплоя DLEReader с простой конфигурацией
- Добавлены маршруты и индексы для всех модулей
- Исправлены пути импорта BaseLayout
- Добавлены авторские права во все файлы
- Улучшена архитектура деплоя модулей отдельно от основного DLE
2025-09-23 02:57:59 +03:00

11 KiB
Raw Blame History

Архитектура проекта 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 - информация о DLE
  • POST /dle-core/get-governance-params - параметры управления
  • POST /dle-core/is-active - проверка активности DLE
  • POST /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 - аналитика DLE
  • POST /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

Преимущества новой архитектуры:

  • 🏗️ Модульность - четкое разделение ответственности
  • 🔒 Безопасность - нет приватных ключей на сервере
  • 📈 Масштабируемость - легко добавлять новые функции
  • 🎯 Читаемость - понятная структура и навигация

Это современная, безопасная и масштабируемая архитектура! 🚀