Implementation of zero-knowledge proof circuits for Tendermint.


Tendermint X

Implementation of zero-knowledge proof circuits for Tendermint.


Tendermint X's core contract is TendermintX, which stores the headers of Tendermint blocks. Users can query a TendermintX contract for the header of a specific block height, or for the latest header.

There are two entrypoints to a TendermintX contract, step and skip.


skip is used to jump from the current header to a non-consecutive header.

For example, let's say block N has already been proven in the light client, and we want to prove block N+10. If validators from block N represent more than 1/3 of the voting power in block N+10, then we can skip from block N to block N+10, as long as 1) the validators from the trusted block have signed the new block, and 2) the new block is valid.

The methodology for doing so is described in the section 2.3 of A Tendermint Light Client.


step is used to sequentially verify the next header after the current header.

This is rarely used, as step will only be invoked when the validator set changes by more than 2/3 in a single block.


The circuits are currently available on Succinct X here.

There are currently TendermintX light clients tracking the following networks on Goerli:


Deploy a TendermintX contract.

forge create --rpc-url $RPC_URL --private-key $PRIVATE_KEY --constructor-args 0x6e4f1e9ea315ebfd69d18c2db974eef6105fb803 --etherscan-api-key $ETHERSCAN_API_KEY --verify TendermintX

Initialize the TendermintX contract with genesis parameters.

forge script script/Genesis.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast

Update the function ID's on the TendermintX contract.

forge script script/FunctionId.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast

Run TendermintX script to update the light client continuously.

Note: Update .env with the necessary variables before running.

cargo run --bin tendermintx --release
You might also like...
A Software Development Kit (SDK) for Zero-Knowledge Transactions

Aleo SDK The Aleo SDK is a developer framework to make it simple to create a new account, craft a transaction, and broadcast it to the network. Table

Zerocaf: A library built for EC operations in Zero Knowledge.
Zerocaf: A library built for EC operations in Zero Knowledge.

Dusk-Zerocaf WARNING: WIP Repo. Fast, efficient and bulletproof-friendly cryptographic operations. This repository contains an implementation of the S

Zero-Knowledge Assembly language and compiler

zkAsm A Zero-Knowledge circuit assembly language, designed to represent Zero-Knowledge circuits in a compressed format, to be stored on blockchains. I

Noir is a domain specific language for zero knowledge proofs

The Noir Programming Language Noir is a Domain Specific Language for SNARK proving systems. It has been designed to use any ACIR compatible proving sy

Vector OLE and zero-knowledge for Z2k.

Mozzarella Benchmarking Code This repository contains the code developed for the benchmarking experiments in our paper: "Moz $\mathbb{Z}_{2^k}$ arella

Safeguard your financial privacy with zero-knowledge proofs.

Spinner The Spinner project ( takes a privacy first approach to protect users crypto assets. It is a layer-2 protocol built on th

STARK - SNARK recursive zero knowledge proofs, combinaison of the Winterfell library and the Circom language

STARK - SNARK recursive proofs The point of this library is to combine the SNARK and STARK computation arguments of knowledge, namely the Winterfell l

Spartan2: High-speed zero-knowledge SNARKs.

Spartan2: High-speed zero-knowledge SNARKs. Spartan is a high-speed zkSNARK, where a zkSNARK is type cryptographic proof system that enables a prover

🛠️ Uses zkevm-circuits and anvil mainnetfork to prove that a tx solves an EVM challenge

zk-proof-of-evm-execution This is a PoC developed at hackathon that enables a user to prove that they know some calldata that can solve a challenge on

  • feat: `TendermintX` script + `succinctx` eddsa changes

    feat: `TendermintX` script + `succinctx` eddsa changes


    • Add Rust script to update TendermintX light client continuously.
    • Update succinctx to use multi-table SHA + EDDSA.
    • Optimize: VALIDATOR_SET_SIZE_MAX, no longer needs to be a power of 2.


    opened by ratankaliani 0
  • feat(utils): `is_valid_skip`

    feat(utils): `is_valid_skip`


    • Add is_valid_skip, which determines if a valid skip proof can be generated over a block range [start_block, target_block).
      • This will be used in Rust scripts to run TendermintX light clients.
    opened by ratankaliani 0
  • Add Osmosis Demo

    Add Osmosis Demo

    • Add demo for ZKTendermintLightClient with Osmosis.
      • Don't need get_header_from_number for ZKTendermintLightClient, but have to build the circuits for 256 validators.
    opened by ratankaliani 1
The Zero Knowledge Whitelist Tool is a powerful utility for managing an address whitelist using Zero-Knowledge (ZK) proofs.

zk_whitelist: A Zero Knowledge Whitelist Tool The Zero Knowledge Whitelist Tool is a powerful utility for managing an address whitelist using Zero-Kno

Nikos Koumbakis 4 Nov 21, 2023
OpenZKP - pure Rust implementations of Zero-Knowledge Proof systems.

OpenZKP OpenZKP - pure Rust implementations of Zero-Knowledge Proof systems. Overview Project current implements ?? the Stark protocol (see its readme

0x 529 Jan 5, 2023
A fast zero-knowledge proof friendly Move language runtime environment.

zkMove Lite zkMove Lite is a lightweight zero-knowledge proof friendly Move language virtual machine. Move bytecode is automatically "compiled" into c

YoungRocks 43 May 20, 2023
RISC Zero is a zero-knowledge verifiable general computing platform based on zk-STARKs and the RISC-V microarchitecture.

RISC Zero WARNING: This software is still experimental, we do not recommend it for production use (see Security section). RISC Zero is a zero-knowledg

RISC Zero 653 Jan 3, 2023
Uses Plonky2 proof system to build recursive circuits for Merkle Trees.

ProvableMerkleTrees Introduction This repo provides Rust code to build Merkle Trees, equipped with a Provable interface to generate Zero Knowledge pro

null 5 Aug 18, 2023
A rust implementation of the ABCI protocol for tendermint core

?? DEPRECATED ?? This repo has been deprecated. Development work continues as the "abci" crate of informalsystems/tendermint-rs. Please reference that

Tendermint 117 Dec 12, 2022
Zero Knowledge Light Client Implementation by Zpoken team.

zkp for chain state Prerecusites This project requires using the nightly Rust toolchain, which can be used by default in this way: rustup default nigh

Zpoken 40 Mar 6, 2023
Composable proof transcripts for public-coin arguments of knowledge

Merlin: composable proof transcripts for public-coin arguments of knowledge Merlin is a STROBE-based transcript construction for zero-knowledge proofs

dalek cryptography 99 Dec 22, 2022
Tendermint in Rust! Tendermint in Rust with TLA+ specifications. Tendermint is a high-performance blockchain consensus engine for Byzantine fault tolerant a

Informal Systems 447 Jan 7, 2023
A basic implementation of Yao's Garbled Circuits

yao-gc This is a rudimentary implementation of Yao's Garbled Circuits. This is a technique which allows two parties to evaluate a boolean function on

Lúcás Meier 21 Nov 23, 2022