> ## Documentation Index
> Fetch the complete documentation index at: https://docs.herodotus.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Dynamic Layout on L2

> Proof verification with [Integrity](/atlantic-api/integrity-verifier) using `dynamic` or `all_cairo` layouts.

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:

```json theme={null}
{
    "annotations": [...],
    "proofHex": "0x...",
    ...
}
```

convert it to:

```json theme={null}
{
    "proof": {
        "annotations": [...],
        "proofHex": "0x...",
        ...
    }
}
```

Use the [Cairo0 verifier](https://drive.google.com/uc?export=download\&id=1dRb5c4Co2Abny1gWeHzio0UOPuG5qJD-) 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.

<Note>
  This is only required when verifying with Integrity. If you do not need Integrity
  verification, use the standard verification flow.
</Note>
