Skip to main content

Devnet quickstart

This page is for running your own local devnet / validator infrastructure. To build against the live Gora testnet you don’t need any of this — see Connect to the testnet. URLs like https://YOUR-NODE-URL below are placeholders for your own tunnel or reverse proxy (ngrok, Caddy, or any HTTPS tunnel works).
This is the clearest VM-to-local flow for DevNet. For the CLI-only BTC/USD oracle callback path, start with Serve smart contracts: oracle callbacks. That path does not use the mobile app.
  1. A VM runs Gora Devnet, local chains, and a public tunnel (ngrok, Caddy, or any HTTPS tunnel).
  2. Your local computer runs the Gora CLI and app code.
  3. The local CLI points at the Gora public tunnel URL.
  4. Contract metadata comes from Gora Devnet, not from VM-only files.

Devnet Testing

Use this role split when testing the distributable validator binary with real DevNet operators, funded GORA, and developer-owned callback apps.

Validator operators

Each validator receives one release or tester archive from the launch packet. They should verify the checksum, extract it on their VM, and run setup with their own wallet and public validator URL:
Edit config/devnet.validator-profile.json so it has the real DevNet RPC URL, bootstrap peers, staking contract/program/app, and GORA token identifier for the chain where this validator will stake.
The validator sends validator/funding-request.json to the admin. That file contains the staking owner address, required GORA amount, native fee token requirement, chain target, and any preconditions. Solana validators may need an associated token account for the GORA SPL mint. Algorand validators must opt into the GORA ASA before the admin can fund the wallet. After the wallet is funded and the registration transaction is signed, the validator finalizes and starts:
The validator returns the ready receipt, check-stake output, and any requested remote-smoke logs to the admin for final evidence collection.

Smart contract and off-chain app developers

Developers deploy their chain callback contract/program/app first, then deploy the Gora off-chain app that fetches or transforms data and emits the callback intent. For a starter callback app:
Use --chain solana or --chain algorand for those callback targets. The generated app returns chain_callback.operation.target and chain_callback.operation.params objects, plus an operation_schema, so submitters can route the callback without relying on positional arguments. For the BTC/USD oracle callback path, follow Serve smart contracts: oracle callbacks. In live DevNet testing, fixtures must use command-mode submitters so Base, Solana, and Algorand callbacks land as real transactions.

Admin and GORA funding

The admin owns the launch packet and funding checklist. Start from:
For each validator:
  1. Confirm the archive checksum in tester-send-manifest.csv.
  2. Confirm the validator public URL is externally reachable.
  3. Confirm the staking owner and chain target in the funding CSV.
  4. Send the required GORA amount to that staking owner on the correct chain.
  5. Send enough native fee token for registration and staking.
  6. For Solana, create or fund the GORA SPL associated token account if needed.
  7. For Algorand, wait for the validator to opt into the GORA ASA before sending GORA.
After funding, collect final evidence:
Then run the final gate:
The final audit should report ready_for_devnet: true, manual_gates_cleared: true, and no remaining manual gates before moving from DevNet testing to testnet.

A. Start Devnet on the VM

On the VM where the Gora repo, local chains, and your tunnel live:
This starts:
  • Gora dev HTTP API
  • Dev Bridge for mobile approval/signing
  • Base/Ganache local RPC
  • Solana local validator
  • Algorand localnet
  • public tunnels (ngrok by default; Caddy or any HTTPS tunnel works)
  • contract metadata registry
The command stays running. Use tmux if you want to detach:
Check status from another VM shell:
Typical public endpoints:
Gora posts mobile signing requests to the bridge over the VM-local URL http://127.0.0.1:8787. Mobile apps on another machine read the same requests through https://YOUR-BRIDGE-URL. Stop processes started by the helper:

B. Configure your local app

For the no-mobile price oracle, use the schedule commands in Serve smart contracts: oracle callbacks. On your local computer, create an app:
Set the Gora Devnet URL:
If Devnet requires a token:
Check health:

C. Resolve chain contract metadata

For apps that target Base, Solana, or Algorand, link chain metadata before deploying the Gora app package. First run doctor:
Then resolve and link:
For Base:
For Solana:
The --node form calls GET /v1/contracts/{chain} and records the deployed address, program id, or Algorand app id in .gora/contracts/<chain>/latest.json. For Algorand, this is the important distinction:
  • local developers use --node https://YOUR-NODE-URL
  • VM operators may use --datadir /path/to/Node
Do not use --datadir from a local computer unless that computer is running the Algorand localnet.

D. Build, validate, package, deploy

gora deploy uploads:
  • app artifact
  • manifest
  • policy
  • package metadata
  • linked contract metadata
It writes a deployment receipt to:

E. Invoke

Use the generated fixture:
The response includes a request_id. If your app result includes a chain field, Devnet may attach contract_metadata to the invoke or result response. Use that metadata for app ids, program ids, addresses, RPC URLs, and auth hints.

F. Inspect

Inspect receipts are saved under:

What success means

A successful invoke means:
  1. Devnet found your deployed app.
  2. Devnet ran the declared artifact.
  3. Your app returned valid JSON.
  4. Gora recorded the result and attestation data.
It does not necessarily mean a chain transaction was submitted. Chain execution requires a gateway, wallet, mobile signing flow, or submitter. For mobile signing flows, use:

One-screen local flow

Next: Deploy to Gora.