// private solana pay invoices
Get paid.
Say less.
Status:
Ticker (placeholder, no token exists):
// invoice opened from a private link
You've been sent an invoice
The details below were decrypted in your browser from the part of the link after #, which browsers never send to a server.
// the working app
Write an invoice. Hand over a QR. Watch it land.
Everything is built in this page: the Solana Pay URL, the one-time reference key, the QR code and the encrypted share link. Payment detection reads mainnet through this site's read-only proxy.
Your invoice will print here.
Payment watch
Polls getSignaturesForAddress(reference), then checks the transaction with getTransaction.
- Invoice issued with a fresh reference
- Waiting for a transaction that includes the reference
- Transaction found
- Amount, recipient & reference verified
// how it works
Four quiet steps
- A fresh reference per invoice. The page generates a brand-new ed25519 keypair (Web Crypto, or an in-page BigInt fallback), keeps only the 32-byte public key as the
reference, and drops the secret immediately — it is never needed. Two invoices never share a reference. - A standard Solana Pay link.
solana:<you>?amount=…&reference=…&label=…&message=…(plusspl-tokenandmemoif used). Any Solana Pay wallet adds the reference as a read-only account on the transfer, which is what makes the payment findable. - Detection by reading, not holding. The page asks mainnet for signatures that touch the reference, fetches the first one, and checks it succeeded, that the reference is really in it, and that your address received at least the amount (lamports for SOL, token-balance delta for SPL). If you set a memo, it checks that too.
- Details in a sealed envelope. The invoice and your note are encrypted with a random AES-256-GCM key. The ciphertext and the key ride in the link's
#fragment, which browsers never send in requests — or, in split mode, the key travels separately.
// privacy model
What stays quiet, and what doesn't
Kept off-chain and off-server
- The sealed note (line items, contact details, terms)
- Label and message — they live only in the link/QR the payer's wallet reads
- Which invoice a payment settles: only the random reference is on-chain, not an invoice number or customer name
- Cross-invoice links through the reference: each one is used once
Still public on-chain
- Your receiving address, the payer's address, the amount and the time
- The memo, if you set one — forever
- That a transaction used some reference key (anyone holding your QR or link can look it up)
- Every payment to the same address can be grouped by that address — use a fresh receiving address if that matters
Quietpay reduces how much you put on the public record. It does not make you or your payer anonymous.
Known limitations — please read
- Not anonymity. Solana is a public ledger. Sender, recipient, amount and timing of every payment are visible to anyone.
- The link is the secret. Whoever has the full share link (with key) can read the invoice and note. Chat apps, email scanners and link previewers may store or open links. Use split-key mode for anything sensitive.
- Your QR is a lookup handle. Anyone who sees the QR or link can find the payment on-chain by its reference. Show it only to your payer.
- Invoices live in this tab. Nothing is stored on a server. Reloading clears the invoice book — keep your share link (it holds everything needed to watch again).
- Detection depends on RPC. It reads mainnet through a public RPC endpoint by default. Rate limits or lag can delay detection; always confirm large payments in your own wallet.
- Checks are basic. It confirms success, reference, recipient and amount (≥). It does not handle refunds, partial payments across several transactions, or transfer-fee tokens.
- Experimental and unaudited. The QR encoder and curve code are hand-written for this demo. Verify the address in your wallet before sharing any invoice.