A trustless smart-contract explorer

Trust nothing.
Verify everything.

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.

⚠️ Experimental research prototype — not production ready. Don’t point it at funds you care about.
The clear-signing form for stETH approve: an ENS name resolved through Helios, a token amount in stETH units, the ERC-7730 preview, a Helios dry-run and a local-EVM effects simulation
One Build: ERC-7730 preview · Helios dry-run · local-EVM effects. Lido stETH on mainnet, live.

Two ways to run it

Desktop for the full guarantee.
Browser for everywhere else.

Same app, same code, one honest difference: who you trust for chain state.

Full trust model

Desktop app

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.

Your RPC = your trust anchor

Web app — explorer.sourcify.app

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

Every fact on screen.
Proven on your machine.

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

Everything verified.
Nothing assumed.

Six pieces, one rule: if the UI asserts it, your machine proved it.

Helios light client

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.

Local source verification

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.

ERC-7730 clear signing

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.

Trustless simulation

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.

ENS, verified

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.

Hardware signing

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.

Trust model

Downloaded ≠ trusted.

Data can come from anywhere. Facts are established locally.

Your app
React WebView · Tauri (Rust)
127.0.0.1 proxy
local CORS shim
Helios
embedded light client
Consensus + execution RPC
BLS-verified · Merkle proofs

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

Same chain.
Different trust.

A typical explorer / wallet
Project Independence
Chain state
Whatever their RPC returns
Helios light client — consensus-verified, Merkle-proven
Contract source
A “verified” badge on someone’s server
Recompiled on your machine, byte-compared to verified code
The ABI you call
Served by an API
Output of your own local compilation
What you sign
Raw calldata hex
ERC-7730 clear-signing form + human-readable preview
Simulation
A third-party simulation service
Local EVM over Helios-verified state, named storage diffs
Your keys
Browser-extension hot wallet
Ledger hardware signing via a dedicated Rust worker

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

Standing on rigorous shoulders.

Tauri v2 · Rust helios lib-sourcify web-solc @ethereumjs/evm viem ERC-7730 registry ENS coins-ledger

Run it. Verify it.
Break it.

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.