dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
Find the round trips, quick exits and fingerprint amounts that link your shielded Zcash activity, and check a withdrawal before you make it.
SecurityTypeScript · HTMLGitHub @luoy16002-svgOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A privacy checkup for Zcash wallets: finds the round trips, quick exits and fingerprint amounts that link shielded activity, and checks a withdrawal before you make it.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A privacy checkup for Zcash wallets. Shielded transactions hide who paid whom and how much. How you enter and leave the shielded pool can still link your addresses together. Tells reads a wallet's history through its viewing key, on your own machine, and shows what an outside observer can connect. Run it before a withdrawal and it proposes a safer way to make it.
The first studies of the Zcash chain found that simple patterns undo most of the privacy people think they have:Read the full README ↗A privacy checkup for Zcash wallets. Shielded transactions hide who paid whom and how much. How you enter and leave the shielded pool can still link your addresses together. Tells reads a wallet's history through its viewing key, on your own machine, and shows what an outside observer can connect. Run it before a withdrawal and it proposes a safer way to make it.
Live: https://luoy16002-svg.github.io/tells/
The first studies of the Zcash chain found that simple patterns undo most of the privacy people think they have:
Wallets today warn about transparent addresses, but nothing tells a user "this withdrawal will link you to the deposit you made an hour ago." Tells does, before the transaction exists.
Only three things cross the pool boundary in public: an amount, a block time and a transparent address. Every rule uses nothing else, so every finding is something anyone reading the chain can also find.
| Rule | What it catches | Severity |
|---|---|---|
| Round trip | An exit within a fee (or 0.1%) of an earlier entry | Critical under 2 h, high under a day; up for unique amounts, down for round ones |
| Sum match | An exit equal to two or three recent entries added together | Like round trips |
| Quick exit | Leaving the pool within a day of entering, even with different amounts | High under 1 h |
| Fingerprint amounts | Crossings with four or more decimals (round amounts minus a fee count as round) | Low to medium |
| Address reuse | One transparent address on several crossings | Low to medium |
| Transparent payments | Transparent-to-transparent spends | Low to medium |
| Pool migrations | Sapling, Orchard and Ironwood moves publish their amount | Low |
| Crowd size | Other people's look-alike entries and exits in the same window: exits from compact blocks, entry amounts by resolving each shielding transaction's transparent inputs | Lowers a link by one or two levels |
Measured on mainnet blocks 3,504,400–3,504,495 (about two hours), Tells resolved all 50 shielding transactions: 36 had no look-alike entry, 10 had one and 4 had three. The first run fetched 162 transactions in 45 seconds; a repeat run reads them from the on-disk cache in under a second.
Pre-flight takes a planned withdrawal (amount, time, destination), runs the same rules as if it had happened, and if it is risky proposes alternatives: wait, send a round amount and keep the remainder shielded, split, or use a fresh address. Every alternative is re-checked before it is shown.
Open the live page, look at the sample wallets, try the pre-flight, or drop your own history.json (made below). The page runs entirely client-side.
You need a unified full viewing key (uview1...), which can see your history but cannot spend, and the wallet's birthday height. With Node 22 or newer:
npx github:luoy16002-svg/tells scan --ufvk uview1... --birthday 2726400 --out history.json
This creates a view-only wallet in a temporary folder, syncs it from lightwalletd (zec.rocks by default) with zcash-devtool, prints the checkup and writes history.json for the web page. If zcash-devtool is not on your PATH and you pass no --devtool, Tells downloads a build of the pinned upstream commit made by this repository's public scanner workflow, and checks it against the release's SHA256SUMS. Behind a proxy, set HTTPS_PROXY and NODE_USE_ENV_PROXY=1.
Other commands:
tells report <wallet-dir | history.json>
tells preflight <wallet-dir | history.json> --amount 0.75 --at 2026-10-04T12:00Z --to t1...
tells export <wallet-dir> --out history.json
The rules are a dependency-free TypeScript package (packages/core) that runs in a browser, Node or a mobile JavaScript engine:
import { preflight } from '@tells/core';
const check = preflight(history, { amount: 54_311_000, time: Date.now() / 1000, address: recipient });
if (check.verdict === 'risky') showWarning(check.findings[0].title, check.alternatives);
packages/core rules, scoring, pre-flight (TypeScript, no dependencies, tested with vitest)
packages/cli reads a zcash_client_sqlite wallet (Node's built-in SQLite), drives zcash-devtool for scans
apps/web the checkup page (Vite, plain TypeScript, hand-drawn SVG timeline)
demo/ testnet histories made with real transactions
The CLI reads v_received_outputs, v_received_output_spends and sent_notes from the wallet database to rebuild, per transaction, what the account spent and received in each pool (transparent, Sapling, Orchard, Ironwood). Crossings are derived from those flows the way an observer sees them: value entering or leaving the shielded pools, and moves between them.
zcash-devtool on your machine, which talks to a lightwalletd server like any light wallet does. Use --server to choose one you trust, or route over Tor with zcash-devtool's --connection tor.history.json is read in the browser and never sent anywhere.--entry-crowd-max-blocks and --entry-crowd-max-transactions). A window that hits a cap or a fetch error is reported as incomplete and never lowers a severity.MIT. Built by Kai Chen for the Colosseum Crypto World's Fair (Zcash track).