Skip to content

Live on Robinhood Chain

Receive privately. Stay verifiable.

Every payment to your wallet on Robinhood Chain shows up under your address for anyone to read. Velpo gives each payment its own one-time stealth address, so your main wallet stays out of it. Who paid, how much and when stay public.

CA$VELPO · TBA, published at launch

One payment

As a stranger on an explorer sees it · example

What a stranger can read about one payment, normally and with a stealth address
Fact Normal Velpo
Paid to0x7Hx2…kP4q, your wallet0x3e9a…11c0, used once
Your other paymentsListed on the same pageNot linked by address
Your balance3.18 ETH, readableNot in this payment
Paid by0xCq3V…uM9d0xCq3V…uM9d
Amount and time0.25 ETH, 4 min ago0.25 ETH, 4 min ago
Anyone can read this column.Amber stays public.

01 · Keys

Two keys from one signature

Sign one fixed message and your browser turns it into a spending key and a viewing key. Nothing to back up, nothing sent anywhere, and nobody at Velpo can move what you receive.

Make your keys

02 · Contract

One small send desk

It moves the payment straight to the one-time address and posts the announcement in the same transaction. It never holds a balance and has no admin key.

What it can and cannot do

03 · Scanner

Your browser finds your payments

Everyone downloads the same public list of announcements. Your viewing key picks out yours on your device, so no server learns which payments are yours.

Scan and withdraw

Live from chain: .

The problem

Robinhood Chain is fast, cheap and readable by anyone.

Paste a wallet into an explorer and you get every payment it ever received: who pays it, how much and how often. Stealth addresses take your wallet off that page. They do not hide the payment itself.

Payments to one public address · example

InvoicePlain transfer

0.80 ETH

0xCq3V…uM9d → 0x7Hx2…kP4q

TipPlain transfer

0.02 ETH

0x4mNe…Zr8s → 0x7Hx2…kP4q

ClientPlain transfer

1.40 ETH

0x9aBq…Qe1L → 0x7Hx2…kP4q

RefundPlain transfer

0.15 ETH

0xRz9k…3wYb → 0x7Hx2…kP4q

FamilyPlain transfer

0.30 ETH

0x2xWe…Lk6h → 0x7Hx2…kP4q

SalePlain transfer

0.06 ETH

0xBv8n…Tq5e → 0x7Hx2…kP4q

PayoutPlain transfer

2.50 ETH

0xNs5g…Ej2w → 0x7Hx2…kP4q

The same payments to stealth addresses

One-time addressStealth payment

0.80 ETH

0xCq3V…uM9d → 0x3e9a…11c0

One-time addressStealth payment

0.02 ETH

0x4mNe…Zr8s → 0xb81d…9a2e

One-time addressStealth payment

1.40 ETH

0x9aBq…Qe1L → 0x0e7c…f415

One-time addressStealth payment

0.15 ETH

0xRz9k…3wYb → 0xd2a6…13cc

One-time addressStealth payment

0.30 ETH

0x2xWe…Lk6h → 0x5c11…7b80

One-time addressStealth payment

0.06 ETH

0xBv8n…Tq5e → 0x91e0…e6d2

One-time addressStealth payment

2.50 ETH

0xNs5g…Ej2w → 0xa47f…08f9

One-time addressStealth payment

0.80 ETH

0xCq3V…uM9d → 0x3e9a…11c0

One-time addressStealth payment

0.02 ETH

0x4mNe…Zr8s → 0xb81d…9a2e

One-time addressStealth payment

1.40 ETH

0x9aBq…Qe1L → 0x0e7c…f415

One-time addressStealth payment

0.15 ETH

0xRz9k…3wYb → 0xd2a6…13cc

One-time addressStealth payment

0.30 ETH

0x2xWe…Lk6h → 0x5c11…7b80

One-time addressStealth payment

0.06 ETH

0xBv8n…Tq5e → 0x91e0…e6d2

One-time addressStealth payment

2.50 ETH

0xNs5g…Ej2w → 0xa47f…08f9

Amber: the receiving wallet repeated on every payment. Amounts and payers stay visible in both columns.

Live demo · runs in your browser

Try it, then look at what the chain sees.

Make keys, pay yourself a few times and scan. On the right, two views side by side: what you see, and what a stranger on an explorer sees. No wallet or money needed.

Make a pair of throwaway stealth keys: a spending key and a viewing key.

In the real app the keys come from one wallet signature, so the same wallet always gets the same keys back. Here they are random and forgotten when you leave.

Registering a meta-address is public: anyone can see that your wallet published one. Payments to it are not listed under your wallet.

What you see Only you

Your meta-address (public once registered)

No keys yet.

Payments found by your scan

None yet.

What the explorer seesAnyone
Nothing on chain yet. Make keys, then pay to create the first public announcement.

Nothing in this list says which rows are yours. Amber stays public.

Real ERC-5564 math in your browser. No wallet, no money, nothing sent anywhere.

Where the secret lives

Your keys never
leave your device.

The viewing key decides which payments are yours, and the spending key moves them. Both stay in the browser tab. The server only hands everyone the same public list.

01

Your device

Holds both keys, scans, signs withdrawals

keys stay here

02

Registry

Holds your public meta-address, nothing secret

03

Payer

Computes a fresh address from the meta-address

04

Robinhood Chain

Records the payment and the announcement, in public

Other designs: a pool holds the money

Deposits wait in a shared contract.

