Test with mobile
Use mobile when a person needs to review, approve, or sign something produced by a Gora app.Test against the live testnet
The iOS and Android source builds are preconfigured with the live bridge:apps/ios/Gora.xcodeproj in Xcode, or the Android project at apps/android in Android Studio. Simulator/emulator acceptance does not imply a published store/TestFlight release or signed Android distribution. Use a disposable testnet wallet, not a production key. Endpoints and deployed contract IDs are listed in Connect to the testnet.
Wallet-owned apps and autonomous bots
Open an app from the native app directory. Its deployed multi-file UI is served by Gora on its own HTTPS origin, while images and video may load from external HTTPS CDNs. The native wallet establishes an app-scoped session; neither the frontend nor the WASM program receives its private key. For a trading bot, the customer flow is:- Configure a strategy and create a wallet-owned instance with a stable
did:gora:testnet:identifier. The instance pins the deployed program version. - Create the on-chain vault, fund it with test collateral and native fees, and review the native approval sheets for the allowed venue, methods, amounts and budgets. This setup requires owner signatures.
- Run the bot from its UI. Gora executes the deployed WASM, makes a structured LLM call and collects stake-backed validator replay signatures. The managed relayer submits an approved callback within the vault’s on-chain policy; the customer need not sign each trade. A runtime success alone is not proof of a trade: check the confirmed settlement and on-chain position.
- Revoke automation whenever desired. The owner can still close an existing position while revoked and withdraw the remaining collateral. Disabling the app instance is useful but is not a substitute for on-chain revocation.
Per-action mobile signing
When an app deployed to the live node returns amobile_signing_request, the node publishes it to the live bridge with POST /mobile/signing-requests. The mobile app reads the same inbox through GET /mobile/signing-requests and shows the pending request for review and signing.
Quick checks against the live bridge:
Neither flow gives Gora the user’s private key.
When to use mobile
Use mobile for:- transfers
- wallet actions
- smart-wallet approvals
- gateway fulfillment signatures
- any result that moves value or changes chain state
App output shape
A mobile-signing app can return:Local Dev Bridge (secondary path)
Use this only when you run your own local devnet instead of the live testnet. During development, a bridge service may expose pending actions to the mobile app.gora devnet up starts the bridge by default and exposes it through your public tunnel (ngrok, Caddy, or any HTTPS tunnel works):
gora node serve manually, configure a signing-request sink with:
What users should review
Mobile should show:- app name and app id
- chain
- sender
- recipient
- amount and unit
- policy or package hash
- attestation/result hash when available
- risk notes
Dev keys
For local devnet tests, import only dev-only keys:- Base hex private key
- Solana JSON/base58/base64/hex keypair
- Algorand 25-word mnemonic or raw key format
After approval or signing
After mobile signs, the signed response still needs to be submitted or fulfilled. Common submission modes:
Your contract or gateway should still verify:
- Gora result or attestation
- app id
- output hash
- user signature
- policy limits
- replay protection
Quick test flow (live testnet)
This gateway-based example targets Algorand testnet, so use--chain algorand. For Base/Solana application writes, follow the separate
managed-agent example; validator staking is independent
of either application path.
Configuration is per project, not inherited from the parent directory. The
token-generation command below is for a new developer identity; if you already
have a developer token, supply that existing token through
gora config set api.token --stdin instead. Keep a secure backup and never put
the token in frontend code or published artifacts.