Private end-to-end encrypted messenger built on blobs, fully anonymous and censorship-resistant.
OnlyDanks is a messaging system that lives entirely on the Ethereum blockchain. There are no apps, no servers, and no middlemen. Messages are written directly to Ethereum’s new blob storage, making them:
- Invisible to third parties (no one can read them),
- Unlinkable (no one can tell who’s talking to whom),
- Censorship-resistant (no one can delete or block them).
It works like a fully private postbox, where only the intended recipient has the key—and no one even knows the box exists.
- You create a public identity using an Ethereum Name like
yourname.onlydanks.eth. - This name links to a public key, like sharing your digital mailbox.
- When someone wants to message you:
- They use your public key to encrypt a message.
- They publish it into Ethereum’s blob space.
- You periodically check for new messages by scanning the blockchain.
- If a message is meant for you, you can decrypt and read it.
- Privacy by design: No servers or apps know who you are.
- Stealthy delivery: Only you can find and read your messages.
- Globally accessible: Anyone with an Ethereum wallet can use it.
- No central control: Can't be taken down, blocked, or censored.
- No history or tracking: All data is ephemeral and unlinkable.
sequenceDiagram
participant User
participant ENS
participant L2Registrar
participant L2Registry
User->>L2Registrar: Register subname (e.g. user.onlydanks.eth)
L2Registrar->>ENS: Link subname to L2 registry
L2Registrar->>L2Registry: Store secp256k1 public key (text record)
ENS-->>User: ENS now resolves to public key
- Users register ENS subnames (e.g.,
user.onlydanks.eth) through an L2 registrar on World-Seoplia. - Each subname links to a secp256k1 public key via ENS text record.
- ENS’s L1 resolver points to our L2 registry.
sequenceDiagram
participant Sender
participant ENS
participant Backend
participant Ethereum
Sender->>ENS: Lookup recipient ENS (e.g. alice.onlydanks.eth)
ENS-->>Sender: Return recipient's public key
Sender->>Sender: Generate ephemeral key pair
Sender->>Sender: Compute shared secret (ECDH)
Sender->>Sender: Sign and encrypt message
Sender->>Ethereum: Submit blob data:
- Look up ENS subname → get public key.
- Generate ephemeral private key.
- Use ECDH (Diffie-Hellman) to create shared secret.
- Sign the message with sender's private key.
- Encrypt the signed message with the shared secret.
- Publish to blob:
- Ephemeral public key
- Initialization vector (IV)
hash(shared_secret)(used for message lookup)- Encrypted message
- Stateless, self-hostable.
- Indexes blobs and provides:
- List of
ephemeral public keys + IV - Messages by
hash(shared_secret)
- List of
- Does not store any private info or user data.
sequenceDiagram
participant Recipient
participant Backend
Recipient->>Backend: Fetch ephemeral pubkeys + IVs
loop For each ephemeral pubkey
Recipient->>Recipient: Compute shared secret (ECDH)
Recipient->>Backend: Search messages by hash(shared secret)
Backend-->>Recipient: Return matching blobs
Recipient->>Recipient: Try decrypting
alt If decryption works
Recipient->>Recipient: Verify signature, read message
end
end
- The recipient downloads ephemeral public keys + IVs from the backend.
- Tries to compute shared secrets from each.
- For each derived
hash(shared_secret), queries backend for matching blobs. - If found, decrypts the message and verifies the sender via signature.
WorldChain
ENS Registry: 0xc3a4eb979e9035486b54fe8b57d36aef9519eac6
ENS Registrar: 0x491c7b1319A0c683027ae2A2A7b7c34913A6178e
WorldChain Sepolia
ENS Registry: 0x41Fb196Ae7D65E06880A240c8d1B91245Fb84807
ENS Registrar: 0x1468386e6ABb1874c0d9fD43899EbD21A12470A6