Skip to main content

Overview

Direct Messages (DMs) allow you to have private, encrypted conversations with any Ethereum wallet address.

Starting a DM

1

Click New Message

Click the + button in the sidebar
2

Enter Wallet Address

Paste the recipient’s full Ethereum address (0x…)
3

Start Chatting

Type your message and send!

Features

End-to-End Encryption

All DMs are encrypted using FHE

Wallet-Based Identity

No usernames needed - just wallet addresses

Custom Nicknames

Rename contacts for easier identification

Self-Destruct Option

Set timers on individual messages

Message Requests

When someone messages you for the first time, you’ll see a message request:
1

Receive Request

A notification appears in the “Requests” tab
2

Review Sender

Check the sender’s wallet address
3

Accept or Decline

Accept to start the conversation, or decline to ignore
Until you accept a request, you cannot see the message content - only that someone wants to message you.

Renaming Contacts

Don’t want to see long wallet addresses? Rename your contacts:
  1. Right-click on a conversation in the sidebar
  2. Select “Rename”
  3. Enter a custom name
  4. The name is stored locally on your device
Renamed contacts show as: Custom Name 0x1234...5678

Conversation View

Each DM shows:
  • Avatar: Initials from the contact name or wallet
  • Encryption Badge: “End-to-End Encrypted” indicator
  • Message History: All encrypted messages in the conversation
  • Input Area: Type messages, enable self-destruct timers

Technical Details

How DMs are Stored

// On-chain structure
struct DirectMessage {
    address sender;
    uint256 timestamp;
    euint32[] encryptedContent; // FHE encrypted chunks
    uint256 expiresAt; // Self-destruct timestamp (0 = never)
}

Access Control

  • Only the sender and recipient can decrypt messages
  • The smart contract enforces access control using TFHE.allow()
  • Decryption requires a cryptographic signature from your wallet