Files
DLE/backend/routes/compile.js

106 lines
3.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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 express = require('express');
const router = express.Router();
const { spawn } = require('child_process');
const path = require('path');
const logger = require('../utils/logger');
const auth = require('../middleware/auth');
/**
* @route POST /api/compile-contracts
* @desc Компилировать смарт-контракты через Hardhat
* @access Private (только для авторизованных пользователей с ролью admin)
*/
router.post('/', auth.requireAuth, auth.requireAdmin, async (req, res) => {
try {
console.log('🔨 Запуск компиляции смарт-контрактов...');
const hardhatProcess = spawn('npx', ['hardhat', 'compile'], {
cwd: path.join(__dirname, '..'),
stdio: 'pipe'
});
let stdout = '';
let stderr = '';
hardhatProcess.stdout.on('data', (data) => {
stdout += data.toString();
console.log(`[COMPILE] ${data.toString().trim()}`);
});
hardhatProcess.stderr.on('data', (data) => {
stderr += data.toString();
console.error(`[COMPILE_ERR] ${data.toString().trim()}`);
});
hardhatProcess.on('close', (code) => {
if (code === 0) {
console.log('✅ Компиляция завершена успешно');
// Автоматически генерируем ABI для фронтенда
try {
const { generateABIFile } = require('../scripts/generate-abi');
generateABIFile();
console.log('✅ ABI файл автоматически обновлен');
} catch (abiError) {
console.warn('⚠️ Ошибка генерации ABI:', abiError.message);
}
// Автоматически генерируем flattened контракт для верификации
try {
const { generateFlattened } = require('../scripts/generate-flattened');
generateFlattened().then(() => {
console.log('✅ Flattened контракт автоматически обновлен');
}).catch((flattenError) => {
console.warn('⚠️ Ошибка генерации flattened контракта:', flattenError.message);
});
} catch (flattenError) {
console.warn('⚠️ Ошибка генерации flattened контракта:', flattenError.message);
}
res.json({
success: true,
message: 'Смарт-контракты скомпилированы успешно',
data: { stdout, stderr }
});
} else {
console.error('❌ Ошибка компиляции:', stderr);
res.status(500).json({
success: false,
message: 'Ошибка компиляции смарт-контрактов',
error: stderr
});
}
});
hardhatProcess.on('error', (error) => {
console.error('❌ Ошибка запуска компиляции:', error);
res.status(500).json({
success: false,
message: 'Ошибка запуска компиляции',
error: error.message
});
});
} catch (error) {
logger.error('Ошибка компиляции контрактов:', error);
res.status(500).json({
success: false,
message: error.message || 'Произошла ошибка при компиляции контрактов'
});
}
});
module.exports = router;