Skip to content

Commit f81702b

Browse files
committed
Fix TokenPicker
1 parent f44b022 commit f81702b

File tree

4 files changed

+42
-34
lines changed

4 files changed

+42
-34
lines changed

bridge_ui/src/components/TokenSelectors/AlephiumTokenPicker.tsx

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useCallback } from "react";
44
import { createParsedTokenAccount } from "../../hooks/useGetSourceParsedTokenAccounts";
55
import useIsWalletReady from "../../hooks/useIsWalletReady";
66
import { ParsedTokenAccount } from "../../store/transferSlice";
7-
import { getAlephiumTokenLogoURI, tryGetContractId } from "../../utils/alephium";
7+
import { getAlephiumTokenLogoAndSymbol, tryGetContractId } from "../../utils/alephium";
88
import TokenPicker, { BasicAccountRender } from "./TokenPicker";
99
import { useWallet } from "@alephium/web3-react";
1010
import { useTranslation } from "react-i18next";
@@ -50,6 +50,7 @@ export default function AlephiumTokenPicker(props: AlephiumTokenPickerProps) {
5050
try {
5151
const contractId = tryGetContractId(address)
5252
const tokenInfo = await getLocalTokenInfo(alphWallet.nodeProvider, contractId)
53+
const logoAndSymbol = await getAlephiumTokenLogoAndSymbol(contractId)
5354
const amount = balances.get(contractId.toLowerCase()) ?? BigInt(0)
5455
const uiAmount = formatUnits(amount, tokenInfo.decimals)
5556
return createParsedTokenAccount(
@@ -59,9 +60,9 @@ export default function AlephiumTokenPicker(props: AlephiumTokenPickerProps) {
5960
tokenInfo.decimals,
6061
parseFloat(uiAmount),
6162
uiAmount,
62-
tokenInfo.symbol,
63+
logoAndSymbol?.symbol ?? tokenInfo.symbol,
6364
tokenInfo.name,
64-
await getAlephiumTokenLogoURI(contractId),
65+
logoAndSymbol?.logoURI,
6566
false
6667
)
6768
} catch (e) {

bridge_ui/src/components/TokenSelectors/EvmTokenPicker.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
isValidEthereumAddress,
2121
} from "../../utils/evm";
2222
import TokenPicker, { BasicAccountRender } from "./TokenPicker";
23+
import { getTokenLogoAndSymbol } from "../../utils/tokens";
2324

2425
const isWormholev1 = (provider: any, address: string, chainId: ChainId) => {
2526
if (chainId !== CHAIN_ID_ETH) {
@@ -88,11 +89,17 @@ export default function EvmTokenPicker(
8889
signerAddress
8990
);
9091
} else {
91-
return ethTokenToParsedTokenAccount(
92+
const logoAndSymbol = await getTokenLogoAndSymbol(chainId, tokenAccount.address)
93+
const tokenInfo = await ethTokenToParsedTokenAccount(
9294
chainId,
9395
tokenAccount as ethers_contracts.TokenImplementation,
9496
signerAddress
9597
);
98+
return {
99+
...tokenInfo,
100+
symbol: logoAndSymbol?.symbol ?? tokenInfo.symbol,
101+
logo: logoAndSymbol?.logoURI ?? tokenInfo.logo
102+
}
96103
}
97104
} catch (e) {
98105
return Promise.reject(t("Unable to retrive the specific token."));

bridge_ui/src/hooks/useGetSourceParsedTokenAccounts.tsx

+3-28
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ import {
2222
WSOL_ADDRESS,
2323
WSOL_DECIMALS,
2424
hexToUint8Array,
25-
getTokenPoolId,
26-
tryNativeToHexString
25+
getTokenPoolId
2726
} from "@alephium/wormhole-sdk";
2827
import { Dispatch } from "@reduxjs/toolkit";
2928
import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
@@ -126,10 +125,9 @@ import {
126125
} from "../utils/solana";
127126
import { fetchSingleMetadata } from "./useAlgoMetadata";
128127
import { ALPH_TOKEN_ID, NodeProvider } from "@alephium/web3";
129-
import { getAvailableBalances, getAlephiumTokenLogoAndSymbol } from "../utils/alephium";
130-
import { getRegisteredTokens } from "../utils/tokens";
128+
import { getAvailableBalances } from "../utils/alephium";
129+
import { getRegisteredTokens, getTokenLogoAndSymbol } from "../utils/tokens";
131130
import { useWallet } from "@alephium/web3-react";
132-
import { getBSCTokenLogoAndSymbol, getETHTokenLogoAndSymbol } from "../utils/evm";
133131
import { Alert } from "@material-ui/lab";
134132
import parseError from "../utils/parseError";
135133
import i18n from "../i18n";
@@ -798,29 +796,6 @@ const getAlephiumParsedTokenAccounts = async (address: string, provider: NodePro
798796
}
799797
}
800798

801-
async function getTokenLogoAndSymbol(tokenChainId: ChainId, tokenId: string): Promise<{ logoURI?: string, symbol?: string } | undefined> {
802-
if (tokenChainId !== CHAIN_ID_ALEPHIUM) {
803-
const wrappedIdOnALPH = getTokenPoolId(
804-
ALEPHIUM_TOKEN_BRIDGE_CONTRACT_ID,
805-
tokenChainId,
806-
tryNativeToHexString(tokenId, tokenChainId),
807-
ALEPHIUM_BRIDGE_GROUP_INDEX
808-
)
809-
const info = await getAlephiumTokenLogoAndSymbol(wrappedIdOnALPH)
810-
if (info !== undefined) return info
811-
}
812-
813-
if (tokenChainId === CHAIN_ID_ETH) {
814-
return getETHTokenLogoAndSymbol(tokenId)
815-
} else if (tokenChainId === CHAIN_ID_ALEPHIUM) {
816-
return getAlephiumTokenLogoAndSymbol(tokenId)
817-
} else if (tokenChainId === CHAIN_ID_BSC) {
818-
return getBSCTokenLogoAndSymbol(tokenId)
819-
} else {
820-
return undefined
821-
}
822-
}
823-
824799
/**
825800
* Fetches the balance of an asset for the connected wallet
826801
* This should handle every type of chain in the future, but only reads the Transfer state.

bridge_ui/src/utils/tokens.ts

+27-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import bscIcon from "../icons/bsc.svg";
22
import ethIcon from "../icons/eth.svg";
33
import alephiumIcon from "../icons/alephium.svg";
4-
import { ChainId } from "@alephium/wormhole-sdk";
5-
import { EXPLORER_API_SERVER_HOST } from "./consts";
4+
import { CHAIN_ID_ALEPHIUM, CHAIN_ID_BSC, CHAIN_ID_ETH, ChainId, getTokenPoolId, tryNativeToHexString } from "@alephium/wormhole-sdk";
5+
import { ALEPHIUM_BRIDGE_GROUP_INDEX, ALEPHIUM_TOKEN_BRIDGE_CONTRACT_ID, EXPLORER_API_SERVER_HOST } from "./consts";
66
import i18n from "../i18n";
7+
import { getAlephiumTokenLogoAndSymbol } from "./alephium";
8+
import { getBSCTokenLogoAndSymbol, getETHTokenLogoAndSymbol } from "./evm";
79

810
export type RegisteredTokenInfo = {
911
tokenAddress: string
@@ -42,3 +44,26 @@ export async function getRegisteredTokens(): Promise<RegisteredTokenInfo[]> {
4244
return []
4345
}
4446
}
47+
48+
export async function getTokenLogoAndSymbol(tokenChainId: ChainId, tokenId: string): Promise<{ logoURI?: string, symbol?: string } | undefined> {
49+
if (tokenChainId !== CHAIN_ID_ALEPHIUM) {
50+
const wrappedIdOnALPH = getTokenPoolId(
51+
ALEPHIUM_TOKEN_BRIDGE_CONTRACT_ID,
52+
tokenChainId,
53+
tryNativeToHexString(tokenId, tokenChainId),
54+
ALEPHIUM_BRIDGE_GROUP_INDEX
55+
)
56+
const info = await getAlephiumTokenLogoAndSymbol(wrappedIdOnALPH)
57+
if (info !== undefined) return info
58+
}
59+
60+
if (tokenChainId === CHAIN_ID_ETH) {
61+
return getETHTokenLogoAndSymbol(tokenId)
62+
} else if (tokenChainId === CHAIN_ID_ALEPHIUM) {
63+
return getAlephiumTokenLogoAndSymbol(tokenId)
64+
} else if (tokenChainId === CHAIN_ID_BSC) {
65+
return getBSCTokenLogoAndSymbol(tokenId)
66+
} else {
67+
return undefined
68+
}
69+
}

0 commit comments

Comments
 (0)