Home

Awesome

tendermint-zk-ibc

Overview

This repository provides TendermintZKLightClient contract, a Solidity implementation of a Zero-Knowledge Proof (ZKP)-based Tendermint light client for IBC. Furthermore, it also provides an IBC relayer support and a ZK prover using Succinct's TendermintX. By utilizing ibc-solidity and these components, we can achieve IBC between EVM chains(e.g. Ethereum mainnet) and Cosmos zones at a practical gas cost.

The following figure shows the high-level architecture of the E2E demo using the components included in this repository. Note that Mock-LC is currently used as IBC Light Client on Tendermint instead of verifying Ethereum consensus. This will soon be replaced by 08-wasm + ethereum-ibc-rs.

Architecture

Components

TendermintZKLightClient

TendermintZKLightClient is a Solidity contract that implements a ZKP-based light client for Tendermint and ILightClient interface of ibc-solidity. This consists of the following parts:

Developers can construct their own LightClient contract using a zkp verifier contract according to the verifying key they performed setup and generated.

An example implementation can be found here:

ZKProver

ZKProver is a component that prove validity of given header and provides its proof to the relayer.

This component consists of the following two sub-components:

Relayer

Relayer is a component that requests validity proof of the latest header from ZKProver and calls the updateClient function of the TendermintZKLightClient contract with the proof. This is implemented as prover module of yui-relayer.

Benchmark

The following is the gas report for the TendermintZKLightClient contract. The gas is measured using forge test and the below settings.

Settings:

MethodProving SystemGas Cost
updateClientGroth16285k
updateClientGroth16 (w/commit range checker)407k
updateClientPLONK370k
verifyMembership*56k

TODO