Skip to content

Commit

Permalink
Use UTL API directly for address token info
Browse files Browse the repository at this point in the history
Most addresses displayed are not tokens, so the UTL SDK fallback to making an on-chain request is inappropriate
  • Loading branch information
mcintyre94 committed Sep 25, 2023
1 parent 15a5268 commit 753c87f
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 5 deletions.
4 changes: 2 additions & 2 deletions app/components/common/Address.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import React from 'react';
import { useState } from 'react';
import useAsyncEffect from 'use-async-effect';

import { getTokenInfo } from '@/app/utils/token-info';
import { getTokenInfoWithoutOnChainFallback } from '@/app/utils/token-info';

import { Copyable } from './Copyable';

Expand Down Expand Up @@ -125,7 +125,7 @@ const useTokenInfo = (fetchTokenLabelInfo: boolean | undefined, pubkey: string)
if (!fetchTokenLabelInfo) return;
if (!info) {
try {
const token = await getTokenInfo(new PublicKey(pubkey), cluster, url);
const token = await getTokenInfoWithoutOnChainFallback(new PublicKey(pubkey), cluster);
if (isMounted()) {
setInfo(token);
}
Expand Down
36 changes: 33 additions & 3 deletions app/utils/token-info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,36 @@ export async function getTokenInfo(
return token;
}

type UtlApiResponse = {
content: Token[]
}

export async function getTokenInfoWithoutOnChainFallback(
address: PublicKey,
cluster: Cluster
): Promise<Token | undefined> {
const chainId = getChainId(cluster);
if (!chainId) return undefined;

// Request token info directly from UTL API
// We don't use the SDK here because we don't want it to fallback to an on-chain request
const response = await fetch(`https://token-list-api.solana.cloud/v1/mints?chainId=${chainId}`, {
body: JSON.stringify({ addresses: [address.toBase58()] }),
headers: {
"Content-Type": "application/json",
},
method: 'POST',
})

if (response.status >= 400) {
console.error(`Error calling UTL API for address ${address} on chain ID ${chainId}. Status ${response.status}`);
return undefined
}

const fetchedData = await response.json() as UtlApiResponse;
return fetchedData.content[0];
}

async function getFullLegacyTokenInfoUsingCdn(
address: PublicKey,
chainId: ChainId
Expand Down Expand Up @@ -111,9 +141,9 @@ export async function getFullTokenInfo(
if (!sdkTokenInfo) {
return legacyCdnTokenInfo
? {
...legacyCdnTokenInfo,
verified: true,
}
...legacyCdnTokenInfo,
verified: true,
}
: undefined;
}

Expand Down

0 comments on commit 753c87f

Please sign in to comment.