import { findMergeMinerAddress, findMinerAddress, } from "@quarryprotocol/quarry-sdk"; import { PublicKey } from "@solana/web3.js"; import { useMemo } from "react"; import { useQuery } from "react-query"; import type { QuarryMetaWithReplicas } from "../../registry"; export interface MinerKeys { quarryKey: PublicKey; legacyMinerKey: PublicKey; mergeMinerKey: PublicKey; minerKey: PublicKey; } export const useMinerKeys = ( quarryMetas: QuarryMetaWithReplicas[], owner?: PublicKey | null ) => { const quarriesCacheKey = useMemo( () => quarryMetas.map((meta) => meta.quarry).join(""), [quarryMetas] ); return useQuery( ["react-query", "allMinerKeys", quarriesCacheKey, owner?.toString()], async () => { if (!owner) { return []; } return await Promise.all( quarryMetas.map(async ({ quarry, mergePool }) => { const quarryKey = new PublicKey(quarry); const [legacyMinerKey] = await findMinerAddress(quarryKey, owner); const [mergeMinerKey] = await findMergeMinerAddress({ pool: new PublicKey(mergePool), owner, }); const [minerKey] = await findMinerAddress(quarryKey, mergeMinerKey); return { quarryKey, legacyMinerKey, mergeMinerKey, minerKey, }; }) ); }, { staleTime: Infinity, } ); };