Vocdoni, Whisper and Status

learning
experiment

#1

Hello status community

I’m involved on an open-source project named Vocdoni (http://vocdoni.io). As quick summary, it’s an online voting platform to empower people on the decision making. The big words are:

  • descentralized
  • censorship resistant
  • ZK-snarks privacy
  • Ethereum blockchain for data integrity and coordination (smart contracts)
  • Third party participated via incentive/reward model
  • Data availability provided by IPFS or DAT
  • SmartPhone APP centered
  • Communication layer provided by PubSub or Whisper

I can see many similarities between Status and Vocdoni. Specially on the communication layer. We need a way to send p2p messages from the Client (voter) to the Relay infrastructure (servers which process the votes, add them in a batch and register an IPFS hash to Ethereum were the batch is available).

We are now playing with IPFS PubSub, which kind of works but it’s weak (it’s very easy to loose messages and the protocol is too simple). Whisper in the other side has so many nice features useful for us, we were planning to implement some of them on top of PubSub (as an upper layer) but it does not make sense if Whisper is already implemented and works.

Here you can see what kind of messages are we sending through the P2P messaging protocol: https://github.com/vocdoni/docs/wiki/Data-structures

After making a quick research on Whisper I see that most of the “real world” development is made by Status. I mean, it’s the only real case scenario which is using Whisper in production AFAIK.

So I wonder which specific pieces of status could we reuse. We are mainly interested on the low level communication layer (we don’t need a chat but something to replace TCP/IP unicast communications).

As an initial test. I’ve compiled and executed “status-go” and used the HTTP API to send a symetric key message which was received in two different servers. That worked and might kind of solve the Relay side.

Now I’m wondering what could be used in the client side (SmartPhone). For PubSub we use a WebSocket bootnode which provide information about other WebSocket peers. Then we connect to those peers and subscrive to a specific topic to send/receive network messages. Is there something similar in Whisper/Status?

I see there is a react-native APP but it’s too big and complex to use it as a whole. So I’d like to identify the mimimum piece we could reuse for our APP (which right now uses Expo toolchain). There is this project named “murmur” in status github which claims to be a pure javascript implementation of the whisper protocol, but I’m not sure if it’s mature enough to be used and neither if it’s focused to be executed on a smartPhone.

To finish, this is just an initial message to check if there might be common synergies between the two projects. For instance both projects are depending on Whisper, so we could contribute the current whisper network by making it bigger and stronger. We could also contribute together with the development of whisper related tools, on the server side and the client side.

Any thought, idea, comment, advice is very welcome.


#2

Hey there welcome! It seems you’re barking up all the right trees :slight_smile:

Now I’m wondering what could be used in the client side (SmartPhone). For PubSub we use a WebSocket bootnode which provide information about other WebSocket peers. Then we connect to those peers and subscrive to a specific topic to send/receive network messages. Is there something similar in Whisper/Status?

There is, we currently host mail servers for message relay; but there is a swarm focused on network incentives which should be relevant to other teams.

There’s probably not a certain piece ready for use as whisper itself is needing a new protocol to be long term viable. But @iurimatias may be able to answer more reasonably about Murmur progress and viability with something like this.

To finish, this is just an initial message to check if there might be common synergies between the two projects. For instance both projects are depending on Whisper, so we could contribute the current whisper network by making it bigger and stronger. We could also contribute together with the development of whisper related tools, on the server side and the client side.

It would be great to have your team contributing in furthering research and viable means; possibly even joining the discussion on the next iteration of whisper at this riot room could be helpful.