Programs will be deterministically compiled and placed in the /elf directory in each of the programs subfolder. This is done in the build.rs inside scripts
Generates ZK proofs for Ethereum beacon chain light client updates using the Helios consensus library.
-
Verifies sync committee updates - Processes any pending sync committee rotation updates, ensuring valid BLS signature verification and proper committee transitions across sync periods.
-
Applies finality updates - Verifies and applies finality proofs to advance the light client's finalized head, confirming the beacon chain has reached consensus on new blocks.
-
Extracts execution layer state - Retrieves the execution state root and block number from the finalized beacon block's execution payload.
Generates ZK proofs for the Hyperlane merkle tree root value of a merkle hook contract.
-
Validates EVM state - Initializes a client executor with the provided state sketch, verifying all storage proofs against the anchor block's state root.
-
Reads merkle hook contract - Executes a
root()call against the Hyperlane MerkleTreeHook contract (Mainnet or Sepolia) to retrieve the current merkle tree root. -
Extracts anchoring data - Returns the merkle root, state root, and block number as ABI-encoded output, anchoring the proof to a specific Ethereum state.
To run the proving scripts make sure to add the ETH_BEACON_RPC, ETH_EXECUTION_RPC and NETWORK_PRIVATE_KEY to an .env file in the project root like the .env.example provided. The NETWORK_PRIVATE_KEY needs to be funded with enough PROVE tokens on Ethereum Mainnet to pay for the Succint Prover Network proofs.
Generates a ZK proof of Ethereum consensus from a starting slot to the current finalized slot. The starting slot must be a checkpoint (multiple of 32). Defaults to the previous checkpoint slot.
cargo run --release --bin ethereum-prover
cargo run --release --bin ethereum-prover -- --from-slot <SLOT>To get the current finalized slot:
curl -s "<ETH_BEACON_RPC>/eth/v1/beacon/headers/head" | jq -r '.data.header.message.slot'Generate a proof for a Hyperlane Merkle tree root. The specified hook contract must match one supported by the circuit. Defaults to Ethereum Mainnet hook at the latest block.
cargo run --release --bin evm-hyperlane-prover
cargo run --release --bin evm-hyperlane-prover -- --block <BLOCK_NUMBER> --contract <HOOK_CONTRACT_ADDRESS>