Реализация стейкинга токенов из мобильного криптокошелька
Стейкинг в мобильном кошельке — один из самых ответственных сценариев. Пользователь блокирует активы на период, получает награды, может быть подвержен unbonding-периоду. Ошибка в реализации — потеря средств или невозможность их вывести.
Liquid staking vs native staking
Native staking (например, ETH через Beacon Chain или SOL через валидаторов) — токены физически уходят на стейкинговый контракт или делегируются валидатору. Для ETH native staking минимум 32 ETH; мобильные кошельки обычно интегрируют liquid staking протоколы (Lido, Rocket Pool, Jito).
Liquid staking через Lido: пользователь вносит ETH → получает stETH, которые ребалансируются ежедневно. Контракт Lido.sol (0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84):
// iOS — стейкинг ETH через Lido
let lidoContract = EthereumContract(json: lidoABI, at: lidoAddress)
let submitFunction = lidoContract.method(
"submit",
parameters: [referralAddress as AnyObject],
transactionOptions: .init()
)
// value = сумма ETH для стейкинга
Для Solana — Marinade Finance или Jito. Jito SDK (jito-ts) предоставляет инструкцию stake(validatorIndex, amount).
Нативный стейкинг Solana: делегирование
// Android — делегирование SOL валидатору через SolanaKT
val stakeAccount = Keypair.generate()
val createStakeAccountInstruction = SystemProgram.createAccount(
fromPublicKey = walletPublicKey,
newAccountPublicKey = stakeAccount.publicKey,
lamports = amountLamports + rentExemptLamports,
space = StakeProgram.STAKE_ACCOUNT_SIZE,
programId = StakeProgram.PROGRAM_ID
)
val delegateInstruction = StakeProgram.delegate(
stakePublicKey = stakeAccount.publicKey,
authorizedPublicKey = walletPublicKey,
votePublicKey = validatorVoteAccount
)
Epoch на Solana ≈ 2–3 дня. Stake активируется в следующем epoch. Unstake — тоже один epoch cooldown, затем withdraw.
UI: выбор валидатора и отображение наград
Список валидаторов с APY, комиссией и uptime нужно загружать из внешнего источника:
- Ethereum:
beaconcha.inAPI для нативного,stake.lido.fi/apiдля Lido stats - Solana:
validators.appAPI илиmainnet-beta.solana.comRPCgetVoteAccounts
Отображать в таблице: имя валидатора, APY, комиссия (%), uptime за 30 дней, количество делегаторов.
Награды: для Lido stETH — ребалансировка автоматическая, баланс увеличивается без транзакций. Для нативного — getInflationReward на Solana, eth_call к контракту Rocket Pool для rETH exchange rate.
Unbonding и unlock
Обязательно показывать unbonding-период до того, как пользователь нажимает «Анстейк». Cosmos-based сети — 21 день. ETH native — мгновенно (после Shapella). Solana — ~5 дней (2 epoch). Пользователь, не знающий о блокировке, напишет негативный отзыв.
Отдельный раздел «Ожидает разблокировки» с таймером и суммой — обязателен для сетей с cooldown.
Сроки: 5 дней на один протокол (например, Lido или Jito): интеграция контракта, UI выбора суммы, экран подтверждения с unbonding-периодом, отображение активного стейка и наград, кнопка анстейка. Несколько протоколов и сетей — 2–3 недели.







