LidoStrategy
Inherits: BaseYieldSkimmingStrategy
Title: LidoStrategy
Author: Golem Foundation
Yield skimming strategy for Lido wstETH (wrapped staked ETH)
Captures yield from stETH appreciation by tracking wstETH exchange rate LIDO MECHANISM:
- wstETH is a wrapper around rebasing stETH
- Exchange rate: wstETH → stETH increases as staking rewards accrue
- 1 wstETH = stEthPerToken() stETH
- Rate increases ~3-5% annually from ETH staking rewards YIELD CAPTURE:
- User deposits 100 wstETH at rate 1.0
- Rate increases to 1.05 (5% staking rewards)
- Vault value: 105 stETH
- Profit: Strategy shares worth 5 stETH value minted to dragon router EXCHANGE RATE SOURCE:
- Calls wstETH.stEthPerToken()
- Oracle-free (uses Lido's accounting)
- Cannot be manipulated
- 18 decimal precision
Notes:
-
security-contact: [email protected]
-
security: Exchange rate from Lido wstETH (trusted source)
-
security: Slashing risk: ETH validators can be slashed, reducing rate
Functions
constructor
constructor(
address _asset,
string memory _name,
string memory _symbol,
address _management,
address _keeper,
address _emergencyAdmin,
address _donationAddress,
bool _enableBurning,
address _tokenizedStrategyAddress
)
BaseYieldSkimmingStrategy(
_asset, // shares address
_name,
_symbol,
_management,
_keeper,
_emergencyAdmin,
_donationAddress,
_enableBurning,
_tokenizedStrategyAddress
);
Parameters
| Name | Type | Description |
|---|---|---|
_asset | address | Address of the underlying asset (wstETH) |
_name | string | Strategy name |
_symbol | string | Strategy symbol |
_management | address | Address with management role |
_keeper | address | Address with keeper role |
_emergencyAdmin | address | Address with emergency admin role |
_donationAddress | address | Address that receives donated/minted yield |
_enableBurning | bool | Whether loss-protection burning from donation address is enabled |
_tokenizedStrategyAddress | address | Address of TokenizedStrategy implementation |
decimalsOfExchangeRate
Returns exchange rate precision (18 decimals)
wstETH uses 18 decimal precision for stEthPerToken()
function decimalsOfExchangeRate() public pure override returns (uint256);
Returns
| Name | Type | Description |
|---|---|---|
<none> | uint256 | decimals Always returns 18 |
_getCurrentExchangeRate
Returns current wstETH → stETH exchange rate
Queries Lido's wstETH contract for current rate Rate increases as staking rewards accrue to stETH
Note: security: Rate from Lido protocol (manipulation-resistant)
function _getCurrentExchangeRate() internal view override returns (uint256);
Returns
| Name | Type | Description |
|---|---|---|
<none> | uint256 | rate Amount of stETH per 1 wstETH (18 decimal precision) |