mirror of
https://github.com/status-im/status-app.git
synced 2026-08-27 07:01:14 +00:00
5.5 KiB
5.5 KiB
Requirements for Status Communities — FURPS
These requirements are written with the Logos stack in mind, without associating a particular protocol to each requirement.
Functionality
- Community messages (channel posts, updates) must be exchanged between users of the community in a real-time.
- The Community will be described in the Community Description
- See Annex A below for the list of properties of the Community Description
- The Community Description must be available to all users of the community. Only the community owner can update the Community Description.
- Every user has access to the full Community Description except when:
- The Community is private (ie has a token permission to become a member). Then, only members have access to:
- The list of members
- The list of channels
- A channel is private (ie has a token permission to view and/or post). Then, only members of that channel have access to:
- The list of members from that channel
- The Community is private (ie has a token permission to become a member). Then, only members have access to:
- Fetching the Community Description of a previously unknown Community should take less than 30 seconds.
- Users must be aware of changes on the Community Description within 10 minutes.
- Only changes on the Community Description published by the Community owner are valid.
- Communities support a role model:
- Owner: the sole authority for publishing official Community description changes.
- Token masters: same rights as owners except cannot manage other token masters.
- Admins: same rights as token masters, except cannot deploy/mint/burn tokens.
- Admins can propose partial updates (e.g., channel edits, member changes) to the Owner.
- Within a Community, messages can be segregated by channels, for which users may have different permission access (read/write)
- Permissions may be defined using onchain tokens (token-gated channels) (see Annex A)
- Users that do not have the read permissions on a channel, must not be able to read messages on this channel (encryption must be used).
Usability
- Automated retry for message sending and retrieval should apply without additional configuration.
- A message sent by a user should be received by another online user within 500ms.
- A message sent by a user should be marked as acknowledged within 5 seconds if another user was online.
- The usage of Waku content topics should be managed by the provided Chat SDK
Reliability
- The Messaging Protocol must ensure delivery of messages to subscribed peers, even under:
- Temporary disconnections
- Slow or lossy networks
- A user who was offline must eventually be able to retrieve all messages of the Community, as long as they were offline for less than 30 days.
- A user that was offline less than one week must be able to retrieve all missed messages within 5 minutes.
- A user that was offline for more than one week, and less than 30 days, must be able to retrieve all missed messages within 15 minutes.
Performance
- A Status Desktop instance should use less than 10Mbps on download and 5Mpbs (avg per day) on upload
- A Status Mobile instance should use less than 5GB per month in total data transmitted.
- Messaging Full Nodes must not exceed:
- 200MB RAM
- 5% CPU usage on average when relaying
- Mobile clients must:
- Use minimal resources when idle
- Only subscribe to channels relevant to the user
- Not relay or store unrelated messages
Supportability
- Usage in Status must support easy configuration of light vs full mode
- Provide monitoring and logging hooks for message handling and topic subscriptions
- Ensure compatibility across Status app versions, including topic format and encryption
- Integration must support structured debugging tools to troubleshoot missed messages or delivery failures
Annexes
Annex A: Community Description
Full protobuf can be found here: https://github.com/status-im/status-go/blob/develop/protocol/protobuf/communities.proto
This list is a summary that's easier to read and also exludes all the deprecated and un-needed properties.
- Community Metadata
- ID (public key)
- Name
- Description (textual summary)
- Logo (thumbnail and large)
- Banner image
- Color
- Intro message
- Outro message
- Tags
- Active members count
- Settings
- All members can pin messages
- Manual accept or automatic
- Members
- Joined Members
- ID (public chat key)
- Role (Owner, TokenMaster, Admin, None)
- Banned Members
- ID (public chat key)
- DeleteAllMessages (when set to true, members know to delete the member's messages)
- Joined Members
- Chat
- Identity
- Name
- Description (textual summary)
- Emoji
- Color
- Position
- Category ID
- Channel settings
- Viewers can post reactions
- Hide channel if permissions are not met
- Members
- ID (public chat key)
- Role (poster or viewer)
- Identity
- Category
- ID
- Name
- Position
- Tokens
- ID
- Name
- Symbol
- Addresses ([chainId]address)
- Decimals
- Type (ERC20, ERC721, ENS)
- Image
- Permisisons
- ID
- Type (become admin, become member, can view in channel, can view and post in channel, become token master, become owner)
- Chat IDs (which channels are affected, if applicable)
- Criteria
- Token Type
- Symbol
- Contract Addresses ([chainId]address)
- TokenIds (in the case of NFTs)
- EnsPattern
- Amount (in wei)