No. 001Zecathon 2026 · Core & Tooling

Proof of agefor private money.

Every shielded Ironwood spend names an earlier state of the note tree, and consensus checks it. Vintage turns that into a claim anyone can verify from one txid: these coins were already here before a hack, a tax cutoff, a bug window, or any block you name. Their amount, sender and history stay shielded.

Covers coins received before the event you pick. Fresh coins have their own path, explained here.

A real mainnet transaction, da9017e0…7095e3a7: the deposit into a NEAR Intents swap. Its coins were already in the tree 13 blocks before the event block (a staged demo event, not a real hack). That is the whole proof.

Open on explorer
02 / Check

Paste a txid. Get its age.

Every shielded Ironwood spend is built on a dated state of the pool. Vintage finds that date from public chain data and lists the events the coins predate.

Your txid goes to our verifier and to a public lightwalletd server. We keep no logs of either. To involve nobody, run vintage age on your own machine.

Check a transaction
Mainnet
Awaiting txid

> The answer names the block by which every coin was in the pool, and which events that predates.

03 / Use

Checks run since launch

We count checks per day, by verdict and event. Nothing else: no txids, no IPs, no times of day. See the raw numbers

04 / Why

Proving you're clean shouldn't mean unshielding.

After the Bitget hacker moved 2,746 ZEC into Ironwood on 30 September, screening can't tell a shielded deposit from the stolen coins. Exit rails already hold shielded deposits for review, and the only proof on offer is giving up your privacy.

Today
Trace to the origin
Reveal where the coins entered the pool.
Privacy lost
Find a voucher
Ask an exchange to vouch for you.
Privacy lost
Hand over a viewing key
Your whole history, shown.
Privacy lost
⧗
Wait
One forum user's $589k, cleared in writing, was still held after 50 days.
Held
With Vintage
◆
Pick the event
The hack, cutoff or block the rail cares about.
Nothing revealed
←
Send with an older anchor
One setting in the send. Still a shielded deposit.
Nothing revealed
✓
The rail checks the txid
A verdict from public chain data, in seconds.
Cleared

Sources: Zcash forum, thread 57497   CoinDesk, 30 Sep

05 / Mechanism

The chain already dates every shielded spend.

01 The tree

A fingerprint per block

Every block ends with a root: one fingerprint of every shielded coin that exists at that moment.

02 The anchor

Every spend names one

A spend must point at one of those roots and prove its coins are inside it. Consensus rejects it otherwise.

03 The check
Mainnet

Older root, older coins

If the named root is older than the event, the coins were already there. Nothing else about them is revealed.

No blocklist. No new cryptography. A rule Zcash already enforces on every spend.

How it works, in depth

06 / Evidence

Don't trust this page. Check the chain.

No trackingFonts served from this siteOpen sourceMainnet proof da9017e0…e3a7 2 NEAR Intents swaps, proven
Old coins
Mainnet · 23 Oct
Txidda9017e0…e3a7
What it isVintage payment = NEAR Intents deposit
Mined at3,527,813
Anchor root855ccc99…81d98502
Anchor located3,525,693 to 3,525,696
Event height3,525,709 (staged demo)
Roots checked1,303 · 0.06 s
Swap3.668896 USDC
VerdictPASS
Fresh coins
Mainnet · link
Depositdf151ee2…9402
What it isReceipt account → NEAR Intents
Mined at3,527,827
Inputs2 of 2 from da9017e0…, outputs 1 and 2
Funded byda9017e0… is both the first NEAR deposit and this account's funding payment (outputs 1 and 2)
Funding checkPASS before 3,525,709
Disclosedone retired receipt account's viewing key
Swap5.52164 USDC
VerdictLINK PASS
The control
Testnet spike
Txid18f733e2…9a73
Mined at4,524,646
Anchor root69ee8500…05fce0b
Anchor located4,524,636 to 4,524,641
Event height4,523,439
Roots checked1,918 · 32.0 s
VerdictNOT PROVABLE
07 / Limits

What it proves, and what it doesn't.

Proves
  • Every Ironwood coin the deposit spends was already in the pool before the event block.
  • It holds by consensus. Nobody can fake an older anchor.
  • It covers every event after the anchor at once.
Doesn't
  • Date coins received after the event. They need the payer-side path.
  • Cover transparent, Sapling or Orchard inputs.
  • Say who sent the coins or how much. It only rules out known events.
  • Hide that you chose to prove it. An old anchor is visible on chain, so use it only when you deposit somewhere that already knows you.
  • Make it mandatory. It's yours to offer, never a rail's to demand from everyone.
08 / Explore

Go deeper.

09 / Questions

Questions, answered.

What does Vintage prove?

That every shielded coin a transaction spends was already in Zcash's Ironwood pool before a block you choose. It says nothing about who sent the coins or how many.

Why would anyone need that?

After a hack, screening can't tell stolen shielded coins from anyone else's, and exit rails can hold shielded deposits for review. A Vintage proof shows your coins were there before the hack, so they can't be the stolen ones.

Can a proof be faked?

No. Zcash consensus checks every spend's anchor. Coins that arrived after the event aren't in any earlier state of the pool, so no valid transaction can spend them under an earlier anchor.

What do I give up?

No keys, amounts or history. The one visible trace: your transaction uses an older anchor than most, so use it where you're already known, like an exchange account.

What if I received my coins after the event?

Ask the person paying you to send a Vintage payment. You can then link your deposit to it with one single-use account's viewing key. A zero-knowledge version that shows no key exists as a research prototype.

Is there a blocklist?

No. The registry only labels block heights, like the Bitget hack's. Nothing marks a coin or a person as bad, and a failed check is not a flag.

Do I have to trust you?

No. The verifier is open source and reads public chain data. Run vintage verify against your own node and you get the same answer. Our public verifier keeps no logs.