fix: use Asset Hub API for custom tokens instead of relay chain

This commit is contained in:
2026-02-06 11:32:45 +03:00
parent 6ad5e151ea
commit 042d298426
+14 -12
View File
@@ -229,8 +229,9 @@ export const AccountBalance: React.FC = () => {
}; };
// Fetch other tokens (only custom tokens - wrapped tokens are backend-only) // Fetch other tokens (only custom tokens - wrapped tokens are backend-only)
// IMPORTANT: Assets are on Asset Hub, use assetHubApi (not relay chain api)
const fetchOtherTokens = async () => { const fetchOtherTokens = async () => {
if (!api || !isApiReady || !selectedAccount) return; if (!assetHubApi || !isAssetHubReady || !selectedAccount) return;
try { try {
const tokens: TokenBalance[] = []; const tokens: TokenBalance[] = [];
@@ -246,13 +247,8 @@ export const AccountBalance: React.FC = () => {
for (const assetId of assetIdsToCheck) { for (const assetId of assetIdsToCheck) {
try { try {
const assetBalance = await api.query.assets.account(assetId, selectedAccount.address); // Use Asset Hub API - assets are on Asset Hub, not relay chain
const assetMetadata = await api.query.assets.metadata(assetId); const assetMetadata = await assetHubApi.query.assets.metadata(assetId);
if (assetBalance.isSome) {
const assetData = assetBalance.unwrap();
const balance = assetData.balance.toString();
const metadata = assetMetadata.toJSON() as { symbol?: string; name?: string; decimals?: number }; const metadata = assetMetadata.toJSON() as { symbol?: string; name?: string; decimals?: number };
// Decode hex strings properly // Decode hex strings properly
@@ -275,16 +271,23 @@ export const AccountBalance: React.FC = () => {
} }
const decimals = metadata.decimals || getAssetDecimals(assetId); const decimals = metadata.decimals || getAssetDecimals(assetId);
const balanceFormatted = (parseInt(balance) / Math.pow(10, decimals)).toFixed(6);
// Get balance (may be 0 if user hasn't received any)
let balanceFormatted = '0';
const assetBalance = await assetHubApi.query.assets.account(assetId, selectedAccount.address);
if (assetBalance.isSome) {
const assetData = assetBalance.unwrap();
const balance = assetData.balance.toString();
balanceFormatted = (parseInt(balance) / Math.pow(10, decimals)).toFixed(6);
}
// Simple USD calculation (would use real price feed in production) // Simple USD calculation (would use real price feed in production)
let usdValue = 0; let usdValue = 0;
if (assetId === ASSET_IDS.WUSDT) { if (assetId === ASSET_IDS.WUSDT) {
usdValue = parseFloat(balanceFormatted); // 1 wUSDT = 1 USD usdValue = parseFloat(balanceFormatted); // 1 wUSDT = 1 USD
} else if (assetId === ASSET_IDS.WHEZ) {
usdValue = parseFloat(balanceFormatted) * 0.5; // Placeholder price
} }
// Always show the token (even with 0 balance) since user explicitly added it
tokens.push({ tokens.push({
assetId, assetId,
symbol: symbol.trim(), symbol: symbol.trim(),
@@ -293,7 +296,6 @@ export const AccountBalance: React.FC = () => {
decimals, decimals,
usdValue usdValue
}); });
}
} catch (error) { } catch (error) {
if (import.meta.env.DEV) console.error(`Failed to fetch token ${assetId}:`, error); if (import.meta.env.DEV) console.error(`Failed to fetch token ${assetId}:`, error);
} }