This document describes the Discover feature of Status. Ethereum hosts its own community, and with Discover we want to connect Ethereum users with other Ethereum users - to trade and exchange ideas. Ultimately this will reduce transaction costs and increase the utility of ETH. Discover is also a way to find DApps and Public Chats - this will include Bots, DApps that can communicate to each-other and potentially jobs in the future.
What it Does
Discover is done through a users Status (hence the application name). This status is a 140 char sub-headline to a users profile which can be seen on my profile, user profile and discover screens.
A status is private and not shared with anyone except their immediate contacts, unless a #hashtag is introduced. These #hashtags are locally searchable on the discover screen.
How It's Built
The Discover application protocol is built on top of Whisper, possibly utilising our messaging protocol and is implemented in status-im/status-lib
Periodically the client should request from it's contacts, a package of statuses that is an aggregate compilation of discoverable statuses (created using the specifications below), this package should contain no more than 100-500 statuses and the period in which the client requests the package is after when the user is back online and/or after waiting X hours has elapsed. Whisper penalizes larger payloads so we may have to chunk this. 140chars × 4bytes (utf-8) × 100 contacts = 54kb
The 100 contacts the user decides to return is weighted by;
the newest available information (latest status from that user), the most seen contact statuses by other contacts. (that user who has seen the same contact status from all his contacts) and actual interactions with contacts, favor contacts that the user has actually messaged themselves. if contact is online The Discover screen then takes this aggregate search space 100-500 statuses × users in contact list and organise them by #hashtags, the hashtags that have more than X contacts are put into the carousel under that #hashtag category.
Below it, the statuses are listed by most recent.
On tapping one of these messages a chat session is attempted with that user.
Each user should cache no more than 1000 statuses