Start with the first check that failed. That check stays failed even if something later looks successful.

Stage matrix

Know when the outcome is uncertain

Treat an unknown outcome as pending. Retrying it as failed can create a duplicate deposit or withdrawal.

What to record

Preserve public diagnostics only:
  • Runtime name, chain ID, pool, and deployment block
  • Transaction hash or relayer request identity
  • Block number, receipt status, log index, and event names
  • Artifact role and expected/actual public digest, never proving secrets
  • Exact error stage and timestamp
Never include recovery exports, note secrets, wallet unlock signatures, Merkle witnesses, private keys, or raw proof witnesses.

Before you retry

Reads are safe to retry because they move no value. Retry proving only after refreshing its inputs. Retry a value-moving submission only after the original outcome is definitely failed and the runtime, fee, root, nullifier, and nonce are current again. For symptom-led help, see Troubleshooting. For report handling, see Report a vulnerability.