That can hide more, but the pool holds everyone’s funds at once and needs heavy cryptography and review. Velpo does not do this today; a pool is planned only after a design and an independent review.

Velpo: nothing is held

Each payment lands at its own address.

Funds go straight from the payer to an address only your keys control. Less is hidden: the payer, the amount and the time stay public. Nothing is pooled to steal.

Who it’s for

For payments that point at a person.

A wallet address is easy to share and hard to take back. A meta-address lets people pay you without learning the rest of your history.

Freelance invoices

Each client pays a different address, so no client can open your wallet and read what the others pay you.

Tips and support

Post one meta-address. Supporters can pay it without turning your income into a public list under one wallet.

Team payouts

Pay several people in one transaction. Each gets a new address; your list of who is who stays with you.

Selling online

Give every order its own receiving address without managing a pile of wallets: one viewing key finds them all.

Keeping savings apart

Receive into addresses that do not point back to the wallet you use every day, then decide where the money goes.

Builders

Standard ERC-5564 and ERC-6538 contracts already on Robinhood Chain, plus open code you can read and reuse.

Batch send · in the app

Pay a team without a public list of who is who.

Up to 32 payments in one transaction through the send desk. Every recipient gets a fresh address. Your names and roles stay on your device; the payer and every amount stay public.

  • Add meta-addresses and amountsETH or a token
  • Check the public viewAddresses and amounts only
  • Sign onceAll or nothing

Example batch

4 recipients · ETH · one transaction

Preview
  • DE

    Design

    computing…

    0.62
  • ED

    Editing

    computing…

    0.40
  • QA

    Testing

    computing…

    0.35
  • OP

    Operations

    computing…

    0.28
Who is who stays with you1.65 ETH

Scanner · reads the real record

Find your payments without saying which are yours.

The scanner downloads every announcement on Robinhood Chain and tests each one on your device. On the right it runs right now, on the real list, with a throwaway key.

  • The same full list for every visitor, cached for everyone
  • A one-byte view tag skips almost all strangers' payments
  • Payments from other ERC-5564 wallets are found too
  • Gaps in the record are shown, never skipped silently
live scanreading…

reading the announcer and the registry…

For developers · open code

Stealth payments in three calls.

The functions the app runs, tested against the vectors published with the standard. Standard contracts mean other ERC-5564 wallets can pay and scan the same addresses.

Try it in the app
import { generateStealthAddress } from "@/lib/stealth/core";

// The receiver's registered meta-address (ERC-6538) or one they shared.
const meta = "st:rh:0x02a1…f3";

// A fresh address for this payment only. The ephemeral key and view tag
// are what the receiver needs to find it later; both go in the announcement.
const { stealthAddress, ephemeralPublicKey, viewTag } = generateStealthAddress(meta);

// Then one transaction: VelpoSendDesk.sendEth(stealthAddress, ephemeralPublicKey, viewTag)
// moves the ETH and calls the canonical announcer. Payer and amount stay public.
The same code the app runs · src/lib/stealthNot published on npm

Trust the code,
not us.

Read the privacy model

Nothing is held

The desk forwards every payment in the same transaction. A test checks that its balance is zero after every call.

No admin key

No owner, no pause, no fee, no upgrade. Nobody can redirect or freeze a payment through the desk.

Keys stay on your device

Keys live in this tab's memory. The server sends everyone the same list and never sees a key.

The send desk is new and has not had an independent security review. It moves user funds, so it needs one before real volumes; start with small amounts.

FAQ

Fair questions.

How does it work, in plain English?

You publish one public "meta-address". A payer's browser turns it into a brand-new address for each payment and posts a short public note (an announcement) next to the payment. Your browser reads every note with a viewing key only you hold and recognises the ones meant for you. The money sits at that one-time address until you move it.

What exactly stays public?

The payer's address, the amount, the token, the time, the one-time address, the announcement, and later where you move the money from it. What is missing is the link between that one-time address and your main wallet, as long as you do not create one yourself.

Is Velpo a mixer or a privacy pool?

No. Nothing is pooled, mixed or held. Each payment goes straight from the payer to its own address in the same transaction. A shielded pool is planned only after a separate design and an independent review; it is not part of Velpo today.

Where do my keys come from?

From one signature of a fixed message in your wallet: the first half of the signature becomes the spending key, the second half the viewing key. The same wallet gives the same keys again, so there is nothing new to back up. You can also make random keys and save them as a file. Keys stay in this tab's memory and are never sent anywhere.

Who pays gas when I withdraw from a stealth address?

The stealth address itself, which is why ETH payments are easiest. A token payment arrives without ETH for gas, so the payer can add a small ETH tip in the same transaction. Without a tip you must send ETH to the stealth address first, and that funding transaction is public: funding it from your main wallet links the two. There is no relayer.

Which tokens work?

ETH and standard ERC-20 tokens. The desk refuses tokens that deliver less than the amount sent (fee-on-transfer) instead of announcing a wrong number. Tokens that can freeze or blocklist addresses can still do so at a stealth address.

What are the risks?

The send desk is a new contract that has not had an independent security review; it should be used with small amounts first. Anyone who obtains your key signature can find and spend your stealth payments, so sign the key message only on a site you trust. Losing access to the wallet that signed means losing the keys, unless you saved them.

Do I need $VELPO to use it?

No. Sending, receiving, scanning and withdrawing never need the token. $VELPO is planned for relayer fees once a relayer exists, and that utility is not proven.

Your next payment doesn’t need your address.

Make your keys, register a meta-address and share it. It takes a signature and one transaction.