Problem
The farm page has no deposit / lock-assets button. Users can see pool rows and attempt to unlock, but there is no way to actually stake assets into a pool. The sorobanService has a lockAssets method skeleton but there is no UI flow to invoke it.
Expected Behaviour
A Deposit modal (or inline form) allows a connected user to enter an amount, preview the transaction fee via Soroban simulation, and sign + submit the lock_assets call through Freighter. On success the pool row updates to show the new stake and a lockdown countdown begins.
Acceptance Criteria
Relevant Files
src/app/farm/page.tsx — add deposit button to EarningRow
src/lib/soroban.ts — lockAssets method (implement the actual contract call)
src/hooks/useSorobanQuery.ts — add useLockAssets mutation
src/config/index.ts — poolContractId, networkPassphrase
Problem
The farm page has no deposit / lock-assets button. Users can see pool rows and attempt to unlock, but there is no way to actually stake assets into a pool. The
sorobanServicehas alockAssetsmethod skeleton but there is no UI flow to invoke it.Expected Behaviour
A Deposit modal (or inline form) allows a connected user to enter an amount, preview the transaction fee via Soroban simulation, and sign + submit the
lock_assetscall through Freighter. On success the pool row updates to show the new stake and a lockdown countdown begins.Acceptance Criteria
src/app/farm/page.tsx(visible when wallet is connected)rpcServer.simulateTransactionbefore the user signsTransactionBuilder, simulated, and signed viawalletApi.signTransaction; the signed XDR is then submitted throughrpcServer.sendTransactionrpcServer.getTransactionuntilSUCCESSorFAILED; the UI shows a progress spinner with hash link during pollinguserPositionandpoolsis invalidated so balances refresh automaticallyrpcServerand asserts the correct Soroban operation is built with the right contract address and argument encodingRelevant Files
src/app/farm/page.tsx— add deposit button toEarningRowsrc/lib/soroban.ts—lockAssetsmethod (implement the actual contract call)src/hooks/useSorobanQuery.ts— adduseLockAssetsmutationsrc/config/index.ts—poolContractId,networkPassphrase