API Specification for End-to-end Reliability

Thanks for the detailed writeup @shash256!

some points/queries come to my mind wrt integration with status which i think would need recommendations/suggestions as to how the application has to implement these in order for the protocol to be used effectively.

  • it would be good to suggest what could be used as a channel ID. is it that each content-topic should have a channel ID or some other method has to be used to match them?
  • how would the participants be determined with which a specific channel will be sycned? since this protocol is especially needed for communities which currently uses store protocol to fetch/identify missing messages, it would be good to think of how each member would choose participant(s) to sync with? is it the application’s responsibility to identify participant group for syncing?
  • wondering if there needs to be some mechanism to limit the number of participants to sync with in order to make it less concentrated. e.g: if my node starts getting sync requests by 100 others in the community, i shouldn’t start syncing with all of them? maybe a simple participant limit can be specified locally e.g my node only syncs with a max of 10-20 participants that are part of same channel/group. Maybe some sort of userid based approach can be taken here i.e x userids that are closer to my userid and are online (who is part of a community) would be sycned with.
  • what if the nodes i am syncing with go offline (note that status desktop instances run on user’s laptop which maybe switched off for some part of the day)? that means there needs to be some way to know this and shift/identify other nodes to sync with.
  • this is a very rare scenario, but what would happen if no one is online apart from me to sync with?

maybe some of the above mentioned problems are already addressed while integrating MVDS (another sync protocol already used in 1:1 and group chats) and same approach can be reused here. but there are definitely new scenarios to think about in case of communities since number of users in cmmunity can become very large and we don’t need to sync with all the users.