Quick triage
| Symptom | Boundary to check | First action |
|---|---|---|
| The client does not initialize | RPC and environment configuration | Confirm the RPC, indexer, relayer, and deployed program belong to the same Solana environment. |
| The private balance does not load | Wallet signature, indexer scan, or local private-state cache | Confirm the wallet and environment, then verify that the indexer exposes the expected commitment. |
| Proof preparation fails | Indexer tree state, Merkle proof, or proof artifacts | Check the current root and the commitment proof before generating a new proof. |
| A withdrawal or swap remains in progress | Relayer job | Preserve the jobId and read its current status. |
| A transaction signature exists but the product action is incomplete | Confirmation, indexer, or client reconciliation | Check Solana confirmation, then indexed private state, then the client record. |
| The program rejects the transaction | Program constraint | Use the exact program error to identify the failed proof, amount, mint, fee, recipient, or swap constraint. |
Configuration and connectivity
The client reports VITE_SOLANA_RPC_HOST is not set
The client reports VITE_SOLANA_RPC_HOST is not set
VITE_SOLANA_RPC_HOST. It also uses
VITE_INDEXER_URL and VITE_RELAYER_URL for private-state and relayer
operations.Confirm that:VITE_SOLANA_RPC_HOSTresolves to the intended Solana environment.VITE_INDEXER_URLresolves to the indexer for the same environment and program.VITE_RELAYER_URLresolves to the relayer for that deployment.- The indexer
PROGRAM_IDmatches the program used by the client SDK.
Wallet and request validation
The wallet is not connected or the signature is rejected
The wallet is not connected or the signature is rejected
Wallet not connected, Failed to get wallet signature, and
Failed to get signature. Please ensure your wallet is connected.- Reconnect the intended wallet.
- Confirm that the wallet is connected to the configured Solana environment.
- Approve the signature request through the wallet.
- Restart the private-state scan before retrying the operation.
An amount or address is rejected before submission
An amount or address is rejected before submission
| Message | Correction |
|---|---|
Enter amount | Provide an amount. |
Use a positive decimal amount | Use digits with an optional decimal fraction. |
Amount must be greater than 0 | Enter a positive amount. |
This token supports up to <n> decimal places | Use no more than the token’s supported precision. |
Amount exceeds available balance | Reduce the amount to the available balance. |
Wallet address must be valid base58 | Correct the Solana address. |
Wallet address must decode to 32 bytes | Use a valid 32-byte Solana public key. |
The compliance check blocks a deposit
The compliance check blocks a deposit
AML compliance check failed. Please contact support means the operation stopped at that control.Do not bypass the check or retry with modified identity data. Preserve the
public wallet address, UTC time, environment, and exact response, then use the
approved escalation path.Private balance and commitments
The private balance is empty after a confirmed deposit
The private balance is empty after a confirmed deposit
- Confirm the deposit signature on the configured Solana environment.
- Confirm the indexer is following the same program.
- Verify that
GET /commitmentsincludes the expected public transaction signature or commitment. - Confirm that the same wallet approved the private-state signature request.
- Run a controlled private-state rescan if the client integration exposes one.
The operation reports no unspent UTXOs or insufficient balance
The operation reports no unspent UTXOs or insufficient balance
Need at least 1 unspent UTXO to perform a withdrawal;No balance available;Insufficient balance;No unspent UTXOs found for the input mint. Please deposit first;Insufficient balance in UTXO.
Tree state and proof generation
The SDK cannot fetch the tree state or Merkle proof
The SDK cannot fetch the tree state or Merkle proof
Failed to fetch tree state from indexermeans the SDK could not obtain the root and next index.Failed to fetch Merkle proofmeans the commitment proof was unavailable.
The program reports Root is not known in the tree
The program reports Root is not known in the tree
Root is not known in the tree means the proof uses a root the program does
not accept as part of its current root history. This commonly indicates stale
or cross-environment tree state.Do not resubmit the same proof. Refresh the indexer state, confirm the program
boundary, fetch current Merkle paths, and generate a new proof.Resolved when: The proof is generated from a root accepted by the deployed
program.The program reports Proof is invalid or an external-data mismatch
The program reports Proof is invalid or an external-data mismatch
Proof is invalid and External data hash does not match the one in the proof
mean the proof and submitted transaction data are not consistent.Rebuild the operation from the original client intent. Do not edit proof bytes,
recipient, mint, fee, amount, encrypted output, or swap data after proof
generation.Escalate if a newly generated proof fails against a confirmed current root and
unchanged transaction data.Deposit issues
A deposit is not confirmed
A deposit is not confirmed
Transaction confirmation timeout after polling or
Failed to confirm transaction after maximum retries, first determine whether
a transaction signature was produced.- If a signature exists, query that signature on the configured Solana environment before retrying.
- If the transaction is confirmed, wait for the indexer and private-state scan.
- If no signature exists, preserve the last displayed stage and exact error.
The deposit reports ALT not found
The deposit reports ALT not found
ALT not found: <address> means the configured Address Lookup Table is not
available through the current RPC environment. Confirm the deployment’s ALT
address and network. Do not substitute an address from another deployment.The program rejects the mint or deposit amount
The program rejects the mint or deposit amount
| Message | Meaning |
|---|---|
Unsupported mint address | The selected mint is not configured for the deployed program. |
Deposit limit exceeded | The requested deposit exceeds the configured program limit. |
Public amount is invalid | The submitted public amount does not satisfy the program constraint. |
Relayer, withdrawal, and swap issues
A withdrawal or swap remains pending
A withdrawal or swap remains pending
| Status | Meaning | Action |
|---|---|---|
pending | The job is waiting in the queue. | Preserve the jobId and continue status checks. |
processing | The relayer is executing the job. | Do not submit the proof again. |
completed | The relayer returned a successful result and transaction signature. | Confirm the signature, then reconcile indexed private state. |
failed | The relayer recorded a final error. | Use the stored error to correct or escalate the operation. |
Withdrawal processing timed out. Check job status later and Swap processing timed out. Check job status later refer to client polling, not necessarily to
the relayer result.If GET /relayer/status/:jobId returns Job not found, preserve the jobId,
UTC submission time, environment, and operation type for escalation.A withdrawal is rejected
A withdrawal is rejected
| Message | Check |
|---|---|
Insufficient funds for withdrawal | Private input value and requested amount |
Insufficient funds for fee | Private balance available for the configured fee |
Fee recipient does not match global configuration | Deployment and relayer configuration |
Fee amount is below minimum required | Fee calculation for the current deployment |
Recipient account does not match the ExtData recipient | Recipient used during proof generation and submission |
A private swap is rejected
A private swap is rejected
| Message | Check |
|---|---|
Invalid Jupiter swap data | Quote and Jupiter instruction used to build the operation |
Insufficient swap output: received amount is less than minimum required | Quote freshness, minimum output, and configured slippage |
Unsupported mint address | Input and output mints configured for the deployment |
Reconcile the final state
For every client-visible operation, determine the last confirmed stage:| Stage | Evidence |
|---|---|
| Request validated | Final validated amount, mint, recipient, and client reference |
| Proof generated | Operation reached proof completion without changing its inputs |
| Relayer accepted | jobId and initial job status |
| Solana confirmed | Public transaction signature on the configured environment |
| Commitments indexed | Expected encrypted outputs and commitments available from the indexer |
| Client reconciled | Client system of record reflects the confirmed operation |
Escalate safely
Collect:- UTC date and time;
- Solana environment and program ID;
- client operation reference;
- wallet public key;
- input and output mint addresses;
- relayer
jobId, if created; - public transaction signature, if created;
- last completed stage and exact error;
- indexer health state and current root, where relevant.