A trustless smart-contract explorer
Project Independence opens a contract only after your machine has proven what it is — light-client-verified state, locally recompiled sources, human-readable signing, and a simulation of what will actually happen. All on your device.

Build: ERC-7730 preview · Helios dry-run · local-EVM effects. Lido stETH on mainnet, live.Two ways to run it
Same app, same code, one honest difference: who you trust for chain state.
The whole pitch, uncompromised: an embedded Helios light client proves every chain read against Ethereum consensus, and a Ledger signs on-device through a dedicated Rust worker. Build it from the source.
Runs entirely in your browser, on any EVM chain you add. No light client here — chain reads come from an RPC endpoint you configure, so they're only as trustworthy as that endpoint (point it at your own node to close the gap). Source re-verification, clear signing and the local-EVM simulation still run locally in the browser; signing goes through your browser wallet.
Manifesto
Ethereum’s base layer is one of the most decentralized systems ever built. The way we use it is not.
We read the chain through someone else’s RPC and call it truth. We trust a block explorer’s “verified” badge instead of the code. We sign bytes our wallets can’t explain, previewed by simulation services we’ve never audited.
Every one of those conveniences quietly re-introduces the middlemen Ethereum was built to remove. Decentralization you don’t verify is a promise, not a property.
Project Independence is an experiment in removing the asterisk: every security-relevant fact on screen — state, source, meaning, effect — is verified on your machine, or explicitly labeled as unverified.
Don’t trust. Verify. Locally.
Features
Six pieces, one rule: if the UI asserts it, your machine proved it.
Every chain read is checked against Ethereum consensus — BLS-verified checkpoints, Merkle-proven state. The RPC is just a courier; it can’t lie to you. Desktop app only — the web version reads through an RPC you choose.
Sources arrive from Sourcify untrusted, get recompiled in-app (lib-sourcify + web-solc), and must match the on-chain bytecode Helios verified. The ABI you interact with comes from your compile.
Descriptor-driven forms and previews: “Allow to spend 1.5 stETH”, not 0x095ea7b3…. Coverage badges before you build, a full human-readable preview before you sign.
Transactions run in a local EVM whose every state read is fetched through Helios. Decoded events, balance diffs and storage changes with real variable names — no third-party simulator.
Type vitalik.eth anywhere an address goes. Resolution is an eth_call through the light client — not an indexer’s answer. Plus a local address book that never leaves your device.
A connected Ledger is read-only until the moment you sign. Keys never touch the app; transactions are assembled from Helios data and signed on-device. On the web, your browser wallet signs instead.
Gallery
Real screenshots, real mainnet contracts, zero mock data.
The gate
There is no “verified” badge to take on faith. Helios syncs to consensus, sources download from Sourcify (untrusted), solc compiles them inside the app, and the recompiled bytecode is compared against the on-chain code Helios proved.
Proxies and diamonds don’t get a pass — implementations and every facet go through the same gate before a single function renders.

Two views
The classic block-explorer view is all here — every read and write method of the locally-verified ABI.
But when a contract ships an ERC-7730 descriptor, it becomes something better: a form that speaks the descriptor’s language. “Approve stETH” instead of a selector, token amounts in token units, and an Unlimited button that means exactly what the registry says it means.


Field intelligence
Every input is driven by the ERC-7730 field format. Address fields take ENS names and resolve them through the light client. Token amounts fetch the ticker and decimals from the chain itself — so a malicious descriptor can’t skew what you encode.

vitalik.eth → resolved & verified through Helios.
Simulation
One Build gives you three independent answers:
eth_call: would it succeed?Lido.allowance[you][spender]: 0 → 1500000000000000000 — that line was computed on your machine, from consensus-proven state, with slot names from the bytecode-matched compile.

Sources
The Sources tab shows what your machine actually verified: a perfect runtime match, the exact compiler and settings, and all 37 files of Lido’s code — from the same compile that matched the on-chain bytecode.
If it can’t be verified, it doesn’t render. Unverifiable proxy implementations are hidden; unverifiable simulation labels are flagged, never guessed.

runtime: perfect · solc 0.4.24 · 37 files, verified locally.Trust model
Data can come from anywhere. Facts are established locally.
Sourcify and the ERC-7730 registry are fetched over HTTPS as untrusted input — then recompiled, byte-compared and re-derived until they become locally verified facts. The Ledger talks to a dedicated Rust worker; private keys never exist in the app.
In the web app, the proxy + Helios stages are replaced by an RPC endpoint you configure — the rest of the pipeline runs unchanged, in your browser.
The difference
The table describes the desktop app. The web app keeps every row except two: chain state comes from an RPC you choose, and signing from your browser wallet.
Under the hood
It’s an experiment, and it wants adversaries. Open the web app or clone the repo, point it at your favorite contract, and try to make it assert something it didn’t prove.