ваше сообщение коммита

This commit is contained in:
2025-08-16 02:29:42 +03:00
parent 3765c65a18
commit 9134e83b8f
33 changed files with 8680 additions and 1435 deletions

257
docs/ARCHITECTURE.md Normal file
View File

@@ -0,0 +1,257 @@
# Архитектура проекта 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`:
```javascript
// Создание предложения
createProposal(dleAddress, proposalData)
// Голосование
voteForProposal(dleAddress, proposalId, support)
// Исполнение предложения
executeProposal(dleAddress, proposalId)
// Подключение к кошельку
checkWalletConnection()
```
### Как использовать:
```javascript
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:
```javascript
// 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. Создание предложения:
```javascript
// Frontend → MetaMask → Blockchain
import { createProposal } from '@/utils/dle-contract.js';
const result = await createProposal(dleAddress, proposalData);
console.log('Предложение создано:', result.txHash);
```
### 3. Голосование:
```javascript
// 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
**Преимущества новой архитектуры:**
- 🏗️ **Модульность** - четкое разделение ответственности
- 🔒 **Безопасность** - нет приватных ключей на сервере
- 📈 **Масштабируемость** - легко добавлять новые функции
- 🎯 **Читаемость** - понятная структура и навигация
Это современная, безопасная и масштабируемая архитектура! 🚀