Light Client
The Fenryx Light Client (light-client/ crate) lets resource-constrained
nodes verify chain state without downloading the full block history.
Implements the Tendermint Light Client spec (CometBFT v0.38) with ICS-23.
What it verifies
| Claim | Proof type |
|---|---|
| Block header is valid | Tendermint commit (2/3+ validators) |
| Account state at height H | ICS-23 Merkle membership proof |
| Tx included in block H | Tx Merkle inclusion proof |
| Key does not exist | ICS-23 non-membership proof |
Sync from a trusted height
use fenryx_light_client::{LightClient, TrustedState};
let trusted = TrustedState {
height: 1_000_000,
header_hash: hex!("abcd…"),
validators: vec![/* initial validator set */],
};
let lc = LightClient::new("https://v2.rpc.fenryx.io", trusted).await?;
let latest = lc.update_to_latest().await?;
println!("Verified height: {}", latest.height);
Verify account state
let proof = lc.get_account_proof("frx1...").await?;
let account = lc.verify_account("frx1...", &proof)?;
println!("Balance: {} afrx", account.balance);
Binary bisection
let lc = LightClient::builder("https://v2.rpc.fenryx.io", trusted)
.max_bisection_depth(20)
.build().await?;
ICS-23 proofs
use fenryx_light_client::ics23::verify_membership;
let verified = verify_membership(
&header.app_hash,
&proof_bytes,
&key,
&value,
)?;
assert!(verified);
Cross-chain light clients
| Chain | Status |
|---|---|
| Ethereum | ZK Groth16 state-root proofs (production) |
| Bitcoin | SPV header chain (production) |
| Cosmos Hub | IBC Tendermint LC (requires IBC_PEER_URL) |
| BNB, Solana, Polkadot, Avalanche, Near, Aptos, Sui | Planned post-mainnet |
See Cross-chain bridges for the practical guide.
Status
Full bisection sync and end-to-end ICS-23 on real external headers are tracked as gap 10.10 (post-mainnet). Core structure in place for Fenryx native.