The Five Phases
Propose
Create the PCZTCombine transparent inputs and payment outputs into a Partially Constructed Zcash Transaction.
- Define which UTXOs to spend
- Specify recipient addresses and amounts
- Set change address and expiry height
- ZIP 317 fee is calculated automatically
Verify
Validate before signing (optional)Ensure the PCZT matches your original request — important if the PCZT was handled by a third party.
- Confirm all payments are present
- Verify amounts match
- Check for unexpected outputs (malleation)
Sign
Add signaturesSign each transparent input with the corresponding private key.
- Get sighash for each input
- Sign externally (hardware wallet, HSM) or internally
- Append signatures to the PCZT
Prove
Generate ZK proofsCreate Orchard zero-knowledge proofs for any shielded outputs.
- First call builds proving key (~10 seconds)
- Subsequent calls are fast (cached)
- No trusted setup required (Halo 2)
Finalize
Extract transactionPerform final validation and extract the raw transaction bytes.
- Verify all signatures present
- Verify all proofs generated
- Produce transaction ready for broadcast
Parallel Operations
Signing and proving can be done in parallel since they don’t depend on each other: If signing and proving are done by the same party sequentially, the combine step can be skipped.Example: Complete Flow
- TypeScript
- Go
- Kotlin

