Skip to content

getClaimableRewardBulk

Get claimable rewards for a user across multiple staking pools in a single call. This is more efficient than calling getClaimableReward multiple times.

Usage

example.ts
import { mintclub } from 'mint.club-v2-sdk'
 
const bulkRewards = await mintclub.network('base').stake.getClaimableRewardBulk({
  poolIdFrom: 0,
  poolIdTo: 10,
  staker: '0x1234567890123456789012345678901234567890',
})
console.log('Bulk claimable rewards:', bulkRewards)

Return Value

Promise<bigint[5][]>

Returns a promise that resolves to an array of arrays, where each inner array contains 5 values for each pool:

  • [0] - Pool ID (bigint)
  • [1] - Reward claimable (after fees) (bigint)
  • [2] - Fee that will be charged (bigint)
  • [3] - Total claimed so far (bigint)
  • [4] - Total fees paid so far (bigint)

Parameters

poolIdFrom

  • Type: number

The starting pool ID (inclusive).

const bulkRewards = await mintclub.network('base').stake.getClaimableRewardBulk({
  poolIdFrom: 0, 
  poolIdTo: 10,
  staker: '0x1234567890123456789012345678901234567890',
})

poolIdTo

  • Type: number

The ending pool ID (inclusive).

const bulkRewards = await mintclub.network('base').stake.getClaimableRewardBulk({
  poolIdFrom: 0,
  poolIdTo: 10, 
  staker: '0x1234567890123456789012345678901234567890',
})

staker

  • Type: '0x${string}'

The address of the staker to check rewards for.

const bulkRewards = await mintclub.network('base').stake.getClaimableRewardBulk({
  poolIdFrom: 0,
  poolIdTo: 10,
  staker: '0x1234567890123456789012345678901234567890', 
})

Example

example.ts
import { mintclub } from 'mint.club-v2-sdk'
import { formatUnits } from 'viem'
 
const stakerAddress = '0x1234567890123456789012345678901234567890'
 
// Get rewards for pools 0-19
const bulkRewards = await mintclub.network('base').stake.getClaimableRewardBulk({
  poolIdFrom: 0,
  poolIdTo: 19,
  staker: stakerAddress,
})
 
console.log(`Checking rewards for ${bulkRewards.length} pools`)
 
// Process each pool's rewards
for (const poolRewards of bulkRewards) {
  const [poolId, rewardClaimable, fee, claimedTotal, feeTotal] = poolRewards
 
  // Skip pools with no claimable rewards
  if (rewardClaimable === 0n) continue
 
  console.log(`\nPool ${poolId}:`)
 
  // Get pool info for token details
  const poolInfo = await mintclub.network('base').stake.getPool({
    poolId: Number(poolId),
  })
  const { rewardToken } = poolInfo
 
  const claimableAmount = formatUnits(rewardClaimable, rewardToken.decimals)
  const feeAmount = formatUnits(fee, rewardToken.decimals)
 
  console.log(`  Claimable: ${claimableAmount} ${rewardToken.symbol}`)
  console.log(`  Fee: ${feeAmount} ${rewardToken.symbol}`)
}
 
// Find pools with rewards
const poolsWithRewards = bulkRewards.filter(([, rewardClaimable]) => rewardClaimable > 0n)
 
if (poolsWithRewards.length > 0) {
  console.log(`\nYou have rewards in ${poolsWithRewards.length} pools!`)
 
  // Claim rewards from all pools
  for (const [poolId] of poolsWithRewards) {
    await mintclub.network('base').stake.claim({
      poolId: Number(poolId),
      onSuccess: (receipt) => {
        console.log(`Claimed rewards from pool ${poolId}`)
      },
    })
  }
} else {
  console.log('\nNo rewards available in any pool')
}