Реалізація стейкингу токенів з мобільного криптогаманця
Стейкинг у мобільному гаманці—один з найвідповідальніших сценаріїв. Користувач блокує активи на період, отримує награди, може бути піддатий 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 тижні.







