Contract Set
ERC5564Announcer
Minimal singleton. No storage, no access control. Just emits events.Event
Function
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. UsesReentrancyGuard.
Functions
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 overkeccak256(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
- Deploy ERC5564Announcer (no constructor args)
- Deploy ERC6538Registry (no constructor args)
- Deploy WraithSender (arg: announcer address)
- Deploy WraithNames (no constructor args)
- Deploy WraithWithdrawer (no constructor args) — optional, if EIP-7702 supported
Indexing
Set up a subgraph to indexAnnouncement events from the announcer contract:

