ваше сообщение коммита
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
|
||||
|
||||
**Преимущества новой архитектуры:**
|
||||
- 🏗️ **Модульность** - четкое разделение ответственности
|
||||
- 🔒 **Безопасность** - нет приватных ключей на сервере
|
||||
- 📈 **Масштабируемость** - легко добавлять новые функции
|
||||
- 🎯 **Читаемость** - понятная структура и навигация
|
||||
|
||||
Это современная, безопасная и масштабируемая архитектура! 🚀
|
||||
939
docs/DLE_API_ENDPOINTS.md
Normal file
939
docs/DLE_API_ENDPOINTS.md
Normal file
@@ -0,0 +1,939 @@
|
||||
# API Endpoints для обновленного смарт контракта DLE
|
||||
|
||||
## Обзор
|
||||
|
||||
Данный документ содержит полный список всех API endpoints, созданных для работы с обновленным смарт контрактом DLE (Digital Legal Entity). Все endpoints находятся в файле `backend/routes/blockchain.js` и обеспечивают полное покрытие функциональности смарт контракта.
|
||||
|
||||
## Структура ответов
|
||||
|
||||
Все API endpoints возвращают ответы в следующем формате:
|
||||
|
||||
```javascript
|
||||
// Успешный ответ
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
// Данные ответа
|
||||
}
|
||||
}
|
||||
|
||||
// Ошибка
|
||||
{
|
||||
"success": false,
|
||||
"error": "Описание ошибки"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 Основные функции DLE
|
||||
|
||||
### 1. Чтение данных DLE из блокчейна
|
||||
```http
|
||||
POST /blockchain/read-dle-info
|
||||
```
|
||||
|
||||
**Описание:** Получение основной информации о DLE из блокчейна.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"name": "Название DLE",
|
||||
"symbol": "DLE",
|
||||
"totalSupply": "1000000000000000000000000",
|
||||
"quorumPercentage": 51,
|
||||
"currentChainId": 11155111,
|
||||
"isActive": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Получение параметров управления
|
||||
```http
|
||||
POST /blockchain/get-governance-params
|
||||
```
|
||||
|
||||
**Описание:** Получение параметров управления DLE.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"quorumPercentage": 51,
|
||||
"chainId": 11155111,
|
||||
"supportedCount": 3
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Проверка активности DLE
|
||||
```http
|
||||
POST /blockchain/is-active
|
||||
```
|
||||
|
||||
**Описание:** Проверка активности DLE контракта.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"isActive": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🗳️ Управление предложениями
|
||||
|
||||
### 4. Получение списка предложений
|
||||
```http
|
||||
POST /blockchain/get-proposals
|
||||
```
|
||||
|
||||
**Описание:** Получение списка всех предложений DLE.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"proposals": [
|
||||
{
|
||||
"id": 1,
|
||||
"description": "Описание предложения",
|
||||
"state": 1,
|
||||
"forVotes": "1000000000000000000000",
|
||||
"againstVotes": "0",
|
||||
"totalVotes": "1000000000000000000000"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5. Получение информации о предложении
|
||||
```http
|
||||
POST /blockchain/get-proposal-info
|
||||
```
|
||||
|
||||
**Описание:** Получение детальной информации о конкретном предложении.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `proposalId` (number) - ID предложения
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"proposalId": 1,
|
||||
"description": "Описание предложения",
|
||||
"duration": 86400,
|
||||
"operation": "0x...",
|
||||
"governanceChainId": 11155111,
|
||||
"targetChains": [11155111, 137],
|
||||
"state": 1,
|
||||
"forVotes": "1000000000000000000000",
|
||||
"againstVotes": "0",
|
||||
"totalVotes": "1000000000000000000000",
|
||||
"quorumRequired": "510000000000000000000"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 6. Получение данных для создания предложения
|
||||
```http
|
||||
POST /blockchain/create-proposal
|
||||
```
|
||||
|
||||
**Описание:** Получение данных для создания нового предложения. Фактическое создание выполняется через frontend с MetaMask.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `description` (string) - Описание предложения
|
||||
- `duration` (number) - Продолжительность голосования в секундах
|
||||
- `operation` (string) - Операция в формате bytes
|
||||
- `governanceChainId` (number) - ID сети управления
|
||||
- `targetChains` (array) - Массив целевых сетей
|
||||
- `userAddress` (string) - Адрес пользователя
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"proposalData": {
|
||||
"dleAddress": "0x...",
|
||||
"description": "Новое предложение",
|
||||
"duration": 86400,
|
||||
"operation": "0x...",
|
||||
"governanceChainId": 11155111,
|
||||
"targetChains": [11155111, 137],
|
||||
"userAddress": "0x...",
|
||||
"timelockDelay": 0
|
||||
},
|
||||
"message": "Используйте функцию createProposal из dle-contract.js для создания предложения через MetaMask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 7. Голосование за предложение
|
||||
```http
|
||||
POST /blockchain/vote-proposal
|
||||
```
|
||||
|
||||
**Описание:** Голосование за предложение.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `proposalId` (number) - ID предложения
|
||||
- `support` (boolean) - Поддержка (true/false)
|
||||
- `userAddress` (string) - Адрес пользователя
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"transactionHash": "0x..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 8. Исполнение предложения
|
||||
```http
|
||||
POST /blockchain/execute-proposal
|
||||
```
|
||||
|
||||
**Описание:** Исполнение предложения.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `proposalId` (number) - ID предложения
|
||||
- `userAddress` (string) - Адрес пользователя
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"transactionHash": "0x..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 9. Отмена предложения
|
||||
```http
|
||||
POST /blockchain/cancel-proposal
|
||||
```
|
||||
|
||||
**Описание:** Отмена предложения.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `proposalId` (number) - ID предложения
|
||||
- `reason` (string) - Причина отмены
|
||||
- `userAddress` (string) - Адрес пользователя
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"transactionHash": "0x..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 10. Получение состояния предложения
|
||||
```http
|
||||
POST /blockchain/get-proposal-state
|
||||
```
|
||||
|
||||
**Описание:** Получение текущего состояния предложения.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `proposalId` (number) - ID предложения
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"proposalId": 1,
|
||||
"state": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 11. Получение голосов по предложению
|
||||
```http
|
||||
POST /blockchain/get-proposal-votes
|
||||
```
|
||||
|
||||
**Описание:** Получение статистики голосования по предложению.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `proposalId` (number) - ID предложения
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"proposalId": 1,
|
||||
"forVotes": "1000000000000000000000",
|
||||
"againstVotes": "0",
|
||||
"totalVotes": "1000000000000000000000",
|
||||
"quorumRequired": "510000000000000000000"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 12. Проверка результата предложения
|
||||
```http
|
||||
POST /blockchain/check-proposal-result
|
||||
```
|
||||
|
||||
**Описание:** Проверка результата голосования по предложению.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `proposalId` (number) - ID предложения
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"proposalId": 1,
|
||||
"passed": true,
|
||||
"quorumReached": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 13. Получение количества предложений
|
||||
```http
|
||||
POST /blockchain/get-proposals-count
|
||||
```
|
||||
|
||||
**Описание:** Получение общего количества предложений.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"count": 5
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 14. Получение списка предложений с пагинацией
|
||||
```http
|
||||
POST /blockchain/list-proposals
|
||||
```
|
||||
|
||||
**Описание:** Получение списка предложений с поддержкой пагинации.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `offset` (number) - Смещение
|
||||
- `limit` (number) - Лимит
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"proposals": [1, 2, 3],
|
||||
"offset": 0,
|
||||
"limit": 10
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Управление модулями
|
||||
|
||||
### 15. Создание предложения добавления модуля
|
||||
```http
|
||||
POST /blockchain/create-add-module-proposal
|
||||
```
|
||||
|
||||
**Описание:** Создание предложения для добавления нового модуля.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `moduleId` (string) - ID модуля
|
||||
- `moduleAddress` (string) - Адрес модуля
|
||||
- `userAddress` (string) - Адрес пользователя
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"proposalId": 1,
|
||||
"transactionHash": "0x..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 16. Создание предложения удаления модуля
|
||||
```http
|
||||
POST /blockchain/create-remove-module-proposal
|
||||
```
|
||||
|
||||
**Описание:** Создание предложения для удаления модуля.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `moduleId` (string) - ID модуля
|
||||
- `userAddress` (string) - Адрес пользователя
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"proposalId": 1,
|
||||
"transactionHash": "0x..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 17. Проверка активности модуля
|
||||
```http
|
||||
POST /blockchain/is-module-active
|
||||
```
|
||||
|
||||
**Описание:** Проверка активности модуля.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `moduleId` (string) - ID модуля
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"moduleId": "0x...",
|
||||
"isActive": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 18. Получение адреса модуля
|
||||
```http
|
||||
POST /blockchain/get-module-address
|
||||
```
|
||||
|
||||
**Описание:** Получение адреса модуля по его ID.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `moduleId` (string) - ID модуля
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"moduleId": "0x...",
|
||||
"moduleAddress": "0x..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Мульти-чейн функциональность
|
||||
|
||||
### 19. Получение поддерживаемых сетей
|
||||
```http
|
||||
POST /blockchain/get-supported-chains
|
||||
```
|
||||
|
||||
**Описание:** Получение списка поддерживаемых сетей.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"supportedChains": [11155111, 137, 1]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 20. Проверка поддержки сети
|
||||
```http
|
||||
POST /blockchain/is-chain-supported
|
||||
```
|
||||
|
||||
**Описание:** Проверка поддержки конкретной сети.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `chainId` (number) - ID сети
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"chainId": 11155111,
|
||||
"isSupported": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 21. Получение текущей сети
|
||||
```http
|
||||
POST /blockchain/get-current-chain-id
|
||||
```
|
||||
|
||||
**Описание:** Получение ID текущей сети.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"currentChainId": 11155111
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 22. Исполнение предложения по подписям
|
||||
```http
|
||||
POST /blockchain/execute-proposal-by-signatures
|
||||
```
|
||||
|
||||
**Описание:** Исполнение предложения с использованием подписей.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `proposalId` (number) - ID предложения
|
||||
- `signers` (array) - Массив адресов подписантов
|
||||
- `signatures` (array) - Массив подписей
|
||||
- `userAddress` (string) - Адрес пользователя
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"transactionHash": "0x..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 23. Проверка подключения к сети
|
||||
```http
|
||||
POST /blockchain/check-chain-connection
|
||||
```
|
||||
|
||||
**Описание:** Проверка доступности подключения к сети.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `chainId` (number) - ID сети
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"chainId": 11155111,
|
||||
"isAvailable": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 24. Синхронизация во все сети
|
||||
```http
|
||||
POST /blockchain/sync-to-all-chains
|
||||
```
|
||||
|
||||
**Описание:** Синхронизация предложения во все поддерживаемые сети.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `proposalId` (number) - ID предложения
|
||||
- `userAddress` (string) - Адрес пользователя
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"transactionHash": "0x..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 25. Получение количества поддерживаемых сетей
|
||||
```http
|
||||
POST /blockchain/get-supported-chain-count
|
||||
```
|
||||
|
||||
**Описание:** Получение количества поддерживаемых сетей.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"count": 3
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 26. Получение ID поддерживаемой сети по индексу
|
||||
```http
|
||||
POST /blockchain/get-supported-chain-id
|
||||
```
|
||||
|
||||
**Описание:** Получение ID поддерживаемой сети по индексу.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `index` (number) - Индекс сети
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"index": 0,
|
||||
"chainId": 11155111
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Аналитика и пагинация
|
||||
|
||||
### 27. Получение голосующей силы на момент времени
|
||||
```http
|
||||
POST /blockchain/get-voting-power-at
|
||||
```
|
||||
|
||||
**Описание:** Получение голосующей силы пользователя на определенный момент времени.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `voter` (string) - Адрес голосующего
|
||||
- `timepoint` (number) - Момент времени
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"voter": "0x...",
|
||||
"timepoint": 1234567890,
|
||||
"votingPower": "1000000000000000000000"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 28. Получение требуемого кворума на момент времени
|
||||
```http
|
||||
POST /blockchain/get-quorum-at
|
||||
```
|
||||
|
||||
**Описание:** Получение требуемого кворума на определенный момент времени.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `timepoint` (number) - Момент времени
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"timepoint": 1234567890,
|
||||
"quorum": "510000000000000000000"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🪙 Токены и балансы
|
||||
|
||||
### 29. Получение баланса токенов
|
||||
```http
|
||||
POST /blockchain/get-token-balance
|
||||
```
|
||||
|
||||
**Описание:** Получение баланса токенов пользователя.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
- `account` (string) - Адрес аккаунта
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"account": "0x...",
|
||||
"balance": "1000.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 30. Получение общего предложения токенов
|
||||
```http
|
||||
POST /blockchain/get-total-supply
|
||||
```
|
||||
|
||||
**Описание:** Получение общего предложения токенов DLE.
|
||||
|
||||
**Параметры:**
|
||||
- `dleAddress` (string) - Адрес DLE контракта
|
||||
|
||||
**Ответ:**
|
||||
```javascript
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"totalSupply": "1000000.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Frontend сервисы
|
||||
|
||||
Для работы с API endpoints созданы следующие сервисы в frontend:
|
||||
|
||||
### 1. dleV2Service.js
|
||||
Основной сервис для работы с DLE, содержащий все функции для взаимодействия с API.
|
||||
|
||||
### 2. tokens.js
|
||||
Сервис для работы с токенами и балансами.
|
||||
|
||||
### 3. proposalsService.js
|
||||
Сервис для работы с предложениями и голосованием.
|
||||
|
||||
### 4. modulesService.js
|
||||
Сервис для работы с модулями DLE.
|
||||
|
||||
### 5. analyticsService.js
|
||||
Сервис для работы с аналитикой и статистикой.
|
||||
|
||||
### 6. multichainService.js
|
||||
Сервис для работы с мульти-чейн функциональностью.
|
||||
|
||||
## 🔐 Выполнение транзакций через MetaMask
|
||||
|
||||
Для выполнения транзакций (создание предложений, голосование, исполнение) используется файл `frontend/src/utils/dle-contract.js` с функциями:
|
||||
|
||||
### Основные функции для транзакций:
|
||||
|
||||
```javascript
|
||||
// Создание предложения
|
||||
import { createProposal } from '@/utils/dle-contract.js';
|
||||
const result = await createProposal(dleAddress, proposalData);
|
||||
|
||||
// Голосование за предложение
|
||||
import { voteForProposal } from '@/utils/dle-contract.js';
|
||||
const result = await voteForProposal(dleAddress, proposalId, support);
|
||||
|
||||
// Исполнение предложения
|
||||
import { executeProposal } from '@/utils/dle-contract.js';
|
||||
const result = await executeProposal(dleAddress, proposalId);
|
||||
|
||||
// Проверка подключения к кошельку
|
||||
import { checkWalletConnection } from '@/utils/dle-contract.js';
|
||||
const walletInfo = await checkWalletConnection();
|
||||
```
|
||||
|
||||
### Пример использования:
|
||||
|
||||
```javascript
|
||||
// 1. Получаем данные для создания предложения от backend
|
||||
const response = await fetch('/api/blockchain/create-proposal', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
dleAddress: '0x...',
|
||||
description: 'Новое предложение',
|
||||
duration: 86400,
|
||||
operation: '0x...',
|
||||
governanceChainId: 11155111,
|
||||
targetChains: [11155111, 137],
|
||||
userAddress: '0x...'
|
||||
})
|
||||
});
|
||||
|
||||
const { proposalData } = response.data;
|
||||
|
||||
// 2. Создаем предложение через MetaMask
|
||||
import { createProposal } from '@/utils/dle-contract.js';
|
||||
const result = await createProposal(proposalData.dleAddress, proposalData);
|
||||
console.log('Предложение создано:', result.txHash);
|
||||
```
|
||||
|
||||
**Важно:** Все транзакции выполняются через MetaMask или другой Web3 кошелек для обеспечения безопасности пользователей.
|
||||
|
||||
---
|
||||
|
||||
## 📋 Состояния предложений
|
||||
|
||||
Справочник состояний предложений:
|
||||
|
||||
- `0` - Pending (Ожидает)
|
||||
- `1` - Active (Активно)
|
||||
- `2` - Canceled (Отменено)
|
||||
- `3` - Defeated (Отклонено)
|
||||
- `4` - Succeeded (Успешно)
|
||||
- `5` - Queued (В очереди)
|
||||
- `6` - Expired (Истекло)
|
||||
- `7` - Executed (Исполнено)
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Использование
|
||||
|
||||
Все API endpoints используют:
|
||||
- **Сеть:** Sepolia (Chain ID: 11155111)
|
||||
- **Формат:** JSON
|
||||
- **Метод:** POST
|
||||
- **Базовый URL:** `http://localhost:8000` (backend) или `/api` (через frontend proxy)
|
||||
|
||||
### Пример использования:
|
||||
|
||||
```javascript
|
||||
// Создание предложения (через frontend proxy)
|
||||
const response = await fetch('/api/blockchain/create-proposal', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
dleAddress: '0x...',
|
||||
description: 'Новое предложение',
|
||||
duration: 86400,
|
||||
operation: '0x...',
|
||||
governanceChainId: 11155111,
|
||||
targetChains: [11155111, 137],
|
||||
userAddress: '0x...'
|
||||
})
|
||||
});
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
// Или напрямую к backend
|
||||
const response = await fetch('http://localhost:8000/blockchain/create-proposal', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
dleAddress: '0x...',
|
||||
description: 'Новое предложение',
|
||||
duration: 86400,
|
||||
operation: '0x...',
|
||||
governanceChainId: 11155111,
|
||||
targetChains: [11155111, 137],
|
||||
userAddress: '0x...'
|
||||
})
|
||||
});
|
||||
|
||||
const result = await response.json();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Покрытие функций смарт контракта
|
||||
|
||||
Все функции смарт контракта `DLE.sol` имеют соответствующие API endpoints:
|
||||
|
||||
| Функция смарт контракта | API Endpoint | Статус |
|
||||
|-------------------------|--------------|--------|
|
||||
| `getDLEInfo()` | `read-dle-info` | ✅ |
|
||||
| `getGovernanceParams()` | `get-governance-params` | ✅ |
|
||||
| `isActive()` | `is-active` | ✅ |
|
||||
| `createProposal()` | `create-proposal` | ✅ |
|
||||
| `vote()` | `vote-proposal` | ✅ |
|
||||
| `executeProposal()` | `execute-proposal` | ✅ |
|
||||
| `cancelProposal()` | `cancel-proposal` | ✅ |
|
||||
| `getProposalSummary()` | `get-proposal-info` | ✅ |
|
||||
| `getProposalState()` | `get-proposal-state` | ✅ |
|
||||
| `getProposalVotes()` | `get-proposal-votes` | ✅ |
|
||||
| `checkProposalResult()` | `check-proposal-result` | ✅ |
|
||||
| `getProposalsCount()` | `get-proposals-count` | ✅ |
|
||||
| `listProposals()` | `list-proposals` | ✅ |
|
||||
| `getVotingPowerAt()` | `get-voting-power-at` | ✅ |
|
||||
| `getQuorumAt()` | `get-quorum-at` | ✅ |
|
||||
| `createAddModuleProposal()` | `create-add-module-proposal` | ✅ |
|
||||
| `createRemoveModuleProposal()` | `create-remove-module-proposal` | ✅ |
|
||||
| `isModuleActive()` | `is-module-active` | ✅ |
|
||||
| `getModuleAddress()` | `get-module-address` | ✅ |
|
||||
| `listSupportedChains()` | `get-supported-chains` | ✅ |
|
||||
| `isChainSupported()` | `is-chain-supported` | ✅ |
|
||||
| `getCurrentChainId()` | `get-current-chain-id` | ✅ |
|
||||
| `executeProposalBySignatures()` | `execute-proposal-by-signatures` | ✅ |
|
||||
| `checkChainConnection()` | `check-chain-connection` | ✅ |
|
||||
| `syncToAllChains()` | `sync-to-all-chains` | ✅ |
|
||||
| `getSupportedChainCount()` | `get-supported-chain-count` | ✅ |
|
||||
| `getSupportedChainId()` | `get-supported-chain-id` | ✅ |
|
||||
| `balanceOf()` | `get-token-balance` | ✅ |
|
||||
| `totalSupply()` | `get-total-supply` | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Итог
|
||||
|
||||
**Полное покрытие функциональности смарт контракта DLE достигнуто!**
|
||||
|
||||
- ✅ **30 API endpoints** создано
|
||||
- ✅ **6 frontend сервисов** создано
|
||||
- ✅ **100% покрытие** функций смарт контракта
|
||||
- ✅ **Готово к использованию** в интерфейсе управления
|
||||
|
||||
Система полностью готова для работы с обновленным функционалом смарт контракта DLE! 🚀
|
||||
110
docs/FRONTEND_ARCHITECTURE.md
Normal file
110
docs/FRONTEND_ARCHITECTURE.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# Архитектура фронтенда DLE
|
||||
|
||||
## 📁 Структура сервисов
|
||||
|
||||
### 🎯 Принцип разделения ответственности
|
||||
|
||||
Каждый сервис отвечает за свою область функциональности:
|
||||
|
||||
```
|
||||
services/
|
||||
├── dleV2Service.js - Основные функции DLE (создание, чтение, управление)
|
||||
├── modulesService.js - Управление модулями DLE
|
||||
├── proposalsService.js - Управление предложениями и голосованием
|
||||
├── tokensService.js - Работа с токенами и балансами
|
||||
├── analyticsService.js - Аналитические данные и статистика
|
||||
├── multichainService.js - Мультичейн функциональность
|
||||
└── index.js - Индексный файл для удобного импорта
|
||||
```
|
||||
|
||||
### 🔧 Использование сервисов
|
||||
|
||||
#### Импорт отдельных сервисов:
|
||||
```javascript
|
||||
import { getDLEInfo } from '@/services/dleV2Service.js';
|
||||
import { createAddModuleProposal } from '@/services/modulesService.js';
|
||||
import { createProposal } from '@/services/proposalsService.js';
|
||||
import { getTokenBalance } from '@/services/tokensService.js';
|
||||
```
|
||||
|
||||
#### Импорт через индексный файл:
|
||||
```javascript
|
||||
import {
|
||||
getDLEInfo,
|
||||
createAddModuleProposal,
|
||||
createProposal,
|
||||
getTokenBalance
|
||||
} from '@/services/index.js';
|
||||
```
|
||||
|
||||
## 📄 Страницы управления DLE
|
||||
|
||||
### 🎨 Компоненты страниц:
|
||||
|
||||
| Страница | Файл | Используемые сервисы | Описание |
|
||||
|----------|------|---------------------|----------|
|
||||
| **Модули** | `ModulesView.vue` | `modulesService.js` | Управление модулями DLE |
|
||||
| **Предложения** | `DleProposalsView.vue` | `proposalsService.js` | Управление предложениями |
|
||||
| **Токены** | `TokensView.vue` | `tokensService.js` | Работа с токенами |
|
||||
| **Кворум** | `QuorumView.vue` | `proposalsService.js` | Настройки голосования |
|
||||
| **Аналитика** | `AnalyticsView.vue` | `analyticsService.js` | Аналитические данные |
|
||||
| **История** | `HistoryView.vue` | `dleV2Service.js` | История операций |
|
||||
| **Настройки** | `SettingsView.vue` | `dleV2Service.js` | Настройки DLE |
|
||||
| **Управление DLE** | `DleManagementView.vue` | - | Добавление DLE в список |
|
||||
|
||||
## 🔄 Архитектурные принципы
|
||||
|
||||
### 1. **Разделение ответственности**
|
||||
- Каждый сервис отвечает за свою область
|
||||
- Функции не дублируются между сервисами
|
||||
- Четкие границы между модулями
|
||||
|
||||
### 2. **Единообразие API**
|
||||
- Все сервисы используют одинаковый формат ответов
|
||||
- Единообразная обработка ошибок
|
||||
- Консистентные названия функций
|
||||
|
||||
### 3. **Простота использования**
|
||||
- Интуитивно понятные названия функций
|
||||
- Подробная документация JSDoc
|
||||
- Примеры использования
|
||||
|
||||
### 4. **Масштабируемость**
|
||||
- Легко добавлять новые функции
|
||||
- Простое тестирование отдельных модулей
|
||||
- Возможность переиспользования
|
||||
|
||||
## 🛠️ Утилиты
|
||||
|
||||
### `dle-contract.js`
|
||||
Используется только для транзакций через MetaMask:
|
||||
- Создание предложений
|
||||
- Голосование
|
||||
- Исполнение предложений
|
||||
- Деактивация DLE
|
||||
|
||||
### `utils/websocket.js`
|
||||
Для real-time обновлений:
|
||||
- Уведомления о новых предложениях
|
||||
- Обновления статуса голосования
|
||||
- Синхронизация данных
|
||||
|
||||
## 📊 Статистика кода
|
||||
|
||||
| Сервис | Строк | Функций | Описание |
|
||||
|--------|-------|---------|----------|
|
||||
| `dleV2Service.js` | 220 | 8 | Основные функции DLE |
|
||||
| `modulesService.js` | 298 | 5 | Управление модулями |
|
||||
| `proposalsService.js` | 264 | 12 | Управление предложениями |
|
||||
| `tokensService.js` | 72 | 3 | Работа с токенами |
|
||||
| `analyticsService.js` | 320 | 16 | Аналитические данные |
|
||||
| `multichainService.js` | 353 | 18 | Мультичейн функциональность |
|
||||
|
||||
## 🚀 Преимущества новой архитектуры
|
||||
|
||||
1. **✅ Читаемость** - код легко понять и поддерживать
|
||||
2. **✅ Тестируемость** - каждый сервис можно тестировать отдельно
|
||||
3. **✅ Переиспользование** - функции можно использовать в разных компонентах
|
||||
4. **✅ Масштабируемость** - легко добавлять новые функции
|
||||
5. **✅ Производительность** - загрузка только нужных модулей
|
||||
6. **✅ Поддержка** - простое исправление ошибок и добавление функций
|
||||
Reference in New Issue
Block a user