Skip to main content

Staking Pool Types

This guide explains the different types of staking pools available in the Steer Protocol and their specific features.

Overview​

Steer Protocol supports several types of staking pools:

  1. Single Reward Pools
  2. Dual Reward Pools
  3. Steer Vault LP Staking Pools
  4. Regular Token Staking Pools

Single Reward Pools​

Single reward pools distribute one type of reward token to stakers.

// Example: Fetching single reward pools
const singleRewardPools = await steerClient.staking.getStakingPools({
isDualRewards: false
});

// Check rewards
const rewards = await steerClient.staking.earned(poolAddress, userAddress);
if (rewards.success) {
console.log('Rewards:', rewards.data.rewardA.toString());
}

Dual Reward Pools​

Dual reward pools distribute two different reward tokens to stakers.

// Example: Fetching dual reward pools
const dualRewardPools = await steerClient.staking.getDualRewardsStakingPools();

// Check both rewards
const rewards = await steerClient.staking.earned(poolAddress, userAddress);
if (rewards.success) {
console.log('Reward A:', rewards.data.rewardA.toString());
console.log('Reward B:', rewards.data.rewardB?.toString());
}

Steer Vault LP Staking Pools​

These pools allow staking of Steer vault LP tokens and have special features for handling underlying token values.

// Example: Working with Steer vault LP pools
const pool = await steerClient.staking.getStakingPools({
isSteerVault: true
});

// Get LP token value
const lpValue = await steerClient.staking.getSteerLpTokenValue({
stakingPool: pool.data[0],
amount: lpTokenAmount,
token0UsdPrice: price0,
token1UsdPrice: price1
});

if (lpValue.success) {
console.log('Total Value:', lpValue.data.totalValueUsd);
console.log('Token 0 Value:', lpValue.data.token0Value);
console.log('Token 1 Value:', lpValue.data.token1Value);
}

Special Considerations for Vault LP Pools​

  1. Underlying Token Values

    • LP tokens represent a share of two underlying tokens
    • Values need to be calculated using both token prices
    • Special methods available for value calculation
  2. Total Value Locked (TVL)

    const tvl = await steerClient.staking.getTotalStakingAmountInUsd(
    pool,
    token0Price,
    token1Price
    );

Regular Token Staking Pools​

These pools allow staking of regular ERC20 tokens.

// Example: Working with regular staking pools
const regularPools = await steerClient.staking.getStakingPools({
isSteerVault: false
});

// Get staked token value
const tokenValue = await steerClient.staking.getSteerLpTokenValue({
stakingPool: regularPools.data[0],
amount: tokenAmount,
token0UsdPrice: tokenPrice
});

Pool Filtering and Selection​

You can combine various filters to find specific types of pools:

// Example: Get high-yield dual reward pools on Polygon
const pools = await steerClient.staking.getStakingPools({
chainId: 137,
isDualRewards: true,
minDailyEmissionA: 1000,
minDailyEmissionB: 500,
isLive: true
});

Available Filter Options​

  • chainId: Filter by specific blockchain
  • protocol: Filter by protocol (e.g., Forge, Kinetix)
  • isLive: Only show active pools
  • isDualRewards: Filter dual/single reward pools
  • minDailyEmissionA: Minimum daily reward A emission
  • minDailyEmissionB: Minimum daily reward B emission
  • includeExpired: Include expired pools

APR Calculation​

Each pool type may have different APR calculation methods:

// Basic APR calculation
const apr = steerClient.staking.calculateAPR(
pool,
rewardTokenPrice,
totalStakedUSD
);

// For dual reward pools, both rewards are included in APR
if (pool.isDualFactory) {
console.log('Combined APR:', apr);
}

Best Practices​

  1. Pool Selection

    • Always verify pool type before interaction
    • Check if pool is active using periodFinish
    • Verify reward token details
  2. Value Calculation

    • Use appropriate value calculation method based on pool type
    • Always provide correct token prices
    • Handle decimals correctly
  3. Monitoring

    • Track reward rates and emissions
    • Monitor pool status and expiry
    • Keep track of user's staked positions