Интеграция с Lido (liquid staking)
Lido — де-факто стандарт liquid staking на Ethereum. stETH интегрирован в сотни DeFi протоколов, имеет $20B+ liquidity. Если ваш DeFi протокол работает с ETH — скорее всего нужна интеграция stETH.
stETH vs wstETH: что выбрать
stETH — rebasing токен. Баланс пользователя растёт каждые 24 часа при оракульном отчёте. balanceOf() возвращает разные значения в разное время.
Проблема: большинство DeFi контрактов не готовы к rebasing. AMM контракты, lending protocols, yield aggregators — они хранят записи об amount и не ожидают изменения баланса.
wstETH — wrapped stETH, value-accruing. balanceOf() не меняется, но exchange rate wstETH/stETH растёт. Полностью совместим со стандартными ERC-20 интерфейсами.
Правило: используйте wstETH везде кроме конечных UI для пользователей (там удобнее показывать stETH).
Deposit ETH → stETH
// Прямой transfer ETH на stETH контракт
(bool success,) = address(stETH).call{value: amount}("");
// Или через интерфейс
IStETH stETHContract = IStETH(STETH_ADDRESS);
stETHContract.submit{value: amount}(referralAddress);
Wrap/Unwrap stETH ↔ wstETH
IWstETH wstETH = IWstETH(WSTETH_ADDRESS);
// stETH → wstETH
IERC20(stETH).approve(address(wstETH), stETHAmount);
uint256 wstETHAmount = wstETH.wrap(stETHAmount);
// wstETH → stETH
uint256 stETHAmount = wstETH.unwrap(wstETHAmount);
// Конвертация без транзакции (view)
uint256 stETHPerWstETH = wstETH.getStETHByWstETH(1e18);
uint256 wstETHPerStETH = wstETH.getWstETHByStETH(1e18);
Price feeds
Chainlink предоставляет stETH/ETH и wstETH/ETH агрегаторы:
// stETH/ETH
AggregatorV3Interface stETHFeed = AggregatorV3Interface(0x86392dC19c0b719886221c78AB11eb8Cf5c52812);
// wstETH/ETH
AggregatorV3Interface wstETHFeed = AggregatorV3Interface(0x...);
(, int256 answer,,,) = wstETHFeed.latestRoundData();
// answer в wei (8 decimals)
Для расчёта wstETH/USD: wstETH/ETH × ETH/USD.
Withdrawal через WithdrawalQueue
IWithdrawalQueueERC721 withdrawalQueue = IWithdrawalQueueERC721(WITHDRAWAL_QUEUE);
// Approve stETH для withdrawal
stETH.approve(address(withdrawalQueue), amount);
// Запрос вывода (можно несколько amounts в одном запросе)
uint256[] memory amounts = new uint256[](1);
amounts[0] = stETHAmount;
uint256[] memory requestIds = withdrawalQueue.requestWithdrawals(amounts, msg.sender);
// requestIds — NFT токены (ERC-721) представляющие claims
Интеграция в lending протокол
При использовании wstETH как collateral нужно учитывать:
- Price feed staleness: при устаревшем оракуле — не принимать новые депозиты
- Liquidation buffer: wstETH/ETH rate исторически стабилен, но de-peg возможен
- Корзина при ликвидации: redemption через withdrawal queue может занять дни
Lido integration — одна из самых документированных в DeFi. Docs.lido.fi — отличная референсная документация.







