ваше сообщение коммита

This commit is contained in:
2025-09-30 00:23:37 +03:00
parent ca718e3178
commit 4b03951b31
77 changed files with 17161 additions and 7255 deletions

View File

@@ -0,0 +1,183 @@
/**
* 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
*/
import api from '@/api/axios';
/**
* Получить информацию о мультиконтрактном предложении
* @param {string} dleAddress - Адрес DLE контракта
* @param {number} proposalId - ID предложения
* @param {number} governanceChainId - ID сети голосования
* @returns {Promise<Object>} - Информация о предложении
*/
export async function getProposalMultichainInfo(dleAddress, proposalId, governanceChainId) {
try {
const response = await api.post('/dle-multichain-execution/get-proposal-multichain-info', {
dleAddress,
proposalId,
governanceChainId
});
if (response.data.success) {
return response.data.data;
} else {
throw new Error(response.data.error || 'Не удалось получить информацию о мультиконтрактном предложении');
}
} catch (error) {
console.error('Ошибка получения информации о мультиконтрактном предложении:', error);
throw error;
}
}
/**
* Исполнить предложение во всех целевых сетях
* @param {string} dleAddress - Адрес DLE контракта
* @param {number} proposalId - ID предложения
* @param {string} deploymentId - ID деплоя
* @param {string} userAddress - Адрес пользователя
* @returns {Promise<Object>} - Результат исполнения
*/
export async function executeInAllTargetChains(dleAddress, proposalId, deploymentId, userAddress) {
try {
const response = await api.post('/dle-multichain-execution/execute-in-all-target-chains', {
dleAddress,
proposalId,
deploymentId,
userAddress
});
if (response.data.success) {
return response.data.data;
} else {
throw new Error(response.data.error || 'Не удалось исполнить предложение во всех целевых сетях');
}
} catch (error) {
console.error('Ошибка исполнения во всех целевых сетях:', error);
throw error;
}
}
/**
* Исполнить предложение в конкретной целевой сети
* @param {string} dleAddress - Адрес DLE контракта
* @param {number} proposalId - ID предложения
* @param {number} targetChainId - ID целевой сети
* @param {string} deploymentId - ID деплоя
* @param {string} userAddress - Адрес пользователя
* @returns {Promise<Object>} - Результат исполнения
*/
export async function executeInTargetChain(dleAddress, proposalId, targetChainId, deploymentId, userAddress) {
try {
const response = await api.post('/dle-multichain-execution/execute-in-target-chain', {
dleAddress,
proposalId,
targetChainId,
deploymentId,
userAddress
});
if (response.data.success) {
return response.data.data;
} else {
throw new Error(response.data.error || 'Не удалось исполнить предложение в целевой сети');
}
} catch (error) {
console.error('Ошибка исполнения в целевой сети:', error);
throw error;
}
}
/**
* Получить deploymentId по адресу DLE
* @param {string} dleAddress - Адрес DLE контракта
* @returns {Promise<string>} - ID деплоя
*/
export async function getDeploymentId(dleAddress) {
try {
const response = await api.post('/dle-modules/get-deployment-id', {
dleAddress
});
if (response.data.success) {
return response.data.data.deploymentId;
} else {
throw new Error(response.data.error || 'Не удалось получить ID деплоя');
}
} catch (error) {
console.error('Ошибка получения ID деплоя:', error);
throw error;
}
}
/**
* Проверить, является ли предложение мультиконтрактным
* @param {Object} proposal - Предложение
* @returns {boolean} - Является ли мультиконтрактным
*/
export function isMultichainProposal(proposal) {
return proposal.targetChains && proposal.targetChains.length > 0;
}
/**
* Получить название сети по ID
* @param {number} chainId - ID сети
* @returns {string} - Название сети
*/
export function getChainName(chainId) {
const chainNames = {
1: 'Ethereum Mainnet',
11155111: 'Sepolia',
17000: 'Holesky',
421614: 'Arbitrum Sepolia',
84532: 'Base Sepolia',
137: 'Polygon',
80001: 'Polygon Mumbai',
56: 'BSC',
97: 'BSC Testnet'
};
return chainNames[chainId] || `Chain ${chainId}`;
}
/**
* Форматировать результат исполнения
* @param {Object} result - Результат исполнения
* @returns {string} - Отформатированный результат
*/
export function formatExecutionResult(result) {
const { summary, executionResults } = result;
if (summary.successful === summary.total) {
return `✅ Успешно исполнено во всех ${summary.total} сетях`;
} else if (summary.successful > 0) {
return `⚠️ Частично исполнено: ${summary.successful}/${summary.total} сетей`;
} else {
return `Не удалось исполнить ни в одной сети`;
}
}
/**
* Получить детали ошибок исполнения
* @param {Object} result - Результат исполнения
* @returns {Array} - Массив ошибок
*/
export function getExecutionErrors(result) {
return result.executionResults
.filter(r => !r.success)
.map(r => ({
chainId: r.chainId,
chainName: getChainName(r.chainId),
error: r.error
}));
}