state fraud proofs (celestia): verification logic
Verifying a fraud proof requires knowledge of the state logic. We need to investigate which parts will have to live:
- in the abci app itself
- in the Cosmos-SDK
- lazyledger-core
~~Lazyledger-core most likely should provide a simple library (reactor?) to gossip fraud proofs. Maybe the evidence pool can be re-used for that. This should be as light-weight as possible, as we would want light-clients to also participate in the gossiping.~~ Fraud proofs will be gossiped by Celestia-nodes: https://github.com/celestiaorg/celestia-node Additionally, celestia-core needs to collect the intermediate state in Block.Data (https://github.com/lazyledger/lazyledger-core/issues/84).
The Cosmos-SDK probably needs modifications to produce these intermediate state roots (https://github.com/lazyledger/cosmos-sdk/issues/8 and https://github.com/lazyledger/cosmos-sdk/issues/9).
Fraud proofs generation and verification could happen in a separate module/in the lazyledger-app itself.
The overall design should be part of https://github.com/lazyledger/optimint/issues/23 too. ADRs that link to each other in the particular repositories will inform this design document.
Ideally, the design should be independent of which tree is actually used (iavl/smt/other) (ref: https://github.com/lazyledger/cosmos-sdk/issues/8)
@liamsi, looks like the description needs to be updated according to the latest plans
Thanks for the nudge. Updated the gossiping part.