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:
- Single Reward Pools
- Dual Reward Pools
- Steer Vault LP Staking Pools
- 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
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
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 blockchainprotocol
: Filter by protocol (e.g., Forge, Kinetix)isLive
: Only show active poolsisDualRewards
: Filter dual/single reward poolsminDailyEmissionA
: Minimum daily reward A emissionminDailyEmissionB
: Minimum daily reward B emissionincludeExpired
: 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
Pool Selection
- Always verify pool type before interaction
- Check if pool is active using
periodFinish
- Verify reward token details
Value Calculation
- Use appropriate value calculation method based on pool type
- Always provide correct token prices
- Handle decimals correctly
Monitoring
- Track reward rates and emissions
- Monitor pool status and expiry
- Keep track of user's staked positions