ваше сообщение коммита
This commit is contained in:
257
docs/ARCHITECTURE.md
Normal file
257
docs/ARCHITECTURE.md
Normal 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
|
||||
|
||||
**Преимущества новой архитектуры:**
|
||||
- 🏗️ **Модульность** - четкое разделение ответственности
|
||||
- 🔒 **Безопасность** - нет приватных ключей на сервере
|
||||
- 📈 **Масштабируемость** - легко добавлять новые функции
|
||||
- 🎯 **Читаемость** - понятная структура и навигация
|
||||
|
||||
Это современная, безопасная и масштабируемая архитектура! 🚀
|
||||
Reference in New Issue
Block a user