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.
Live:
- Mainnet: https://scan.sentriscloud.com
- Testnet: https://scan-testnet.sentriscloud.com
Two explorers coexist by design. This is the WASM V2 Obsidian — full-Rust + tonic-web, near-native parse cost, signal-driven UI. For the Next.js V1 alternative — feature-rich (validator pages, leaderboard, EIP-3091 deeplinks, contract verification panel, multi-locale i18n) — see
Sentriscloud/frontend/apps/scanatscan.sentrixchain.com/scan-testnet.sentrixchain.com. Pick whichever fits the workflow; neither replaces the other.
The gRPC-Web wrapper used here has been extracted into a standalone crate — see Sentriscloud/sentrix-grpc-wasm — so other browser dApps (Yew, plain wasm-bindgen) can reuse it without re-implementing the tonic-web-wasm-client glue.
sentrix-proto crate single source of truth (crates.io, default-features = false to drop tonic-transport for wasm)
│
▼ re-exported as `pb` in src/grpc/mod.rs
src/grpc/pb prost types + tonic client stubs (now from sentrix-proto, no local codegen)
│
▼
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.