Skip to main content

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

ClaimProof type
Block header is validTendermint commit (2/3+ validators)
Account state at height HICS-23 Merkle membership proof
Tx included in block HTx Merkle inclusion proof
Key does not existICS-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

ChainStatus
EthereumZK Groth16 state-root proofs (production)
BitcoinSPV header chain (production)
Cosmos HubIBC Tendermint LC (requires IBC_PEER_URL)
BNB, Solana, Polkadot, Avalanche, Near, Aptos, SuiPlanned 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.