Discreetly is an open protocol anonymous chat system.
The example scenario I am going to use throughout this document is a chat room for Steam games, where the barrier to entry for a room is a certain threshold of achievments accomplished in the game (20% by default?)
A room can be created by the server owner/admin, with certain criteria/barrier to entry.
In an anonmyous chat, it is (basically) impossible to know who said something the large majority didn't agree with, but you can prove that you didn't say something. So we can use this to exclude very bad actors using a karma system where users can upvote or downvote messages, which under the hood are non-inclusion proofs, essentially saying "i didn't create this post, and I did or didn't like this".
This non-inclusion proof includes a new "transiition identity commitment".
After a certain trigger (maybe a certain amount of time like 1 day to start and over time move to every 30 days? or after a certain action on chain), the group can choose to transition, where the server would generate a new version of the room, and everyone would have to make a new semaphore proof with either their old identity commitment or a new one, and everyone who wants to participate in the room would have to make a non-inclusion proof for any of the messages that broke some UPVOTE/DOWNVOTE threshold (configurable by the server, something like 2x more downvotes than upvotes, and [over 20 votes total] | [10% of the room] | [the lowest voted post]).
This would result in multiple iterations of a room, one for each transition, and the rate limit would change per iteration.
- Most Recent Room (T)
- 1s
- T-1
- 10s
- T-2
- 100s // 1:40
- T-3
- 1000s // 16:40
- T-4
- 10000s // 2:46:40
- T-5
- 100000s // 27:46:40 // 1 day 3 hours 46 minutes 40 seconds
- T-6
- 1000000s // 11:13:46:40 // 11 days 13 hours 46 minutes 40 seconds
- T-7
- 10000000s // 1:03:13:46:40 // 1 month 3 days 13 hours 46 minutes 40 seconds
- T-8
- 100000000s // 11:09:03:13:46:40 // 11 months 9 days 3 hours 13 minutes 46 seconds 40 milliseconds
- T-9
- 1000000000s // 3:01:09:03:13:46:40 // 3 years 1 month 9 days 3 hours 13 minutes 46 seconds 40 milliseconds