Docs
Ghostpay is a stealth payment app on Robinhood Chain. A receiver publishes one link; every payment to it lands on a new one-time address that only the receiver can identify and spend. It follows ERC-5564 (scheme 1: secp256k1 with view tags).
Keys
- Your wallet signs a fixed message. The 65-byte signature is split and hashed (keccak-256) into a spending key
sand a viewing keyv. - The meta-address is the two compressed public keys
S = s·G,V = v·G(66 bytes), shown asst:rh:0x…. - Keys exist only in the open browser tab. Signing the same message again, on any device, gives the same keys.
Paying
- The payer's browser picks a random
r, computesR = r·G, the shared secretr·Vandh = keccak(r·V). - The one-time address is the address of
S + h·G. The view tag is the first byte ofh. StealthPay.payNativeorpayTokenmoves the money straight to that address and emits anAnnouncementwithR, the view tag, token and amount.- Token payments carry 0.00002 ETH to the same address so it can pay gas when the receiver collects.
Receiving
- The inbox reads every announcement and, for each, computes
v·R. A wrong view tag is skipped after one multiplication. - For a match, the private key of the one-time address is
(s + h) mod n. It is checked against the address before use. - Collect signs a transfer from each one-time address with its own key, to any address you enter. A fresh address keeps the link between payments and your main wallet hidden.
Names
setName(name, meta) stores a meta-address under a name (3-20 chars, a-z 0-9 _). First come; only the owner can update it. /pay/<name> links resolve it.
Contract
| StealthPay | deploys at launch |
| Chain | Robinhood Chain (4663) |
| Owner / admin | none |
| Fee | none |
| Funds held | none, every call forwards in full |
Limits and risks
- Unaudited. The contract is about 100 lines, no owner and no upgrade.
- Amounts and timing are public. Paying an unusual amount at a known time can still be matched by an observer.
- If you lose access to the wallet that signs the key message, you lose access to your payments.
- The page asks the worker only for public announcements; your keys and matches never leave the browser.