From 68e758ff8acbdd96caf8606eb2bdca38ab493b0d Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Thu, 24 Jul 2025 19:27:55 -0400 Subject: [PATCH 1/8] Create qaku --- standards/application/qaku.md | 134 ++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 standards/application/qaku.md diff --git a/standards/application/qaku.md b/standards/application/qaku.md new file mode 100644 index 0000000..bee7bb4 --- /dev/null +++ b/standards/application/qaku.md @@ -0,0 +1,134 @@ +--- +title: WAKU-APP-QAKU +name: Waku App Qaku +category: Standards Track +tags: waku +editor: +contributors: +- Jimmy Debe +--- + +## Abstract + +The document describes the Qaku web application bulit with Waku. +The use of Waku LightPush .... + +## Background + +Waku is a family of robust, +censorship-resistant communication protocols designed to enable privacy-focused messaging for web3 apps. + +Qaku Q&A (Questions & Answers over Waku) +is an application allowing you to create a Q&A board, +share a link and let users post questions. +Users can upvote questions which move to the top of the list on the board. + +## Specification + +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, +“SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and +“OPTIONAL” in this document are to be interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt). + +The Q&A board is created and maintained by an owner, +who SHOULD support an accessible interface for its users. + +### Identity + +- Users and an owner MUST generate a private key +- The owner MUST generate a private key to before becoming the owner of the Q&A board. +- The owner address, derived from the public key, SHOULD be made public as the owner of Qaku. +- A `paasword` SHOULD be used to encrypt the private key + +The public key is used to sign and verify messages. +The owner MUST be able to enable and disable questions added to the board. + +### Node + +- Qaku uses +[19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) +- A new `content_topic` is created when a new Q&A board is created. +- All questions and answer are pushed to the content_topic + +### Messages + +Messages sent on the `content_topic` are identified by their message type. +Message types in Qaku include: + +- Question Message +- Answered Message +- Control Message +- Upvote Message +- Moderation Message +- Poll messag + +#### Question Message + +```js +{ + "QuestionMessage" : [ + "question": string, + "timestamp": number, + "author?": identity, + "delegationInfo?": delegationInfo + ] +} + +``` + +#### Answered Message + +```js +{ + "AnswerMessage" : [ + hash: string, + text: string, + timestamp: number, + delegationInfo?: delegationInfo + ] +} + +``` + +#### Control Message + +```js +{ + "ControlMessage" : [ + title: string, + id: string, + enabled: boolean, + timestamp: number, + owner: string, + admins: string[], + moderation: boolean, + description: string, + updated: number, + startDate: number, + endDate?: number, + allowsParticipantsReplies: number, + delegationInfo?: DelegationInfo + ] +} + +``` +#### Upvote Message + +```js +{ + "UpVoteMessage" : [ + questionId: string, + hash: string, + type: UpvoteType, + timestamp: number, + delegationInfo?: DelegationInfo; + ] +} +``` + +When a new question is created, the interface SHOULD lis + + +## Copyright +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). + +## References From c370dfbd7359586763e7e0006c722ce1be9ff27d Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Tue, 29 Jul 2025 11:59:16 -0400 Subject: [PATCH 2/8] Update qaku.md --- standards/application/qaku.md | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/standards/application/qaku.md b/standards/application/qaku.md index bee7bb4..096f7ac 100644 --- a/standards/application/qaku.md +++ b/standards/application/qaku.md @@ -10,16 +10,16 @@ contributors: ## Abstract -The document describes the Qaku web application bulit with Waku. -The use of Waku LightPush .... +The document describes the functions of a Waku Web application Qaku. +The use of Waku protocols in the Qaku questions and +answers web application allow for a secure , trustless environment. ## Background Waku is a family of robust, censorship-resistant communication protocols designed to enable privacy-focused messaging for web3 apps. - -Qaku Q&A (Questions & Answers over Waku) -is an application allowing you to create a Q&A board, +Qaku is a questions and answers Waku web application. +It allows the user to create a Q&A board, share a link and let users post questions. Users can upvote questions which move to the top of the list on the board. @@ -44,15 +44,19 @@ The owner MUST be able to enable and disable questions added to the board. ### Node -- Qaku uses -[19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) +Qaku uses the following [10/WAKU]() protocols: + +- the [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) to push a message type to the Waku network. +- the [12/WAKU2-FILTER]() to subscribe to Waku `content_topic` and listen to messages published to that topic. +- the [13/WAKU-STORE]() - A new `content_topic` is created when a new Q&A board is created. - All questions and answer are pushed to the content_topic ### Messages - -Messages sent on the `content_topic` are identified by their message type. -Message types in Qaku include: +The Waku network processes real-time message updates, which enables new questions and +answers to be acceisble quickly. +Messages sent to a `content_topic` are identified by a `message_type`. +The following `message_type`s used in Qaku include: - Question Message - Answered Message @@ -63,6 +67,8 @@ Message types in Qaku include: #### Question Message +The `QuestionMessage` is generated by any user asking a new question on a Qaku board. + ```js { "QuestionMessage" : [ @@ -77,6 +83,8 @@ Message types in Qaku include: #### Answered Message +The `Answer + ```js { "AnswerMessage" : [ From 4ed8bf79e1476f19a4f7a9b9ced5b0b35445a6a7 Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Tue, 29 Jul 2025 13:48:43 -0400 Subject: [PATCH 3/8] Update qaku.md --- standards/application/qaku.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/standards/application/qaku.md b/standards/application/qaku.md index 096f7ac..8b5384c 100644 --- a/standards/application/qaku.md +++ b/standards/application/qaku.md @@ -44,18 +44,29 @@ The owner MUST be able to enable and disable questions added to the board. ### Node +The Qaku application SHOULD connect to the default Waku `pubsub_topic`. +When a user accesses the Qaku app, +the user joins a new session that SHOULD create a new `content_topic`. +When the user exits the Qaku app, +the session ends but the `content_topic` remians available on the Waku network for other users to connect to. + Qaku uses the following [10/WAKU]() protocols: - the [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) to push a message type to the Waku network. - the [12/WAKU2-FILTER]() to subscribe to Waku `content_topic` and listen to messages published to that topic. -- the [13/WAKU-STORE]() +- the [13/WAKU-STORE]() to query and load old messages from the Waku network for users. - A new `content_topic` is created when a new Q&A board is created. - All questions and answer are pushed to the content_topic ### Messages + The Waku network processes real-time message updates, which enables new questions and answers to be acceisble quickly. -Messages sent to a `content_topic` are identified by a `message_type`. +A conec ulti +Messages are sent to a `content_topic` that are identified as a `message_type`. + +The [13/WAKU-STORE]() nodes provide historical storage of the Qaku messages. + The following `message_type`s used in Qaku include: - Question Message @@ -67,7 +78,10 @@ The following `message_type`s used in Qaku include: #### Question Message -The `QuestionMessage` is generated by any user asking a new question on a Qaku board. +The `QuestionMessage` type is generated by any user asking a new question on a Qaku board. + +- + ```js { @@ -83,7 +97,8 @@ The `QuestionMessage` is generated by any user asking a new question on a Qaku b #### Answered Message -The `Answer +The `AnswerMessage` type is generated by any sending an answer to the Qaku board. +- ```js { From d578604fed7e0f13d18c1c2dbf3135e4082bca9e Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Thu, 21 Aug 2025 18:36:12 -0400 Subject: [PATCH 4/8] Update2 --- standards/application/qaku.md | 103 ++++++++++++++++++++-------------- 1 file changed, 61 insertions(+), 42 deletions(-) diff --git a/standards/application/qaku.md b/standards/application/qaku.md index 8b5384c..8134c92 100644 --- a/standards/application/qaku.md +++ b/standards/application/qaku.md @@ -10,18 +10,22 @@ contributors: ## Abstract -The document describes the functions of a Waku Web application Qaku. -The use of Waku protocols in the Qaku questions and -answers web application allow for a secure , trustless environment. +The document describes the different components of the Qaku web application. +Qaku is a Waku web applications that utilizes some Waku protocols to provide a private and +censorship-resistent question and answer service. ## Background Waku is a family of robust, -censorship-resistant communication protocols designed to enable privacy-focused messaging for web3 apps. -Qaku is a questions and answers Waku web application. -It allows the user to create a Q&A board, -share a link and let users post questions. -Users can upvote questions which move to the top of the list on the board. +censorship-resistant communication protocols designed to enable privacy-focused messaging for the decentralized web. +Current Q&A platforms are controlled by centralized organizations who have the ability to remove, +block and censor content published by any user. +This could cause a user to not express their ideas or ask reall questions with fear of prosecution by a thrid party. + +Qaku aims to solve this by utilizing a few [10/WAKU]() protocols to create a Q&A forum. +The user can create a Q&A board with a wallet address, +send questions or answers directly to other peers without the need of storing and/or retrieving the content from a centralized server/domain. +Familiar features like upvoting, sharable links, and board moderation are also capable. ## Specification @@ -29,22 +33,59 @@ The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt). -The Q&A board is created and maintained by an owner, -who SHOULD support an accessible interface for its users. + +### Control Message + +New Q&A boards are created by a client who SHOULD be identitfied as the `owner`. +At the time of creation, the `owner` creates a `ControlMessage` to configure the board. +This message contains all the settings of the board and is published to the Waku network. + +The `ControlMessage` is a JSON object: + +- It MUST include a title name +- It MAY include a list of admin identities. +- It SHOULD include the identity of the `owner`, idenities explianed [below](#Identity). +- It SHOULD include the start and end date for clients to publish a new post. +- + +```js +{ + "ControlMessage" : [ + title: string, + id: string, + enabled: boolean, + timestamp: number, // time the ControlMessage is created + owner: string, // the address of the owner + admins: string[], // a list of addresses + moderation: boolean, // + description: string, + updated: number, + startDate: number, + endDate?: number, + allowsParticipantsReplies: number, + delegationInfo?: DelegationInfo + ] +} + +``` + +`id`: +- SHOULD be generated from the `title` value, `timestamp` value, and the `owner` address value. + +The `ControlMessage` is the first message published on the `content-topic` of the Q&A board. +Only clients subscribed to the `content-topic` can view the `ControlMessage`. ### Identity -- Users and an owner MUST generate a private key -- The owner MUST generate a private key to before becoming the owner of the Q&A board. -- The owner address, derived from the public key, SHOULD be made public as the owner of Qaku. -- A `paasword` SHOULD be used to encrypt the private key - -The public key is used to sign and verify messages. -The owner MUST be able to enable and disable questions added to the board. +The `identity` of a client is a public address identifier in the form of a hexadecimal string. +Clients SHOULD generate a private key on a local machine and +MAY encrypt the keys with a password. +Public addresses are then generated with the private keys. +The address SHOULD be used to sign and verify messages. ### Node -The Qaku application SHOULD connect to the default Waku `pubsub_topic`. +The Qaku application SHOULD by default connect to The Waku Network. When a user accesses the Qaku app, the user joins a new session that SHOULD create a new `content_topic`. When the user exits the Qaku app, @@ -71,10 +112,9 @@ The following `message_type`s used in Qaku include: - Question Message - Answered Message -- Control Message - Upvote Message - Moderation Message -- Poll messag +- Poll Message #### Question Message @@ -112,28 +152,6 @@ The `AnswerMessage` type is generated by any sending an answer to the Qaku board ``` -#### Control Message - -```js -{ - "ControlMessage" : [ - title: string, - id: string, - enabled: boolean, - timestamp: number, - owner: string, - admins: string[], - moderation: boolean, - description: string, - updated: number, - startDate: number, - endDate?: number, - allowsParticipantsReplies: number, - delegationInfo?: DelegationInfo - ] -} - -``` #### Upvote Message ```js @@ -148,6 +166,7 @@ The `AnswerMessage` type is generated by any sending an answer to the Qaku board } ``` +The owner MUST be able to enable and disable questions added to the board. When a new question is created, the interface SHOULD lis From 532b9071ad5c4aa8ea421bc4cf8504e2a42e62dd Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Tue, 26 Aug 2025 15:41:36 -0400 Subject: [PATCH 5/8] Update qaku.md --- standards/application/qaku.md | 71 +++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/standards/application/qaku.md b/standards/application/qaku.md index 8134c92..54897a7 100644 --- a/standards/application/qaku.md +++ b/standards/application/qaku.md @@ -33,20 +33,30 @@ The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt). +Clients publish questions to a `content-topic` address which is held by the Waku Network. +A collection of questions are owned by the `content-topic`, +while a collection of answers are owned by the questions. +All clients MUST have and identity recognized by the network to publish new content. +More on identity [below](#identity). -### Control Message +### Creating a New Board -New Q&A boards are created by a client who SHOULD be identitfied as the `owner`. -At the time of creation, the `owner` creates a `ControlMessage` to configure the board. -This message contains all the settings of the board and is published to the Waku network. +A client creating a new Q&A board is identitied as the `owner`. +The `owner` MAY share the `content-topic` with other clients, +as the `owner`is the first client to know the `content-topic` for the new board. +At the time of creation, the `owner` SHOULD create a `ControlMessage` to configure a Q&A board +and publish to the Waku network. + +#### Control Message + +This message contains all initial Q&A board. The `ControlMessage` is a JSON object: - It MUST include a title name -- It MAY include a list of admin identities. -- It SHOULD include the identity of the `owner`, idenities explianed [below](#Identity). +- It MAY include a list of client public addresses identified as `admin`. +- It SHOULD include the public address of the `owner`, identity explianed [below](#Identity). - It SHOULD include the start and end date for clients to publish a new post. -- ```js { @@ -55,7 +65,7 @@ The `ControlMessage` is a JSON object: id: string, enabled: boolean, timestamp: number, // time the ControlMessage is created - owner: string, // the address of the owner + owner: string, // the public address of the owner admins: string[], // a list of addresses moderation: boolean, // description: string, @@ -70,39 +80,28 @@ The `ControlMessage` is a JSON object: ``` `id`: -- SHOULD be generated from the `title` value, `timestamp` value, and the `owner` address value. +- MAY be generated from the `title` value, `timestamp` value, and the `owner` public address value. +- MAY be hexadecimal characters of SHA-256*** -The `ControlMessage` is the first message published on the `content-topic` of the Q&A board. -Only clients subscribed to the `content-topic` can view the `ControlMessage`. + Clients subscribed to the Q&A board `content-topic`, using the [12/WAKU2-FILTER](), + MUST be able to view the `ControlMessage`. ### Identity -The `identity` of a client is a public address identifier in the form of a hexadecimal string. -Clients SHOULD generate a private key on a local machine and -MAY encrypt the keys with a password. -Public addresses are then generated with the private keys. +All clients MUST have `identity` consisting of a public address identifier in the form of a hexadecimal string. +Clients generate cryptographic key pair, public and private keys, and +the private key MAY be encrypt a password. +Public addresses are derived from the public keys as a hexadecimal string. +This address SHOULD be recongized by the other clients in the network to idenitify clients. + +Each `identity` SHOULD be stored locally. The address SHOULD be used to sign and verify messages. -### Node - -The Qaku application SHOULD by default connect to The Waku Network. -When a user accesses the Qaku app, -the user joins a new session that SHOULD create a new `content_topic`. -When the user exits the Qaku app, -the session ends but the `content_topic` remians available on the Waku network for other users to connect to. - -Qaku uses the following [10/WAKU]() protocols: - -- the [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) to push a message type to the Waku network. -- the [12/WAKU2-FILTER]() to subscribe to Waku `content_topic` and listen to messages published to that topic. -- the [13/WAKU-STORE]() to query and load old messages from the Waku network for users. -- A new `content_topic` is created when a new Q&A board is created. -- All questions and answer are pushed to the content_topic - ### Messages The Waku network processes real-time message updates, which enables new questions and -answers to be acceisble quickly. +answers to be acceisble quickly. + A conec ulti Messages are sent to a `content_topic` that are identified as a `message_type`. @@ -169,6 +168,14 @@ The `AnswerMessage` type is generated by any sending an answer to the Qaku board The owner MUST be able to enable and disable questions added to the board. When a new question is created, the interface SHOULD lis +Qaku uses the following [10/WAKU]() protocols: + +- the [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) to push a message type to the Waku network. +- the [12/WAKU2-FILTER]() to subscribe to Waku `content_topic` and listen to messages published to that topic. +- the [13/WAKU-STORE]() to query and load old messages from the Waku network for users. +- A new `content_topic` is created when a new Q&A board is created. +- All questions and answer are pushed to the content_topic + ## Copyright Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). From a959364467d777ce7b61437e7b228e5fb1fb7418 Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:24:29 -0400 Subject: [PATCH 6/8] update 3 --- standards/application/qaku.md | 150 ++++++++++++++++++---------------- 1 file changed, 81 insertions(+), 69 deletions(-) diff --git a/standards/application/qaku.md b/standards/application/qaku.md index 54897a7..849367e 100644 --- a/standards/application/qaku.md +++ b/standards/application/qaku.md @@ -22,7 +22,7 @@ Current Q&A platforms are controlled by centralized organizations who have the a block and censor content published by any user. This could cause a user to not express their ideas or ask reall questions with fear of prosecution by a thrid party. -Qaku aims to solve this by utilizing a few [10/WAKU]() protocols to create a Q&A forum. +Qaku aims to solve this by utilizing a few [10/WAKU](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/10/waku2.md) protocols to create a Q&A forum. The user can create a Q&A board with a wallet address, send questions or answers directly to other peers without the need of storing and/or retrieving the content from a centralized server/domain. Familiar features like upvoting, sharable links, and board moderation are also capable. @@ -33,11 +33,24 @@ The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt). -Clients publish questions to a `content-topic` address which is held by the Waku Network. -A collection of questions are owned by the `content-topic`, -while a collection of answers are owned by the questions. -All clients MUST have and identity recognized by the network to publish new content. -More on identity [below](#identity). +A Q&A board is a `content-topic` which is made available by on the Waku network. +Users subscribe to the `content-topic` using [12/WAKU2-FILTER](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/12/filter.md) and +to listen to new published messages. +Each message is identified by its `message_type`. +A collection of questions are the children of a `content-topic`, +while a collection of answers are the children of a question. +All clients MUST have an `identity` recognized by the network to publish new content. + +### Identity + +All clients MUST have `identity` consisting of a public address identifier in the form of a hexadecimal string. +Clients generate cryptographic key pair, public and private keys, and +the private key MAY be encrypt a password. +Public addresses are derived from the public keys as a hexadecimal string. +This address SHOULD be recongized by the other clients in the network to idenitify clients. + +Each `identity` SHOULD be stored locally. +The address SHOULD be used to sign and verify messages. ### Creating a New Board @@ -47,9 +60,11 @@ as the `owner`is the first client to know the `content-topic` for the new board. At the time of creation, the `owner` SHOULD create a `ControlMessage` to configure a Q&A board and publish to the Waku network. + #### Control Message -This message contains all initial Q&A board. +This message contains the initial Q&A board configuration. +The `ControlMessage` SHOULD only be updated by the `owner`. The `ControlMessage` is a JSON object: @@ -66,69 +81,69 @@ The `ControlMessage` is a JSON object: enabled: boolean, timestamp: number, // time the ControlMessage is created owner: string, // the public address of the owner - admins: string[], // a list of addresses - moderation: boolean, // + admins: string[], + moderation: boolean, description: string, - updated: number, - startDate: number, - endDate?: number, - allowsParticipantsReplies: number, - delegationInfo?: DelegationInfo + updated: number, + startDate: number, // optional, enforced by the application + allowsParticipantsReplies: number // optional, enforced by the application ] } ``` +`admins`: +- A list of client `identity` that are able to moderate the Q&A board + `id`: - MAY be generated from the `title` value, `timestamp` value, and the `owner` public address value. -- MAY be hexadecimal characters of SHA-256*** +- RECOMMENDED hash using SHA256 - Clients subscribed to the Q&A board `content-topic`, using the [12/WAKU2-FILTER](), +`moderation`: + +- If the question can be moderated by the `owner` and `admins`. +- It MUST be enforced by the application, see [messages](#Messsages) + + Clients subscribed to the Q&A board `content-topic` using the [12/WAKU2-FILTER](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/12/filter.md), MUST be able to view the `ControlMessage`. -### Identity - -All clients MUST have `identity` consisting of a public address identifier in the form of a hexadecimal string. -Clients generate cryptographic key pair, public and private keys, and -the private key MAY be encrypt a password. -Public addresses are derived from the public keys as a hexadecimal string. -This address SHOULD be recongized by the other clients in the network to idenitify clients. - -Each `identity` SHOULD be stored locally. -The address SHOULD be used to sign and verify messages. - -### Messages +### Other Message Types The Waku network processes real-time message updates, which enables new questions and answers to be acceisble quickly. +All questions and answers are published by the user or +the `owner` using [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) on the Waku network. +Using the [13/WAKU-STORE](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/13/store.md) protocol, +published messages are stored by Waku store nodes. +When clients subscribe to a Q&A board, the message history is retrieved from [13/WAKU-STORE](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/13/store.md) nodes. + +Clients messages published to a Q&A board's `content-topic` SHOULD remain accessible on the Waku network. +No client will be able to remove the message once published. +The `admins` and `owner` MAY moderate certain published messages making some content not visible to all users. -A conec ulti -Messages are sent to a `content_topic` that are identified as a `message_type`. +```js +{ + "ModerationMessage" : [ + "hash": string, // The hash of the question + "moderated": boolean + ] +} -The [13/WAKU-STORE]() nodes provide historical storage of the Qaku messages. - -The following `message_type`s used in Qaku include: - -- Question Message -- Answered Message -- Upvote Message -- Moderation Message -- Poll Message +``` #### Question Message -The `QuestionMessage` type is generated by any user asking a new question on a Qaku board. - -- - +The `QuestionMessage` type is generated by clients publishing a new question to a Q&A board. +Each question MAY have an `author` whos value is the publishing client's `identity`. +The client does not need to be the `owner` of the Q&A board. +Also the `owner` can not retrict any `identity` from publishing a message. ```js { "QuestionMessage" : [ - "question": string, - "timestamp": number, - "author?": identity, - "delegationInfo?": delegationInfo + "question": string, // The question being published + "timestamp": number, // the time when the question being published + "author": identity // the identity of the client ] } @@ -136,16 +151,18 @@ The `QuestionMessage` type is generated by any user asking a new question on a Q #### Answered Message -The `AnswerMessage` type is generated by any sending an answer to the Qaku board. -- +The `AnswerMessage` type is generated by clients publishing a answer to a question. +Each `AnswerMessage` SHOULD have a parent `Questionmessage` type. + ```js { - "AnswerMessage" : [ - hash: string, + "AnsweredMessage" : [ + questionId: string, // The parent QuestionMessage + hash: string, // Hash of text: string, timestamp: number, - delegationInfo?: delegationInfo + ] } @@ -153,31 +170,26 @@ The `AnswerMessage` type is generated by any sending an answer to the Qaku board #### Upvote Message +A `UpVoteMessage` is an optional feature that MUST be enforced by the web appliciation. + ```js { "UpVoteMessage" : [ - questionId: string, - hash: string, - type: UpvoteType, - timestamp: number, - delegationInfo?: DelegationInfo; + questionId: string, The hash of the question + hash: string, // hash of the message + type: string, // the upvote for which message type (AnswerMessage or QuestionMessage) + timestamp: number, // the time of the upvote + ] } ``` -The owner MUST be able to enable and disable questions added to the board. -When a new question is created, the interface SHOULD lis - -Qaku uses the following [10/WAKU]() protocols: - -- the [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) to push a message type to the Waku network. -- the [12/WAKU2-FILTER]() to subscribe to Waku `content_topic` and listen to messages published to that topic. -- the [13/WAKU-STORE]() to query and load old messages from the Waku network for users. -- A new `content_topic` is created when a new Q&A board is created. -- All questions and answer are pushed to the content_topic - - ## Copyright Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). ## References + +- [10/WAKU](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/10/waku2.md) +- [12/WAKU2-FILTER](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/12/filter.md) +- [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) +- [13/WAKU-STORE](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/13/store.md) From 869d861d3f6ec6ef131bf2d5c1ec4296b3224f5f Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Thu, 28 Aug 2025 20:43:06 -0400 Subject: [PATCH 7/8] Fix typos --- standards/application/qaku.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/standards/application/qaku.md b/standards/application/qaku.md index 849367e..3850c69 100644 --- a/standards/application/qaku.md +++ b/standards/application/qaku.md @@ -124,7 +124,7 @@ The `admins` and `owner` MAY moderate certain published messages making some con ```js { "ModerationMessage" : [ - "hash": string, // The hash of the question + "hash": string, // The hash of the QuestionMessage "moderated": boolean ] } @@ -152,17 +152,16 @@ Also the `owner` can not retrict any `identity` from publishing a message. #### Answered Message The `AnswerMessage` type is generated by clients publishing a answer to a question. -Each `AnswerMessage` SHOULD have a parent `Questionmessage` type. +Each `AnswerMessage` SHOULD have a parent `QuestionMessage` type. ```js { "AnsweredMessage" : [ questionId: string, // The parent QuestionMessage - hash: string, // Hash of - text: string, - timestamp: number, - + hash: string, // Hash of the text + text: string, // The answer content + timestamp: number // The time of publishing the answer content ] } From 5645b8bc1a213d68d749c02dda6237fd070de63e Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Mon, 8 Sep 2025 20:00:00 -0400 Subject: [PATCH 8/8] Update qaku --- standards/application/qaku.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/standards/application/qaku.md b/standards/application/qaku.md index 3850c69..65f7b5d 100644 --- a/standards/application/qaku.md +++ b/standards/application/qaku.md @@ -10,21 +10,23 @@ contributors: ## Abstract -The document describes the different components of the Qaku web application. -Qaku is a Waku web applications that utilizes some Waku protocols to provide a private and +This document describes the different components of the Qaku web application. +Qaku is a Waku web applications that utilizes Waku protocols to provide a private and censorship-resistent question and answer service. ## Background -Waku is a family of robust, +The Qaku web application Waku is a family of robust, censorship-resistant communication protocols designed to enable privacy-focused messaging for the decentralized web. +Using Wak Current Q&A platforms are controlled by centralized organizations who have the ability to remove, block and censor content published by any user. This could cause a user to not express their ideas or ask reall questions with fear of prosecution by a thrid party. -Qaku aims to solve this by utilizing a few [10/WAKU](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/10/waku2.md) protocols to create a Q&A forum. -The user can create a Q&A board with a wallet address, -send questions or answers directly to other peers without the need of storing and/or retrieving the content from a centralized server/domain. +Qaku uses some [10/WAKU](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/10/waku2.md) protocols to create a decentralized, +censorship-resistant Q&A forum. +The user can create a Q&A board with a identity address which publicly shared with other peers. +Questions and answers are sent directly to other peers without the need of storing and/or retrieving the content from a centralized provider. Familiar features like upvoting, sharable links, and board moderation are also capable. ## Specification