APP GUIDE

Onboarding & PIN

Three steps to set up your private identity: create a PIN, choose a username, and activate your stealth keys on-chain.

Three Steps to Privacy

When you first connect a wallet, Dust walks you through a three-step onboarding wizard. Each step builds on the last to create a fully functional stealth identity:

  1. Set your PIN — derives your cryptographic stealth keys from a wallet signature
  2. Choose a username — registers a human-readable name (e.g. alice.dust) mapped to your meta-address
  3. Activate — publishes your ERC-6538 meta-address on the stealth registry so others can compute stealth addresses for you

Step 1: Set Your PIN

Your 6-digit PIN is the cornerstone of your stealth identity. Together with a deterministic wallet signature, it derives all the private keys that control your shielded funds.

[ CREATE PIN ]

PIN + wallet signature → stealth keys

  1. 01

    Wallet signs a deterministic message

    The app requests a signature over a fixed message. This signature is the same every time for the same wallet, providing a stable entropy source without storing any secret.

  2. 02

    Signature + PIN enter PBKDF2

    The signature and your 6-digit PIN are combined and fed into PBKDF2 with 100,000 iterations and a versioned salt (v2). This produces two independent 32-byte seeds: a spending seed (salt: Dust Spend Authority v2) and a viewing seed (salt: Dust View Authority v2).

  3. 03

    Seeds become BN254 scalar keys

    Each seed is hashed with Poseidon and reduced modulo the BN254 scalar field order. The spending seed becomes spendingKey = Poseidon(spendingSeed) mod p and the viewing seed becomes nullifierKey = Poseidon(viewingSeed) mod p. These keys operate within the BN254 curve used by the ZK circuits.

  4. 04

    Keys held in memory only

    Derived keys are stored in a React ref — never in component state or localStorage. They exist only for the duration of the browser session and are cleared when the tab closes or the wallet disconnects.

Step 2: Choose a Username

Your username is a human-readable stealth name that maps to your meta-address on-chain. Instead of sharing a long hex address, you can tell someone to send funds to alice.dust.

[ USERNAME ]

Human-readable stealth name

alice
.dust
  • Names must be lowercase alphanumeric (plus - and _)
  • The app checks availability in real time with a debounced lookup
  • Once registered, the name is permanently associated with your meta-address via a relayer API

Step 3: Activate Stealth Keys

Activation publishes your ERC-6538 meta-address — a pair of public keys (spending + viewing) — on the stealth registry contract. This on-chain registration allows anyone to:

Keys registered on-chain
Useralice.dust
PIN••••••
  • Look up your public keys by wallet address or stealth name
  • Compute a fresh stealth address using ECDH to send you funds privately
  • Announce the payment so only you can detect and claim it

The wizard retries ERC-6538 registration up to 3 times with exponential backoff to handle transient RPC failures, especially for Privy embedded wallets.

PIN Is Irrecoverable

Your PIN is critical. It derives all your stealth keys. If you forget your PIN, you lose access to your shielded funds. There is no recovery mechanism — you would need to create an entirely new identity.

Privy Embedded Wallets

Privy embedded wallet users get a deterministic address tied to their social login. The same PIN always derives the same keys, even if browser storage is cleared or you log in from a different device. The wizard detects returning users automatically and shows a streamlined re-activation flow.
PBKDF2PoseidonERC-6538BN254