✅ Основные изменения: - Исправлен дублирование /api в URL запросов к бэкенду - Добавлен новый API endpoint /api/blockchain/read-dle-info для чтения данных из блокчейна - Исправлено отображение количества участников (participantCount вместо initialPartners.length) - Обновлен ManagementView.vue для чтения данных из блокчейна вместо JSON файлов - Добавлены утилиты для чтения данных DLE из блокчейна - Исправлены координаты в форме деплоя (сохранение в localStorage) - Добавлен индикатор прогресса деплоя с редиректом на /management 🔧 Технические детали: - Создан backend/routes/blockchain.js с endpoint для чтения DLE данных - Обновлен backend/app.js для регистрации нового маршрута - Исправлен импорт axios в ManagementView.vue (используется настроенный экземпляр api) - Добавлены скрипты utils/read-dle-info.js и utils/get-rpc-url.js - Обновлен скрипт деплоя для сохранения всех данных в блокчейн 🎯 Результат: - Данные DLE теперь читаются напрямую из блокчейна - Правильное отображение координат и количества участников - Устранены ошибки 404 при запросах к API
77 lines
2.7 KiB
JavaScript
77 lines
2.7 KiB
JavaScript
/**
|
|
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
|
|
* All rights reserved.
|
|
*
|
|
* This software is proprietary and confidential.
|
|
* Unauthorized copying, modification, or distribution is prohibited.
|
|
*
|
|
* For licensing inquiries: info@hb3-accelerator.com
|
|
* Website: https://hb3-accelerator.com
|
|
* GitHub: https://github.com/HB3-ACCELERATOR
|
|
*/
|
|
|
|
const encryptedDb = require('./encryptedDatabaseService');
|
|
|
|
async function getAllRpcProviders() {
|
|
const providers = await encryptedDb.getData('rpc_providers', {}, null, 'id');
|
|
return providers;
|
|
}
|
|
|
|
async function saveAllRpcProviders(rpcConfigs) {
|
|
// Удаляем все существующие провайдеры
|
|
await encryptedDb.deleteData('rpc_providers', {});
|
|
|
|
// Сохраняем новые провайдеры
|
|
for (const cfg of rpcConfigs) {
|
|
await encryptedDb.saveData('rpc_providers', {
|
|
network_id: cfg.networkId,
|
|
rpc_url: cfg.rpcUrl,
|
|
chain_id: cfg.chainId || null
|
|
});
|
|
}
|
|
}
|
|
|
|
async function upsertRpcProvider(cfg) {
|
|
// Проверяем, существует ли провайдер
|
|
const existing = await encryptedDb.getData('rpc_providers', { network_id: cfg.networkId }, 1);
|
|
|
|
if (existing.length > 0) {
|
|
// Обновляем существующий провайдер
|
|
await encryptedDb.saveData('rpc_providers', {
|
|
rpc_url: cfg.rpcUrl,
|
|
chain_id: cfg.chainId || null
|
|
}, {
|
|
network_id: cfg.networkId
|
|
});
|
|
} else {
|
|
// Создаем новый провайдер
|
|
await encryptedDb.saveData('rpc_providers', {
|
|
network_id: cfg.networkId,
|
|
rpc_url: cfg.rpcUrl,
|
|
chain_id: cfg.chainId || null
|
|
});
|
|
}
|
|
}
|
|
|
|
async function deleteRpcProvider(networkId) {
|
|
await encryptedDb.deleteData('rpc_providers', { network_id: networkId });
|
|
}
|
|
|
|
async function getRpcUrlByNetworkId(networkId) {
|
|
const providers = await encryptedDb.getData('rpc_providers', { network_id: networkId }, 1);
|
|
return providers[0]?.rpc_url || null;
|
|
}
|
|
|
|
async function getRpcUrlByChainId(chainId) {
|
|
console.log(`[RPC Service] Поиск RPC URL для chain_id: ${chainId}`);
|
|
const providers = await encryptedDb.getData('rpc_providers', { chain_id: chainId }, 1);
|
|
console.log(`[RPC Service] Найдено провайдеров: ${providers.length}`);
|
|
if (providers.length > 0) {
|
|
console.log(`[RPC Service] Найден RPC URL: ${providers[0].rpc_url}`);
|
|
} else {
|
|
console.log(`[RPC Service] RPC URL для chain_id ${chainId} не найден`);
|
|
}
|
|
return providers[0]?.rpc_url || null;
|
|
}
|
|
|
|
module.exports = { getAllRpcProviders, saveAllRpcProviders, upsertRpcProvider, deleteRpcProvider, getRpcUrlByNetworkId, getRpcUrlByChainId };
|