ваше сообщение коммита
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user