mkaczanowski / tendermint-light-client

Implementation of tendermint light client in rust can be compiled to wasm.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Tendermint light client

Implementation of tendermint light client in rust compilable to wasm. The code is heavily inspired from tendermint-rs. It is optimized to run in a constrained environment of a smart contract. Refer here to know how it works under the hood.

Compilation

Prerequisites

  1. Rust 1.42.0 or higher
  2. Two target need to be installed
    1. wasm32-unknown-unknown to compile it into wasm and integrate it with CosmWasm
    2. x86_64-apple-darwin to run tests

Compile in wasm

Run make wasm in project directory. This will produce a file /target/wasm32-unknown-unknown/release/tendermint_light_client.wasm To produce a size optimized build, you need to run make wasm-optimized.

Testing

Run cargo test

Note

This library uses a fork of signatory at here. This was done to resolve version conflict of ed25519-dalek between signatory crate and substrate node.

How it works?

Tendermint light client is implemented according to the specification found here. Since this light client runs in a constrained environment without access to I/O, the bisection part of the specification is not implemented, instead only verifySingle function that operates on the local trusted state is implemented to validate incoming headers.

About

Implementation of tendermint light client in rust can be compiled to wasm.

License:Apache License 2.0


Languages

Language:Rust 99.9%Language:Makefile 0.1%