diff --git a/standards/application/OpChan.md b/standards/application/OpChan.md index 12cc8a1..29b6eb4 100644 --- a/standards/application/OpChan.md +++ b/standards/application/OpChan.md @@ -4,15 +4,17 @@ name: OpChan Decentralized Forum status: raw category: Standards Track tags: waku -editor: +editor: contributors: - Jimmy Debe --- ## Abstract -This document specifies the architecture of OpChan. -OpChan is a decentralized forum application built on the Waku protocol. +This document specifies the architecture of OpChan, +a decentralized forum application. +The specification is transport-agnostic, +with Waku as the reference delivery mechanism. ## Background @@ -21,16 +23,11 @@ making it difficult for a user's post to be censored. Users own their post data, so data cannot be removed by a third party, and forum boards will not rely on moderators remaining active. -OpChan is a web application hosted by some party through a web server. -The content being published by users is not stored by the server, -but by distributing the messages peer to peer. -OpChan supports ephemeral anonymous web sessions, -supporting a locally generated ED25519 key pair for identity and -signing. -Wallet-backed identities, identity key delegation, and -content stored locally while distributing messages using the [10/WAKU2](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/10/waku2.md) protocol. - -- WAKU-LIGHTPUSH +OpChan clients distribute content through a peer-to-peer network +rather than relying on centralized server storage. +OpChan supports ephemeral anonymous sessions +using a locally generated [ED25519][ed25519] key pair for identity and signing. +Additionally, OpChan supports wallet-backed identities and identity key delegation. ## Terminology @@ -44,21 +41,18 @@ content stored locally while distributing messages using the [10/WAKU2](https:// ## Specification -The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, -“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and -“OPTIONAL” in this document are to be interpreted as described in [2119](https://www.ietf.org/rfc/rfc2119.txt). +The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", +"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and +"OPTIONAL" in this document are to be interpreted as described in [RFC 2119][rfc2119]. -OpChan uses the [10/WAKU2](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/10/waku2.md) -network for the distribution of forum content amongst peers. -The messages, which are [14/WAKU-MESSAGE](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/14/message.md) objects, -are cryptographically signed using Ed25519 keys generated by the client locally. -Users SHOULD use the [19WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) protocol to send messages to Waku nodes storing the forum's content. +OpChan distributes forum content amongst peers using a publish-subscribe messaging layer. +All messages are cryptographically signed using [ED25519][ed25519] keys generated by the client locally. OpChan supports two types of messages, content and control messages. Content messages are user-generated content on the forum. The message types include the following: - + - Channel: Includes the metadata information like name, description, and admins of a forum feed. - Post: User content created within a channel. - Comment: Users reply to a post or another comment. @@ -72,23 +66,21 @@ This includes the management of the current forum state, permissions, and moderations. The message types include the following: -- Create Channel: The initial event of creating a new channel within the forum. -- Delegation Events: Channel admins granting or revoking channel rights. -- Moderation Events: Channel admins are able to hide, remove, and - pin/unpin a post or comment. - Also, it can promote new admins and change the ownership of a channel. +- Create Channel: The initial event of creating a new channel within the forum. +- Delegation Events: Channel admins granting or revoking channel rights. +- Moderation Events: Channel admins are able to hide, remove, pin/unpin a post or comment, + promote new admins, and change the ownership of a channel. ### Message Format -Message routing and -discovery are handled by [23/WAKU2-TOPICS](https://github.com/vacp2p/rfc-index/blob/main/waku/informational/23/topics.md). -Each content is assigned a `pubsub_topic` that clients MUST subscribe to discovery messages from the channel. +Each channel is assigned a unique topic identifier that clients MUST subscribe to +in order to discover messages from that channel. -All messages transmitted over the Waku network MUST include the following envelope fields: +All messages MUST include the following envelope fields: ``` js { - "id": "string", + "id": "string", "type": "CHANNEL_CREATED | POST_CREATED | COMMENT_CREATED | VOTE | BOOKMARK | MODERATION | DELEGATION", "timestamp": "uint64" "author": "string" // author public key or wallet address @@ -111,24 +103,24 @@ Signing Flow: ### Identity -There are two types of identities for users, +There are two types of identities for users: anonymous session and wallet delegation. -A wallet delegation MAY be an ENS(Ethereum Name Service) verified user. -An anonymous session generates an Ed25519 keypair locally with the client. +A wallet delegation MAY be an ENS (Ethereum Name Service) verified user. +An anonymous session generates an [ED25519][ed25519] keypair locally with the client. The key is used to sign all messages and -a username MAY choose a username attached to the post or comments. -An anonymous user SHOULD NOT be granted an admin role, +a username MAY be attached to the post or comments. +An anonymous user SHOULD NOT be granted an admin role, create moderation events, or create a channel. A wallet delegation is a user blockchain wallet's private key used to sign a message, which is the `delegationProof`. The `delegationProof` SHOULD be a short-lived message, -RECOMMENDED a few minutes to a few hours. +RECOMMENDED a few minutes to a few hours. Once a `delegationProof` is generated, the client SHOULD be able to sign messages, without the need for repeated wallet prompts requesting to sign. -#### Delegation Flow: +#### Delegation Flow 1. The client generates a new `browserKey`, which is an Ed25519 keypair. 2. The client generates a delegation request to authorize `browserKey` to sign. @@ -137,26 +129,33 @@ returns a `delegationProof` with an expiration timestamp, `expiry`. 4. The client stores the `delegationProof`, `browserKey`, and `expiry`. -A `delegrationProof` could become revoked by the wallet owner or +A `delegationProof` could become revoked by the wallet owner or after the `expiry` time. -If a wallet delegation is revoked, +If a wallet delegation is revoked, clients SHOULD ignore subsequent messages from the revoked delegation key. ### Moderation & Permissions -A post MAY be have moderation message types assigned by the channel admin. +A post MAY have moderation message types assigned by the channel admin. The moderation types include: -- `HIDE` : To hide a post or comment. -- `REMOVE` : To permanently remove a post or comment. -- `PIN` : To pin a post to the top of a channel feed or pin a comment to the top of a thread. -- `UNPIN` : To remove a `PIN` from a post feed or comment thread. -- `CHANGE_OWNERSHIP` : Change the `author` of a post or comment. +- `HIDE`: Hide a post or comment from the channel feed. +- `REMOVE`: Permanently remove a post or comment. +- `PIN`: Pin a post to the top of a channel feed or pin a comment to the top of a thread. +- `UNPIN`: Remove a `PIN` from a post feed or comment thread. +- `CHANGE_OWNERSHIP`: Change the `author` of a post or comment. -Moderation messages MUST be signed by an admin, -which recognized the `author` of the channel. +Moderation messages MUST be signed by an admin, +who is recognized as the `author` of the channel. Clients SHOULD validate the admin before applying moderation events locally. +#### User Flagging + +Users MAY flag content for review by moderators. +A `FLAG` is user-initiated and distinct from admin moderation actions. +Flagged content SHOULD be queued for moderator review +but does not automatically result in content removal. + ### Relevance Score A post can gain better visibility on the forum channel and @@ -204,7 +203,7 @@ There SHOULD be a moderation penalty that reduces the score when a post or comment is moderated with a value of 0.5(50%). This penalty is applied once a post is `HIDDEN`, `REMOVED` or flagged by users to be reviewed by a moderator. -$$ +$$ \text{moderationPenalty} = \begin{cases} 0.5, & \text{if moderated} \\ 1, & \text{otherwise} \end{cases} $$ @@ -216,13 +215,35 @@ $$ \cdot (1 + \text{verifyIdentity}) \cdot \text{timeDecay} \cdot \text{moderationPenalty} $$ +## Waku as Delivery Mechanism + +This section describes how OpChan MAY use the Waku protocol as the delivery mechanism. + +OpChan clients MAY use the [10/WAKU2][waku2] network for the distribution of forum content amongst peers. +The messages are [14/WAKU-MESSAGE][waku-message] objects. +Users SHOULD use the [19/WAKU2-LIGHTPUSH][waku-lightpush] protocol +to send messages to Waku nodes storing the forum's content. + +Message routing and discovery are handled by [23/WAKU2-TOPICS][waku-topics]. +Each channel is assigned a `content_topic` that clients MUST subscribe to +in order to discover messages from that channel. + ## Copyright Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). ## References -- [10/WAKU2](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/10/waku2.md) -- [19WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) -- [14/WAKU-MESSAGES](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/14/message.md) -- [23/WAKU2-TOPICS](https://github.com/vacp2p/rfc-index/blob/main/waku/informational/23/topics.md) -- + +- [RFC 2119][rfc2119] +- [ED25519][ed25519] +- [10/WAKU2][waku2] +- [14/WAKU-MESSAGE][waku-message] +- [19/WAKU2-LIGHTPUSH][waku-lightpush] +- [23/WAKU2-TOPICS][waku-topics] + +[rfc2119]: https://www.ietf.org/rfc/rfc2119.txt +[ed25519]: https://datatracker.ietf.org/doc/html/rfc8032 +[waku2]: https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/10/waku2.md +[waku-message]: https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/14/message.md +[waku-lightpush]: https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md +[waku-topics]: https://github.com/vacp2p/rfc-index/blob/main/waku/informational/23/topics.md