Skip to content

Protocol Architecture: How the Contracts Fit Together

stake.link uses the same core contracts for every liquid staking token (stLINK, stPOL, stESP). Each network has its own strategy and vault contracts that connect the core to that network’s native staking.

User deposits LINK / POL / ESP
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” queue, reSDL priority, liquidity buffer
β”‚ PriorityPool β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” mints rebasing LST (stLINK, stPOL, stESP) 1:1
β”‚ StakingPool │◄── RebaseController triggers reward rebases
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” OperatorVCS + CommunityVCS (LINK),
β”‚ Strategies β”‚ PolygonStrategy (POL), EspressoStrategy (ESP)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜β—„β”€β”€ fund flow controllers manage unbonding
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” hold the staked positions
β”‚ Vaults β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β–Ό
Native staking contracts (Chainlink Staking, Polygon, Espresso)
  1. Queue. Users deposit tokens into the PriorityPool. When the network has staking capacity, queued tokens are deposited into the StakingPool. Wallets holding reSDL are served first.
  2. Mint. The StakingPool mints a rebasing liquid staking token at 1:1 and deposits the tokens into one or more strategies.
  3. Stake. Each strategy spreads deposits across vaults, and each vault stakes in the network’s native staking contract.
  4. Earn. The RebaseController triggers rebases that add rewards to every holder’s balance, minus protocol fees.

When a user redeems an LST, the PriorityPool first swaps it for tokens waiting in the queue. Next, if instant withdrawals are enabled, it pays out tokens that are already withdrawable from the StakingPool. The rest is queued in the WithdrawalPool and paid out as new deposits arrive or as vaults finish unbonding. See How withdrawals work.

Role Contracts
Core (shared by all LSTs) StakingPool, PriorityPool, WithdrawalPool, RebaseController
Tokens StakingAllowance (SDL), WrappedSDToken (wstLINK, wstPOL, wstESP)
SDL and rewards SDLPool, LinearBoostController, RewardsPool, RewardsPoolWSD
LINK staking OperatorVCS, OperatorVault, CommunityVCS, CommunityVault, FundFlowController, OperatorStakingPool
POL staking PolygonStrategy, PolygonVault, PolygonFundFlowController
ESP staking EspressoStrategy, EspressoVault, EspressoFundFlowController
Rewards splitting LSTRewardsSplitterController, LSTRewardsSplitter

stake.link stakes LINK in both Chainlink staking pools: