This section contains hooks for claiming and managing protocol rewards on Compound III.

Summary of Protocol Rewards Hooks

useBaseTrackingAccrued

The useBaseTrackingAccrued hook tracks accrued rewards for the base asset.

Usage

import { useBaseTrackingAccrued } from 'compound-react';

function TrackingAccruedDisplay({ accountAddress }) {
  const { 
    trackingAccrued, 
    loading, 
    error 
  } = useBaseTrackingAccrued(null, accountAddress);
  
  if (loading) return <div>Loading...</div>;
  if (error) return <div>Error: {error.message}</div>;
  
  return (
    <div>
      <h2>Tracking Accrued</h2>
      <p>Tracking Accrued: {trackingAccrued?.toString()}</p>
    </div>
  );
}

Return Value

{
  trackingAccrued: BigNumber | null;
  loading: boolean;
  error: Error | null;
  refetch: () => Promise<BigNumber | null>;
}

useGetRewardOwed

The useGetRewardOwed hook retrieves the amount of reward token accrued but not yet claimed.

Usage

import { useGetRewardOwed } from 'compound-react';

function RewardOwedDisplay({ accountAddress, rewardsAddress }) {
  const { 
    reward, 
    loading, 
    error 
  } = useGetRewardOwed(null, accountAddress, rewardsAddress);
  
  if (loading) return <div>Loading...</div>;
  if (error) return <div>Error: {error.message}</div>;
  
  return (
    <div>
      <h2>Reward Owed</h2>
      <p>Token: {reward?.token}</p>
      <p>Amount: {ethers.utils.formatUnits(reward?.owed || 0, 18)}</p>
    </div>
  );
}

Return Value

{
  reward: {
    token: string;
    owed: BigNumber;
  } | null;
  loading: boolean;
  error: Error | null;
  refetch: () => Promise<RewardOwed | null>;
}

useClaimReward

The useClaimReward hook allows users to claim accrued rewards.

Usage

import { useClaimReward } from 'compound-react';

function ClaimRewardComponent({ accountAddress, rewardsAddress }) {
  const { 
    claimReward, 
    loading, 
    error, 
    txHash 
  } = useClaimReward(null, accountAddress, rewardsAddress);
  
  const handleClaimReward = async () => {
    // Claim rewards with accrual
    const shouldAccrue = true;
    const tx = await claimReward(shouldAccrue);
    console.log('Claim reward transaction:', tx);
  };
  
  return (
    <div>
      <button onClick={handleClaimReward} disabled={loading}>
        {loading ? 'Claiming...' : 'Claim Rewards'}
      </button>
      {error && <p>Error: {error.message}</p>}
      {txHash && <p>Transaction: {txHash}</p>}
    </div>
  );
}

Return Value

{
  claimReward: (shouldAccrue?: boolean) => Promise<string | null>; // Returns transaction hash
  loading: boolean;
  error: Error | null;
  txHash: string | null;
}