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

This commit is contained in:
2025-05-20 14:32:03 +03:00
parent 60302c9e13
commit 3d3f24d4c9
24 changed files with 5954 additions and 13502 deletions

View File

@@ -6,34 +6,6 @@ import axios from 'axios';
* Предоставляет списки доступных сетей, URL RPC и функции для работы с ними
*/
export default function useBlockchainNetworks() {
// Список стандартных URL для популярных сетей
const defaultRpcUrls = {
ethereum: 'https://mainnet.infura.io/v3/YOUR_API_KEY',
sepolia: 'https://sepolia.infura.io/v3/YOUR_API_KEY',
goerli: 'https://goerli.infura.io/v3/YOUR_API_KEY',
holesky: 'https://holesky.infura.io/v3/YOUR_API_KEY',
bsc: 'https://bsc-dataseed1.binance.org',
'bsc-testnet': 'https://data-seed-prebsc-1-s1.binance.org:8545',
polygon: 'https://polygon-rpc.com',
mumbai: 'https://rpc-mumbai.maticvigil.com',
arbitrum: 'https://arb1.arbitrum.io/rpc',
'arbitrum-goerli': 'https://goerli-rollup.arbitrum.io/rpc',
optimism: 'https://mainnet.optimism.io',
'optimism-goerli': 'https://goerli.optimism.io',
avalanche: 'https://api.avax.network/ext/bc/C/rpc',
'avalanche-fuji': 'https://api.avax-test.network/ext/bc/C/rpc',
gnosis: 'https://rpc.gnosischain.com',
celo: 'https://forno.celo.org',
fantom: 'https://rpc.ftm.tools',
'fantom-testnet': 'https://rpc.testnet.fantom.network',
harmony: 'https://api.harmony.one',
metis: 'https://andromeda.metis.io/?owner=1088',
aurora: 'https://mainnet.aurora.dev',
cronos: 'https://evm.cronos.org',
localhost: 'http://localhost:8545',
ganache: 'http://localhost:7545'
};
// Группы сетей для отображения в интерфейсе
const networkGroups = [
{
@@ -96,21 +68,6 @@ export default function useBlockchainNetworks() {
customChainId: null
});
// Вычисляемое свойство для предложения URL на основе выбранной сети
const defaultRpcUrlSuggestion = computed(() => {
if (networkEntry.value.networkId && defaultRpcUrls[networkEntry.value.networkId]) {
return defaultRpcUrls[networkEntry.value.networkId];
}
return '';
});
// Функция для использования предложенного URL
const useDefaultRpcUrl = () => {
if (defaultRpcUrlSuggestion.value) {
networkEntry.value.rpcUrl = defaultRpcUrlSuggestion.value;
}
};
// Функция для получения chainId по networkId
const getChainIdByNetworkId = (networkId) => {
for (const group of networkGroups) {
@@ -215,16 +172,13 @@ export default function useBlockchainNetworks() {
return {
// Данные
defaultRpcUrls,
networkGroups,
networkEntry,
defaultRpcUrlSuggestion,
testingRpc,
testingRpcId,
networks, // Экспортируем плоский список сетей
// Методы
useDefaultRpcUrl,
getChainIdByNetworkId,
validateAndPrepareNetworkConfig,
resetNetworkEntry,

View File

@@ -1,15 +1,12 @@
import { ref, watch, onUnmounted } from 'vue';
import { fetchTokenBalances } from '../services/tokens';
import { useAuth } from './useAuth'; // Предполагаем, что useAuth предоставляет identities
import eventBus from '../utils/eventBus';
export function useTokenBalances() {
const auth = useAuth(); // Получаем доступ к состоянию аутентификации
const tokenBalances = ref({
eth: '0',
bsc: '0',
arbitrum: '0',
polygon: '0',
});
const tokenBalances = ref([]); // теперь массив объектов
const isLoadingTokens = ref(false);
let balanceUpdateInterval = null;
const getIdentityValue = (type) => {
@@ -23,28 +20,25 @@ export function useTokenBalances() {
const walletAddress = auth.address?.value || getIdentityValue('wallet');
if (walletAddress) {
try {
isLoadingTokens.value = true;
console.log('[useTokenBalances] Запрос балансов для адреса:', walletAddress);
const balances = await fetchTokenBalances(walletAddress);
console.log('[useTokenBalances] Полученные балансы:', balances);
tokenBalances.value = {
eth: balances.eth || '0',
bsc: balances.bsc || '0',
arbitrum: balances.arbitrum || '0',
polygon: balances.polygon || '0',
};
const response = await fetchTokenBalances(walletAddress);
// Ожидаем, что response — это массив объектов
tokenBalances.value = Array.isArray(response) ? response : (response?.data || []);
console.log('[useTokenBalances] Обновленные балансы:', tokenBalances.value);
} catch (error) {
console.error('[useTokenBalances] Ошибка при обновлении балансов:', error);
// Возможно, стоит сбросить балансы при ошибке
tokenBalances.value = { eth: '0', bsc: '0', arbitrum: '0', polygon: '0' };
tokenBalances.value = [];
} finally {
isLoadingTokens.value = false;
}
} else {
console.log('[useTokenBalances] Не найден адрес кошелька для запроса балансов.');
tokenBalances.value = { eth: '0', bsc: '0', arbitrum: '0', polygon: '0' };
tokenBalances.value = [];
}
} else {
console.log('[useTokenBalances] Пользователь не аутентифицирован, сброс балансов.');
tokenBalances.value = { eth: '0', bsc: '0', arbitrum: '0', polygon: '0' };
tokenBalances.value = [];
}
};
@@ -79,21 +73,31 @@ export function useTokenBalances() {
// Если пользователь вышел, отвязал кошелек, или не аутентифицирован
stopBalanceUpdates();
// Сбрасываем балансы
tokenBalances.value = { eth: '0', bsc: '0', arbitrum: '0', polygon: '0' };
tokenBalances.value = [];
}
},
{ immediate: true } // Запустить проверку сразу при инициализации
);
// Остановка интервала при размонтировании
// Подписываемся на событие для обновления баланса после сохранения настроек
const unsubscribe = eventBus.on('auth-settings-saved', () => {
console.log('[useTokenBalances] Получено событие сохранения настроек, обновляем балансы');
updateBalances();
});
// Остановка интервала и отписки при размонтировании
onUnmounted(() => {
stopBalanceUpdates();
if (unsubscribe) {
unsubscribe();
}
});
return {
tokenBalances,
isLoadingTokens,
updateBalances,
startBalanceUpdates, // Можно не экспортировать, если управление полностью автоматическое
stopBalanceUpdates, // Можно не экспортировать
startBalanceUpdates,
stopBalanceUpdates,
};
}