{"id":"ERC-7627","name":"Secure Messaging Protocol","status":"Draft","chain":"both","category":{"id":"identity","name":"Identity & Privacy","description":"Who you are on-chain, and what you choose to reveal"},"journeyStages":[{"id":"specialized","name":"Specialized Interactions","description":"Physical items, AI, social, gaming"}],"uxImpact":"End-to-end encrypted messaging between wallet addresses — private on-chain communication with session support. Design implications: show encryption status indicator, display message history by session, add public key registration flow. Design decisions: key management UX — how to handle key rotation, session organization, balance security (key expiry) with convenience (persistent conversations).","hasDetailedContent":true,"content":{"id":"ERC-7627","summary":"ERC-7627 defines a secure messaging protocol for on-chain communication between wallet addresses. Messages are end-to-end encrypted, stored on-chain, and only readable by the intended recipient. It enables private DMs between wallets without relying on centralized messaging services.","applicability":{"whenToUse":["Your product addresses: no standard way to message a wallet address.","Your product addresses: on-chain messages are public and readable by anyone.","The flow should deliver: message 0xABC directly, cryptographically verified.","Connect flows must list wallets with names, icons, and explicit user choice."],"whenToAvoid":["Always encrypt before storing on-chain.","Decrypt client-side only, never send plaintext to server.","Implement filtering, blocking, and allow-lists.","The product has no sign-in, attestation, or identity verification step."]},"designerTakeaways":["You can design UI that delivers message 0xABC directly, cryptographically verified.","You can design UI that delivers encrypted messages only decryptable by recipient.","You can design UI that delivers messages stored on-chain, censorship-resistant."],"problemsSolved":[{"problem":"No standard way to message a wallet address","oldWay":"Find their Twitter/Discord, hope it's the right person, no verification","newWay":"Message 0xABC directly, cryptographically verified","impact":"critical"},{"problem":"On-chain messages are public and readable by anyone","oldWay":"Send a transaction with data field = your message (visible to all)","newWay":"Encrypted messages only decryptable by recipient","impact":"critical"},{"problem":"Centralized messaging platforms control communication","oldWay":"Discord/Twitter can ban, delete messages, read content","newWay":"Messages stored on-chain, censorship-resistant","impact":"high"},{"problem":"NFT buyers can't negotiate with sellers privately","oldWay":"Public comments, DM through social platforms","newWay":"Private offer negotiation directly wallet-to-wallet","impact":"medium"}],"uxPatterns":[{"name":"Wallet-to-Wallet Messaging","description":"Send encrypted message to any wallet address","mockup":"concept/nft-gallery","userFlow":["Enter recipient address or ENS","Compose message","Message encrypted client-side","Sign transaction to send","Message stored on-chain encrypted","Only recipient can decrypt"]},{"name":"Inbox Interface","description":"View and manage encrypted messages","mockup":"concept/session-permissions","userFlow":["User opens inbox","Messages fetched from chain","Decrypted locally with wallet key","Display previews and timestamps","Click to read full message"]},{"name":"Message Thread View","description":"Conversation view with reply functionality","mockup":"concept/nft-gallery","userFlow":["Click on message to open thread","See full conversation history","Compose reply","Each message is separate transaction","Option to block sender"]},{"name":"Spam Filtering","description":"Filter unwanted messages","mockup":"concept/session-permissions","userFlow":["User configures message filters","Select who can send messages","Manage blocked addresses","Settings stored on-chain or locally","Filter applied to incoming messages"]}],"uiComponents":[{"name":"EncryptedMessageComposer","description":"Text input that encrypts before sending","states":["composing","encrypting","sending","sent","error"],"props":["recipient","onSend","maxLength"]},{"name":"DecryptedMessageViewer","description":"Displays decrypted message content","states":["decrypting","decrypted","decrypt-error"],"props":["encryptedData","sender","timestamp"]},{"name":"InboxList","description":"List of received messages with previews","states":["loading","loaded","empty","filtered"],"props":["messages[]","filter","onSelect"]},{"name":"EncryptionBadge","description":"Visual indicator that message is encrypted","states":["encrypted","decrypting","decrypted"],"props":["status"]}],"antiPatterns":[{"pattern":"Sending messages unencrypted","why":"Defeats the purpose, messages readable by anyone","instead":"Always encrypt before storing on-chain","severity":"critical"},{"pattern":"No spam protection","why":"Inbox flooded with unwanted messages, unusable","instead":"Implement filtering, blocking, and allow-lists","severity":"high"},{"pattern":"Storing decrypted messages on server","why":"Breaks end-to-end encryption promise","instead":"Decrypt client-side only, never send plaintext to server","severity":"critical"},{"pattern":"No indication of encryption status","why":"Users don't know if message is private","instead":"Show clear 🔒 indicator when encrypted","severity":"high"}],"onMonad":[{"aspect":"Message Delivery","ethereum":"Message takes 15+ seconds to be \"sent\"","monad":"Sub-second delivery, feels like regular chat","designImplication":"Can build real-time-feeling chat experience"},{"aspect":"Cost Per Message","ethereum":"Each message costs $1-5+ in gas","monad":"Negligible cost enables casual conversation","designImplication":"Can encourage back-and-forth communication"},{"aspect":"Message History","ethereum":"Fetching history is slow/expensive","monad":"Fast reads enable real-time inbox refresh","designImplication":"Can show \"last seen\" and real-time typing indicators"},{"aspect":"Throughput","ethereum":"Limited messages per block","monad":"High throughput enables busy messaging apps","designImplication":"Can support group chats and high-volume communication"}],"keyTakeaways":["End-to-end encryption is mandatory - message only readable by recipient","Decrypt client-side only, never on server","Show clear encryption indicators (🔒)","Implement spam filtering - allow-lists, blocking, filters","On Monad: cheap + fast enables actual chat-like experience"],"technicalNotes":"ERC-7627 uses asymmetric encryption where the sender encrypts with recipient's public key. Messages are stored on-chain as encrypted bytes. The recipient's wallet decrypts using their private key. The standard defines message format, key derivation, and inbox querying. Integration with ENS allows addressing by name instead of address."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-7627","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-7627","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7627","markdown":"https://www.eipsfordesigners.com/standards/ERC-7627/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7627/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7627","official":"https://eips.ethereum.org/EIPS/eip-7627","discussion":"https://ethereum-magicians.org/search?q=ERC-7627"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}