Proving Key / Verifying Key
When you compile a Leo program, the compiler generates a proving key and a verifying key for each transition function.
- Proving key - Used by the transaction sender to generate a zero-knowledge proof that the computation was performed correctly. This is the expensive step.
- Verifying key - Used by validators to quickly check that a proof is valid. Verification is fast, even when proving is slow.
Both keys are function-specific. If a program has three transitions, compilation produces three proving keys and three verifying keys. The verifying keys are published on-chain with the deployment; the proving keys are kept by whoever needs to generate transactions.
For agents doing delegated proving, the proving key is the artifact that gets sent to the proving service.