Skip to main content
Kamino lending reserves support reward farms that distribute incentives to depositors and borrowers. Reserve farms are managed using the @kamino-finance/farms-sdk package.

Reserve Farm Types

Each reserve can have two farm types:
Farm TypePurposeWho Earns
Collateral FarmDistributes rewards to deposit positionsDepositors / collateral suppliers
Debt FarmDistributes rewards to borrow positionsBorrowers

Setup

Install the required packages:
npm install @kamino-finance/klend-sdk @kamino-finance/farms-sdk @solana/kit

Calculate Reserve Reward APY

Use FarmState and the farms SDK to compute the current reward APY for a reserve’s collateral or debt farm:
import { createSolanaRpc, address } from '@solana/kit';
import { KaminoMarket, getMedianSlotDurationInMsFromLastEpochs } from '@kamino-finance/klend-sdk';
import { FarmState } from '@kamino-finance/farms-sdk';

const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
const slotDuration = await getMedianSlotDurationInMsFromLastEpochs();
const market = await KaminoMarket.load(rpc, address('<MARKET_ADDRESS>'), slotDuration);

const reserve = market!.getReserveBySymbol('USDC');

// Collateral farm (depositors)
const collateralFarmAddress = reserve?.getCollateralFarmAddress();
// Debt farm (borrowers)
const debtFarmAddress = reserve?.getDebtFarmAddress();

if (collateralFarmAddress) {
  const farmState = await FarmState.fetch(rpc, collateralFarmAddress);
  console.log('Collateral farm state:', farmState);
}
For a full tutorial on computing reward APY from farm state, see Calculate Reserve Reward APY.

Claim User Rewards

Use the Farms class to claim all rewards for a user across reserve farms:
import { createSolanaRpc, address } from '@solana/kit';
import { Farms } from '@kamino-finance/farms-sdk';

const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
const farms = new Farms(rpc);

const claimIxs = await farms.claimForUserForFarmAllRewardsIx(
  payer,                          // TransactionSigner
  address('<USER_WALLET>'),
  address('<FARM_ADDRESS>'),
  false,                          // isDelegated
);
// Include claimIxs in a transaction and send
For a full claiming tutorial, see Claim User Rewards.

Reward Data

Query active reward programs and user claimable rewards via the REST API:
EndpointDescription
GET /klend/rewardsAll active KLend reward metrics
GET /klend/users/{pubkey}/rewardsUser claimable rewards across all reserves
See Rewards Data for full API examples.

Additional Resources

Reserve Reward APY Tutorial

Claim User Rewards