Skip to main content
When verifying with Integrity, proofs generated with these layouts work out of the box:
  • recursive
  • recursive_with_poseidon
  • dex
  • small
  • starknet
  • starknet_with_keccak.
Proofs generated with dynamic or all_cairo layouts are currently not supported by Integrity due to verification complexity.

Double Verification for Integrity Compatibility

As a workaround, use a form of “double verification”:
  1. Generate a proof for your original program using the desired layout (for example, dynamic). This captures full program execution.
  2. Generate a second trace/proof/verification job where programFile is StarkWare’s Cairo0 verifier program, and pass the proof from step 1 as input.
Modify the proof.json from the first proof so the payload is wrapped under a proof key. For example, if you have:
{
    "annotations": [...],
    "proofHex": "0x...",
    ...
}
convert it to:
{
    "proof": {
        "annotations": [...],
        "proofHex": "0x...",
        ...
    }
}
Use the Cairo0 verifier as programFile, or reference its program hash: 0x193641eb151b0f41674641089952e60bc3aded26e3cf42793655c562b8c3aa0. In this flow, you are not directly verifying your program. Instead, you prove that StarkWare’s verifier successfully verified your original proof. This indirect approach maintains compatibility with Integrity’s current layout limitations.
This is only required when verifying with Integrity. If you do not need Integrity verification, use the standard verification flow.