zksecurity / stark-evm-adapter

Adapt your STARK stone proofs for verifications on Ethereum
https://zksecurity.github.io/stark-evm-adapter/stark_evm_adapter/index.html
17 stars 4 forks source link
annotations evm stark stone-prover

STARK-EVM adapter

github crates.io docs.rs build status

stark-evm-adapter is a library that provides a set of utilities to parse and manipulate the output of the STARK stone proof. Specifically, the library can be used to generate a "split proof", which is necessary for proofs to be verified on Ethereum.

[dependencies]
stark-evm-adapter = "0.1.3"

Example

use stark_evm_adapter::annotated_proof::AnnotatedProof;
use stark_evm_adapter::annotation_parser::split_fri_merkle_statements;

// read an annotated proof
let file = std::fs::File::open("tests/fixtures/annotated_proof.json").unwrap();
let reader = std::io::BufReader::new(file);
let annotated_proof: AnnotatedProof = serde_json::from_reader(reader).unwrap();

// split the proof
let split_proofs = split_fri_merkle_statements(annotated_proof).unwrap();
println!("{}", serde_json::to_string_pretty(&split_proofs).unwrap());

// For how to submit the split proofs to the L1 EVM verifier, please refer to the demo: https://github.com/zksecurity/stark-evm-adapter/blob/8af44a0aa61c89e36a08261320f234709e99ed71/examples/verify_stone_proof.rs#L18

Note that the annotated proof file, annotated_proof.json, can be generated using this CLI tool.

CLI

Installation

cargo install stark_evm_adapter

Usage

stark_evm_adapter --help

To generate an annotated proof based on the outputs of the stone-prover:

stark_evm_adapter gen-annotated-proof \
    --stone-proof-file tests/fixtures/stone_proof.json \
    --stone-annotation-file tests/fixtures/stone_proof_annotation.txt \
    --stone-extra-annotation-file tests/fixtures/stone_proof_annotation_extra.txt \
    --output annotated_proof.json

The annotated proof originates from 3 file outputs of the stone-prover.

Once you have this annotated proof, you can use it to generate the split proofs and submit them to the L1 EVM verifier. Please refer to the example demo

Demo

You can run the demo to split the proof and submit it to the Ethereum mainnet verifier. The existing proof contains an internal proof that the 10th Fibonacci number is 144.

Using existing proof

First, install Anvil using Foundry

Then, run the following command:

FORK_URL=<ETHEREUM-MAINNET-RPC> \
    ANNOTATED_PROOF=./annotated_proof.json \
    FACT_TOPOLOGIES=./fact_topologies.json \
    cargo run --example verify_stone_proof

Generate new proof

You can create a new proof using Docker

Prerequisites

Customize program that is being proven

Run

First, build the docker image. This will create an annotated proof and a fact topologies file that is needed to split the proof for verifying on Ethereum:

docker build -t stark-evm-adapter .

Then, run the demo script:

docker run -it -e FORK_URL=<ETHEREUM-MAINNET-RPC> -e ANNOTATED_PROOF=./examples/bootloader/gen/annotated_proof.json -e FACT_TOPOLOGIES=./examples/bootloader/gen/fact_topologies.json stark-evm-adapter

Note