As a general update to some weekend rabbit-holing / research,
as @bernardoaraujor just expressed - mixnets are something I think has great merit for this particular application. Not only for human communication, but as a general method for creating generic, yet context-specific ways for consensus, or even XCM-related network traffic. An example of this would be to provide a different mix strategy for different types of traffic within a node, whether it’s pallet specific (something used for messaging) or network level.
I think a common problem isn’t really how to do messaging, the following (rather glaring!) issues immediately stand out to me:
-
Even before using something like Waku or Whisper to be the transport layer for a common-goods communication chain, there is no reliable way (to my knowledge) to combine one of these protocols with Substrate in a homogeneous way.
-
There has to be a way to de-sybil users without the need for a high barrier of entry, both from an adoption/UX standpoint as well as price. The most obvious and naive solution right now is to ensure they can reserve or lock some balance before taking action within the chain.
In regards to the first point, I’ve been doing a lot of research around how a session-based, trustless authentication scheme with Substrate might look like. Essentially, Substrate could be used as the gateway to other external processes without being directly involved. This would solve a couple problems:
-
External services, whether they be off-chain workers or something completely external, could be authenticated via a set of rules before a user can access it.
-
Users can authenticate in a more natural “web2 manner”, but using cryptographic and Substrate-backed primitives.
-
Only crucial points of interest would actually be included in the state of chain - i.e, when a user accessed a service, and the state of that user upon accessing that service.
I would love to see some thoughts on this, as I think it’s important to delegate any heavy lifting (especially in an application like this) to something external rather than burden consensus with it. Once we have this building block, then we could potentially look into creating context-driven mixnets for anything we want