Hi Scott, thanks for raising these points — I appreciate the thoughtful questions.
I’ve been following the recent discussions in the ecosystem about encrypted messaging, including Vitalik’s latest comments highlighting the importance of permissionless identities and metadata-minimized communication. In light of that, I’d like to clarify why ERC-7627 takes the shape it does.
1. On whether this approach is used in actual applications
Yes. The interface came out of several dApp integrations where developers needed a very small, chain-native primitive for encrypted messaging. These projects were experimenting with account-abstraction wallets, multi-party coordination, and private in-app communication channels.
The goal was never to build a full protocol like Signal/Session/SimpleX, but rather a minimal envelope that dApps can compose with.
2. Why a sessionId is included, and why (from, to) is not enough
You’re right that for the simplest case — one linear conversation between two addresses — sessionId is not strictly necessary.
However, in practice many real applications require multiple concurrent contexts between the same two parties. Examples include:
- parallel threads (e.g. “support”, “trading”, “governance”)
- contract-originated messages that belong to different logical flows
- group or multi-device messaging
- integrations where each conversation has its own ephemeral key state
Modern E2EE systems (including Session/SimpleX, as noted by VB) separate conversations into explicit sessions or queues for exactly these reasons: it improves state isolation, reduces metadata leakage, and helps clients operate statelessly.
Ethereum frontends reconstruct everything from logs, so having an explicit session identifier gives applications a deterministic, portable, and indexable way to organize threads — without dictating how they must implement their cryptographic or routing logic.
Importantly, apps that prefer the simple model can still derive:
sessionId = keccak256(abi.encodePacked(from, to))
So nothing becomes harder, but more sophisticated applications gain the structure they need.
3. Design philosophy
The ERC intentionally stays minimal:
- no ratchets
- no routing rules
- no inbox semantics
- no device-sync requirements
Those belong to higher-level protocols.
The aim here is only to provide a small, interoperable foundation that dApps can build on top of.