informalsystems / tendermint-rs

Client libraries for Tendermint/CometBFT in Rust!
Apache License 2.0
615 stars 224 forks source link

Use the Genesis state as a Trusted State in the light client #201

Open yihuang opened 4 years ago

yihuang commented 4 years ago

It seems verify_single need a TrustedState from previous block, TrustedState contains a signed header and validator set, but when verifying the first block, there is no previous signed header.

Maybe we should make TrustedState into (Option<SignedHeader>, ValidatorSet), then genesis trusted state would be (None, genesis validator set).

tomtau commented 4 years ago

https://github.com/informalsystems/tendermint-rs/issues/186

ebuchman commented 4 years ago

Great point. We'll need to ensure you can use the genesis as a TrustedState somehow.

The light client API is undergoing pretty heavy restructuring, but will make sure this gets addressed.

Essentially the problem is that the Genesis State does not contain a header, though it does have a timestamp and an initial validator set. We should still be able to initialize from it - we can consider it height 0.

OStevan commented 4 years ago

Container issue is somewhat related with this.

brapse commented 4 years ago

This blocked by specification work, perhaps @josef-widder can help here.