8.0 KiB
8.0 KiB
Интеграция динамических операций модулей в CreateProposalView
Обзор
Реализована система автоматического отображения блоков с предложениями операций модулей в реальном времени на странице создания предложений (/management/create-proposal). После деплоя модуля карточки с операциями автоматически появляются без необходимости обновления страницы.
Архитектура решения
1. Backend API Endpoints
Добавлены новые API endpoints в /backend/routes/dleModules.js:
POST /dle-modules/get-module-operations- получение всех доступных операций модулей для DLEPOST /dle-modules/get-module-specific-operations- получение операций конкретного модуляPOST /dle-modules/get-module-interface- получение ABI и интерфейса модуляPOST /dle-modules/get-module-available-functions- получение доступных функций модуляPOST /dle-modules/get-module-function-parameters- получение параметров функции модуляPOST /dle-modules/create-module-operation-proposal- создание предложения для операции модуляPOST /dle-modules/validate-module-operation- валидация операции модуля
2. Frontend Services
Создан новый сервис /frontend/src/services/moduleOperationsService.js с функциями:
getModuleOperations(dleAddress)- получение операций модулейgetModuleSpecificOperations(dleAddress, moduleType, moduleAddress, chainId)- операции конкретного модуляcreateModuleOperationProposal(dleAddress, operationData)- создание предложенияgetModuleInterface(moduleType, moduleAddress, chainId)- получение интерфейсаvalidateModuleOperation(dleAddress, operationData)- валидация операции
3. WebSocket Integration
Backend (wsHub.js)
- Добавлена функция
broadcastModulesUpdate(dleAddress, updateType, moduleData)для отправки уведомлений об обновлениях модулей - Уведомления отправляются при обнаружении новых модулей в файлах деплоя
Frontend (CreateProposalView.vue)
- Подключение к WebSocket при монтировании компонента
- Обработка сообщений:
modules_updated,module_verified,module_status_changed - Автоматическое обновление списка операций при получении уведомлений
4. Динамическое отображение
Состояние компонента
const moduleOperations = ref([]);
const isLoadingModuleOperations = ref(false);
const modulesWebSocket = ref(null);
const isModulesWSConnected = ref(false);
Шаблон
- Условное отображение индикатора загрузки
- Динамическое создание блоков операций для каждого модуля
- Анимация появления новых блоков
Поддерживаемые типы модулей и операции
1. Treasury Module (💰)
- Депозит средств - пополнение казначейства DLE
- Вывод средств - вывод средств из казначейства
- Распределение дивидендов - распределение дивидендов между держателями токенов
2. Timelock Module (⏰)
- Установить задержку - установить время задержки для операций
- Поставить операцию в очередь - добавить операцию в очередь для выполнения
3. Reader Module (📖)
- Обновить данные - обновить информацию о DLE
4. Hierarchical Voting Module (🗳️)
- Голосование во внешнем DLE - использовать токены для голосования в другом DLE
Реальный процесс работы
- Деплой модуля → Backend сохраняет информацию в файлы деплоя
- Обнаружение модуля →
getDeployedModulesInfo()читает файлы и находит новые модули - WebSocket уведомление →
broadcastModulesUpdate()отправляет уведомление клиентам - Обновление UI → Frontend получает уведомление и автоматически загружает новые операции
- Отображение блоков → Новые блоки операций появляются с анимацией
Стили и UX
Визуальные особенности
- Отдельные стили для блоков операций модулей (
.module-operation-block) - Цветовая схема с зеленым акцентом для модулей
- Теги категорий операций
- Анимация появления (
fadeInUp) - Индикатор загрузки с анимацией
Адаптивность
- Responsive grid для блоков операций
- Поддержка мобильных устройств
- Адаптивные размеры и отступы
Технические детали
WebSocket Events
// Подписка на обновления
{
type: 'subscribe',
dleAddress: '0x...'
}
// Уведомления
{
type: 'modules_updated',
dleAddress: '0x...',
moduleData: { modulesCount: 3, moduleTypes: ['treasury', 'timelock'] },
timestamp: 1234567890
}
Структура данных операций
{
id: 'deposit',
name: 'Депозит средств',
description: 'Пополнение казначейства DLE',
icon: '💰',
functionName: 'deposit',
parameters: [
{ name: 'amount', type: 'uint256', label: 'Сумма', required: true }
],
category: 'Финансы'
}
Будущие улучшения
- Полные формы создания предложений - замена alert на полноценные модальные окна
- Валидация параметров - клиентская валидация перед отправкой
- Предпросмотр операций - отображение calldata перед созданием предложения
- История операций - показ выполненных операций модулей
- Расширенная фильтрация - фильтры по типам операций и модулей
Файлы изменений
Новые файлы
frontend/src/services/moduleOperationsService.jsdocs/MODULE_OPERATIONS_INTEGRATION.md
Измененные файлы
frontend/src/views/smartcontracts/CreateProposalView.vuebackend/routes/dleModules.jsbackend/wsHub.js
Заключение
Реализована полноценная система динамического отображения операций модулей с реальным временем обновлений через WebSocket. После деплоя модуля пользователи сразу видят доступные операции без необходимости обновления страницы, что значительно улучшает пользовательский опыт.