Skip to main content
Use message signing for authentication, verification, or any scenario where you need proof of wallet ownership without a transaction.

The flow

  1. User generates code at actioncode.app
  2. User shares code with your app
  3. Your app creates a message and attaches it
  4. User signs in their wallet
  5. Your app gets the signed message

Authentication example

Simple verification

For simpler cases where you just need proof of ownership:

Best practices for auth messages

  1. Include a nonce — Prevents replay attacks
  2. Include a timestamp — Allow time-based expiry
  3. Include the wallet address — Confirms which wallet is signing
  4. Use a recognizable format — Users should understand what they’re signing

Signature verification

The signed message format depends on the wallet. For Solana, you’ll typically verify using ed25519:
Different wallets may encode signatures differently. Test with your target wallets (Phantom, Solflare, etc.) to ensure compatibility.