Full-Rust block explorer for Sentrix Chain. Browser-side WASM bundle talks
to the chain over gRPC-Web (grpc.sentrixchain.com (mainnet) / grpc-testnet.sentrixchain.com (testnet)); zero JSON-RPC, zero
JavaScript glue.
proto/sentrix.proto single source of truth (mirrored from sentrix/crates/sentrix-grpc)
│
▼ build.rs / tonic-build
src/grpc/pb prost types + tonic client stubs
│
▼
src/grpc/client.rs SentrixGrpcClient — wraps tonic-web-wasm-client transport
│
▼
src/components/live_feed signal-driven LiveBlockFeed (stream → poll fallback)
│
▼
src/screens/dashboard route view
| Surface | React/Next stack | Obsidian Engine |
|---|---|---|
| Wire format | JSON-RPC (text, verbose) | gRPC-Web (binary, ~3-5× smaller) |
| Render path | Virtual DOM diff | Fine-grained signals |
| Parse cost | JS interpreter | WASM near-native |
| Type safety | Runtime | Compile-time (proto ↔ struct) |
If the chain proto changes, this crate fails to compile — the UI literally cannot drift from the wire contract.
cargo install cargo-leptos --locked
rustup target add wasm32-unknown-unknowncargo leptos watch # SSR on :3000, HMR on :3001cargo leptos build --release
# binary: target/release/sentrix-explorer-v2
# assets: target/site/- Mainnet · https://scan.sentriscloud.com
- Testnet · https://scan-testnet.sentriscloud.com
Deploy artifacts (Caddyfile, systemd unit, deploy.sh) live in deploy/.
Chain gRPC v0.2 (active 2026-05-04) ships only GetBlock + GetBalance.
StreamEvents returns Status::unimplemented; LiveBlockFeed falls back
to a 2 s GetBlock(latest) poll. The streaming arm activates automatically
when chain v0.3 ships — no client change needed.