Staking Contract
Handles staking, unstaking, and rebase distribution.
Details
| Property | Value |
|---|---|
| Extends | OP_NET |
| Epoch | 144 blocks (~1 day) |
Storage
slohmAddress: StoredAddress
sSlohmAddress: StoredAddress
treasuryAddress: StoredAddress
lastRebaseBlock: StoredU256
epochLength: StoredU256 // Default: 144 blocks
rewardRate: StoredU256 // Rewards per epoch
Key Methods
stake(amount)
function stake(amount: u256): void {
// Pull SLOHM from user
SLOHM.transferFrom(sender, this, amount);
// Mint sSLOHM to user (1:1)
sSLOHM.mint(sender, amount);
}
unstake(amount)
function unstake(amount: u256): void {
// Burn sSLOHM from user
sSLOHM.burn(sender, amount);
// Transfer SLOHM back to user
SLOHM.transfer(sender, amount);
}
rebase()
function rebase(): void {
// Check epoch elapsed
require(block.number >= lastRebaseBlock + epochLength);
// Get rewards from treasury
const rewards = Treasury.mintRewards(rewardRate);
// Distribute via sSLOHM index increase
sSLOHM.rebase(rewards);
// Update last rebase block
lastRebaseBlock = block.number;
}
Admin Functions
| Function | Access | Description |
|---|---|---|
| setRewardRate | Multisig | Change reward rate |
| setEpochLength | Multisig | Change epoch duration |
View Functions
nextRebaseBlock()- When next rebase can occurcanRebase()- Whether rebase is available