Program Set
| Program | Purpose |
|---|---|
| wraith-announcer | Emits stealth address announcement events |
| wraith-sender | Atomic SOL/SPL transfer + announcement |
| wraith-names | .wraith name to meta-address mapping |
wraith-announcer
Emits announcement events via Anchor’semit!() macro. Stateless — no on-chain storage.
Instruction
Accounts
Event
Usage
wraith-sender
Atomic SOL or SPL token transfer + announcement in one instruction. Sends funds to the stealth address and emits an announcement event.Instructions
send_sol
Transfer SOL to a stealth address and emit an announcement.
send_spl
Transfer SPL tokens to a stealth address’s associated token account and emit an announcement.
Usage
wraith-names
PDA-based name to meta-address mapping. Names are stored in Program Derived Addresses (PDAs) seeded by["name", nameBytes].
Instructions
register
Register a new .wraith name.
update
Update the meta-address for a name you own.
release
Release a name. Closes the PDA account and returns rent to the owner.
resolve
Look up a name’s meta-address. Read-only.
Account Structure
PDA Derivation
Name records are stored at PDAs derived from the name:Validation
- Name: 3-32 characters, lowercase alphanumeric and hyphens only
- Meta-address: must be exactly 64 bytes (two 32-byte ed25519 public keys)
- Only the owner can update or release a name
Error Codes
Usage
Project Structure
Deployment
Build
Deploy to Devnet
Test
- wraith-announcer — event emission, multiple callers, metadata preservation
- wraith-sender —
send_soltransfers + emits,send_spltoken transfer + emits, insufficient funds rejection - wraith-names — register/resolve, name validation (too short, invalid chars), update by owner, update by non-owner (rejected), release and re-register
Differences from EVM and Stellar Contracts
| Aspect | EVM (Solidity) | Stellar (Soroban) | Solana (Anchor) |
|---|---|---|---|
| Language | Solidity | Rust | Rust (Anchor) |
| Contract model | Bytecode deployment | WASM deployment | BPF program deployment |
| Name storage | Contract storage | Contract storage | PDAs (Program Derived Addresses) |
| Name sig verification | On-chain ECDSA recovery | Caller auth | Signer constraint |
| Event indexing | Subgraph / The Graph | Soroban RPC getEvents | Program transaction logs |
| Account model | Address always exists | Must createAccount first | Address always valid, no deployment |
| Token transfers | msg.value / safeTransferFrom | Soroban token contract | SystemProgram / SPL Token |
| Gas sponsorship | EIP-7702 (WraithWithdrawer) | Not applicable | Fee payer pattern |
| Min balance | None | 1 XLM | ~0.00089 SOL (rent exemption) |

