Veil Open app
Season 1 · starts 31 Oct, 16:00 UTC

Keep it shielded. Earn Veil Points.

1 point for every $1 you keep in your private balance, every day, in any token with a price. Each day of the season pays part of a $VEIL pool to those points.

Veil Points · Season 1Earn points for every dollar you keep shielded How Points work
Season pool …

$VEIL

Paid out day by day through the season

Points this season …

points, all holders together

1 point = $1 kept shielded for one day

$VEIL per 1,000 points…Estimate: $VEIL paid so far ÷ points so far
Yearly yield, live…The last day's $VEIL, in dollars, × 365, over the dollars shielded
Days left…of 90 in the season

Loading live numbers…·Veil program accounts, via Veil's indexer

How it works

1

Earn

Every day each token is priced (Pyth, or Veil's price keeper) and its points index rises by that price. A note you hold earns its amount × the rise: 1 point per $1 per day. Splitting a balance into more notes changes nothing.

2

Daily drip

Each day pays at most a 90th of the pool (plus what earlier days left), and never more than a 50% yearly rate on the value shielded that day. What is left carries over. Every point gets the same rate.

3

Collect later

Your points and $VEIL count from the first day and show in the Veil app. Collecting opens soon, with a Veil upgrade; redeeming then pays $VEIL from the pool after the season.

What the chain sees, what stays private

Public on Solana

  • Each token's daily price and its points, reward and $VEIL indexes
  • One leaf a day: the note tree's size and every token's indexes
  • Each day's total points and $VEIL paid
  • The pool and its vault

Private

  • Who holds what
  • How many points you have, and which notes are yours
  • Your app downloads the same public list as everyone and works out your points on your device: nothing about your notes is sent

The price keeper can't move funds: it posts one price a day for tokens without a Pyth feed ($VEIL included), held within ⅓× to 3× of the recent average, in public, and the multisig can replace it. The full rules are in the Docs.