/Docs/Validators/Staking Guide

Staking Guide

Stake your RAMA tokens to earn rewards and help secure the Ramestta network. You can stake as a validator or delegate to existing validators.

Staking Options

OptionMin StakeRequirementsRewards
Validator10,000 RAMARun Heimdall & Bor nodesHigher (block rewards + commission)
Delegator1 RAMAJust RAMA tokensShare of validator rewards minus commission

Delegate Your RAMA

Delegation is the easiest way to earn staking rewards without running infrastructure.

Using the Staking Dashboard

  • Go to https://wallet.ramestta.com/staking
  • Connect your wallet (MetaMask, RamaPay, etc.)
  • Browse the list of validators
  • Choose a validator with good uptime and reasonable commission
  • Click "Delegate" and enter the amount
  • Confirm the transaction in your wallet
â„šī¸Choosing a Validator
Look for validators with:
  • High uptime (99%+)
  • Reasonable commission (5-20%)
  • Active in community
  • Not already at stake cap

Using the SDK

Delegate with SDKjavascript
import { RamesttaStaking } from '@ramestta/staking-sdk';
import { ethers } from 'ethers';

async function delegate() {
  // Connect to Polygon (where staking contract lives)
  const provider = new ethers.BrowserProvider(window.ethereum);
  const signer = await provider.getSigner();
  
  const staking = new RamesttaStaking(signer);
  
  // Get list of validators
  const validators = await staking.getValidators();
  console.log('Available validators:', validators);
  
  // Choose validator by ID
  const validatorId = 1;
  
  // Approve RAMA for delegation
  const amount = ethers.parseEther('1000'); // 1000 RAMA
  await staking.approve(amount);
  
  // Delegate to validator
  const tx = await staking.delegate(validatorId, amount);
  console.log('Delegation tx:', tx.hash);
  
  // Wait for confirmation
  await tx.wait();
  console.log('Delegation complete!');
}

delegate();

Check Your Stake

View Delegation Infojavascript
import { RamesttaStaking } from '@ramestta/staking-sdk';
import { ethers } from 'ethers';

async function checkStake() {
  const provider = new ethers.BrowserProvider(window.ethereum);
  const signer = await provider.getSigner();
  const address = await signer.getAddress();
  
  const staking = new RamesttaStaking(signer);
  
  // Get delegation info
  const delegation = await staking.getDelegation(address);
  console.log('Delegated amount:', ethers.formatEther(delegation.amount), 'RAMA');
  console.log('Validator ID:', delegation.validatorId);
  console.log('Shares:', ethers.formatEther(delegation.shares));
  
  // Get pending rewards
  const rewards = await staking.getPendingRewards(address);
  console.log('Pending rewards:', ethers.formatEther(rewards), 'RAMA');
  
  // Get all delegations (if delegated to multiple validators)
  const allDelegations = await staking.getAllDelegations(address);
  console.log('All delegations:', allDelegations);
}

checkStake();

Claim Rewards

Claim Staking Rewardsjavascript
import { RamesttaStaking } from '@ramestta/staking-sdk';
import { ethers } from 'ethers';

async function claimRewards() {
  const provider = new ethers.BrowserProvider(window.ethereum);
  const signer = await provider.getSigner();
  
  const staking = new RamesttaStaking(signer);
  
  // Check pending rewards
  const rewards = await staking.getPendingRewards(await signer.getAddress());
  console.log('Pending rewards:', ethers.formatEther(rewards), 'RAMA');
  
  if (rewards > 0) {
    // Claim all rewards
    const tx = await staking.claimRewards();
    console.log('Claiming rewards:', tx.hash);
    await tx.wait();
    console.log('Rewards claimed!');
  }
}

claimRewards();

Unstake (Withdraw)

To unstake, you need to initiate an unbonding period. After the unbonding period (typically 21 days), you can withdraw your tokens.

Unstake and Withdrawjavascript
import { RamesttaStaking } from '@ramestta/staking-sdk';
import { ethers } from 'ethers';

async function unstake() {
  const provider = new ethers.BrowserProvider(window.ethereum);
  const signer = await provider.getSigner();
  
  const staking = new RamesttaStaking(signer);
  
  // Step 1: Initiate unbonding
  const unbondAmount = ethers.parseEther('500'); // Unbond 500 RAMA
  const unbondTx = await staking.unbond(unbondAmount);
  console.log('Unbonding initiated:', unbondTx.hash);
  await unbondTx.wait();
  
  // Step 2: Check unbonding status
  const unbonding = await staking.getUnbondingInfo(await signer.getAddress());
  console.log('Unbonding amount:', ethers.formatEther(unbonding.amount), 'RAMA');
  console.log('Withdrawable after:', new Date(unbonding.withdrawableTime * 1000));
  
  // Step 3: After unbonding period, claim tokens
  // (This will fail if unbonding period not complete)
  if (Date.now() / 1000 > unbonding.withdrawableTime) {
    const withdrawTx = await staking.claimUnbonded();
    console.log('Withdrawal complete:', withdrawTx.hash);
  }
}

unstake();
âš ī¸Unbonding Period
The unbonding period is approximately 21 days. During this time, your tokens are locked and you won't earn rewards on them.

Restake (Compound) Rewards

Auto-Compound Rewardsjavascript
import { RamesttaStaking } from '@ramestta/staking-sdk';
import { ethers } from 'ethers';

async function restake() {
  const provider = new ethers.BrowserProvider(window.ethereum);
  const signer = await provider.getSigner();
  
  const staking = new RamesttaStaking(signer);
  
  // Get pending rewards
  const rewards = await staking.getPendingRewards(await signer.getAddress());
  
  if (rewards > ethers.parseEther('1')) { // Only restake if > 1 RAMA
    // Restake rewards back to the same validator
    const tx = await staking.restake();
    console.log('Restaking rewards:', tx.hash);
    await tx.wait();
    console.log('Rewards restaked!');
  }
}

// Run every hour for auto-compounding
setInterval(restake, 60 * 60 * 1000);

Staking Rewards

FactorImpact on Rewards
Total Network StakeHigher total stake = lower APY per token
Your Stake AmountMore stake = more rewards
Validator PerformanceValidators with high uptime earn more
Validator CommissionLower commission = higher returns for delegators
Network ActivityMore transactions = more fee rewards

Staking Contract Addresses

Staking happens on Polygon Mainnet (Chain ID: 137). Here are the official contract addresses:

ContractNetworkAddress
StakeManagerProxyPolygon0xc032E6C4D196CBf4CceddbA1d18661F7DD57f659
StakeManager (impl)Polygon0x710c591d0862d33F1dBfC8555778F23709aEA53c
StakeManagerExtensionPolygon0xdb8Bf95B4B10c25c4eE3335d8B4d236988d53E85
ValidatorSharePolygon0x2A53F2bb6023C262F34Ad936f10105fED67d13BB
ValidatorShareFactoryPolygon0xD7379c8BBFBEBc743cfa0ebF398c80b39c937802
StakingInfoPolygon0x06FB27902B00a4CCF3850783dAB763364BF8654A
StakingNFTPolygon0x108E6890F660Dbe4f3554DC43769B4D734555981
RAMA TokenPolygon0x55a5CC06801bBa4C030568f1A7ee1c753FDcbe36
â„šī¸Polygon RPC
Connect to Polygon Mainnet using: https://polygon-rpc.com or your own Infura/Alchemy endpoint.
✅Start Earning
Ready to stake? Visit the Staking Dashboard to delegate your RAMA and start earning rewards today!

Found an issue with this page? Report on GitHub