diff --git a/packages/plugins/Debugger/src/SiteAdaptor/components/HubDialog.tsx b/packages/plugins/Debugger/src/SiteAdaptor/components/HubDialog.tsx
index aefd54d932d1..95ef1ac359c9 100644
--- a/packages/plugins/Debugger/src/SiteAdaptor/components/HubDialog.tsx
+++ b/packages/plugins/Debugger/src/SiteAdaptor/components/HubDialog.tsx
@@ -1,8 +1,6 @@
import { DialogContent } from '@mui/material'
import { InjectedDialog } from '@masknet/shared'
import { useRemoteControlledDialog } from '@masknet/shared-base-ui'
-import { ChainId } from '@masknet/web3-shared-evm'
-import { EVMWeb3ContextProvider } from '@masknet/web3-hooks-base'
import { HubContent } from './HubContent.js'
import { PluginDebuggerMessages } from '../../messages.js'
@@ -11,9 +9,7 @@ export function HubDialog() {
return (
-
-
-
+
)
diff --git a/packages/web3-providers/src/Web3/Solana/apis/FungibleTokenAPI.ts b/packages/web3-providers/src/Web3/Solana/apis/FungibleTokenAPI.ts
index 3f4066ad3c35..062ca5ff7abf 100644
--- a/packages/web3-providers/src/Web3/Solana/apis/FungibleTokenAPI.ts
+++ b/packages/web3-providers/src/Web3/Solana/apis/FungibleTokenAPI.ts
@@ -19,7 +19,7 @@ import {
} from '@masknet/web3-shared-solana'
import { SolanaChainResolver } from './ResolverAPI.js'
import * as CoinGeckoPriceSolana from /* webpackDefer: true */ '../../../CoinGecko/index.js'
-import { RAYDIUM_TOKEN_LIST, SPL_TOKEN_PROGRAM_ID } from '../constants/index.js'
+import { JUP_TOKEN_LIST, RAYDIUM_TOKEN_LIST, SPL_TOKEN_PROGRAM_ID } from '../constants/index.js'
import { createFungibleAsset, createFungibleToken, requestRPC } from '../helpers/index.js'
import type {
GetBalanceResponse,
@@ -27,6 +27,7 @@ import type {
RaydiumTokenList,
MaskToken,
SolanaHubOptions,
+ JupToken,
} from '../types/index.js'
import { fetchJSON } from '../../../helpers/fetchJSON.js'
import type { FungibleTokenAPI, TokenListAPI } from '../../../entry-types.js'
@@ -35,23 +36,45 @@ const fetchRaydiumTokenList = memoizePromise(
memoize,
async (url: string): Promise>> => {
const tokenList = await fetchJSON(url, { cache: 'force-cache' })
- const tokens: Array> = [...tokenList.official, ...tokenList.unOfficial].map(
- (token) => {
- if (isSameAddress(token.mint, '11111111111111111111111111111111'))
- return SolanaChainResolver.nativeCurrency(ChainId.Mainnet)
- return {
- id: token.mint,
- chainId: ChainId.Mainnet,
- type: TokenType.Fungible,
- schema: SchemaType.Fungible,
- address: token.mint,
- name: token.name,
- symbol: token.symbol,
- decimals: token.decimals,
- logoURL: token.icon,
- }
- },
- )
+ const tokens: Array> = tokenList.data.mintList.map((token) => {
+ if (isSameAddress(token.address, '11111111111111111111111111111111'))
+ return SolanaChainResolver.nativeCurrency(ChainId.Mainnet)
+ return {
+ id: token.address,
+ chainId: ChainId.Mainnet,
+ type: TokenType.Fungible,
+ schema: SchemaType.Fungible,
+ address: token.address,
+ name: token.name,
+ symbol: token.symbol,
+ decimals: token.decimals,
+ logoURL: token.logoURI,
+ }
+ })
+ return tokens
+ },
+ (url) => url,
+)
+
+const fetchJupTokenList = memoizePromise(
+ memoize,
+ async (url: string): Promise>> => {
+ const tokenList = await fetchJSON(url, { cache: 'force-cache' })
+ const tokens: Array> = tokenList.map((token) => {
+ if (isSameAddress(token.address, '11111111111111111111111111111111'))
+ return SolanaChainResolver.nativeCurrency(ChainId.Mainnet)
+ return {
+ id: token.address,
+ chainId: ChainId.Mainnet,
+ type: TokenType.Fungible,
+ schema: SchemaType.Fungible,
+ address: token.address,
+ name: token.name,
+ symbol: token.symbol,
+ decimals: token.decimals,
+ logoURL: token.logoURI,
+ }
+ })
return tokens
},
(url) => url,
@@ -169,8 +192,10 @@ class SolanaFungibleTokenAPI
const { FUNGIBLE_TOKEN_LISTS = EMPTY_LIST } = getTokenListConstants(chainId)
const maskTokenList = await fetchMaskTokenList(FUNGIBLE_TOKEN_LISTS[0])
const raydiumTokenList = await fetchRaydiumTokenList(RAYDIUM_TOKEN_LIST)
-
- return uniqBy([...maskTokenList, ...raydiumTokenList], (x) => x.address).filter((x) => x.name && x.symbol)
+ const jupTokenList = await fetchJupTokenList(JUP_TOKEN_LIST)
+ return uniqBy([...maskTokenList, ...raydiumTokenList, ...jupTokenList], (x) => x.address).filter(
+ (x) => x.name && x.symbol,
+ )
}
async getNonFungibleTokenList(
diff --git a/packages/web3-providers/src/Web3/Solana/constants/index.ts b/packages/web3-providers/src/Web3/Solana/constants/index.ts
index a3db5c08bed3..3cdb7446f502 100644
--- a/packages/web3-providers/src/Web3/Solana/constants/index.ts
+++ b/packages/web3-providers/src/Web3/Solana/constants/index.ts
@@ -1,4 +1,5 @@
import { TOKEN_PROGRAM_ID } from '@solana/spl-token'
-export const RAYDIUM_TOKEN_LIST = 'https://api.raydium.io/v2/sdk/token/raydium.mainnet.json'
+export const RAYDIUM_TOKEN_LIST = 'https://api-v3.raydium.io/mint/list'
export const SPL_TOKEN_PROGRAM_ID = TOKEN_PROGRAM_ID.toBase58()
+export const JUP_TOKEN_LIST = 'https://tokens.jup.ag/tokens?tags=lst,community'
diff --git a/packages/web3-providers/src/Web3/Solana/types/index.ts b/packages/web3-providers/src/Web3/Solana/types/index.ts
index 1675971563c4..1483480582e4 100644
--- a/packages/web3-providers/src/Web3/Solana/types/index.ts
+++ b/packages/web3-providers/src/Web3/Solana/types/index.ts
@@ -55,16 +55,32 @@ interface SplToken {
icon: string
}
-export interface RaydiumTokenList {
+interface RaydiumToken {
+ address: string
+ chainId: number
+ decimals: number
+ logoURI: string
name: string
- timestamp: string
- version: {
- major: number
- minor: number
- patch: number
+ programId: string
+ symbol: string
+}
+
+export interface JupToken {
+ address: string
+ created_at: string
+ dayliy_volume: number
+ decimals: number
+ logoURI: string
+ name: string
+ symbol: string
+}
+
+export interface RaydiumTokenList {
+ data: {
+ mintList: RaydiumToken[]
}
- official: SplToken[]
- unOfficial: SplToken[]
+ id: string
+ success: boolean
}
export interface MaskToken {