import type { HandleTXResponse } from "@saberhq/sail"; import { useSail } from "@saberhq/sail"; import { useCallback } from "react"; import invariant from "tiny-invariant"; import { useQuarrySDK } from "../../sdk"; import { useRewarder } from "../rewarder"; import { useQuarry } from "./context"; export const useQuarryClaim = (): (() => Promise) => { const { sdkMut } = useQuarrySDK(); const { handleTX } = useSail(); const { rewarderKey, rewardToken } = useRewarder(); const { stakedToken } = useQuarry(); return useCallback(async () => { invariant(sdkMut, "sdk not connected"); invariant(stakedToken, "staked token"); invariant(rewardToken, "reward token"); const authority = sdkMut.provider.wallet.publicKey; const rewarderW = await sdkMut.mine.loadRewarderWrapper(rewarderKey); const quarryW = await rewarderW.getQuarry(stakedToken); const minerW = await quarryW.getMinerActions(authority); const claimTX = await minerW.claim(); return await handleTX(claimTX, `Claim ${rewardToken.symbol}`); }, [handleTX, rewardToken, rewarderKey, sdkMut, stakedToken]); };