# Fraud Proof

## Overview&#x20;

**A fault proof, also known as fraud proof or interactive game, consists of 3 components:**&#x20;

1. **Program:** given a commitment to all rollup inputs (L1 data) and the dispute, verify the dispute statelessly.&#x20;
2. **VM:** given a stateless program and its inputs, trace any instruction step, and prove it on L1.
3. **Interactive Dispute Game:** bisect a dispute down to a single instruction, and resolve the base-case using the VM.&#x20;

&#x20;Each of these 3 components may have different implementations, which can be combined into different proof stacks, and contribute to proof diversity when resolving a dispute.&#x20;

"Stateless execution" of the program, and its individual instructions, refers to reproducing the exact same computation by authenticating the inputs with a Pre-image Oracle.

<figure><img src="https://463654730-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIDMLbigGe4vbkLzTZZwD%2Fuploads%2FHDTbLiSRAxi3ALBS4I99%2Fimage.png?alt=media&#x26;token=d1f65e35-3752-42a3-b652-1a431b0922cd" alt=""><figcaption></figcaption></figure>

## Pre-image Oracle

The pre-image oracle is the only form of communication between the Program (in the Client role) and the VM (in the Server role).&#x20;

**The program uses the pre-image oracle to query any input data that is understood to be available to the user:**

* The initial inputs to bootstrap the program. See Bootstrapping.
* External data not already part of the program code. See Pre-image hinting routes.

The communication happens over a simple request-response wire protocol, see Preimage communication.
