Why Fraud Proofs Are Needed
In a traditional blockchain, every node re-executes every transaction and rejects invalid ones. On an optimistic rollup, L1 only stores block headers. L1 cannot verify every transaction — that is the source of the throughput gains (2,000–5,000 TPS on Sundial’s L2). Instead, the system relies on economic incentives: operators post a bond before they can commit blocks, and that bond is slashed if they include invalid transactions. Fraud proofs are how the slashing is triggered. The maturity window — the period between a block being committed and it becoming final — gives watchers enough time to download the block body from the DA layer, replay the transactions, and submit a fraud proof if anything is wrong.Who Can Submit a Fraud Proof
Anyone can submit a fraud proof. You do not need a special role or registration. However, generating a valid fraud proof requires:- Access to the block body from the Data Availability layer.
- The ability to construct and submit L1 transactions.
- In some cases, running a multi-step computation thread to completion.
Fraud Proof Types
Sundial supports a comprehensive catalogue of fraud proof types. Each type targets a specific class of invalid block behavior.Input Fraud Proofs
Input Fraud Proofs
Validity Range Fraud Proofs
Validity Range Fraud Proofs
Fee Fraud Proofs
Fee Fraud Proofs
Signature Fraud Proofs
Signature Fraud Proofs
Native Script Fraud Proofs
Native Script Fraud Proofs
Value Fraud Proofs
Value Fraud Proofs
Network ID Fraud Proofs
Network ID Fraud Proofs
Reference Input Fraud Proofs
Reference Input Fraud Proofs
Multi-Step Computation Threads
The settlement layer imposes a transaction size limit and a per-transaction computation budget. Some fraud proofs — particularly those that involve replaying large transactions or walking Merkle trees — require more computation than fits in a single L1 transaction. Sundial handles this with computation threads. A computation thread is a sequence of on-chain L1 transactions that collectively build up and verify a fraud proof. Each step carries forward aStepDatum containing the intermediate state accumulated so far:
Continue(args) redeemer. When the final step is complete, the Success redeemer burns the computation thread token and mints the fraud proof token — which is then used by the State Queue’s RemoveFraudulentBlockHeader operation to slash the operator and remove the block.
If the computation thread is interrupted — by an error, a timeout, or the prover going offline — any participant can burn the thread with a Cancel redeemer and reclaim the associated UTxO value. The fraud prover must restart the thread from the beginning.
Prover software handles multi-step threads automatically. If you are running a Prover node, you do not need to manage individual steps manually — the Prover service monitors the State Queue, initiates threads, submits each step, and claims the reward on completion.
- DOUBLE-SPEND — requires verifying both transactions’ inclusion proofs and proving the shared input, across multiple L1 transactions.
- NO-INPUT (Non-Existent Input) — requires verifying the spending transaction’s inclusion and proving the referenced input does not exist in the UTxO set.
- INPUT-NO-IDX (Non-Existent Input No Index) — an extended non-existence proof that does not rely on an index reference.
- INVALID-RANGE — requires verifying the transaction’s inclusion and proving that its validity range falls outside the block’s event interval.
The Reward Mechanism
Successfully completing a fraud proof earns the entire operator bond deposited by the fraudulent operator. The bond is substantial by design — operators must stake a significant amount to participate, which aligns their economic interest with honest block production.1
Detect fraud
Your Prover monitors the State Queue and DA layer. When it detects an invalid block (for example, a double-spend), it identifies the fraudulent block’s header hash and the specific transaction IDs involved.
2
Initiate the computation thread
The Prover mints a computation thread token on L1, identifying the fraud category (from the Fraud Proof Catalogue) and the target block’s header hash. This locks in your claim as the
fraud_prover.3
Execute each step
The Prover submits each step transaction in sequence. Each step spends the previous thread UTxO, advances the intermediate state, and produces a new UTxO. The Prover continues until the final step.
4
Claim the reward
On the final step, the Prover mints the fraud proof token. The State Queue’s
RemoveFraudulentBlockHeader operation burns the operator’s bond and credits the reward to your fraud_prover address.Proof of Diligence
Fraud detection is valuable even when no fraud occurs. Sundial rewards Provers for continuous monitoring through a Proof of Diligence mechanism. By demonstrating that you have inspected and verified blocks in the State Queue — even blocks that turned out to be valid — you earn ongoing rewards proportional to your monitoring activity. This means running a Prover is not a zero-income activity unless fraud happens to be present. You earn for the work of watching.Fraud Proof Catalogue
The on-chain Fraud Proof Catalogue contract maintains a Merkle root over the set of valid fraud proof category IDs. When a computation thread is initiated, theInit redeemer includes a Merkle membership proof demonstrating that the claimed fraud category exists in the catalogue. This prevents provers from inventing fake fraud categories and wasting chain resources.