Staking System
The Treem DAO staking system allows token holders to lock their TREEM tokens for specified periods to gain voting rights and earn rewards.
Overview
Staking is mandatory for governance participation. By staking tokens, users demonstrate long-term commitment to the DAO and gain the right to vote on proposals and earn rewards.
Staking Tiers
6-Month Staking Tier
Lock Period: 180 days
Benefits:
Vote on general proposals
Vote on grant proposals
Earn base voting rewards
Participate in governance discussions
Use Cases:
Regular governance participation
Community members seeking voting rights
Users wanting moderate commitment
12-Month Staking Tier
Lock Period: 365 days
Benefits:
All 6-month tier benefits
Create grant proposals
Higher voting reward multipliers
Priority in certain governance features
Use Cases:
Long-term DAO contributors
Project creators seeking funding
Core community members
Staking Process
Prerequisites
TREEM tokens in your wallet
Connected Ethereum wallet
Sufficient ETH for gas fees
Step-by-Step Staking
Navigate to Staking Interface
Go to Dashboard → Token Staking
Or use the dedicated Staking page
Choose Staking Parameters
Enter amount of TREEM to stake
Select lock period (6 or 12 months)
Review staking benefits summary
Approve Token Transfer
Click "Stake Tokens"
Approve TREEM token spending (if first time)
Confirm staking transaction
Confirm Staking
Transaction processes on blockchain
Stake appears in your dashboard
Voting power is automatically updated
Multiple Stakes
Users can create multiple separate stakes:
Each stake has its own lock period
Voting power cumulates across all stakes
Unstaking is done individually per stake
Voting Power Calculation
Base Voting Power
Voting Power = Sum of All Staked Token Amounts
Delegation
Default: Voting power delegated to yourself
Option: Delegate to another address
Delegation can be changed anytime
Delegated voting power appears instantly
Snapshot Mechanism
Voting power calculated at proposal creation time
Prevents vote manipulation through token transfers
Historical voting power preserved for active proposals
Lock Periods and Unlocking
Lock Period Rules
Fixed Duration: Cannot be changed after staking
No Early Exit: Tokens locked for entire period
Automatic Unlock: Tokens become unstakable after period expires
Tracking Lock Progress
Dashboard Display:
Time remaining until unlock
Progress bar showing completion percentage
Exact unlock date and time
Calculation:
Progress = (Current Time - Start Time) / Lock Period
Time Remaining = Unlock Time - Current Time
Unstaking Process
Wait for Unlock: Lock period must be completed
Navigate to Stakes: View your active stakes
Unstake Tokens: Click "Unstake" on expired stakes
Confirm Transaction: Approve unstaking transaction
Receive Tokens: Tokens returned to wallet
Rewards System
Voting Rewards
Base Reward: 100 TREEM per vote cast
Earning Mechanism:
Vote on any proposal (general or grant)
Rewards accumulate in your account
Claim manually when ready
Annual Limits:
Maximum 50,000 TREEM per user per year
Prevents reward farming
Resets annually
Reward Calculation
Total Rewards = Votes Cast × Base Reward (100 TREEM)
Claimable = min(Total Rewards, Annual Cap - Already Claimed)
Claiming Rewards
Navigate to Rewards: Go to Rewards section
View Accumulated: See unclaimed reward amount
Claim Rewards: Click "Claim Rewards" button
Confirm Transaction: Approve claim transaction
Receive Tokens: Rewards transferred to wallet
Smart Contract Integration
TreemStaking Contract
Key Functions:
stake(uint256 amount, StakeTier tier)
: Create new stakeunstake()
: Remove expired stakeclaimBonus()
: Claim voting rewardscanProposeGrants(address user)
: Check grant proposal rights
Events:
Staked(address user, uint256 amount, StakeTier tier)
Unstaked(address user, uint256 amount)
BonusClaimed(address user, uint256 bonusAmount)
Staking Tiers Enum
enum StakeTier {
NONE, // 0 - No active stake
SIX_MONTHS, // 1 - 6-month lock period
TWELVE_MONTHS // 2 - 12-month lock period
}
Frontend Integration
React Hooks
useStaking Hook:
const {
stakes, // Array of user's stakes
loading, // Loading state
createStake, // Function to create stake
unstakeTokens, // Function to unstake
getTimeRemaining // Function to calculate time left
} = useStaking();
Key Components
EnhancedTokenStaking: Main staking interface
StakingDashboard: Comprehensive staking overview
VotingRewardsDashboard: Reward tracking and claiming
Security Considerations
Smart Contract Security
Reentrancy Protection: Prevents recursive calls
Access Controls: Owner-only administrative functions
Time Validation: Prevents manipulation of lock periods
Balance Checks: Ensures sufficient tokens for operations
User Security
Wallet Security: Keep private keys secure
Transaction Verification: Always verify transaction details
Phishing Protection: Only use official DAO interfaces
Gas Management: Monitor network congestion and fees
Troubleshooting
Common Issues
Staking Transaction Fails:
Check TREEM token balance
Verify token approval
Ensure sufficient ETH for gas
Try increasing gas limit
Cannot Unstake:
Verify lock period is complete
Check stake status in dashboard
Ensure stake is active
Try refreshing the interface
Voting Power Not Updated:
Wait for blockchain confirmation
Check if delegation is correct
Verify stake transaction succeeded
Contact support if persistent
Error Messages
"Invalid tier"
Wrong staking tier selected
Use SIX_MONTHS or TWELVE_MONTHS
"Already staked"
User has existing active stake
Unstake previous stake first
"Lock period not over"
Attempting early unstake
Wait for lock period completion
"Insufficient balance"
Not enough TREEM tokens
Acquire more tokens or reduce amount
Advanced Features
Delegation Management
Self Delegation (Default):
// Automatic on staking
votesToken.delegate(msg.sender);
Delegate to Others:
// Delegate voting power to another address
await treemToken.delegate(delegateeAddress);
Batch Operations
Multiple Stakes:
Create separate stakes for different time periods
Manage risk across different lock periods
Optimize for various governance scenarios
Batch Unstaking:
Unstake multiple expired stakes
Claim multiple reward periods
Optimize gas costs
Best Practices
Staking Strategy
Diversify Lock Periods: Mix 6-month and 12-month stakes
Consider Gas Costs: Batch operations when possible
Monitor Unlock Dates: Plan for token liquidity needs
Active Participation: Vote regularly to maximize rewards
Risk Management
Start Small: Begin with smaller amounts to learn system
Understand Locks: Fully comprehend lock period implications
Stay Informed: Follow DAO announcements and updates
Community Engagement: Participate in discussions before voting
Migration and Upgrades
Contract Upgrades
The staking system may be upgraded in the future:
User stakes will be preserved
Migration paths will be provided
Community governance will decide upgrades
Advance notice will be given
Database Integration
Stake Tracking:
-- stake_locks table structure
CREATE TABLE stake_locks (
id UUID PRIMARY KEY,
user_id UUID NOT NULL,
amount INTEGER NOT NULL,
lock_period INTEGER NOT NULL,
stake_tier TEXT NOT NULL,
start_time TIMESTAMP NOT NULL,
unlock_time TIMESTAMP NOT NULL,
is_active BOOLEAN DEFAULT TRUE
);
API Reference
REST Endpoints
Get User Stakes:
GET /api/staking/user/{userId}/stakes
Create Stake:
POST /api/staking/stake
Body: { amount: number, lockPeriod: 6|12 }
Unstake Tokens:
POST /api/staking/unstake/{stakeId}
Get Rewards:
GET /api/rewards/user/{userId}
This comprehensive staking documentation covers all aspects of the Treem DAO staking system, from basic concepts to advanced integration details.
Last updated
Was this helpful?