A live eth_getBalance over lattice PIR: this page sends only LWE
ciphertext, the server computes over every account it holds, and the reply decrypts
only here. The address you type never leaves this page — in any form.
Encrypted herea fresh LWE secret per query; the ciphertext is the same size for every address
→
Computed blindthe server must fold it over its entire account set to answer at all
→
Decoded herethe reply opens only with your secret, which never left this page
01 Before this downloads
risepir-rpc client --pir-url … runs the identical rewind client outside
the browser, on the machine you run it from — the address still never leaves that
machine, which is the whole point; it just does not have to hold the hint in a browser
tab to do it.
01 One-time setup
Cryptographic engineWebAssembly, built from the same Rust as the CLI client
Hint downloadone public matrix, identical for every visitor — it carries nothing about you
Pin to a finalized blockexpanded locally, so every answer is labelled with the block it is as of
0%
Fetching the cryptographic engine…
01 Balance lookup
An address is 0x followed by exactly 40 hex characters.
02 What the server saw
The receipt for your last query — everything that crossed the wire.
The server computed over every account it holds and returned a response only this page
can decrypt. It saw ciphertext, byte counts, and timing — and, like any web server,
the IP address it spoke to (see 04 below). The address you typed is not in the list
above, in any form.
03 This deployment
04 What this does not protect
The code you are running. This page and its WebAssembly came from
the same server you are querying. PIR stops that server from learning your address
if the client is honest — but whoever serves the page chooses what the
client is. For a stronger guarantee, run the client yourself:
risepir-rpc client --pir-url … puts the same rewind client on your own
machine, and the wasm here is built from that same Rust.
Who is asking. The cryptography hides which account, not
who wants to know. The server sees your IP address, the time, and how often
you ask. Use Tor (or any anonymising transport) if that matters to you; this client
works fine over one.
Freshness. Answers are as of the latest finalized block,
roughly 13 minutes behind what a block explorer shows. That is deliberate: finalized
blocks do not reorganise, so an answer cannot be quietly invalidated. A balance that
changed in the last few minutes will not appear yet.
Partial data set. This server only tracks accounts that have been
touched since it started, so most addresses will return “not in the tracked set”.
That is an error, never 0 — for an untracked account, absence tells you
nothing about the balance, and answering zero would be a wrong answer.