Skip to main content
Solidity smart contracts for stealth address operations on EVM-compatible chains. Four contracts are deployed per chain.

Contract Set


ERC5564Announcer

Minimal singleton. No storage, no access control. Just emits events.

Event

Function

Deployment: One per chain. No constructor args. No proxy needed.

Usage


ERC6538Registry

Maps addresses to stealth meta-addresses per ERC-6538. Supports direct and delegated registration via EIP-712 signatures.

Functions

Usage


WraithSender

Atomically transfers assets to stealth addresses and publishes announcements. Uses ReentrancyGuard.

Functions

Constructor: Takes announcer contract address.

Usage


WraithNames

Privacy-preserving name registry. Maps human-readable names to stealth meta-addresses. Ownership proven via secp256k1 signature from the spending key embedded in the meta-address.

Functions

Name Rules

  • 3-32 characters
  • Lowercase alphanumeric and hyphens only
  • No leading or trailing hyphens

Signature Verification

The contract decompresses the spending public key from the first 33 bytes of the meta-address and verifies an ECDSA signature over keccak256(name || metaAddress) with Ethereum signed message prefix. Includes on-chain point decompression (y = sqrt(x^3 + 7) mod p).

Usage


WraithWithdrawer

EIP-7702 delegation target for gas-sponsored stealth address withdrawals. A sponsor pays gas on behalf of the stealth address.

Functions


Deployment

Deploy Script

Deployment Order

  1. Deploy ERC5564Announcer (no constructor args)
  2. Deploy ERC6538Registry (no constructor args)
  3. Deploy WraithSender (arg: announcer address)
  4. Deploy WraithNames (no constructor args)
  5. Deploy WraithWithdrawer (no constructor args) — optional, if EIP-7702 supported

Indexing

Set up a subgraph to index Announcement events from the announcer contract:

Deployed Addresses (Horizen Testnet)