Frequently Asked Questions for the Stellar Bounty Board project.
You can fund your Stellar testnet account using Friendbot.
Open:
https://friendbot.stellar.org/?addr=YOUR_PUBLIC_KEYReplace YOUR_PUBLIC_KEY with your Stellar testnet wallet address.
curl "https://friendbot.stellar.org/?addr=YOUR_PUBLIC_KEY"Use Stellar Laboratory or Freighter to confirm your balance.
Useful resources:
- https://laboratory.stellar.org/
- https://developers.stellar.org/docs/tools/laboratory
- https://freighter.app/
-
Install Freighter extension:
-
Create or import a wallet.
-
Switch network to Testnet.
-
Fund the wallet using Friendbot.
-
Connect wallet to the app.
If the wallet does not connect:
- Refresh the page
- Unlock Freighter
- Ensure you are on Testnet
- Reconnect wallet permissions
This usually happens because:
- Wrong network selected
- Expired transaction
- Invalid secret/public key pair
- Incorrect signing payload
- Wallet disconnected
Ensure both:
- Wallet = Testnet
- App = Testnet
Disconnect and reconnect Freighter.
Create a fresh transaction payload and sign again.
If the transaction expired, regenerate it before signing.
The project may use local storage, indexed storage, or backend persistence for bounty state.
Clear browser storage:
localStorage.clear()or clear site data from browser settings.
If using Docker:
docker compose down -v
docker compose upIf using SQLite/Postgres, rerun migrations or reseed scripts.
Some bounties automatically expire after a configured duration.
EXPIRATION_JOB_INTERVAL=60
BOUNTY_EXPIRATION_HOURS=24Example:
npm run workeror
npm run crondepending on project scripts.
Check:
- Backend logs
- Scheduled job startup
- Database timestamps
Common causes include:
- Insufficient XLM balance
- Incorrect network
- Invalid contract ID
- Expired transaction
- RPC failure
- Bad signature
Ensure your account has enough testnet XLM.
Double-check deployed contract IDs.
Temporary RPC/network issues can occur.
Backend logs usually provide exact failure details.
The dispute system is designed to resolve bounty disagreements fairly.
- Contributor submits work
- Sponsor reviews submission
- Sponsor approves or disputes
- Admin/moderator may intervene
- Funds are released or refunded
- Include detailed submissions
- Attach screenshots or hashes
- Maintain communication records
npm installCreate:
.envand add required variables.
npm run devnpm run backendor:
docker compose upnpm testnpm run test:unitnpm run test:integrationcargo testif Soroban contracts are included.
- Freighter locked
- Browser permissions denied
- Wrong network
- Unsupported browser
- Extension conflict
Open extension and unlock it.
Remove site permissions and reconnect.
Reload app after wallet unlock.
Recommended:
- Chrome
- Brave
- Edge
cargo build --target wasm32-unknown-unknown --releasesoroban contract deploy \
--wasm target/wasm32-unknown-unknown/release/contract.wasm \
--source alice \
--network testnetUse Stellar Laboratory or explorer tools.
Open browser DevTools:
F12 → ConsoleRun server in development mode:
npm run devor inspect Docker logs:
docker compose logs -fUse Soroban CLI simulation tools and RPC responses.
- Stellar Docs: https://developers.stellar.org/
- Soroban Docs: https://developers.stellar.org/docs/smart-contracts
- Freighter Wallet: https://freighter.app/
- Stellar Laboratory: https://laboratory.stellar.org/
Please also review:
README.mdCONTRIBUTING.mddocs/MAINTAINERS.md(if you're interested in helping maintain the project)
before submitting issues or pull requests.
When interacting with Soroban RPC endpoints locally or on testnet, contributors and developers may encounter various RPC and contract execution errors. Below are common error codes, messages, and their step-by-step resolutions:
-
rpc_error: server_error/ JSON-RPC-32603(Internal Error)- Cause: The Soroban RPC node encountered an internal error during processing, unhandled exception, or transient node unsync.
- Resolution:
- Wait 1–2 seconds and retry the operation.
- Check if the local Stellar/Soroban container is healthy (
docker psorstellar network container status). - If using a public RPC node, switch to an alternative endpoint (e.g.,
https://soroban-testnet.stellar.org).
-
rpc_error: rate_limited/ HTTP 429 (Too Many Requests)- Cause: Exceeded maximum allowed requests per second/minute on the RPC provider.
- Resolution: See Section 15 below for exponential backoff retry strategies and batching queries.
-
rpc_error: timeout/ HTTP 504 (Gateway Timeout)- Cause: RPC request timed out while waiting for transaction simulation, ledger state lookup, or transaction ingestion.
- Resolution: Increase your RPC client timeout setting (e.g., from 5s to 15s–30s) and retry with backoff.
-
JSON-RPC
-32600(Invalid Request)- Cause: Malformed JSON payload, missing required RPC params, or invalid parameter types (e.g., sending raw string instead of XDR).
- Resolution: Verify payload structure against the official Soroban RPC JSON-RPC API specification. Ensure XDR strings are base64 encoded.
-
HostError: Error(Storage, MissingValue)- Cause: The contract or account storage key requested does not exist on-chain or its TTL (Time-To-Live) has expired.
- Resolution: Re-initialize or re-fund the storage entry, extend the instance/entry TTL using
extend_ttl, or verify key parameters.
-
HostError: Error(Budget, ExceededLimit)/Exceeded CPU instruction budget/Exceeded memory limit- Cause: The smart contract execution exceeded maximum CPU instructions or memory allocation limits.
- Resolution: Optimize contract loops, reduce state access, or split heavy operations into multiple transactions. When simulating, ensure resource limits in the simulation footprint are correctly set.
-
HostError: Error(Contract, #)(e.g.Error(Contract, 1))- Cause: The smart contract panicked or explicitly returned an error code defined in its custom error enum.
- Resolution: Check the contract source code for
#[contracterror]orpanic!calls corresponding to error code#. Verify preconditions (e.g., caller authorization, parameter bounds).
-
txINSUFFICIENT_BALANCE/txFAILEDdue to balance- Cause: The source account does not have enough XLM to pay transaction fees or maintain the minimum ledger reserve balance (0.5 XLM per entry/subentry).
- Resolution: Fund the testnet account via Friendbot (see Section 14).
-
txBAD_SEQ(Bad Sequence Number)- Cause: The account sequence number used in the transaction is behind or ahead of the current ledger sequence number for the account.
- Resolution: Re-fetch the current account sequence number from the RPC endpoint using
getAccountbefore signing and submitting.
-
txEXPIRED(Transaction Expired)- Cause: The transaction's time-bounds (
timeBounds/ledgerBounds) passed before the transaction was included in a ledger. - Resolution: Re-simulate, update the transaction deadline/timebounds, re-sign, and resubmit.
- Cause: The transaction's time-bounds (
-
txBAD_AUTH/txBAD_AUTH_EXTRA- Cause: Invalid, missing, or mismatched cryptographic signatures for account or contract authorization entries (
sorobanAuthorizedInvocation). - Resolution: Ensure the proper keypair signed the transaction and that authorization credentials match the expected invoker address.
- Cause: Invalid, missing, or mismatched cryptographic signatures for account or contract authorization entries (
-
txINSUFFICIENT_FEE- Cause: The base fee specified is lower than the minimum network inclusion fee or current surge pricing requirement.
- Resolution: Increase the max transaction fee (e.g., set fee to at least 100,000 stroops or query
getFeeStats).
When transactions fail with txINSUFFICIENT_BALANCE or when setting up a fresh testnet development wallet, use Stellar Friendbot to automatically fund your account with 10,000 testnet XLM.
Your public address starts with G... (for account keys) or C... (for contract addresses). Ensure you have your public key copied.
- Navigate in your browser to:
https://friendbot.stellar.org/?addr=YOUR_PUBLIC_KEY - Replace
YOUR_PUBLIC_KEYwith your Stellar testnet account address (e.g.,G...). - You will receive a JSON response confirming successful funding:
{ "successful": true, "hash": "f3808dafd88098ea3a096bcfef1d75e6915140916ed0eb271d5ce9362ffa4caa", "envelope_xdr": "..." }
Run the following cURL command in your terminal:
curl -s "https://friendbot.stellar.org/?addr=YOUR_PUBLIC_KEY"Replace YOUR_PUBLIC_KEY with your public address.
If using stellar-cli / soroban-cli:
stellar keys fund my-account-name --network testnetConfirm the account has been funded using any of the following methods:
- Stellar Laboratory: Visit Stellar Laboratory Account Explorer and enter your public key.
- Soroban RPC
getAccountRequest:curl -X POST "https://soroban-testnet.stellar.org/" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "getLedgerEntries", "params": { "keys": ["YOUR_ACCOUNT_XDR_KEY"] } }'
- Horizon API:
Check the
curl -s "https://horizon-testnet.stellar.org/accounts/YOUR_PUBLIC_KEY"balancesarray in the JSON response to verify the XLM amount.
Public Soroban RPC nodes enforce rate limits to protect infrastructure from traffic spikes. If your application or test suite encounters rpc_error: rate_limited (HTTP 429) or timeouts (rpc_error: timeout / HTTP 504), apply the following retry and mitigation patterns:
Implement exponential backoff when retrying RPC queries or transaction submissions:
- Initial Delay: Wait 1 second (1000ms) after the first rate-limit/timeout failure.
- Backoff Multiplier: Double the delay on each subsequent retry (1s -> 2s -> 4s -> 8s -> 16s -> 30s).
- Max Delay Cap: Cap the delay at 30 seconds.
- Random Jitter: Add a small random jitter (±200ms) to prevent synchronization thundering herd problems across multiple concurrent clients.
async function fetchWithBackoff<T>(
fn: () => Promise<T>,
maxRetries = 5,
initialDelayMs = 1000
): Promise<T> {
let delay = initialDelayMs;
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
return await fn();
} catch (err: any) {
const isRateLimited = err?.status === 429 || err?.message?.includes('rate_limited');
const isTimeout = err?.status === 504 || err?.message?.includes('timeout');
if ((isRateLimited || isTimeout) && attempt < maxRetries - 1) {
const jitter = Math.random() * 200;
await new Promise((resolve) => setTimeout(resolve, delay + jitter));
delay = Math.min(delay * 2, 30000);
continue;
}
throw err;
}
}
throw new Error('Max retries exceeded');
}- Batch Queries: Combine multiple
getLedgerEntriesorgetTransactioncalls into single JSON-RPC batch requests where supported. - Cache Simulation Footprints: Avoid redundant contract simulation calls (
simulateTransaction) when parameters have not changed.
- Switch RPC Providers: If the default public node is overloaded, use alternative public endpoints or dedicated RPC node providers.
- Run Local Soroban RPC Node: For local development and CI testing, run a local Standalone network container which has no rate limits:
docker run --rm -it \ -p 8000:8000 \ --name stellar \ stellar/quickstart:testing \ --local \ --enable-soroban-rpc
Before debugging persistent RPC failures or transaction timeouts, verify whether the Stellar or Soroban network is experiencing an outage or degraded performance:
- Official Stellar Status Page: status.stellar.org — Real-time updates on Horizon, Core nodes, Friendbot, and Soroban RPC status across Mainnet and Testnet.
- Stellar Dashboard: dashboard.stellar.org — Live network metrics, ledger close times, transaction throughput, and validator node health.
- Soroban Testnet RPC Health Endpoint:
Expected healthy response:
curl -s "https://soroban-testnet.stellar.org/health"{ "status": "healthy" } - Stellar Developer Discord & Community Support: Stellar Developer Discord — Check the
#sorobanand#dev-announcementschannels for real-time network maintenance notifications.
- Stellar Developer Documentation: https://developers.stellar.org/
- Soroban Smart Contracts Guide: https://developers.stellar.org/docs/smart-contracts
- Friendbot Tooling Guide: https://developers.stellar.org/docs/tools/friendbot
- Soroban RPC API Reference: https://developers.stellar.org/docs/data/rpc
- Stellar Laboratory: https://laboratory.stellar.org/
Please also review:
README.mdCONTRIBUTING.mddocs/MAINTAINERS.md(if you're interested in helping maintain the project)
before submitting issues or pull requests.