diff --git a/src/api/hooks/useGetANS.ts b/src/api/hooks/useGetANS.ts index 9babd12be..e3885153d 100644 --- a/src/api/hooks/useGetANS.ts +++ b/src/api/hooks/useGetANS.ts @@ -1,5 +1,5 @@ import {useQuery} from "@tanstack/react-query"; -import {knownAddresses, NetworkName, scamAddresses} from "../../constants"; +import {NetworkName, scamAddresses} from "../../constants"; import {useGlobalState} from "../../global-config/GlobalConfig"; import { fetchJsonResponse, @@ -9,6 +9,7 @@ import { } from "../../utils"; import {ResponseError} from "../client"; import {NameType} from "../../components/TitleHashButton"; +import { useGetVerifiedAddresses } from "./useGetVerifiedAddresses"; const TTL = 60000; // 1 minute @@ -35,13 +36,14 @@ export function useGetNameFromAddress( nameType = NameType.ANY, ) { const [state] = useGlobalState(); + const {data: verifiedAddresses} = useGetVerifiedAddresses(); const queryResult = useQuery({ - queryKey: ["MNSName", address, shouldCache, state.network_name], + queryKey: ["MNSName", address, shouldCache, state.network_name, verifiedAddresses], queryFn: () => { const standardizedAddress = standardizeAddress(address); const lowercaseStandardizedAddress = standardizedAddress.toLowerCase(); if (nameType !== NameType.ANS) { - const knownName = knownAddresses[lowercaseStandardizedAddress]; + const knownName = verifiedAddresses?.[lowercaseStandardizedAddress]; if (knownName) { return knownName; } diff --git a/src/api/hooks/useGetVerifiedAddresses.ts b/src/api/hooks/useGetVerifiedAddresses.ts new file mode 100644 index 000000000..c60c40525 --- /dev/null +++ b/src/api/hooks/useGetVerifiedAddresses.ts @@ -0,0 +1,36 @@ +import {useQuery} from "@tanstack/react-query"; +import {knownAddresses} from "../../constants"; + +export function useGetVerifiedAddresses() { + return useQuery>({ + queryKey: ["verified_addresses"], + placeholderData: knownAddresses, + refetchOnMount: true, + queryFn: async () => { + console.log("fetching verified addresses"); + let res; + try { + // TODO: Replace with the actual URL for verified addresses + res = await fetch( + "https://raw.githubusercontent.com/chiumax/nightly-sandbox/refs/heads/main/addr.json", + ); + } catch (error) { + console.error("Failed to fetch verified addresses:", error); + return knownAddresses; + } + + if (!res.ok) { + throw new Error("Failed to fetch verified addresses"); + } + + const addresses: Record = await res.json(); + console.log("addresses", addresses); + return { + ...knownAddresses, + ...addresses, + }; + }, + staleTime: 1000 * 60 * 60, // 1 hour + gcTime: 1000 * 60 * 60 * 24, // 24 hours + }); +} diff --git a/src/constants.tsx b/src/constants.tsx index e33263b3f..3ab40c947 100644 --- a/src/constants.tsx +++ b/src/constants.tsx @@ -136,32 +136,6 @@ export const knownAddresses: Record = { "MOVE Coin Fungible Asset", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff": "Burn Address", - "0x84b1675891d370d5de8f169031f9c3116d7add256ecf50a4bc71e3135ddba6e0": - "Bybit 1", - "0xbeda85a0a4e68adb980382a7182019a7b9a2ad4bba36f41024338dea5ff1eaac": - "Kucoin 1", - "0x0cf869189c785beaaad2f5c636ced4805aeae9cbf49070dc93aed2f16b99012a": - "Gate 1", - "0x31d0a30ae53e2ae852fcbdd1fce75a4ea6ad81417739ef96883eba9574ffe31e": - "MovePosition Vault 1", - "0x58739edcac2f86e62342466f20809b268430aedf32937eba32eaac7e0bbf5233": - "Echelon Vault 1", - "0x574ecf25ca263b4d9cbd43ded90bba6a52309e0cba2213f9606e4b4a3a20ffae": - "Layerbank Vault 1", - "0x79eb0f69a65a088d40776e1789bbc36f247bc5ec0eb2fa5fdbeaa1b1bb3a965a": - "MEXC 1", - "0x03f7399a0d3d646ce94ee0badf16c4c3f3c656fe3a5e142e83b5ebc011aa8b3d": - "Mosaic", - "0x26a95d4bd7d7fc3debf6469ff94837e03e887088bef3a3f2d08d1131141830d3": - "Mosaic AMM", - "0x373aab3f20ef3c31fc4caa287b0f18170f4a0b4a28c80f7ee79434458f70f241": - "Interest DEX", - "0x46566b4a16a1261ab400ab5b9067de84ba152b5eb4016b217187f2a2ca980c5a": - "YUZU", - "0x4c5058bc4cd77fe207b8b9990e8af91e1055b814073f0596068e3b95a7ccd31a": - "Move.Fun", - "0x4877ee1d4970d17283fb9477094fd9b203e2c93ec6d6886e5d831c0b84c2ecf7": - "Binance" }; export const scamAddresses: Record = { diff --git a/src/pages/layout/Search/Index.tsx b/src/pages/layout/Search/Index.tsx index c3cd471df..63c0e2300 100644 --- a/src/pages/layout/Search/Index.tsx +++ b/src/pages/layout/Search/Index.tsx @@ -35,6 +35,7 @@ import { import {getAssetSymbol, tryStandardizeAddress} from "../../../utils"; import {getEmojicoinMarketAddressAndTypeTags} from "../../../components/Table/VerifiedCell"; import {getBlockByHeight, getBlockByVersion} from "../../../api/v2"; +import { useGetVerifiedAddresses } from "../../../api/hooks/useGetVerifiedAddresses"; export type SearchResult = { label: string; @@ -62,7 +63,7 @@ export default function HeaderSearch() { const augmentToWithGlobalSearchParams = useAugmentToWithGlobalSearchParams(); const coinList = useGetCoinList(); - + const {data: verifiedAddresses} = useGetVerifiedAddresses(); useEffect(() => { let timer: NodeJS.Timeout; @@ -309,7 +310,7 @@ export default function HeaderSearch() { ): Promise<(SearchResult | null)[]> { const searchResults: SearchResult[] = []; const searchLowerCase = searchText.toLowerCase(); - Object.entries(knownAddresses).forEach(([address, knownName]) => { + Object.entries(verifiedAddresses ?? knownAddresses).forEach(([address, knownName]) => { if (address.toLowerCase() !== '0x000000000000000000000000000000000000000000000000000000000000000a' && prefixMatchLongerThan3(searchLowerCase, knownName)) { searchResults.push({ label: `Account ${truncateAddress(address)} ${knownName}`,