Интеграция с Lido (liquid staking)

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с Lido (liquid staking)
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1056
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Интеграция с 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 — отличная референсная документация.