AVAX staking mechanics
AVAX Liquid Staking lets the user stake their funds through the Ankr deposit address on the Avalanche network, accumulate rewards, and receive their stake+rewards when unstaking.
The following section explains staking requirements, fees, rewards, validators, smart contracts and function calls to interact with these smart contracts.
The requirements when staking are:
Minimum value to stake — 1 AVAX.
Stake can only be a whole number.
Maximum value to stake — unlimited, at the user’s discretion.
The requirements when unstaking are:
Minimum value to unstake — 0 AVAX.
Unstaking allows fractional numbers.
Maximum value to unstake — staked amount + % of the reward, up to the user’s balance.
Release time — end of the current validating period, which is 4 weeks.
Ankr takes 2% fee from the staking reward.
The user must also count in the gas price for outgoing transactions.
User's ankrAVAX grows steadily in value towards AVAX, but never changes in numbers. The formula can be described this way:
daily rewards / total share * user's share.
Validators that work correctly and are online at least 80% of their validating period, receive rewards at the end of the validating period.
On Avalanche, Ankr has three validators:
- Validator #1 (opens in a new tab)
- Validator #2 (opens in a new tab)
- Validator #3 (opens in a new tab)
- Validator #4 (opens in a new tab)
Smart contracts involved in AVAX Liquid Staking are:
- aAVAXb (opens in a new tab) — may be used to approve access to ankrAVAX as an intermediary functionality step.
- ankrAVAX (opens in a new tab) — keeps track of user shares and ankrAVAX supply share; ankrAVAX is an ERC-20-like token.
- AvalanchePool (opens in a new tab) — implements staking and unstaking logic.
The workflow is both user and Ankr-driven. The user part is Step 1, the Ankr part is Steps 2–5.
User sends AVAX to
AvalanchePoolon the Avalanche blockchain via the Ankr Staking Dashboard and MetaMask connected to the Avalanche blockchain. The function effectively called is
AvalanchePoolemits an event saying the stake is received:
AlavalchePool::StakePendingV2(address indexed staker, uint256 amount, bool indexed isRebasing).
isRebasingis false for
AvalanchePoolcalculates and stores/updates the number of aAVAXb or ankrAVAX the user can claim.
Ankr backend collects the staked AVAX transferring them from the smart contract to the deposit address controlled by Ankr. Then it makes a delegator or validator stake on the Avalanche blockchain.
ankrAVAX is minted automatically for the user's address.
Ankr backend updates the ratio daily and the user can see their updated aAVAXb balance. For ankrAVAX the updated ratio is used for recalculating value of ankrAVAX to AVAX.
The workflow is both user and Ankr-driven. The user part is Steps 1-2, the Ankr part is Steps 3–4.
- The user inputs the number of ankrAVAX on the Ankr Staking Dashboard to unstake, and the frontend sends a request to the
AvalanchePool::claimCerts(uint256 amount)smart contract to redeeem ankrAVAX for AVAX.
amountspecifies the amount AVAX to be released back to the user.
AvalanchePoolsends a convert request to the
ankrAVAXsmart contract that burns the corresponding amount of ankrAVAX.
AvalanchePoolstores the convert request.
- When the current validation period is over, Ankr backend checks if there any ankrAVAX-to-AVAX convert requests pending and requests
AvalanchePoolto serve them providing AVAX from unblocked stakes and received rewards, at the end of the current validating period.
AvalanchePooluses the AVAX received from the Ankr dedicated address to serve the pending convert requests.